commit 0cb4831bd44a8409c1e9fe7b9fb29f238b17430e Author: Leonid Plyushch Date: Sat Feb 8 18:13:00 2020 +0200 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..175f58d --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Termux environment for Docker. + +A [Termux](https://termux.com) i686 (x86_64) environment packaged into Docker image. +Environment doesn't have Android runtime components, so certain things will +not be available (DalvikVM, OpenSLES, etc...). + +## How to use + +1. Make sure that Docker is installed and running. +2. `git clone https://github.com/xeffyr/termux-docker && cd ./termux-docker` +3. `./run.sh` or `./run-x86_64.sh` - if need x86_64 arch. + +You can use the image directly without startup script. For example: +``` +docker run -it xeffyr/termux:latest +``` + +You can build Docker image yourself by running this script: +``` +./build-all.sh +``` + +## Known issues + +There a number of known issues which may not be resolved: + +* DNS: Docker image has to use a static DNS resolver through `/system/etc/hosts`. + You can regenerate this file by editing `/system/etc/static-dns-hosts.txt` and + executing script `/system/bin/update-static-dns`. diff --git a/build-all.sh b/build-all.sh new file mode 100755 index 0000000..5109373 --- /dev/null +++ b/build-all.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +docker build -t 'xeffyr/termux:latest' -f i686/Dockerfile . +docker build -t 'xeffyr/termux:x86_64' -f x86_64/Dockerfile . + +if [ "$(whoami)" = "xeffyr" ]; then + docker push 'xeffyr/termux:latest' + docker push 'xeffyr/termux:x86_64' +fi diff --git a/common/static-dns-hosts.txt b/common/static-dns-hosts.txt new file mode 100644 index 0000000..d07f12e --- /dev/null +++ b/common/static-dns-hosts.txt @@ -0,0 +1,185 @@ +## +## 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: +dl.bintray.com +termux.net +termux.org + +# From termux-packages build.sh files. +0xcc.net +abook.sourceforge.net +apache.mirrors.spacedump.net +archive.apache.org +archive.eclipse.org +archive.mozilla.org +bellard.org +beyondgrep.com +bitbucket.org +busybox.net +cabextract.org.uk +cache.ruby-lang.org +cairographics.org +calcurse.org +ccrypt.sourceforge.net +cgdb.me +codeload.github.com +curl.haxx.se +deb.debian.org +dev.yorhel.nl +dianne.skoll.ca +distfiles.macports.org +dist.libuv.org +dl.bintray.com +dl.fefe.de +dotat.at +download.gimp.org +download.gnome.org +download.lighttpd.net +download.osgeo.org +download.pureftpd.org +download.redis.io +download.savannah.gnu.org +download.savannah.nongnu.org +downloads.sourceforge.net +downloads.xiph.org +downloads.xvid.org +fastly.cdn.openbsd.org +files.openscad.org +fossies.org +ftp.astron.com +ftp.debian.org +ftp.figlet.org +ftp.gnome.org +ftp.gnu.org +ftp.gnupg.org +ftp.infradead.org +ftp.isc.org +ftp.mars.org +ftp.midnight-commander.org +ftp.mutt.org +ftp.osuosl.org +ftp.pcre.org +ftp.postgresql.org +ftp.tug.org +ftp.videolan.org +geoff.greer.fm +github.com +git.kernel.org +gitlab.com +git.zx2c4.com +gmic.eu +gnu.uberglobalmirror.com +gondor.apana.org.au +gstreamer.freedesktop.org +hisham.hm +http.debian.net +invisible-mirror.net +isl.gforge.inria.fr +jodies.de +kernel.org +launchpad.net +lftp.tech +libbsd.freedesktop.org +libzip.org +links.twibright.com +luarocks.org +mama.indstate.edu +marlam.de +matt.ucc.asn.au +mdocml.bsd.lv +megatools.megous.com +mirror.httrack.com +mirrors.dotsrc.org +mirrors.kernel.org +mosquitto.org +nano-editor.org +netfilter.org +newsboat.org +nginx.org +nim-lang.org +nmap.org +nodejs.org +notmuchmail.org +oligarchy.co.uk +otr.cypherpunks.ca +pdfgrep.org +pkgconfig.freedesktop.org +point-at-infinity.org +poppler.freedesktop.org +potrace.sourceforge.net +prdownloads.sourceforge.net +raw.githubusercontent.com +releases.pagure.org +rsync.samba.org +rybczak.net +s3.amazonaws.com +secure.php.net +soulsphere.org +sourceforge.net +sourceware.org +squid.mirror.globo.tech +static.rust-lang.org +storage.googleapis.com +taglib.github.io +taskwarrior.org +thrysoee.dk +waterlan.home.xs4all.nl +www.aleksey.com +www.apache.org +www.brain-dump.org +www.cipherdyne.org +www.clamav.net +www.clifford.at +www.cmake.org +www.colm.net +www.colordiff.org +www.cpan.org +www.cryptopp.com +www.cybercom.net +www.dest-unreach.org +www.digital-scurf.org +www.ffmpeg.org +www.fftw.org +www.fossil-scm.org +www.freedesktop.org +www.gnu.org +www.gnupg.org +www.greenwoodsoftware.com +www.ibiblio.org +www.inf.puc-rio.br +www.ivarch.com +www.kernel.org +www.lcdf.org +www.leonerd.org.uk +www.libssh2.org +www.libssh.org +www.lua.org +www.lysator.liu.se +www.memcached.org +www.mirbsd.org +www.mirrorservice.org +www.musicpd.org +www.nlnetlabs.nl +www.openssl.org +www.privoxy.org +www.python.org +www.rarlab.com +www.samba.org +www.schweikhardt.net +www.sentex.net +www.sqlite.org +www.stunnel.org +www.swi-prolog.org +www.tarsnap.com +www.torproject.org +www.tortall.net +www.weechat.org +www.winfield.demon.nl +www.zlib.net +xmlsoft.org +yarnpkg.com +zsync.moria.org.uk diff --git a/i686/Dockerfile b/i686/Dockerfile new file mode 100644 index 0000000..4885aa8 --- /dev/null +++ b/i686/Dockerfile @@ -0,0 +1,74 @@ +FROM scratch + +ENV ANDROID_DATA /data +ENV ANDROID_ROOT /system +ENV HOME /data/data/com.termux/files/home +ENV LANG en_US.UTF-8 +ENV PREFIX /data/data/com.termux/files/usr +ENV TMPDIR /data/data/com.termux/files/usr/tmp +ENV TZ UTC + +# Temporary set PATH to /system/bin so we will be able to +# bootstrap Termux environment. +ENV PATH /system/bin +SHELL ["/system/bin/sh", "-c"] + +# Bootstrapping Termux environment. +ADD https://termux.org/bootstrap-i686.zip /data/data/com.termux/files/bootstrap.zip +COPY i686/system /system +COPY common/static-dns-hosts.txt /system/etc/static-dns-hosts.txt + +WORKDIR /data/data/com.termux/files +RUN busybox mkdir usr && busybox unzip -d usr bootstrap.zip + +WORKDIR /data/data/com.termux/files/usr +RUN 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 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 + +WORKDIR / +RUN busybox mkdir -p /data/data/com.termux/files/home && \ + busybox rm -f /data/data/com.termux/files/bootstrap.zip && \ + busybox rm -f /data/data/com.termux/files/usr/SYMLINKS.txt + +# Fix permissions. +RUN 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 && \ + busybox chown 1000:1000 /system/etc/hosts /system/etc/static-dns-hosts.txt + +# Termux doesn't use these directories, but create them for compatibility +# when executing stuff like package tests. +RUN 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 + +# Switch to Termux environment. +WORKDIR /data/data/com.termux/files/home +USER 1000:1000 +ENV PATH /data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets + +# Make sure static dns list is up-to-date. +RUN /system/bin/update-static-dns + +# Install package updates. +RUN apt update && \ + yes | apt upgrade && \ + rm -f /data/data/com.termux/files/usr/var/log/apt/* + +ENTRYPOINT /data/data/com.termux/files/usr/bin/login diff --git a/i686/system/bin/busybox b/i686/system/bin/busybox new file mode 100755 index 0000000..6bc7737 Binary files /dev/null and b/i686/system/bin/busybox differ diff --git a/i686/system/bin/linker b/i686/system/bin/linker new file mode 100755 index 0000000..d834765 Binary files /dev/null and b/i686/system/bin/linker differ diff --git a/i686/system/bin/linker64 b/i686/system/bin/linker64 new file mode 100755 index 0000000..728ca6d Binary files /dev/null and b/i686/system/bin/linker64 differ diff --git a/i686/system/bin/sh b/i686/system/bin/sh new file mode 120000 index 0000000..c3fa810 --- /dev/null +++ b/i686/system/bin/sh @@ -0,0 +1 @@ +busybox \ No newline at end of file diff --git a/i686/system/bin/update-static-dns b/i686/system/bin/update-static-dns new file mode 100755 index 0000000..4b553c7 --- /dev/null +++ b/i686/system/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/i686/system/etc/hosts b/i686/system/etc/hosts new file mode 100644 index 0000000..0c4db27 --- /dev/null +++ b/i686/system/etc/hosts @@ -0,0 +1,2 @@ +127.0.0.1 localhost +::1 ip6-localhost diff --git a/i686/system/etc/ld.config.28.txt b/i686/system/etc/ld.config.28.txt new file mode 100644 index 0000000..1da5840 --- /dev/null +++ b/i686/system/etc/ld.config.28.txt @@ -0,0 +1,15 @@ +# +# Bionic loader config file. +# + +dir.system = /system/bin/ +dir.system = /system/xbin/ + +[system] +namespace.default.isolated = false +namespace.default.search.paths = /system/${LIB} +namespace.default.permitted.paths = /system/${LIB} +namespace.default.permitted.paths += /data +namespace.default.asan.search.paths = /system/${LIB} +namespace.default.asan.permitted.paths = /system +namespace.default.asan.permitted.paths += /data diff --git a/i686/system/lib/ld-android.so b/i686/system/lib/ld-android.so new file mode 100644 index 0000000..1591aca Binary files /dev/null and b/i686/system/lib/ld-android.so differ diff --git a/i686/system/lib/libc++.so b/i686/system/lib/libc++.so new file mode 100644 index 0000000..eae6a13 Binary files /dev/null and b/i686/system/lib/libc++.so differ diff --git a/i686/system/lib/libc.so b/i686/system/lib/libc.so new file mode 100644 index 0000000..6431384 Binary files /dev/null and b/i686/system/lib/libc.so differ diff --git a/i686/system/lib/libc_malloc_debug.so b/i686/system/lib/libc_malloc_debug.so new file mode 100644 index 0000000..55e29de Binary files /dev/null and b/i686/system/lib/libc_malloc_debug.so differ diff --git a/i686/system/lib/libc_malloc_hooks.so b/i686/system/lib/libc_malloc_hooks.so new file mode 100644 index 0000000..a462811 Binary files /dev/null and b/i686/system/lib/libc_malloc_hooks.so differ diff --git a/i686/system/lib/libdl.so b/i686/system/lib/libdl.so new file mode 100644 index 0000000..0972879 Binary files /dev/null and b/i686/system/lib/libdl.so differ diff --git a/i686/system/lib/libicuuc.so b/i686/system/lib/libicuuc.so new file mode 100644 index 0000000..99aaa1a Binary files /dev/null and b/i686/system/lib/libicuuc.so differ diff --git a/i686/system/lib/liblog.so b/i686/system/lib/liblog.so new file mode 100644 index 0000000..3745c98 Binary files /dev/null and b/i686/system/lib/liblog.so differ diff --git a/i686/system/lib/libm.so b/i686/system/lib/libm.so new file mode 100644 index 0000000..3d5dcee Binary files /dev/null and b/i686/system/lib/libm.so differ diff --git a/i686/system/lib/libnetd_client.so b/i686/system/lib/libnetd_client.so new file mode 100644 index 0000000..19f620a Binary files /dev/null and b/i686/system/lib/libnetd_client.so differ diff --git a/i686/system/lib64/ld-android.so b/i686/system/lib64/ld-android.so new file mode 100644 index 0000000..f0de289 Binary files /dev/null and b/i686/system/lib64/ld-android.so differ diff --git a/i686/system/lib64/libc++.so b/i686/system/lib64/libc++.so new file mode 100644 index 0000000..4318f18 Binary files /dev/null and b/i686/system/lib64/libc++.so differ diff --git a/i686/system/lib64/libc.so b/i686/system/lib64/libc.so new file mode 100644 index 0000000..90e3fea Binary files /dev/null and b/i686/system/lib64/libc.so differ diff --git a/i686/system/lib64/libc_malloc_debug.so b/i686/system/lib64/libc_malloc_debug.so new file mode 100644 index 0000000..f424b52 Binary files /dev/null and b/i686/system/lib64/libc_malloc_debug.so differ diff --git a/i686/system/lib64/libc_malloc_hooks.so b/i686/system/lib64/libc_malloc_hooks.so new file mode 100644 index 0000000..6b6aa98 Binary files /dev/null and b/i686/system/lib64/libc_malloc_hooks.so differ diff --git a/i686/system/lib64/libdl.so b/i686/system/lib64/libdl.so new file mode 100644 index 0000000..6894ba6 Binary files /dev/null and b/i686/system/lib64/libdl.so differ diff --git a/i686/system/lib64/libicuuc.so b/i686/system/lib64/libicuuc.so new file mode 100644 index 0000000..77a4592 Binary files /dev/null and b/i686/system/lib64/libicuuc.so differ diff --git a/i686/system/lib64/liblog.so b/i686/system/lib64/liblog.so new file mode 100644 index 0000000..746a7f1 Binary files /dev/null and b/i686/system/lib64/liblog.so differ diff --git a/i686/system/lib64/libm.so b/i686/system/lib64/libm.so new file mode 100644 index 0000000..4c6d8c5 Binary files /dev/null and b/i686/system/lib64/libm.so differ diff --git a/i686/system/lib64/libnetd_client.so b/i686/system/lib64/libnetd_client.so new file mode 100644 index 0000000..8bbcbc9 Binary files /dev/null and b/i686/system/lib64/libnetd_client.so differ diff --git a/i686/system/usr/icu/icudt60l.dat b/i686/system/usr/icu/icudt60l.dat new file mode 100644 index 0000000..0d1232a Binary files /dev/null and b/i686/system/usr/icu/icudt60l.dat differ diff --git a/i686/system/usr/share/zoneinfo/tzdata b/i686/system/usr/share/zoneinfo/tzdata new file mode 100644 index 0000000..5c17a8b Binary files /dev/null and b/i686/system/usr/share/zoneinfo/tzdata differ diff --git a/i686/system/usr/share/zoneinfo/tzlookup.xml b/i686/system/usr/share/zoneinfo/tzlookup.xml new file mode 100644 index 0000000..43dfb98 --- /dev/null +++ b/i686/system/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 + + + diff --git a/run-x86_64.sh b/run-x86_64.sh new file mode 120000 index 0000000..e0e6347 --- /dev/null +++ b/run-x86_64.sh @@ -0,0 +1 @@ +run.sh \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..8755fd4 --- /dev/null +++ b/run.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +if [ "$(basename "$0")" = "run-x86_64.sh" ]; then + CONTAINER_NAME="termux-x86_64" + DOCKER_IMAGE_NAME="xeffyr/termux:x86_64" +else + CONTAINER_NAME="termux-i686" + DOCKER_IMAGE_NAME="xeffyr/termux:latest" +fi + +docker start "$CONTAINER_NAME" > /dev/null 2> /dev/null || { + echo "Creating new container..." + docker run \ + --detach \ + --name "$CONTAINER_NAME" \ + --tty \ + "$DOCKER_IMAGE_NAME" +} + +docker exec --interactive --tty "$CONTAINER_NAME" \ + /data/data/com.termux/files/usr/bin/login diff --git a/x86_64/Dockerfile b/x86_64/Dockerfile new file mode 100644 index 0000000..d5dbae2 --- /dev/null +++ b/x86_64/Dockerfile @@ -0,0 +1,74 @@ +FROM scratch + +ENV ANDROID_DATA /data +ENV ANDROID_ROOT /system +ENV HOME /data/data/com.termux/files/home +ENV LANG en_US.UTF-8 +ENV PREFIX /data/data/com.termux/files/usr +ENV TMPDIR /data/data/com.termux/files/usr/tmp +ENV TZ UTC + +# Temporary set PATH to /system/bin so we will be able to +# bootstrap Termux environment. +ENV PATH /system/bin +SHELL ["/system/bin/sh", "-c"] + +# Bootstrapping Termux environment. +ADD https://termux.org/bootstrap-x86_64.zip /data/data/com.termux/files/bootstrap.zip +COPY x86_64/system /system +COPY common/static-dns-hosts.txt /system/etc/static-dns-hosts.txt + +WORKDIR /data/data/com.termux/files +RUN busybox mkdir usr && busybox unzip -d usr bootstrap.zip + +WORKDIR /data/data/com.termux/files/usr +RUN 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 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 + +WORKDIR / +RUN busybox mkdir -p /data/data/com.termux/files/home && \ + busybox rm -f /data/data/com.termux/files/bootstrap.zip && \ + busybox rm -f /data/data/com.termux/files/usr/SYMLINKS.txt + +# Fix permissions. +RUN 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 && \ + busybox chown 1000:1000 /system/etc/hosts /system/etc/static-dns-hosts.txt + +# Termux doesn't use these directories, but create them for compatibility +# when executing stuff like package tests. +RUN 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 + +# Switch to Termux environment. +WORKDIR /data/data/com.termux/files/home +USER 1000:1000 +ENV PATH /data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets + +# Make sure static dns list is up-to-date. +RUN /system/bin/update-static-dns + +# Install package updates. +RUN apt update && \ + yes | apt upgrade && \ + rm -f /data/data/com.termux/files/usr/var/log/apt/* + +ENTRYPOINT /data/data/com.termux/files/usr/bin/login diff --git a/x86_64/system/bin/busybox b/x86_64/system/bin/busybox new file mode 100755 index 0000000..6bc7737 Binary files /dev/null and b/x86_64/system/bin/busybox differ diff --git a/x86_64/system/bin/linker b/x86_64/system/bin/linker new file mode 100755 index 0000000..d834765 Binary files /dev/null and b/x86_64/system/bin/linker differ diff --git a/x86_64/system/bin/linker64 b/x86_64/system/bin/linker64 new file mode 100755 index 0000000..728ca6d Binary files /dev/null and b/x86_64/system/bin/linker64 differ diff --git a/x86_64/system/bin/sh b/x86_64/system/bin/sh new file mode 120000 index 0000000..c3fa810 --- /dev/null +++ b/x86_64/system/bin/sh @@ -0,0 +1 @@ +busybox \ No newline at end of file diff --git a/x86_64/system/bin/update-static-dns b/x86_64/system/bin/update-static-dns new file mode 100755 index 0000000..4b553c7 --- /dev/null +++ b/x86_64/system/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/x86_64/system/etc/hosts b/x86_64/system/etc/hosts new file mode 100644 index 0000000..0c4db27 --- /dev/null +++ b/x86_64/system/etc/hosts @@ -0,0 +1,2 @@ +127.0.0.1 localhost +::1 ip6-localhost diff --git a/x86_64/system/etc/ld.config.28.txt b/x86_64/system/etc/ld.config.28.txt new file mode 100644 index 0000000..1da5840 --- /dev/null +++ b/x86_64/system/etc/ld.config.28.txt @@ -0,0 +1,15 @@ +# +# Bionic loader config file. +# + +dir.system = /system/bin/ +dir.system = /system/xbin/ + +[system] +namespace.default.isolated = false +namespace.default.search.paths = /system/${LIB} +namespace.default.permitted.paths = /system/${LIB} +namespace.default.permitted.paths += /data +namespace.default.asan.search.paths = /system/${LIB} +namespace.default.asan.permitted.paths = /system +namespace.default.asan.permitted.paths += /data diff --git a/x86_64/system/lib/ld-android.so b/x86_64/system/lib/ld-android.so new file mode 100644 index 0000000..1591aca Binary files /dev/null and b/x86_64/system/lib/ld-android.so differ diff --git a/x86_64/system/lib/libc++.so b/x86_64/system/lib/libc++.so new file mode 100644 index 0000000..eae6a13 Binary files /dev/null and b/x86_64/system/lib/libc++.so differ diff --git a/x86_64/system/lib/libc.so b/x86_64/system/lib/libc.so new file mode 100644 index 0000000..6431384 Binary files /dev/null and b/x86_64/system/lib/libc.so differ diff --git a/x86_64/system/lib/libc_malloc_debug.so b/x86_64/system/lib/libc_malloc_debug.so new file mode 100644 index 0000000..55e29de Binary files /dev/null and b/x86_64/system/lib/libc_malloc_debug.so differ diff --git a/x86_64/system/lib/libc_malloc_hooks.so b/x86_64/system/lib/libc_malloc_hooks.so new file mode 100644 index 0000000..a462811 Binary files /dev/null and b/x86_64/system/lib/libc_malloc_hooks.so differ diff --git a/x86_64/system/lib/libdl.so b/x86_64/system/lib/libdl.so new file mode 100644 index 0000000..0972879 Binary files /dev/null and b/x86_64/system/lib/libdl.so differ diff --git a/x86_64/system/lib/libicuuc.so b/x86_64/system/lib/libicuuc.so new file mode 100644 index 0000000..99aaa1a Binary files /dev/null and b/x86_64/system/lib/libicuuc.so differ diff --git a/x86_64/system/lib/liblog.so b/x86_64/system/lib/liblog.so new file mode 100644 index 0000000..3745c98 Binary files /dev/null and b/x86_64/system/lib/liblog.so differ diff --git a/x86_64/system/lib/libm.so b/x86_64/system/lib/libm.so new file mode 100644 index 0000000..3d5dcee Binary files /dev/null and b/x86_64/system/lib/libm.so differ diff --git a/x86_64/system/lib/libnetd_client.so b/x86_64/system/lib/libnetd_client.so new file mode 100644 index 0000000..19f620a Binary files /dev/null and b/x86_64/system/lib/libnetd_client.so differ diff --git a/x86_64/system/lib64/ld-android.so b/x86_64/system/lib64/ld-android.so new file mode 100644 index 0000000..f0de289 Binary files /dev/null and b/x86_64/system/lib64/ld-android.so differ diff --git a/x86_64/system/lib64/libc++.so b/x86_64/system/lib64/libc++.so new file mode 100644 index 0000000..4318f18 Binary files /dev/null and b/x86_64/system/lib64/libc++.so differ diff --git a/x86_64/system/lib64/libc.so b/x86_64/system/lib64/libc.so new file mode 100644 index 0000000..90e3fea Binary files /dev/null and b/x86_64/system/lib64/libc.so differ diff --git a/x86_64/system/lib64/libc_malloc_debug.so b/x86_64/system/lib64/libc_malloc_debug.so new file mode 100644 index 0000000..f424b52 Binary files /dev/null and b/x86_64/system/lib64/libc_malloc_debug.so differ diff --git a/x86_64/system/lib64/libc_malloc_hooks.so b/x86_64/system/lib64/libc_malloc_hooks.so new file mode 100644 index 0000000..6b6aa98 Binary files /dev/null and b/x86_64/system/lib64/libc_malloc_hooks.so differ diff --git a/x86_64/system/lib64/libdl.so b/x86_64/system/lib64/libdl.so new file mode 100644 index 0000000..6894ba6 Binary files /dev/null and b/x86_64/system/lib64/libdl.so differ diff --git a/x86_64/system/lib64/libicuuc.so b/x86_64/system/lib64/libicuuc.so new file mode 100644 index 0000000..77a4592 Binary files /dev/null and b/x86_64/system/lib64/libicuuc.so differ diff --git a/x86_64/system/lib64/liblog.so b/x86_64/system/lib64/liblog.so new file mode 100644 index 0000000..746a7f1 Binary files /dev/null and b/x86_64/system/lib64/liblog.so differ diff --git a/x86_64/system/lib64/libm.so b/x86_64/system/lib64/libm.so new file mode 100644 index 0000000..4c6d8c5 Binary files /dev/null and b/x86_64/system/lib64/libm.so differ diff --git a/x86_64/system/lib64/libnetd_client.so b/x86_64/system/lib64/libnetd_client.so new file mode 100644 index 0000000..8bbcbc9 Binary files /dev/null and b/x86_64/system/lib64/libnetd_client.so differ diff --git a/x86_64/system/usr/icu/icudt60l.dat b/x86_64/system/usr/icu/icudt60l.dat new file mode 100644 index 0000000..0d1232a Binary files /dev/null and b/x86_64/system/usr/icu/icudt60l.dat differ diff --git a/x86_64/system/usr/share/zoneinfo/tzdata b/x86_64/system/usr/share/zoneinfo/tzdata new file mode 100644 index 0000000..5c17a8b Binary files /dev/null and b/x86_64/system/usr/share/zoneinfo/tzdata differ diff --git a/x86_64/system/usr/share/zoneinfo/tzlookup.xml b/x86_64/system/usr/share/zoneinfo/tzlookup.xml new file mode 100644 index 0000000..43dfb98 --- /dev/null +++ b/x86_64/system/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 + + +