diff --git a/Dockerfile b/Dockerfile index 943aae5..2ac7ae6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM scratch ARG BOOTSTRAP_VERSION=2021.02.11-r1 ARG BOOTSTRAP_ARCH=i686 +ARG SYSTEM_TYPE=x86 ENV ANDROID_DATA /data ENV ANDROID_ROOT /system @@ -18,7 +19,7 @@ SHELL ["/system/bin/sh", "-c"] # Bootstrapping Termux environment. ADD https://github.com/termux/termux-packages/releases/download/bootstrap-$BOOTSTRAP_VERSION/bootstrap-$BOOTSTRAP_ARCH.zip /data/data/com.termux/files/bootstrap.zip -COPY /system /system +COPY /system/$SYSTEM_TYPE /system RUN /system/setup-termux.sh # Switch to Termux environment. diff --git a/build-all.sh b/build-all.sh index e6efdc6..c01af8f 100755 --- a/build-all.sh +++ b/build-all.sh @@ -13,17 +13,32 @@ else SUDO="" fi -for arch in "i686" "x86_64"; do +case "$(uname -m)" in + aarch64) SYSTEM_TYPE="arm"; ARCHITECTURES=("aarch64" "arm");; + armv7l|armv8l) SYSTEM_TYPE="arm"; ARCHITECTURES=("arm");; + i686) SYSTEM_TYPE="x86"; ARCHITECTURES=("i686");; + x86_64) SYSTEM_TYPE="x86"; ARCHITECTURES=("i686" "x86_64");; + *) + echo "'uname -m' returned unknown architecture" + exit 1 + ;; +esac + +for arch in "${ARCHITECTURES[@]}"; do $SUDO $OCI build \ -t 'docker.io/xeffyr/termux:'"$arch" \ -f Dockerfile \ --build-arg BOOTSTRAP_ARCH="$arch" \ + --build-arg SYSTEM_TYPE="$SYSTEM_TYPE" \ . + if [ "${1-}" = "publish" ]; then + $SUDO $OCI push 'docker.io/xeffyr/termux:'"$arch" + fi done -docker tag docker.io/xeffyr/termux:i686 docker.io/xeffyr/termux:latest - -if [ "${1-}" = "publish" ]; then - $SUDO $OCI push 'docker.io/xeffyr/termux:latest' - $SUDO $OCI push 'docker.io/xeffyr/termux:x86_64' +if [ "$SYSTEM_TYPE" = "x86" ]; then + docker tag docker.io/xeffyr/termux:i686 docker.io/xeffyr/termux:latest + if [ "${1-}" = "publish" ]; then + $SUDO $OCI push 'docker.io/xeffyr/termux:latest' + fi fi diff --git a/system/arm/bin/busybox b/system/arm/bin/busybox new file mode 100755 index 0000000..0fda79b Binary files /dev/null and b/system/arm/bin/busybox differ diff --git a/system/arm/bin/linker b/system/arm/bin/linker new file mode 100755 index 0000000..b96f20a Binary files /dev/null and b/system/arm/bin/linker differ diff --git a/system/arm/bin/linker64 b/system/arm/bin/linker64 new file mode 100755 index 0000000..2045039 Binary files /dev/null and b/system/arm/bin/linker64 differ diff --git a/system/bin/sh b/system/arm/bin/sh similarity index 100% rename from system/bin/sh rename to system/arm/bin/sh diff --git a/system/bin/update-static-dns b/system/arm/bin/update-static-dns similarity index 100% rename from system/bin/update-static-dns rename to system/arm/bin/update-static-dns diff --git a/system/etc/hosts b/system/arm/etc/hosts similarity index 100% rename from system/etc/hosts rename to system/arm/etc/hosts diff --git a/system/arm/etc/ld.config.28.txt b/system/arm/etc/ld.config.28.txt new file mode 100644 index 0000000..6f9caee --- /dev/null +++ b/system/arm/etc/ld.config.28.txt @@ -0,0 +1,348 @@ +# Copyright (C) 2017 The Android Open Source Project +# +# Bionic loader config file. +# + +# Don't change the order here. The first pattern that matches with the +# absolute path of an executable is selected. +dir.system = /system/bin/ +dir.system = /system/xbin/ +dir.system = /system/product/bin/ + +dir.vendor = /odm/bin/ +dir.vendor = /vendor/bin/ +dir.vendor = /data/nativetest/odm +dir.vendor = /data/nativetest64/odm +dir.vendor = /data/benchmarktest/odm +dir.vendor = /data/benchmarktest64/odm +dir.vendor = /data/nativetest/vendor +dir.vendor = /data/nativetest64/vendor +dir.vendor = /data/benchmarktest/vendor +dir.vendor = /data/benchmarktest64/vendor + +dir.system = /data/nativetest +dir.system = /data/nativetest64 +dir.system = /data/benchmarktest +dir.system = /data/benchmarktest64 + +dir.postinstall = /postinstall + +[system] +additional.namespaces = sphal,vndk,rs + +############################################################################### +# "default" namespace +# +# Framework-side code runs in this namespace. Libs from /vendor partition +# can't be loaded in this namespace. +############################################################################### +namespace.default.isolated = true + +namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /system/product/${LIB} + +# We can't have entire /system/${LIB} as permitted paths because doing so +# makes it possible to load libs in /system/${LIB}/vndk* directories by +# their absolute paths (e.g. dlopen("/system/lib/vndk/libbase.so");). +# VNDK libs are built with previous versions of Android and thus must not be +# loaded into this namespace where libs built with the current version of +# Android are loaded. Mixing the two types of libs in the same namespace can +# cause unexpected problem. +namespace.default.permitted.paths = /system/${LIB}/drm +namespace.default.permitted.paths += /system/${LIB}/extractors +namespace.default.permitted.paths += /system/${LIB}/hw +namespace.default.permitted.paths += /system/product/${LIB} +# These are where odex files are located. libart has to be able to dlopen the files +namespace.default.permitted.paths += /system/framework +namespace.default.permitted.paths += /system/app +namespace.default.permitted.paths += /system/priv-app +namespace.default.permitted.paths += /vendor/framework +namespace.default.permitted.paths += /vendor/app +namespace.default.permitted.paths += /vendor/priv-app +namespace.default.permitted.paths += /odm/framework +namespace.default.permitted.paths += /odm/app +namespace.default.permitted.paths += /odm/priv-app +namespace.default.permitted.paths += /oem/app +namespace.default.permitted.paths += /system/product/framework +namespace.default.permitted.paths += /system/product/app +namespace.default.permitted.paths += /system/product/priv-app +namespace.default.permitted.paths += /data +namespace.default.permitted.paths += /mnt/expand + +namespace.default.asan.search.paths = /data/asan/system/${LIB} +namespace.default.asan.search.paths += /system/${LIB} +namespace.default.asan.search.paths += /data/asan/product/${LIB} +namespace.default.asan.search.paths += /product/${LIB} + +namespace.default.asan.permitted.paths = /data +namespace.default.asan.permitted.paths += /system/${LIB}/drm +namespace.default.asan.permitted.paths += /system/${LIB}/extractors +namespace.default.asan.permitted.paths += /system/${LIB}/hw +namespace.default.asan.permitted.paths += /system/framework +namespace.default.asan.permitted.paths += /system/app +namespace.default.asan.permitted.paths += /system/priv-app +namespace.default.asan.permitted.paths += /vendor/framework +namespace.default.asan.permitted.paths += /vendor/app +namespace.default.asan.permitted.paths += /vendor/priv-app +namespace.default.asan.permitted.paths += /odm/framework +namespace.default.asan.permitted.paths += /odm/app +namespace.default.asan.permitted.paths += /odm/priv-app +namespace.default.asan.permitted.paths += /oem/app +namespace.default.asan.permitted.paths += /system/product/${LIB} +namespace.default.asan.permitted.paths += /system/product/framework +namespace.default.asan.permitted.paths += /system/product/app +namespace.default.asan.permitted.paths += /system/product/priv-app +namespace.default.asan.permitted.paths += /mnt/expand + +############################################################################### +# "sphal" namespace +# +# SP-HAL(Sameprocess-HAL)s are the only vendor libraries that are allowed to be +# loaded inside system processes. libEGL_.so, libGLESv2_.so, +# android.hardware.graphics.mapper@2.0-impl.so, etc are SP-HALs. +# +# This namespace is exclusivly for SP-HALs. When the framework tries to dynami- +# cally load SP-HALs, android_dlopen_ext() is used to explicitly specifying +# that they should be searched and loaded from this namespace. +# +# Note that there is no link from the default namespace to this namespace. +############################################################################### +namespace.sphal.isolated = true +namespace.sphal.visible = true + +namespace.sphal.search.paths = /odm/${LIB} +namespace.sphal.search.paths += /vendor/${LIB} + +namespace.sphal.permitted.paths = /odm/${LIB} +namespace.sphal.permitted.paths += /vendor/${LIB} + +namespace.sphal.asan.search.paths = /data/asan/odm/${LIB} +namespace.sphal.asan.search.paths += /odm/${LIB} +namespace.sphal.asan.search.paths += /data/asan/vendor/${LIB} +namespace.sphal.asan.search.paths += /vendor/${LIB} + +namespace.sphal.asan.permitted.paths = /data/asan/odm/${LIB} +namespace.sphal.asan.permitted.paths += /odm/${LIB} +namespace.sphal.asan.permitted.paths += /data/asan/vendor/${LIB} +namespace.sphal.asan.permitted.paths += /vendor/${LIB} + +# Once in this namespace, access to libraries in /system/lib is restricted. Only +# libs listed here can be used. +namespace.sphal.links = default,vndk,rs + +namespace.sphal.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libc.so:libclang_rt.asan-aarch64-android.so:libclang_rt.asan-arm-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so +namespace.sphal.link.default.shared_libs += libclang_rt.asan-aarch64-android.so:libclang_rt.ubsan_standalone-aarch64-android.so:libclang_rt.tsan-aarch64-android.so:libclang_rt.asan-arm-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.tsan-arm-android.so + +namespace.sphal.link.vndk.shared_libs = android.hardware.graphics.common@1.0.so:android.hardware.graphics.common@1.1.so:android.hardware.graphics.mapper@2.0.so:android.hardware.graphics.mapper@2.1.so:android.hardware.renderscript@1.0.so:android.hidl.memory.token@1.0.so:android.hidl.memory@1.0.so:android.hidl.memory@1.0-impl.so:libRSCpuRef.so:libRSDriver.so:libRS_internal.so:libbase.so:libbcinfo.so:libc++.so:libcutils.so:libhardware.so:libhidlbase.so:libhidlmemory.so:libhidltransport.so:libhwbinder.so:libhwbinder_noltopgo.so:libion.so:liblzma.so:libunwindstack.so:libutils.so:libutilscallstack.so:libz.so + +# Renderscript gets separate namespace +namespace.sphal.link.rs.shared_libs = libRS_internal.so + +############################################################################### +# "rs" namespace +# +# This namespace is exclusively for Renderscript internal libraries. +# This namespace has slightly looser restriction than the vndk namespace because +# of the genuine characteristics of Renderscript; /data is in the permitted path +# to load the compiled *.so file and libmediandk.so can be used here. +############################################################################### +namespace.rs.isolated = true +namespace.rs.visible = true + +namespace.rs.search.paths = /odm/${LIB}/vndk-sp +namespace.rs.search.paths += /vendor/${LIB}/vndk-sp +namespace.rs.search.paths += /system/${LIB}/vndk-sp-28 +namespace.rs.search.paths += /odm/${LIB} +namespace.rs.search.paths += /vendor/${LIB} + +namespace.rs.permitted.paths = /odm/${LIB} +namespace.rs.permitted.paths += /vendor/${LIB} +namespace.rs.permitted.paths += /data + +namespace.rs.asan.search.paths = /data/asan/odm/${LIB}/vndk-sp +namespace.rs.asan.search.paths += /odm/${LIB}/vndk-sp +namespace.rs.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp +namespace.rs.asan.search.paths += /vendor/${LIB}/vndk-sp +namespace.rs.asan.search.paths += /data/asan/system/${LIB}/vndk-sp-28 +namespace.rs.asan.search.paths += /system/${LIB}/vndk-sp-28 +namespace.rs.asan.search.paths += /data/asan/odm/${LIB} +namespace.rs.asan.search.paths += /odm/${LIB} +namespace.rs.asan.search.paths += /data/asan/vendor/${LIB} +namespace.rs.asan.search.paths += /vendor/${LIB} + +namespace.rs.asan.permitted.paths = /data/asan/odm/${LIB} +namespace.rs.asan.permitted.paths += /odm/${LIB} +namespace.rs.asan.permitted.paths += /data/asan/vendor/${LIB} +namespace.rs.asan.permitted.paths += /vendor/${LIB} +namespace.rs.asan.permitted.paths += /data + +namespace.rs.links = default,vndk + +namespace.rs.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libc.so:libclang_rt.asan-aarch64-android.so:libclang_rt.asan-arm-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so +namespace.rs.link.default.shared_libs += libclang_rt.asan-aarch64-android.so:libclang_rt.ubsan_standalone-aarch64-android.so:libclang_rt.tsan-aarch64-android.so:libclang_rt.asan-arm-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.tsan-arm-android.so +# Private LLNDK libs (e.g. libft2.so) are exceptionally allowed to this +# namespace because RS framework libs are using them. +namespace.rs.link.default.shared_libs += libft2.so + +namespace.rs.link.vndk.shared_libs = android.hardware.graphics.common@1.0.so:android.hardware.graphics.common@1.1.so:android.hardware.graphics.mapper@2.0.so:android.hardware.graphics.mapper@2.1.so:android.hardware.renderscript@1.0.so:android.hidl.memory.token@1.0.so:android.hidl.memory@1.0.so:android.hidl.memory@1.0-impl.so:libRSCpuRef.so:libRSDriver.so:libRS_internal.so:libbase.so:libbcinfo.so:libc++.so:libcutils.so:libhardware.so:libhidlbase.so:libhidlmemory.so:libhidltransport.so:libhwbinder.so:libhwbinder_noltopgo.so:libion.so:liblzma.so:libunwindstack.so:libutils.so:libutilscallstack.so:libz.so + +############################################################################### +# "vndk" namespace +# +# This namespace is exclusively for vndk-sp libs. +############################################################################### +namespace.vndk.isolated = true +namespace.vndk.visible = true + +namespace.vndk.search.paths = /odm/${LIB}/vndk-sp +namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp +namespace.vndk.search.paths += /system/${LIB}/vndk-sp-28 + +namespace.vndk.permitted.paths = /odm/${LIB}/hw +namespace.vndk.permitted.paths += /odm/${LIB}/egl +namespace.vndk.permitted.paths += /vendor/${LIB}/hw +namespace.vndk.permitted.paths += /vendor/${LIB}/egl +# This is exceptionally required since android.hidl.memory@1.0-impl.so is here +namespace.vndk.permitted.paths += /system/${LIB}/vndk-sp-28/hw + +namespace.vndk.asan.search.paths = /data/asan/odm/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /odm/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /data/asan/system/${LIB}/vndk-sp-28 +namespace.vndk.asan.search.paths += /system/${LIB}/vndk-sp-28 + +namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw +namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw +namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl +namespace.vndk.asan.permitted.paths += /odm/${LIB}/egl +namespace.vndk.asan.permitted.paths += /data/asan/vendor/${LIB}/hw +namespace.vndk.asan.permitted.paths += /vendor/${LIB}/hw +namespace.vndk.asan.permitted.paths += /data/asan/vendor/${LIB}/egl +namespace.vndk.asan.permitted.paths += /vendor/${LIB}/egl + +namespace.vndk.asan.permitted.paths += /data/asan/system/${LIB}/vndk-sp-28/hw +namespace.vndk.asan.permitted.paths += /system/${LIB}/vndk-sp-28/hw + +# The "vndk" namespace links to "default" namespace for LLNDK libs and links to +# "sphal" namespace for vendor libs. The ordering matters. The "default" +# namespace has higher priority than the "sphal" namespace. +namespace.vndk.links = default,sphal + +# When these NDK libs are required inside this namespace, then it is redirected +# to the default namespace. This is possible since their ABI is stable across +# Android releases. +namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libc.so:libclang_rt.asan-aarch64-android.so:libclang_rt.asan-arm-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so +namespace.vndk.link.default.shared_libs += libclang_rt.asan-aarch64-android.so:libclang_rt.ubsan_standalone-aarch64-android.so:libclang_rt.tsan-aarch64-android.so:libclang_rt.asan-arm-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.tsan-arm-android.so + +# Allow VNDK-SP extensions to use vendor libraries +namespace.vndk.link.sphal.allow_all_shared_libs = true + +############################################################################### +# Namespace config for vendor processes. In O, no restriction is enforced for +# them. However, in O-MR1, access to /system/${LIB} will not be allowed to +# the default namespace. 'system' namespace will be added to give limited +# (LL-NDK only) access. +############################################################################### +[vendor] +additional.namespaces = system,vndk + +############################################################################### +# "default" namespace +# +# This is the default linker namespace for a vendor process (a process started +# from /vendor/bin/*). The main executable and the libs under /vendor/lib[64] +# are loaded directly into this namespace. However, other libs under the system +# partition (VNDK and LLNDK libraries) are not loaded here but from the +# separate namespace 'system'. The delegation to the system namespace is done +# via the 'namespace.default.link.system.shared_libs' property below. +############################################################################### +namespace.default.isolated = true +namespace.default.visible = true + +namespace.default.search.paths = /odm/${LIB} +namespace.default.search.paths += /vendor/${LIB} + +namespace.default.permitted.paths = /odm +namespace.default.permitted.paths += /vendor + +namespace.default.asan.search.paths = /data/asan/odm/${LIB} +namespace.default.asan.search.paths += /odm/${LIB} +namespace.default.asan.search.paths += /data/asan/vendor/${LIB} +namespace.default.asan.search.paths += /vendor/${LIB} + +namespace.default.asan.permitted.paths = /data/asan/odm +namespace.default.asan.permitted.paths += /odm +namespace.default.asan.permitted.paths += /data/asan/vendor +namespace.default.asan.permitted.paths += /vendor + +namespace.default.links = system,vndk +namespace.default.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libc.so:libclang_rt.asan-aarch64-android.so:libclang_rt.asan-arm-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so +namespace.default.link.vndk.shared_libs = android.hardware.graphics.common@1.0.so:android.hardware.graphics.common@1.1.so:android.hardware.graphics.mapper@2.0.so:android.hardware.graphics.mapper@2.1.so:android.hardware.renderscript@1.0.so:android.hidl.memory.token@1.0.so:android.hidl.memory@1.0.so:android.hidl.memory@1.0-impl.so:libRSCpuRef.so:libRSDriver.so:libRS_internal.so:libbase.so:libbcinfo.so:libc++.so:libcutils.so:libhardware.so:libhidlbase.so:libhidlmemory.so:libhidltransport.so:libhwbinder.so:libhwbinder_noltopgo.so:libion.so:liblzma.so:libunwindstack.so:libutils.so:libutilscallstack.so:libz.so +namespace.default.link.vndk.shared_libs += android.frameworks.displayservice@1.0.so:android.frameworks.schedulerservice@1.0.so:android.frameworks.sensorservice@1.0.so:android.frameworks.vr.composer@1.0.so:android.hardware.audio.common-util.so:android.hardware.audio.common@2.0.so:android.hardware.audio.common@2.0-util.so:android.hardware.audio.common@4.0.so:android.hardware.audio.common@4.0-util.so:android.hardware.audio.effect@2.0.so:android.hardware.audio.effect@4.0.so:android.hardware.audio@2.0.so:android.hardware.audio@4.0.so:android.hardware.authsecret@1.0.so:android.hardware.automotive.audiocontrol@1.0.so:android.hardware.automotive.evs@1.0.so:android.hardware.automotive.vehicle@2.0.so:android.hardware.biometrics.fingerprint@2.1.so:android.hardware.bluetooth.a2dp@1.0.so:android.hardware.bluetooth@1.0.so:android.hardware.boot@1.0.so:android.hardware.broadcastradio@1.0.so:android.hardware.broadcastradio@1.1.so:android.hardware.broadcastradio@2.0.so:android.hardware.camera.common@1.0.so:android.hardware.camera.device@1.0.so:android.hardware.camera.device@3.2.so:android.hardware.camera.device@3.3.so:android.hardware.camera.device@3.4.so:android.hardware.camera.metadata@3.2.so:android.hardware.camera.metadata@3.3.so:android.hardware.camera.provider@2.4.so:android.hardware.cas.native@1.0.so:android.hardware.cas@1.0.so:android.hardware.configstore-utils.so:android.hardware.configstore@1.0.so:android.hardware.configstore@1.1.so:android.hardware.confirmationui-support-lib.so:android.hardware.confirmationui@1.0.so:android.hardware.contexthub@1.0.so:android.hardware.drm@1.0.so:android.hardware.drm@1.1.so:android.hardware.dumpstate@1.0.so:android.hardware.gatekeeper@1.0.so:android.hardware.gnss@1.0.so:android.hardware.gnss@1.1.so:android.hardware.graphics.allocator@2.0.so:android.hardware.graphics.bufferqueue@1.0.so:android.hardware.graphics.composer@2.1.so:android.hardware.graphics.composer@2.2.so:android.hardware.health@1.0.so:android.hardware.health@2.0.so:android.hardware.ir@1.0.so:android.hardware.keymaster@3.0.so:android.hardware.keymaster@4.0.so:android.hardware.light@2.0.so:android.hardware.media.bufferpool@1.0.so:android.hardware.media.omx@1.0.so:android.hardware.media@1.0.so:android.hardware.memtrack@1.0.so:android.hardware.neuralnetworks@1.0.so:android.hardware.neuralnetworks@1.1.so:android.hardware.nfc@1.0.so:android.hardware.nfc@1.1.so:android.hardware.oemlock@1.0.so:android.hardware.power@1.0.so:android.hardware.power@1.1.so:android.hardware.power@1.2.so:android.hardware.radio.config@1.0.so:android.hardware.radio.deprecated@1.0.so:android.hardware.radio@1.0.so:android.hardware.radio@1.1.so:android.hardware.radio@1.2.so:android.hardware.secure_element@1.0.so:android.hardware.sensors@1.0.so:android.hardware.soundtrigger@2.0.so:android.hardware.soundtrigger@2.0-core.so:android.hardware.soundtrigger@2.1.so:android.hardware.tetheroffload.config@1.0.so:android.hardware.tetheroffload.control@1.0.so:android.hardware.thermal@1.0.so:android.hardware.thermal@1.1.so:android.hardware.tv.cec@1.0.so:android.hardware.tv.input@1.0.so:android.hardware.usb.gadget@1.0.so:android.hardware.usb@1.0.so:android.hardware.usb@1.1.so:android.hardware.vibrator@1.0.so:android.hardware.vibrator@1.1.so:android.hardware.vibrator@1.2.so:android.hardware.vr@1.0.so:android.hardware.weaver@1.0.so:android.hardware.wifi.hostapd@1.0.so:android.hardware.wifi.offload@1.0.so:android.hardware.wifi.supplicant@1.0.so:android.hardware.wifi.supplicant@1.1.so:android.hardware.wifi@1.0.so:android.hardware.wifi@1.1.so:android.hardware.wifi@1.2.so:android.hidl.allocator@1.0.so:android.hidl.memory.block@1.0.so:android.hidl.token@1.0.so:android.hidl.token@1.0-utils.so:android.system.net.netd@1.0.so:android.system.net.netd@1.1.so:android.system.wifi.keystore@1.0.so:libadf.so:libaudioroute.so:libaudioutils.so:libbinder.so:libcamera_metadata.so:libcap.so:libclang_rt.ubsan_standalone-aarch64-android.so:libclang_rt.ubsan_standalone-arm-android.so:libcn-cbor.so:libcrypto.so:libcrypto_utils.so:libcurl.so:libdiskconfig.so:libdumpstateutil.so:libevent.so:libexif.so:libexpat.so:libfmq.so:libgatekeeper.so:libhardware_legacy.so:libhidlallocatorutils.so:libhidlcache.so:libjpeg.so:libkeymaster_messages.so:libkeymaster_portable.so:libldacBT_abr.so:libldacBT_enc.so:liblz4.so:libmedia_helper.so:libmedia_omx.so:libmemtrack.so:libminijail.so:libmkbootimg_abi_check.so:libnetutils.so:libnl.so:libopus.so:libpagemap.so:libpcre2.so:libpiex.so:libpng.so:libpower.so:libprocinfo.so:libprotobuf-cpp-full.so:libprotobuf-cpp-lite.so:libpuresoftkeymasterdevice.so:libradio_metadata.so:libselinux.so:libsoftkeymasterdevice.so:libspeexresampler.so:libsqlite.so:libssl.so:libstagefright_amrnb_common.so:libstagefright_bufferqueue_helper.so:libstagefright_enc_common.so:libstagefright_flacdec.so:libstagefright_foundation.so:libstagefright_omx.so:libstagefright_omx_utils.so:libstagefright_soft_aacdec.so:libstagefright_soft_aacenc.so:libstagefright_soft_amrdec.so:libstagefright_soft_amrnbenc.so:libstagefright_soft_amrwbenc.so:libstagefright_soft_avcdec.so:libstagefright_soft_avcenc.so:libstagefright_soft_flacdec.so:libstagefright_soft_flacenc.so:libstagefright_soft_g711dec.so:libstagefright_soft_gsmdec.so:libstagefright_soft_hevcdec.so:libstagefright_soft_mp3dec.so:libstagefright_soft_mpeg2dec.so:libstagefright_soft_mpeg4dec.so:libstagefright_soft_mpeg4enc.so:libstagefright_soft_opusdec.so:libstagefright_soft_rawdec.so:libstagefright_soft_vorbisdec.so:libstagefright_soft_vpxdec.so:libstagefright_soft_vpxenc.so:libstagefright_xmlparser.so:libsuspend.so:libsysutils.so:libtinyalsa.so:libtinyxml2.so:libui.so:libusbhost.so:libvixl-arm.so:libvixl-arm64.so:libvorbisidec.so:libwifi-system-iface.so:libxml2.so:libyuv.so:libziparchive.so + +############################################################################### +# "vndk" namespace +# +# This namespace is where VNDK and VNDK-SP libraries are loaded for +# a vendor process. +############################################################################### +namespace.vndk.isolated = false + +namespace.vndk.search.paths = /odm/${LIB}/vndk +namespace.vndk.search.paths += /odm/${LIB}/vndk-sp +namespace.vndk.search.paths += /vendor/${LIB}/vndk +namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp +namespace.vndk.search.paths += /system/${LIB}/vndk-sp-28 +namespace.vndk.search.paths += /system/${LIB}/vndk-28 + +namespace.vndk.asan.search.paths = /data/asan/odm/${LIB}/vndk +namespace.vndk.asan.search.paths += /odm/${LIB}/vndk +namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /odm/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk +namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk +namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp +namespace.vndk.asan.search.paths += /data/asan/system/${LIB}/vndk-sp-28 +namespace.vndk.asan.search.paths += /system/${LIB}/vndk-sp-28 +namespace.vndk.asan.search.paths += /data/asan/system/${LIB}/vndk-28 +namespace.vndk.asan.search.paths += /system/${LIB}/vndk-28 + +# When these NDK libs are required inside this namespace, then it is redirected +# to the system namespace. This is possible since their ABI is stable across +# Android releases. +namespace.vndk.links = system,default +namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libc.so:libclang_rt.asan-aarch64-android.so:libclang_rt.asan-arm-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so +namespace.vndk.link.system.shared_libs += libclang_rt.asan-aarch64-android.so:libclang_rt.ubsan_standalone-aarch64-android.so:libclang_rt.tsan-aarch64-android.so:libclang_rt.asan-arm-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.tsan-arm-android.so + +namespace.vndk.link.default.allow_all_shared_libs = true + +############################################################################### +# "system" namespace +# +# This namespace is where system libs (VNDK and LLNDK libs) are loaded for +# a vendor process. +############################################################################### +namespace.system.isolated = false + +namespace.system.search.paths = /system/${LIB} +namespace.system.search.paths += /system/product/${LIB} + +namespace.system.asan.search.paths = /data/asan/system/${LIB} +namespace.system.asan.search.paths += /system/${LIB} +namespace.system.asan.search.paths += /data/asan/product/${LIB} +namespace.system.asan.search.paths += /product/${LIB} + +############################################################################### +# Namespace config for binaries under /postinstall. +# Only one default namespace is defined and it has no directories other than +# /system/lib in the search paths. This is because linker calls realpath on the +# search paths and this causes selinux denial if the paths (/vendor, /odm) are +# not allowed to the poinstall binaries. There is no reason to allow the +# binaries to access the paths. +############################################################################### +[postinstall] +namespace.default.isolated = false +namespace.default.search.paths = /system/${LIB} +namespace.default.search.paths += /system/product/${LIB} diff --git a/system/etc/static-dns-hosts.txt b/system/arm/etc/static-dns-hosts.txt similarity index 100% rename from system/etc/static-dns-hosts.txt rename to system/arm/etc/static-dns-hosts.txt diff --git a/system/arm/lib/ld-android.so b/system/arm/lib/ld-android.so new file mode 100644 index 0000000..4111481 Binary files /dev/null and b/system/arm/lib/ld-android.so differ diff --git a/system/arm/lib/libc++.so b/system/arm/lib/libc++.so new file mode 100644 index 0000000..c404afb Binary files /dev/null and b/system/arm/lib/libc++.so differ diff --git a/system/arm/lib/libc.so b/system/arm/lib/libc.so new file mode 100644 index 0000000..071f53f Binary files /dev/null and b/system/arm/lib/libc.so differ diff --git a/system/arm/lib/libc_malloc_debug.so b/system/arm/lib/libc_malloc_debug.so new file mode 100644 index 0000000..6177f20 Binary files /dev/null and b/system/arm/lib/libc_malloc_debug.so differ diff --git a/system/arm/lib/libc_malloc_hooks.so b/system/arm/lib/libc_malloc_hooks.so new file mode 100644 index 0000000..f183032 Binary files /dev/null and b/system/arm/lib/libc_malloc_hooks.so differ diff --git a/system/arm/lib/libdl.so b/system/arm/lib/libdl.so new file mode 100644 index 0000000..68b99d8 Binary files /dev/null and b/system/arm/lib/libdl.so differ diff --git a/system/arm/lib/libicuuc.so b/system/arm/lib/libicuuc.so new file mode 100644 index 0000000..61b354a Binary files /dev/null and b/system/arm/lib/libicuuc.so differ diff --git a/system/arm/lib/liblog.so b/system/arm/lib/liblog.so new file mode 100644 index 0000000..bd2c38a Binary files /dev/null and b/system/arm/lib/liblog.so differ diff --git a/system/arm/lib/libm.so b/system/arm/lib/libm.so new file mode 100644 index 0000000..6152ab6 Binary files /dev/null and b/system/arm/lib/libm.so differ diff --git a/system/arm/lib/libnetd_client.so b/system/arm/lib/libnetd_client.so new file mode 100644 index 0000000..6cc6b75 Binary files /dev/null and b/system/arm/lib/libnetd_client.so differ diff --git a/system/arm/lib64/ld-android.so b/system/arm/lib64/ld-android.so new file mode 100644 index 0000000..2a2021e Binary files /dev/null and b/system/arm/lib64/ld-android.so differ diff --git a/system/arm/lib64/libc++.so b/system/arm/lib64/libc++.so new file mode 100644 index 0000000..12ddc93 Binary files /dev/null and b/system/arm/lib64/libc++.so differ diff --git a/system/arm/lib64/libc.so b/system/arm/lib64/libc.so new file mode 100644 index 0000000..4fdcda4 Binary files /dev/null and b/system/arm/lib64/libc.so differ diff --git a/system/arm/lib64/libc_malloc_debug.so b/system/arm/lib64/libc_malloc_debug.so new file mode 100644 index 0000000..fcb7310 Binary files /dev/null and b/system/arm/lib64/libc_malloc_debug.so differ diff --git a/system/arm/lib64/libc_malloc_hooks.so b/system/arm/lib64/libc_malloc_hooks.so new file mode 100644 index 0000000..7184e8c Binary files /dev/null and b/system/arm/lib64/libc_malloc_hooks.so differ diff --git a/system/arm/lib64/libdl.so b/system/arm/lib64/libdl.so new file mode 100644 index 0000000..093484a Binary files /dev/null and b/system/arm/lib64/libdl.so differ diff --git a/system/arm/lib64/libicuuc.so b/system/arm/lib64/libicuuc.so new file mode 100644 index 0000000..78d7243 Binary files /dev/null and b/system/arm/lib64/libicuuc.so differ diff --git a/system/arm/lib64/liblog.so b/system/arm/lib64/liblog.so new file mode 100644 index 0000000..c73ae7a Binary files /dev/null and b/system/arm/lib64/liblog.so differ diff --git a/system/arm/lib64/libm.so b/system/arm/lib64/libm.so new file mode 100644 index 0000000..ef4ccc0 Binary files /dev/null and b/system/arm/lib64/libm.so differ diff --git a/system/arm/lib64/libnetd_client.so b/system/arm/lib64/libnetd_client.so new file mode 100644 index 0000000..8c0c944 Binary files /dev/null and b/system/arm/lib64/libnetd_client.so differ diff --git a/system/setup-termux.sh b/system/arm/setup-termux.sh similarity index 100% rename from system/setup-termux.sh rename to system/arm/setup-termux.sh diff --git a/system/usr/icu/icudt60l.dat b/system/arm/usr/icu/icudt60l.dat similarity index 100% rename from system/usr/icu/icudt60l.dat rename to system/arm/usr/icu/icudt60l.dat diff --git a/system/usr/share/zoneinfo/tzdata b/system/arm/usr/share/zoneinfo/tzdata similarity index 100% rename from system/usr/share/zoneinfo/tzdata rename to system/arm/usr/share/zoneinfo/tzdata diff --git a/system/usr/share/zoneinfo/tzlookup.xml b/system/arm/usr/share/zoneinfo/tzlookup.xml similarity index 100% rename from system/usr/share/zoneinfo/tzlookup.xml rename to system/arm/usr/share/zoneinfo/tzlookup.xml diff --git a/system/bin/busybox b/system/x86/bin/busybox similarity index 100% rename from system/bin/busybox rename to system/x86/bin/busybox diff --git a/system/bin/linker b/system/x86/bin/linker similarity index 100% rename from system/bin/linker rename to system/x86/bin/linker diff --git a/system/bin/linker64 b/system/x86/bin/linker64 similarity index 100% rename from system/bin/linker64 rename to system/x86/bin/linker64 diff --git a/system/x86/bin/sh b/system/x86/bin/sh new file mode 120000 index 0000000..c3fa810 --- /dev/null +++ b/system/x86/bin/sh @@ -0,0 +1 @@ +busybox \ No newline at end of file diff --git a/system/x86/bin/update-static-dns b/system/x86/bin/update-static-dns new file mode 100755 index 0000000..4b553c7 --- /dev/null +++ b/system/x86/bin/update-static-dns @@ -0,0 +1,17 @@ +#!/system/bin/sh + +export PATH=/system/bin + +echo "127.0.0.1 localhost" > /system/etc/hosts +echo "::1 ip6-localhost" >> /system/etc/hosts + +for host in $(busybox cat /system/etc/static-dns-hosts.txt | busybox grep -vE '^\s*#'); do + ip_addr=$(busybox nslookup -type=a "$host" 8.8.8.8 | busybox awk '/^Address: / { print $2 ; exit }') + + if [ -z "$ip_addr" ]; then + echo "Can't resolve '$host'." >&2 + exit 1 + fi + + echo "$ip_addr $host" | busybox tee -a /system/etc/hosts +done diff --git a/system/x86/etc/hosts b/system/x86/etc/hosts new file mode 100644 index 0000000..0c4db27 --- /dev/null +++ b/system/x86/etc/hosts @@ -0,0 +1,2 @@ +127.0.0.1 localhost +::1 ip6-localhost diff --git a/system/etc/ld.config.28.txt b/system/x86/etc/ld.config.28.txt similarity index 100% rename from system/etc/ld.config.28.txt rename to system/x86/etc/ld.config.28.txt diff --git a/system/x86/etc/static-dns-hosts.txt b/system/x86/etc/static-dns-hosts.txt new file mode 100644 index 0000000..a83c7e2 --- /dev/null +++ b/system/x86/etc/static-dns-hosts.txt @@ -0,0 +1,57 @@ +## +## Termux Docker environment doesn't have working DNS resolver. +## This list contains domains that will be manually resolved. Result +## will be used to fill /system/etc/hosts. +## + +# Termux repositories: +termux.net +termux.org + +# Bintray is deprecated and will be removed soon. +dl.bintray.com + +# Termux mirrors: +grimler.se +termux.mentality.rip + +# Termux has mirror on IPFS. +# Gateways copied from 'pkg'. +10.via0.com +ipfs.io + +# Deprecated and will be removed soon. +main.termux-mirror.ml +games.termux-mirror.ml +root.termux-mirror.ml +science.termux-mirror.ml +unstable.termux-mirror.ml +x11.termux-mirror.ml + +# Community repositories: +its-pointless.github.io + +# Github: +github.com +codeload.github.com +gist.github.com +gist.githubusercontent.com +raw.githubusercontent.com + +# Python package manager (pip): +pypi.org +test.pypi.org +upload.pypi.org +pythonhosted.org +files.pythonhosted.org +test-files.pythonhosted.org + +# Ruby package manager (gem): +rubygems.org +index.rubygems.org + +# Node package manager (npm): +registry.npmjs.org + +# Yarn package manager (yarn): +registry.yarnpkg.com diff --git a/system/lib/ld-android.so b/system/x86/lib/ld-android.so similarity index 100% rename from system/lib/ld-android.so rename to system/x86/lib/ld-android.so diff --git a/system/lib/libc++.so b/system/x86/lib/libc++.so similarity index 100% rename from system/lib/libc++.so rename to system/x86/lib/libc++.so diff --git a/system/lib/libc.so b/system/x86/lib/libc.so similarity index 100% rename from system/lib/libc.so rename to system/x86/lib/libc.so diff --git a/system/lib/libc_malloc_debug.so b/system/x86/lib/libc_malloc_debug.so similarity index 100% rename from system/lib/libc_malloc_debug.so rename to system/x86/lib/libc_malloc_debug.so diff --git a/system/lib/libc_malloc_hooks.so b/system/x86/lib/libc_malloc_hooks.so similarity index 100% rename from system/lib/libc_malloc_hooks.so rename to system/x86/lib/libc_malloc_hooks.so diff --git a/system/lib/libdl.so b/system/x86/lib/libdl.so similarity index 100% rename from system/lib/libdl.so rename to system/x86/lib/libdl.so diff --git a/system/lib/libicuuc.so b/system/x86/lib/libicuuc.so similarity index 100% rename from system/lib/libicuuc.so rename to system/x86/lib/libicuuc.so diff --git a/system/lib/liblog.so b/system/x86/lib/liblog.so similarity index 100% rename from system/lib/liblog.so rename to system/x86/lib/liblog.so diff --git a/system/lib/libm.so b/system/x86/lib/libm.so similarity index 100% rename from system/lib/libm.so rename to system/x86/lib/libm.so diff --git a/system/lib/libnetd_client.so b/system/x86/lib/libnetd_client.so similarity index 100% rename from system/lib/libnetd_client.so rename to system/x86/lib/libnetd_client.so diff --git a/system/lib64/ld-android.so b/system/x86/lib64/ld-android.so similarity index 100% rename from system/lib64/ld-android.so rename to system/x86/lib64/ld-android.so diff --git a/system/lib64/libc++.so b/system/x86/lib64/libc++.so similarity index 100% rename from system/lib64/libc++.so rename to system/x86/lib64/libc++.so diff --git a/system/lib64/libc.so b/system/x86/lib64/libc.so similarity index 100% rename from system/lib64/libc.so rename to system/x86/lib64/libc.so diff --git a/system/lib64/libc_malloc_debug.so b/system/x86/lib64/libc_malloc_debug.so similarity index 100% rename from system/lib64/libc_malloc_debug.so rename to system/x86/lib64/libc_malloc_debug.so diff --git a/system/lib64/libc_malloc_hooks.so b/system/x86/lib64/libc_malloc_hooks.so similarity index 100% rename from system/lib64/libc_malloc_hooks.so rename to system/x86/lib64/libc_malloc_hooks.so diff --git a/system/lib64/libdl.so b/system/x86/lib64/libdl.so similarity index 100% rename from system/lib64/libdl.so rename to system/x86/lib64/libdl.so diff --git a/system/lib64/libicuuc.so b/system/x86/lib64/libicuuc.so similarity index 100% rename from system/lib64/libicuuc.so rename to system/x86/lib64/libicuuc.so diff --git a/system/lib64/liblog.so b/system/x86/lib64/liblog.so similarity index 100% rename from system/lib64/liblog.so rename to system/x86/lib64/liblog.so diff --git a/system/lib64/libm.so b/system/x86/lib64/libm.so similarity index 100% rename from system/lib64/libm.so rename to system/x86/lib64/libm.so diff --git a/system/lib64/libnetd_client.so b/system/x86/lib64/libnetd_client.so similarity index 100% rename from system/lib64/libnetd_client.so rename to system/x86/lib64/libnetd_client.so diff --git a/system/x86/setup-termux.sh b/system/x86/setup-termux.sh new file mode 100755 index 0000000..8da0c69 --- /dev/null +++ b/system/x86/setup-termux.sh @@ -0,0 +1,60 @@ +#!/system/bin/sh +set -e + +busybox mkdir -p /data/data/com.termux/cache +cd /data/data/com.termux/files +busybox mkdir home usr +busybox unzip -d usr bootstrap.zip +busybox rm -f bootstrap.zip + +# Termux bootstrap archive does not store symlinks in raw form. +# Instead, it has a SYMLINKS.txt which contains the information about +# symlink paths and their targets. +cd /data/data/com.termux/files/usr +busybox cat SYMLINKS.txt | while read -r line; do + dest=$(echo "$line" | busybox awk -F '←' '{ print $1 }') + link=$(echo "$line" | busybox awk -F '←' '{ print $2 }') + echo "Creating symlink: $link --> $dest" + busybox ln -s "$dest" "$link" +done +busybox rm -f SYMLINKS.txt + +# Set generic permissions. +busybox find /data -type d -exec busybox chmod 755 "{}" \; +busybox find /data/data/com.termux/files -type d -exec busybox chmod 700 "{}" \; +busybox find /data/data/com.termux/files/usr -type f -executable -exec busybox chmod 700 "{}" \; +busybox find /data/data/com.termux/files/usr -type f ! -executable -exec busybox chmod 600 "{}" \; +busybox chown -Rh 1000:1000 /data +busybox find /system -type d -exec busybox chmod 755 "{}" \; +busybox find /system -type f -executable -exec busybox chmod 755 "{}" \; +busybox find /system -type f ! -executable -exec busybox chmod 644 "{}" \; +busybox chown -Rh 0:0 /system + +# These files should be writable by normal user. +busybox chown 1000:1000 /system/etc/hosts /system/etc/static-dns-hosts.txt + +# This step should be kept in sync with bootstrap archive content. +busybox find bin lib/apt lib/bash libexec -type f -exec busybox chmod 700 "{}" \; +for p in ./share/doc/util-linux/getopt/getopt-parse.bash \ + ./share/doc/util-linux/getopt/getopt-parse.tcsh \ + ./var/service/ftpd/run ./var/service/telnetd/run; do + if [ -f "$p" ]; then + busybox chmod 700 "$p" + fi +done + +# Termux doesn't use these directories, but create them for compatibility +# when executing stuff like package tests. +busybox ln -sf /data/data/com.termux/files/usr/bin /bin +busybox ln -sf /data/data/com.termux/files/usr /usr +busybox mkdir -p -m 1777 /tmp + +# Symlink static dns things into Termux prefix. +busybox ln -sf /system/bin/update-static-dns /data/data/com.termux/files/usr/bin/update-static-dns +busybox ln -sf /system/etc/static-dns-hosts.txt /data/data/com.termux/files/usr/etc/static-dns-hosts.txt + +# Update static dns on shell session start. +echo "echo -e 'Updating static DNS:\n' && /system/bin/update-static-dns && echo" > /data/data/com.termux/files/home/.bashrc + +# Let script delete itself. +busybox rm -f "$(busybox realpath "$0")" diff --git a/system/x86/usr/icu/icudt60l.dat b/system/x86/usr/icu/icudt60l.dat new file mode 100644 index 0000000..0d1232a Binary files /dev/null and b/system/x86/usr/icu/icudt60l.dat differ diff --git a/system/x86/usr/share/zoneinfo/tzdata b/system/x86/usr/share/zoneinfo/tzdata new file mode 100644 index 0000000..5c17a8b Binary files /dev/null and b/system/x86/usr/share/zoneinfo/tzdata differ diff --git a/system/x86/usr/share/zoneinfo/tzlookup.xml b/system/x86/usr/share/zoneinfo/tzlookup.xml new file mode 100644 index 0000000..43dfb98 --- /dev/null +++ b/system/x86/usr/share/zoneinfo/tzlookup.xml @@ -0,0 +1,926 @@ + + + + Europe/Andorra + + + Asia/Dubai + + + Asia/Kabul + + + America/Antigua + + + America/Anguilla + + + Europe/Tirane + + + Asia/Yerevan + + + Africa/Luanda + + + Antarctica/McMurdo + Antarctica/DumontDUrville + Antarctica/Casey + Antarctica/Davis + Antarctica/Mawson + Antarctica/Vostok + Antarctica/Syowa + Antarctica/Troll + Antarctica/Rothera + Antarctica/Palmer + + + America/Argentina/Buenos_Aires + America/Argentina/Cordoba + America/Argentina/Salta + America/Argentina/Jujuy + America/Argentina/Tucuman + America/Argentina/Catamarca + America/Argentina/La_Rioja + America/Argentina/San_Juan + America/Argentina/Mendoza + America/Argentina/San_Luis + America/Argentina/Rio_Gallegos + America/Argentina/Ushuaia + + + Pacific/Pago_Pago + + + Europe/Vienna + + + Australia/Sydney + Australia/Melbourne + Australia/Brisbane + Australia/Hobart + Australia/Currie + Australia/Lindeman + Antarctica/Macquarie + Australia/Lord_Howe + Australia/Adelaide + Australia/Broken_Hill + Australia/Darwin + Australia/Perth + Australia/Eucla + + + America/Aruba + + + Europe/Mariehamn + + + Asia/Baku + + + Europe/Sarajevo + + + America/Barbados + + + Asia/Dhaka + + + Europe/Brussels + + + Africa/Ouagadougou + + + Europe/Sofia + + + Asia/Bahrain + + + Africa/Bujumbura + + + Africa/Porto-Novo + + + America/St_Barthelemy + + + Atlantic/Bermuda + + + Asia/Brunei + + + America/La_Paz + + + America/Kralendijk + + + America/Noronha + America/Sao_Paulo + America/Belem + America/Fortaleza + America/Recife + America/Araguaina + America/Maceio + America/Bahia + America/Santarem + America/Manaus + America/Campo_Grande + America/Cuiaba + America/Porto_Velho + America/Boa_Vista + America/Eirunepe + America/Rio_Branco + + + America/Nassau + + + Asia/Thimphu + + + Africa/Gaborone + + + Europe/Minsk + + + America/Belize + + + America/St_Johns + America/Halifax + America/Glace_Bay + America/Moncton + America/Goose_Bay + America/Blanc-Sablon + America/Toronto + America/Nipigon + America/Thunder_Bay + America/Iqaluit + America/Pangnirtung + America/Atikokan + America/Winnipeg + America/Regina + America/Rankin_Inlet + America/Rainy_River + America/Swift_Current + America/Resolute + America/Edmonton + America/Cambridge_Bay + America/Yellowknife + America/Inuvik + America/Dawson_Creek + America/Creston + America/Fort_Nelson + America/Vancouver + America/Whitehorse + America/Dawson + + + Indian/Cocos + + + Africa/Lubumbashi + Africa/Kinshasa + + + Africa/Bangui + + + Africa/Brazzaville + + + Europe/Zurich + + + Africa/Abidjan + + + Pacific/Rarotonga + + + America/Punta_Arenas + America/Santiago + Pacific/Easter + + + Africa/Douala + + + Asia/Shanghai + Asia/Urumqi + + + America/Bogota + + + America/Costa_Rica + + + America/Havana + + + Atlantic/Cape_Verde + + + America/Curacao + + + Indian/Christmas + + + Asia/Nicosia + Asia/Famagusta + + + Europe/Prague + + + Europe/Berlin + Europe/Busingen + + + Africa/Djibouti + + + Europe/Copenhagen + + + America/Dominica + + + America/Santo_Domingo + + + Africa/Algiers + + + America/Guayaquil + Pacific/Galapagos + + + Europe/Tallinn + + + Africa/Cairo + + + Africa/El_Aaiun + + + Africa/Asmara + + + Europe/Madrid + Africa/Ceuta + Atlantic/Canary + + + Africa/Addis_Ababa + + + Europe/Helsinki + + + Pacific/Fiji + + + Atlantic/Stanley + + + Pacific/Pohnpei + Pacific/Kosrae + Pacific/Chuuk + + + Atlantic/Faroe + + + Europe/Paris + + + Africa/Libreville + + + Europe/London + + + America/Grenada + + + Asia/Tbilisi + + + America/Cayenne + + + Europe/Guernsey + + + Africa/Accra + + + Europe/Gibraltar + + + America/Danmarkshavn + America/Scoresbysund + America/Godthab + America/Thule + + + Africa/Banjul + + + Africa/Conakry + + + America/Guadeloupe + + + Africa/Malabo + + + Europe/Athens + + + Atlantic/South_Georgia + + + America/Guatemala + + + Pacific/Guam + + + Africa/Bissau + + + America/Guyana + + + Asia/Hong_Kong + + + America/Tegucigalpa + + + Europe/Zagreb + + + America/Port-au-Prince + + + Europe/Budapest + + + Asia/Jayapura + Asia/Makassar + Asia/Jakarta + Asia/Pontianak + + + Europe/Dublin + + + Asia/Jerusalem + + + Europe/Isle_of_Man + + + Asia/Kolkata + + + Indian/Chagos + + + Asia/Baghdad + + + Asia/Tehran + + + Atlantic/Reykjavik + + + Europe/Rome + + + Europe/Jersey + + + America/Jamaica + + + Asia/Amman + + + Asia/Tokyo + + + Africa/Nairobi + + + Asia/Bishkek + + + Asia/Phnom_Penh + + + Pacific/Kiritimati + Pacific/Enderbury + Pacific/Tarawa + + + Indian/Comoro + + + America/St_Kitts + + + Asia/Pyongyang + + + Asia/Seoul + + + Asia/Kuwait + + + America/Cayman + + + Asia/Almaty + Asia/Qyzylorda + Asia/Aqtau + Asia/Oral + Asia/Aqtobe + Asia/Atyrau + + + Asia/Vientiane + + + Asia/Beirut + + + America/St_Lucia + + + Europe/Vaduz + + + Asia/Colombo + + + Africa/Monrovia + + + Africa/Maseru + + + Europe/Vilnius + + + Europe/Luxembourg + + + Europe/Riga + + + Africa/Tripoli + + + Africa/Casablanca + + + Europe/Monaco + + + Europe/Chisinau + + + Europe/Podgorica + + + America/Marigot + + + Indian/Antananarivo + + + Pacific/Majuro + Pacific/Kwajalein + + + Europe/Skopje + + + Africa/Bamako + + + Asia/Yangon + + + Asia/Choibalsan + Asia/Ulaanbaatar + Asia/Hovd + + + Asia/Macau + + + Pacific/Saipan + + + America/Martinique + + + Africa/Nouakchott + + + America/Montserrat + + + Europe/Malta + + + Indian/Mauritius + + + Indian/Maldives + + + Africa/Blantyre + + + America/Mexico_City + America/Merida + America/Monterrey + America/Matamoros + America/Bahia_Banderas + America/Cancun + America/Chihuahua + America/Hermosillo + America/Mazatlan + America/Ojinaga + America/Tijuana + + + Asia/Kuala_Lumpur + Asia/Kuching + + + Africa/Maputo + + + Africa/Windhoek + + + Pacific/Noumea + + + Africa/Niamey + + + Pacific/Norfolk + + + Africa/Lagos + + + America/Managua + + + Europe/Amsterdam + + + Europe/Oslo + + + Asia/Kathmandu + + + Pacific/Nauru + + + Pacific/Niue + + + Pacific/Auckland + Pacific/Chatham + + + Asia/Muscat + + + America/Panama + + + America/Lima + + + Pacific/Gambier + Pacific/Marquesas + Pacific/Tahiti + + + Pacific/Port_Moresby + Pacific/Bougainville + + + Asia/Manila + + + Asia/Karachi + + + Europe/Warsaw + + + America/Miquelon + + + Pacific/Pitcairn + + + America/Puerto_Rico + + + Asia/Gaza + Asia/Hebron + + + Europe/Lisbon + Atlantic/Madeira + Atlantic/Azores + + + Pacific/Palau + + + America/Asuncion + + + Asia/Qatar + + + Indian/Reunion + + + Europe/Bucharest + + + Europe/Belgrade + + + Asia/Kamchatka + Asia/Anadyr + Asia/Magadan + Asia/Sakhalin + Asia/Srednekolymsk + Asia/Vladivostok + Asia/Ust-Nera + Asia/Yakutsk + Asia/Chita + Asia/Khandyga + Asia/Irkutsk + Asia/Krasnoyarsk + Asia/Novosibirsk + Asia/Barnaul + Asia/Novokuznetsk + Asia/Tomsk + Asia/Omsk + Asia/Yekaterinburg + Europe/Samara + Europe/Astrakhan + Europe/Ulyanovsk + Europe/Saratov + Europe/Moscow + Europe/Volgograd + Europe/Kirov + Europe/Simferopol + Europe/Kaliningrad + + + Africa/Kigali + + + Asia/Riyadh + + + Pacific/Guadalcanal + + + Indian/Mahe + + + Africa/Khartoum + + + Europe/Stockholm + + + Asia/Singapore + + + Atlantic/St_Helena + + + Europe/Ljubljana + + + Arctic/Longyearbyen + + + Europe/Bratislava + + + Africa/Freetown + + + Europe/San_Marino + + + Africa/Dakar + + + Africa/Mogadishu + + + America/Paramaribo + + + Africa/Juba + + + Africa/Sao_Tome + + + America/El_Salvador + + + America/Lower_Princes + + + Asia/Damascus + + + Africa/Mbabane + + + America/Grand_Turk + + + Africa/Ndjamena + + + Indian/Kerguelen + + + Africa/Lome + + + Asia/Bangkok + + + Asia/Dushanbe + + + Pacific/Fakaofo + + + Asia/Dili + + + Asia/Ashgabat + + + Africa/Tunis + + + Pacific/Tongatapu + + + Europe/Istanbul + + + America/Port_of_Spain + + + Pacific/Funafuti + + + Asia/Taipei + + + Africa/Dar_es_Salaam + + + Europe/Kiev + Europe/Uzhgorod + Europe/Zaporozhye + + + Africa/Kampala + + + Pacific/Wake + Pacific/Midway + + + America/New_York + America/Detroit + America/Kentucky/Louisville + America/Kentucky/Monticello + America/Indiana/Indianapolis + America/Indiana/Vincennes + America/Indiana/Winamac + America/Indiana/Marengo + America/Indiana/Petersburg + America/Indiana/Vevay + America/Chicago + America/Indiana/Knox + America/Menominee + America/North_Dakota/Center + America/North_Dakota/New_Salem + America/Indiana/Tell_City + America/North_Dakota/Beulah + America/Denver + America/Boise + America/Phoenix + America/Los_Angeles + America/Anchorage + America/Juneau + America/Yakutat + America/Nome + America/Metlakatla + America/Sitka + Pacific/Honolulu + America/Adak + + + America/Montevideo + + + Asia/Tashkent + Asia/Samarkand + + + Europe/Vatican + + + America/St_Vincent + + + America/Caracas + + + America/Tortola + + + America/St_Thomas + + + Asia/Ho_Chi_Minh + + + Pacific/Efate + + + Pacific/Wallis + + + Pacific/Apia + + + Asia/Aden + + + Indian/Mayotte + + + Africa/Johannesburg + + + Africa/Lusaka + + + Africa/Harare + + +