diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index b1b1f19..d2acf2c 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -14,38 +14,52 @@ env: DOCKER_BUILDKIT: 1 jobs: - main: - runs-on: ubuntu-latest + generate: strategy: matrix: - CPU_ARCH: - - aarch64 - - arm - - i686 - - x86_64 + include: + - runner: ubuntu-24.04 + architecture: i686 + package-manager: apt + - runner: ubuntu-24.04 + architecture: x86_64 + package-manager: apt + - runner: ubuntu-24.04-arm + architecture: arm + package-manager: apt + - runner: ubuntu-24.04-arm + architecture: aarch64 + package-manager: apt + - runner: ubuntu-24.04 + architecture: i686 + package-manager: pacman + - runner: ubuntu-24.04 + architecture: x86_64 + package-manager: pacman + - runner: ubuntu-24.04-arm + architecture: arm + package-manager: pacman + - runner: ubuntu-24.04-arm + architecture: aarch64 + package-manager: pacman + runs-on: ${{ matrix.runner }} steps: + - name: Set variables + run: | + echo "TERMUX_ARCH=${{ matrix.architecture }}" >> $GITHUB_ENV + echo "TERMUX_PACKAGE_MANAGER=${{ matrix.package-manager }}" >> $GITHUB_ENV + if [ ${{ matrix.package-manager }} = apt ]; then + echo "TERMUX_DOCKER__IMAGE_NAME=termux/termux-docker" >> $GITHUB_ENV + elif [ ${{ matrix.package-manager }} = pacman ]; then + echo "TERMUX_DOCKER__IMAGE_NAME=termux/termux-docker-pacman" >> $GITHUB_ENV + fi + - name: Clone repository uses: actions/checkout@v4 - - name: Setup binfmt_misc - if: (matrix.CPU_ARCH == 'aarch64') || (matrix.CPU_ARCH == 'arm') - run: docker run --rm --privileged aptman/qus -s -- -p aarch64 arm - - - name: Build images - run: | - case '${{ matrix.CPU_ARCH }}' in - arm) SYSTEM_TYPE=arm; PLATFORM_TAG="linux/arm/v7";; - aarch64) SYSTEM_TYPE=arm; PLATFORM_TAG="linux/arm64";; - i686) SYSTEM_TYPE=x86; PLATFORM_TAG="linux/386";; - *) SYSTEM_TYPE=x86; PLATFORM_TAG="linux/amd64";; - esac - docker buildx build -t \ - termux/termux-docker:${{ matrix.CPU_ARCH }} \ - --platform "$PLATFORM_TAG" \ - --build-arg BOOTSTRAP_ARCH=${{ matrix.CPU_ARCH }} \ - --build-arg SYSTEM_TYPE="${SYSTEM_TYPE}" \ - . + - name: Build image + run: ./generate.sh - name: Login to Docker Hub if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'termux/termux-docker' @@ -57,28 +71,26 @@ jobs: - name: Push to Docker Hub if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'termux/termux-docker' run: | - docker push termux/termux-docker:${{ matrix.CPU_ARCH }} - if [ ${{ matrix.CPU_ARCH }} = i686 ]; then - docker tag termux/termux-docker:i686 termux/termux-docker:latest - docker push termux/termux-docker:latest + docker push ${{ env.TERMUX_DOCKER__IMAGE_NAME }}:${{ env.TERMUX_ARCH }} + if [ ${{ env.TERMUX_ARCH }} = x86_64 ]; then + docker push ${{ env.TERMUX_DOCKER__IMAGE_NAME }}:latest fi - name: Export container as tar archive if: always() run: | docker run \ - --privileged \ - --name termux-docker-${{ matrix.CPU_ARCH }} \ - termux/termux-docker:${{ matrix.CPU_ARCH }} \ + --name termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }} \ + ${{ env.TERMUX_DOCKER__IMAGE_NAME }}:${{ env.TERMUX_ARCH }} \ uname -a - docker stop termux-docker-${{ matrix.CPU_ARCH }} - docker export -o termux-docker-${{ matrix.CPU_ARCH }}.tar \ - termux-docker-${{ matrix.CPU_ARCH }} - sha256sum termux-docker-${{ matrix.CPU_ARCH }}.tar + docker stop termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }} + docker export -o termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }}.tar \ + termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }} + sha256sum termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }}.tar - name: Store tar archive if: always() uses: actions/upload-artifact@v4 with: - name: termux-docker-${{ matrix.CPU_ARCH }}-${{ github.sha }} - path: termux-docker-${{ matrix.CPU_ARCH }}.tar + name: termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }}-${{ github.sha }} + path: termux-docker-${{ env.TERMUX_PACKAGE_MANAGER }}-${{ env.TERMUX_ARCH }}.tar diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5a2fa9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +termux-docker-rootfs diff --git a/Dockerfile b/Dockerfile index 54e92f3..abbcee7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,90 +2,73 @@ # Bootstrap Termux environment. FROM scratch AS bootstrap -ARG BOOTSTRAP_VERSION=2023.02.19-r1%2Bapt-android-7 -ARG BOOTSTRAP_ARCH=i686 -ARG SYSTEM_TYPE=x86 +ARG TERMUX_DOCKER__ROOTFS +ARG TERMUX__PREFIX +ARG TERMUX__CACHE_DIR -# Docker uses /bin/sh by default, but we don't have it currently. -SHELL ["/system/bin/sh", "-c"] -ENV PATH /system/bin +# Install generated rootfs containing: +# - termux bootstrap +# - aosp-libs (bionic libc, linker, boringssl, zlib, libicuuc, debuggerd) +# - aosp-utils (toybox, mksh, iputils) +# - libandroid-stub +# - dnsmasq +# Since /system is now a symbolic link to $PREFIX/opt/aosp, +# which has contents that can be updated by the system user via apt, +# the entire rootfs is now owned by the system user (1000:1000). +COPY --chown=1000:1000 ${TERMUX_DOCKER__ROOTFS} / -# Copy libc, linker and few utilities. -COPY /system/$SYSTEM_TYPE /system +# Docker uses /bin/sh by default, but we don't have it. +ENV PATH=/system/bin +SHELL ["sh", "-c"] -# Copy entrypoint script. -COPY /entrypoint.sh /entrypoint.sh -COPY /entrypoint_root.sh /entrypoint_root.sh - -# Extract bootstrap archive and create symlinks. -ADD https://github.com/termux/termux-packages/releases/download/bootstrap-$BOOTSTRAP_VERSION/bootstrap-$BOOTSTRAP_ARCH.zip /bootstrap.zip -RUN busybox mkdir -p /data/data/com.termux/files && \ - cd /data/data/com.termux/files && \ - busybox mkdir ../cache ./usr ./home && \ - busybox unzip -d usr /bootstrap.zip && \ - busybox rm /bootstrap.zip && \ - cd ./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 }'); \ - busybox ln -s "$dest" "$link"; \ - done && \ - busybox rm SYMLINKS.txt && \ - busybox ln -s /data/data/com.termux/files/usr /usr && \ - busybox ln -s /data/data/com.termux/files/usr/bin /bin && \ - busybox ln -s /data/data/com.termux/files/usr/tmp /tmp - -# Link some utilities to busybox. -# Some utilities in $PREFIX are actually a wrapper of the same binary -# from /system/bin. See termux-tools/build.sh#L29. -RUN for tool in df mount ping ping6 su top umount; do \ - busybox ln -s /system/bin/busybox /system/bin/$tool; \ - done - -# Set ownership and file access modes: -# * User content is owned by 1000:1000. -# * Termux file modes are set only for user. -# * Rest is owned by root and has 755/644 modes. -RUN busybox chown -Rh 0:0 /system && \ - busybox chown -Rh 1000:1000 /data/data/com.termux && \ - busybox ln -s /system/etc/passwd /etc/passwd && \ - busybox ln -s /system/etc/group /etc/group && \ - 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 find /data -type d -exec busybox chmod 755 "{}" \; && \ - busybox find /data/data/com.termux/files -type f -o -type d -exec busybox chmod g-rwx,o-rwx "{}" \; && \ - cd /data/data/com.termux/files/usr && \ - busybox find ./bin ./lib/apt ./libexec -type f -exec busybox chmod 700 "{}" \; - -# Install updates and cleanup when not building for arm. -ENV PATH /data/data/com.termux/files/usr/bin -RUN if [ ${SYSTEM_TYPE} = 'arm' ]; then exit; else \ - /system/bin/mksh -T /dev/ptmx -c "/system/bin/dnsmasq -u root -g root --pid-file /dnsmasq.pid" && sleep 1 && \ - su - system -c "/data/data/com.termux/files/usr/bin/apt update" && \ - su - system -c "/data/data/com.termux/files/usr/bin/apt upgrade -o Dpkg::Options::=--force-confnew -yq" && \ - rm -rf /data/data/com.termux/files/usr/var/lib/apt/* && \ - rm -rf /data/data/com.termux/files/usr/var/log/apt/* && \ - rm -rf /data/data/com.termux/cache/apt/* ;\ - fi +# Install updates and cleanup +# Start dnsmasq to resolve hostnames, and, +# for some reason the -c argument of toybox-su is not working, +# so this odd-looking script forces the update process +# to work using the -s argument of toybox-su instead, which is working. +RUN sh -T /dev/ptmx -c "$TERMUX__PREFIX/bin/dnsmasq -u root -g root --pid-file=/dnsmasq.pid" && \ + sleep 1 && \ + echo '#!/system/bin/sh' > /update.sh && \ + echo "PATH=$TERMUX__PREFIX/bin" >> /update.sh && \ + echo "source $TERMUX__PREFIX/bin/termux-setup-package-manager" >> /update.sh && \ + echo 'if [ "$TERMUX_APP_PACKAGE_MANAGER" = "apt" ]; then' >> /update.sh && \ + echo 'apt update' >> /update.sh && \ + echo 'apt upgrade -o Dpkg::Options::=--force-confnew -y' >> /update.sh && \ + echo 'elif [ "$TERMUX_APP_PACKAGE_MANAGER" = "pacman" ]; then' >> /update.sh && \ + echo 'pacman-key --init' >> /update.sh && \ + echo 'pacman-key --populate' >> /update.sh && \ + echo 'pacman -Syyu --noconfirm' >> /update.sh && \ + echo 'fi' >> /update.sh && \ + chmod +x /update.sh && \ + su system -s /update.sh && \ + rm -rf /update.sh \ + "${TERMUX__PREFIX}"/var/lib/apt/* \ + "${TERMUX__PREFIX}"/var/log/apt/* \ + "${TERMUX__CACHE_DIR}"/apt/* \ + "${TERMUX__PREFIX}"/var/cache/pacman/pkg/* \ + "${TERMUX__PREFIX}"/var/log/pacman.log ############################################################################## # Create final image. 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 PATH /data/data/com.termux/files/usr/bin -ENV PREFIX /data/data/com.termux/files/usr -ENV TMPDIR /data/data/com.termux/files/usr/tmp -ENV TZ UTC +ARG TERMUX__PREFIX +ARG TERMUX__HOME + +ENV ANDROID_DATA=/data +ENV ANDROID_ROOT=/system +ENV HOME=${TERMUX__HOME} +ENV LANG=en_US.UTF-8 +ENV PATH=${TERMUX__PREFIX}/bin +ENV PREFIX=${TERMUX__PREFIX} +ENV TMPDIR=${TERMUX__PREFIX}/tmp +ENV TZ=UTC +ENV TERM=xterm COPY --from=bootstrap / / -WORKDIR /data/data/com.termux/files/home -SHELL ["/data/data/com.termux/files/usr/bin/sh", "-c"] +WORKDIR ${TERMUX__HOME} +SHELL ["sh", "-c"] ENTRYPOINT ["/entrypoint.sh"] -CMD ["/data/data/com.termux/files/usr/bin/login"] +CMD ["login"] diff --git a/README.md b/README.md index 0f0b99f..ecbc9f1 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,15 @@ normal Termux installation. docker run -it termux/termux-docker:latest ``` -When using the tag `latest`, container will be 32 bit (i686 architecture). +When using the tag `latest`, container will be 64 bit (x86_64 architecture). Other architecture can be installed using a different tags. Available tags: - `aarch64` - `arm` -- `i686` (`latest`) -- `x86_64` +- `i686` +- `x86_64` (`latest`) If architecture is not compatible with host, the additional setup will be needed. Read this document further to learn how you can run containers @@ -39,7 +39,7 @@ of incompatible CPU architecture. The initial user of container must be root. Otherwise DNS will be broken because of `dnsmasq` server failure. -### Running ARM containers on x86 host +### Running ARM containers In order to run AArch64 container on x86(64) host, you need to setup QEMU emulator through binfmt_misc. This can be easily done by one @@ -49,9 +49,12 @@ command: docker run --rm --privileged aptman/qus -s -- -p aarch64 arm ``` -Note that AArch64 and ARM containers work properly only in privileged -mode. If you want your containers to have standard privileges, a custom -seccomp profile is required. +Note that AArch64 and ARM containers sometimes work properly only in privileged +mode, even on some real ARM devices. If you want your containers to have standard privileges, a custom +seccomp profile or a custom build of Docker might be required. The custom build +of Docker limits the customizations to purely what is necessary for +the `personality()` system call, leaving the security settings of all other system +calls untouched. Variant with privileged container: @@ -65,6 +68,25 @@ Variant with seccomp unconfined profile: docker run -it --security-opt seccomp:unconfined termux/termux-docker:aarch64 ``` +Variant with custom build of Docker: + +> [!NOTE] +> Example with Debian trixie `armhf` host and the `docker.io` package. Assumes that [`deb-src` URIs](https://wiki.debian.org/Packaging/SourcePackage?action=show&redirect=SourcePackage#With_apt-get_source) and the [`devscripts` package](https://wiki.debian.org/Packaging#Suggested_tools_to_create_an_environment_for_packaging) are already installed, and that the current user is a member of the `docker` group. + +```.sh +sudo apt build-dep docker.io +apt source docker.io +cp /path/to/termux-docker/custom-docker-with-unrestricted-personality.patch docker.io-*/debian/patches/ +echo 'custom-docker-with-unrestricted-personality.patch' >> docker.io-*/debian/patches/series +cd docker.io-*/ +DEB_BUILD_OPTIONS=nocheck debuild -b -uc -us +rm ../golang* +sudo apt install ../*.deb +docker run -it termux/termux-docker:arm +``` + +You might then want to temporarily use `sudo apt-mark hold docker.io` to ensure the package is not automatically upgraded, causing termux-docker to stop working on the device in the future, but **not upgrading can be a security risk**. If using the patch, it is recommended to patch and recompile the Docker daemon after every upgrade. + ### Non-interactive execution of commands You can run commands in non-interactive mode. Just append them to Docker @@ -99,20 +121,20 @@ docker run -it --entrypoint /entrypoint_root.sh termux/termux-docker:latest Docker: ```.sh -./build-all.sh +./generate.sh ``` Podman: ```.sh -./build-all.sh --podman +./generate.sh --podman ``` ## Known issues There a number of known issues which may not be resolved: -* ARM containers may require a custom seccomp profile to remove restrictions from +* ARM containers might require a custom seccomp profile or custom build of Docker to remove restrictions from the `personality()` system call. * When running certain multi threaded program in 32bit containers, the PIDs can diff --git a/build-all.sh b/build-all.sh deleted file mode 100755 index 085f4ab..0000000 --- a/build-all.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -set -e - -OCI="docker" -OCI_ARG="" -case $1 in - -p|--podman) OCI="podman" ; OCI_ARG="--format docker" ;; -esac - -if [ -n "${TERMUX_DOCKER_USE_SUDO-}" ]; then - SUDO="sudo" -else - SUDO="" -fi - -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 \ - ${OCI_ARG} \ - -t 'termux/termux-docker:'"$arch" \ - -f Dockerfile \ - --build-arg BOOTSTRAP_ARCH="$arch" \ - --build-arg SYSTEM_TYPE="$SYSTEM_TYPE" \ - . - if [ "${1-}" = "publish" ]; then - $SUDO $OCI push 'termux/termux-docker:'"$arch" - fi -done - -if [ "$SYSTEM_TYPE" = "x86" ]; then - $SUDO $OCI tag termux/termux-docker:i686 termux/termux-docker:latest - if [ "${1-}" = "publish" ]; then - $SUDO $OCI push 'termux/termux-docker:latest' - fi -fi diff --git a/custom-docker-with-unrestricted-personality.patch b/custom-docker-with-unrestricted-personality.patch new file mode 100644 index 0000000..7948022 --- /dev/null +++ b/custom-docker-with-unrestricted-personality.patch @@ -0,0 +1,314 @@ +This removes all restrictions from the personality() system call from within Docker, and +is only necessary on some specific devices, including some ARM devices but not all ARM devices, +and only when the --privileged and --security-opt arguments are either not working or not desired, +which sometimes happens. This patch is designed for the docker.io package version 26.1.5 in +Debian trixie: https://packages.debian.org/trixie/docker.io, but also works when rebased on other +versions of Docker. + +--- a/engine/oci/fixtures/default-old-format.json ++++ b/engine/oci/fixtures/default-old-format.json +@@ -824,38 +824,7 @@ + { + "name": "personality", + "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 0, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "name": "personality", +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 8, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "name": "personality", +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 4294967295, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] ++ "args": [] + }, + { + "name": "pipe", +--- a/engine/oci/fixtures/default.json ++++ b/engine/oci/fixtures/default.json +@@ -403,82 +403,7 @@ + "personality" + ], + "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 0, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ], +- "comment": "", +- "includes": {}, +- "excludes": {} +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 8, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ], +- "comment": "", +- "includes": {}, +- "excludes": {} +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 131072, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ], +- "comment": "", +- "includes": {}, +- "excludes": {} +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 131080, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ], +- "comment": "", +- "includes": {}, +- "excludes": {} +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 4294967295, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ], ++ "args": [], + "comment": "", + "includes": {}, + "excludes": {} +--- a/engine/profiles/seccomp/default.json ++++ b/engine/profiles/seccomp/default.json +@@ -441,65 +441,7 @@ + "personality" + ], + "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 8, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 131072, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 131080, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "names": [ +- "personality" +- ], +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 4294967295, +- "op": "SCMP_CMP_EQ" +- } +- ] ++ "args": [] + }, + { + "names": [ +--- a/engine/profiles/seccomp/default_linux.go ++++ b/engine/profiles/seccomp/default_linux.go +@@ -435,65 +435,6 @@ func DefaultProfile() *Seccomp { + LinuxSyscall: specs.LinuxSyscall{ + Names: []string{"personality"}, + Action: specs.ActAllow, +- Args: []specs.LinuxSeccompArg{ +- { +- Index: 0, +- Value: 0x0, +- Op: specs.OpEqualTo, +- }, +- }, +- }, +- }, +- { +- LinuxSyscall: specs.LinuxSyscall{ +- Names: []string{"personality"}, +- Action: specs.ActAllow, +- Args: []specs.LinuxSeccompArg{ +- { +- Index: 0, +- Value: 0x0008, +- Op: specs.OpEqualTo, +- }, +- }, +- }, +- }, +- { +- LinuxSyscall: specs.LinuxSyscall{ +- Names: []string{"personality"}, +- Action: specs.ActAllow, +- Args: []specs.LinuxSeccompArg{ +- { +- Index: 0, +- Value: 0x20000, +- Op: specs.OpEqualTo, +- }, +- }, +- }, +- }, +- { +- LinuxSyscall: specs.LinuxSyscall{ +- Names: []string{"personality"}, +- Action: specs.ActAllow, +- Args: []specs.LinuxSeccompArg{ +- { +- Index: 0, +- Value: 0x20008, +- Op: specs.OpEqualTo, +- }, +- }, +- }, +- }, +- { +- LinuxSyscall: specs.LinuxSyscall{ +- Names: []string{"personality"}, +- Action: specs.ActAllow, +- Args: []specs.LinuxSeccompArg{ +- { +- Index: 0, +- Value: 0xffffffff, +- Op: specs.OpEqualTo, +- }, +- }, + }, + }, + { +--- a/engine/profiles/seccomp/fixtures/default-old-format.json ++++ b/engine/profiles/seccomp/fixtures/default-old-format.json +@@ -824,38 +824,7 @@ + { + "name": "personality", + "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 0, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "name": "personality", +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 8, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] +- }, +- { +- "name": "personality", +- "action": "SCMP_ACT_ALLOW", +- "args": [ +- { +- "index": 0, +- "value": 4294967295, +- "valueTwo": 0, +- "op": "SCMP_CMP_EQ" +- } +- ] ++ "args": [] + }, + { + "name": "pipe", diff --git a/entrypoint.sh b/entrypoint.sh index 1dde2a5..4e56612 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,27 +1,23 @@ #!/system/bin/sh -if [ "$(id -u)" = "0" ]; then - if [ -z "$(/system/bin/busybox pidof dnsmasq)" ]; then - /system/bin/mksh -T /dev/ptmx -c "/system/bin/dnsmasq -u root -g root --pid-file /dnsmasq.pid" >/dev/null 2>&1 - sleep 1 - if [ -z "$(/system/bin/busybox pidof dnsmasq)" ]; then - echo "[!] Failed to start dnsmasq, host name resolution may fail." >&2 - fi - fi -else +if [ $# -lt 1 ]; then + set -- login +fi + +if [ "$(id -u)" != "0" ]; then echo "[!] Container is running as non-root, unable to start dnsmasq. DNS will be unavailable." >&2 - if [ $# -ge 1 ]; then - exec "$@" - else - exec /data/data/com.termux/files/usr/bin/login - fi + exec "$@" fi -if [ $# -lt 1 ]; then - set -- /data/data/com.termux/files/usr/bin/login +if [ -z "$(pidof dnsmasq)" ]; then + /system/bin/sh -T /dev/ptmx -c "dnsmasq -u root -g root --pid-file=/dnsmasq.pid" >/dev/null 2>&1 + sleep 1 + if [ -z "$(pidof dnsmasq)" ]; then + echo "[!] Failed to start dnsmasq, host name resolution may fail." >&2 + fi fi -exec /system/bin/su -s /data/data/com.termux/files/usr/bin/env system -- \ +exec /system/bin/su -s "$PREFIX/bin/env" system -- \ -i \ ANDROID_DATA="$ANDROID_DATA" \ ANDROID_ROOT="$ANDROID_ROOT" \ @@ -30,5 +26,6 @@ exec /system/bin/su -s /data/data/com.termux/files/usr/bin/env system -- \ PATH="$PATH" \ PREFIX="$PREFIX" \ TMPDIR="$TMPDIR" \ - TZ=UTC \ + TZ="$TZ" \ + TERM="$TERM" \ "$@" diff --git a/entrypoint_root.sh b/entrypoint_root.sh index 1b20f5b..97d0ee8 100755 --- a/entrypoint_root.sh +++ b/entrypoint_root.sh @@ -1,20 +1,20 @@ #!/system/bin/sh +if [ $# -lt 1 ]; then + set -- login +fi + if [ "$(id -u)" != "0" ]; then echo "Failure: /entrypoint_root.sh must be started as root." >&2 exit 1 fi -if [ -z "$(/system/bin/busybox pidof dnsmasq)" ]; then - /system/bin/mksh -T /dev/ptmx -c "/system/bin/dnsmasq -u root -g root --pid-file /dnsmasq.pid" >/dev/null 2>&1 +if [ -z "$(pidof dnsmasq)" ]; then + /system/bin/sh -T /dev/ptmx -c "dnsmasq -u root -g root --pid-file=/dnsmasq.pid" >/dev/null 2>&1 sleep 1 - if [ -z "$(/system/bin/busybox pidof dnsmasq)" ]; then + if [ -z "$(pidof dnsmasq)" ]; then echo "[!] Failed to start dnsmasq, host name resolution may fail." >&2 fi fi -if [ $# -ge 1 ]; then - exec "$@" -else - exec /data/data/com.termux/files/usr/bin/login -fi +exec "$@" diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000..5c2551c --- /dev/null +++ b/generate.sh @@ -0,0 +1,463 @@ +#!/usr/bin/env bash + +set -eu + +cd "$(dirname "$(realpath "$0")")" + +OCI="docker" +OCI_ARG="build" +case "${1-}" in + -p|--podman) OCI="podman" ; OCI_ARG+=" --format docker" ;; +esac + +if [ -n "${TERMUX_DOCKER_USE_SUDO-}" ]; then + SUDO="sudo" +else + SUDO="" +fi + +case "$(uname -s)" in + Linux*) BUILD_MACHINE=Linux;; + *BSD|Darwin*) BUILD_MACHINE=BSD;; + *) BUILD_MACHINE="UNKNOWN:$(uname -s)" +esac +echo "[*] Operating System used to build termux-docker image: ${BUILD_MACHINE}" + +# This determines the architecture of the image being built, +# but should also be an architecture that is compatible with the computer +# running this script, so that the RUN step in the Dockerfile +# can be used to ensure the packages preinstalled in the image are up-to-date. +if [ -z "${TERMUX_ARCH-}" ]; then + TERMUX_ARCH="$(uname -m)" +fi + +case "$TERMUX_ARCH" in + aarch64|arm64) TERMUX_ARCH="aarch64" PLATFORM_TAG="linux/arm64" ;; + arm*) TERMUX_ARCH="arm" PLATFORM_TAG="linux/arm/v7" ;; + x86_64|amd64) TERMUX_ARCH="x86_64" PLATFORM_TAG="linux/amd64" ;; + i686) TERMUX_ARCH="i686" PLATFORM_TAG="linux/386" ;; + *) + echo "error: ${TERMUX_ARCH} is not a valid architecture!" + exit 1 + ;; +esac + +PLATFORM_ARG="" +if [ "${OCI}" = "docker" ] && $OCI --help 2>&1 | grep -q buildx; then + OCI_ARG="buildx ${OCI_ARG}" + PLATFORM_ARG="--load --platform ${PLATFORM_TAG}" +fi + +: "${TERMUX_PACKAGE_MANAGER:="apt"}" +case "${TERMUX_PACKAGE_MANAGER}" in + apt) + TERMUX_DOCKER__IMAGE_NAME="termux/termux-docker" + TERMUX_DOCKER__BOOTSTRAP_VERSION="2023.02.19-r1%2Bapt-android-7" + TERMUX_DOCKER__BOOTSTRAP_SRCURL="https://github.com/termux/termux-packages/releases/download/bootstrap-${TERMUX_DOCKER__BOOTSTRAP_VERSION}/bootstrap-${TERMUX_ARCH}.zip" + declare -A REPO_BASE_URLS=( + ["main"]="https://packages-cf.termux.dev/apt/termux-main/dists/stable/main" + ["root"]="https://packages-cf.termux.dev/apt/termux-root/dists/root/stable" + ) + ;; + pacman) + TERMUX_DOCKER__IMAGE_NAME="termux/termux-docker-pacman" + TERMUX_DOCKER__BOOTSTRAP_VERSION="2025.08.03-r1%2Bpacman-android-7" + TERMUX_DOCKER__BOOTSTRAP_SRCURL="https://github.com/termux-pacman/termux-packages/releases/download/bootstrap-${TERMUX_DOCKER__BOOTSTRAP_VERSION}/bootstrap-${TERMUX_ARCH}.zip" + declare -A REPO_BASE_URLS=( + ["main"]="https://service.termux-pacman.dev/main" + ["root"]="https://service.termux-pacman.dev/root" + ) + ;; + *) + echo "Unsupported package manager \"${TERMUX_PACKAGE_MANAGER}\". Only 'apt' and 'pacman' are supported." + exit 1 + ;; +esac + +# packages that are extracted, along with their dependencies, +# on top of the bootstrap to form the termux-docker rootfs. +# libandroid-stub is described in multiple places as existing explicitly +# for use with termux-docker, so pulling it in here. +# dnsmasq will not get automatically updated during 'pkg upgrade' by the user +# after termux-docker has been installed, since root-repo is not installed for now +# to imply that other root-packages are not directly supported, +# but aosp-utils, aosp-libs and libandroid-stub will get automatically updated +# by user-invoked instances of 'pkg upgrade' since they are in the main repository. +TERMUX_DOCKER__DEPENDS="aosp-utils, libandroid-stub, dnsmasq" +TERMUX_DOCKER__BUILD_DEPENDS="ar, awk, curl, docker, grep, gzip, find, sed, tar, xargs, xz, unzip, jq" +TERMUX_APP__PACKAGE_NAME="com.termux" +TERMUX_APP__DATA_DIR="/data/data/$TERMUX_APP__PACKAGE_NAME" +TERMUX__PREFIX_SUBDIR="usr" +TERMUX__HOME_SUBDIR="home" +TERMUX__CACHE_SUBDIR="cache" +TERMUX__ROOTFS="${TERMUX_APP__DATA_DIR}/files" +TERMUX__PREFIX="${TERMUX__ROOTFS}/${TERMUX__PREFIX_SUBDIR}" +TERMUX__HOME="${TERMUX__ROOTFS}/${TERMUX__HOME_SUBDIR}" +TERMUX__CACHE_DIR="${TERMUX_APP__DATA_DIR}/${TERMUX__CACHE_SUBDIR}" +TERMUX_DOCKER__ROOTFS="$(pwd)/termux-docker-rootfs" +TERMUX_DOCKER__TMPDIR="$(mktemp -d "/tmp/termux-docker-tmp.XXXXXXXX")" +TERMUX_DOCKER__PKGDIR="${TERMUX_DOCKER__TMPDIR}/packages-${TERMUX_ARCH}" +unset TERMUX_DOCKER__DEPENDS_ARRAY +unset TERMUX_DOCKER__BUILD_DEPENDS_ARRAY +IFS=, read -a TERMUX_DOCKER__DEPENDS_ARRAY <<< "${TERMUX_DOCKER__DEPENDS// /}" +IFS=, read -a TERMUX_DOCKER__BUILD_DEPENDS_ARRAY <<< "${TERMUX_DOCKER__BUILD_DEPENDS// /}" +unset PACKAGE_METADATA +unset PACKAGE_URLS +declare -A PACKAGE_METADATA +declare -A PACKAGE_URLS +AR=ar +TAR=tar + +# Check for some important utilities that may not be available for +# some reason. +for cmd in "${TERMUX_DOCKER__BUILD_DEPENDS_ARRAY[@]}"; do + if [ "$cmd" = "ar" ] && [ -n "$(command -v gar)" ]; then + AR=gar + continue + fi + if [ "$cmd" = "tar" ] && [ -n "$(command -v gtar)" ]; then + TAR=gtar + continue + fi + if [ -z "$(command -v $cmd)" ]; then + echo "[!] Utility '$cmd' is not available in PATH." + exit 1 + fi +done + +# read_package_lists and pull_package are based on their implementations +# in https://github.com/termux/termux-packages/blob/7a95ee9c2d0ee05e370d1cf951d9f75b4aef8677/scripts/generate-bootstraps.sh + +# Download package lists from remote repository. +# Actually, there 2 lists can be downloaded: one architecture-independent and +# one for architecture specified as '$1' argument. That depends on repository. +# If repository has been created using "aptly", then architecture-independent +# list is not available. +read_package_lists_apt() { + local architecture + for architecture in all "${TERMUX_ARCH}"; do + for repository in "${!REPO_BASE_URLS[@]}"; do + REPO_BASE_URL="${REPO_BASE_URLS[${repository}]}" + if [ ! -e "${TERMUX_DOCKER__TMPDIR}/${repository}-packages.${architecture}" ]; then + echo "[*] Downloading ${repository} package list for architecture '${architecture}'..." + if ! curl --fail --location \ + --output "${TERMUX_DOCKER__TMPDIR}/${repository}-packages.${architecture}" \ + "${REPO_BASE_URL}/binary-${architecture}/Packages"; then + if [ "$architecture" = "all" ]; then + echo "[!] Skipping architecture-independent package list as not available..." + continue + fi + fi + echo >> "${TERMUX_DOCKER__TMPDIR}/${repository}-packages.${architecture}" + fi + + echo "[*] Reading ${repository} package list for '${architecture}'..." + while read -r -d $'\xFF' package; do + if [ -n "$package" ]; then + local package_name + package_name=$(echo "$package" | grep -i "^Package:" | awk '{ print $2 }') + package_url="$(dirname "$(dirname "$(dirname "${REPO_BASE_URL}")")")"/"$(echo "${package}" | \ + grep -i "^Filename:" | awk '{ print $2 }')" + + if [ -z "${PACKAGE_METADATA["$package_name"]-}" ]; then + PACKAGE_METADATA["$package_name"]="$package" + PACKAGE_URLS["$package_name"]="$package_url" + else + local prev_package_ver cur_package_ver + cur_package_ver=$(echo "$package" | grep -i "^Version:" | awk '{ print $2 }') + prev_package_ver=$(echo "${PACKAGE_METADATA["$package_name"]}" | grep -i "^Version:" | awk '{ print $2 }') + + # If package has multiple versions, make sure that our metadata + # contains the latest one. + if [ "$(echo -e "${prev_package_ver}\n${cur_package_ver}" | sort -rV | head -n1)" = "${cur_package_ver}" ]; then + PACKAGE_METADATA["$package_name"]="$package" + PACKAGE_URLS["$package_name"]="$package_url" + fi + fi + fi + done < <(sed -e "s/^$/\xFF/g" "${TERMUX_DOCKER__TMPDIR}/${repository}-packages.${architecture}") + done + done +} + +# Download specified package, its dependencies and then extract *.deb files to the root +pull_package_apt() { + local package_name=$1 + local package_url="${PACKAGE_URLS[${package_name}]}" + local package_tmpdir="${TERMUX_DOCKER__PKGDIR}/${package_name}" + mkdir -p "$package_tmpdir" + + local package_dependencies + package_dependencies=$( + while read -r token; do + echo "$token" | cut -d'|' -f1 | sed -E 's@\(.*\)@@' + done < <(echo "${PACKAGE_METADATA[${package_name}]}" | grep -i "^Depends:" | sed -E 's@^[Dd]epends:@@' | tr ',' '\n') + ) + + # Recursively handle dependencies. + if [ -n "$package_dependencies" ]; then + local dep + for dep in $package_dependencies; do + if [ ! -e "${TERMUX_DOCKER__PKGDIR}/${dep}" ]; then + pull_package_apt "$dep" + fi + done + unset dep + fi + + if [ ! -e "$package_tmpdir/package.deb" ]; then + echo "[*] Downloading '$package_name'..." + curl --fail --location --output "$package_tmpdir/package.deb" "$package_url" + + echo "[*] Extracting '$package_name'..." + (cd "$package_tmpdir" + $AR x package.deb + + # data.tar may have extension different from .xz + if [ -f "./data.tar.xz" ]; then + data_archive="data.tar.xz" + elif [ -f "./data.tar.gz" ]; then + data_archive="data.tar.gz" + else + echo "No data.tar.* found in '$package_name'." + exit 1 + fi + + # Do same for control.tar. + if [ -f "./control.tar.xz" ]; then + control_archive="control.tar.xz" + elif [ -f "./control.tar.gz" ]; then + control_archive="control.tar.gz" + else + echo "No control.tar.* found in '$package_name'." + exit 1 + fi + + # Extract files. + $TAR xf "$data_archive" -C "$TERMUX_DOCKER__ROOTFS" + + # Register extracted files. + $TAR tf "$data_archive" | sed -E -e 's@^\./@/@' -e 's@^/$@/.@' -e 's@^([^./])@/\1@' > "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/dpkg/info/${package_name}.list" + + # Generate checksums (md5). + $TAR xf "$data_archive" + find data -type f -print0 | xargs -0 -r md5sum | sed 's@^\.$@@g' > "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/dpkg/info/${package_name}.md5sums" + + # Extract metadata. + $TAR xf "$control_archive" + { + cat control + echo "Status: install ok installed" + echo + } >> "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/dpkg/status" + + # Additional data: conffiles & scripts + for file in conffiles postinst postrm preinst prerm; do + if [ -f "${PWD}/${file}" ]; then + cp "$file" "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/dpkg/info/${package_name}.${file}" + fi + done + ) + fi +} + +read_package_lists_pacman() { + local repository + for repository in "${!REPO_BASE_URLS[@]}"; do + REPO_BASE_URL="${REPO_BASE_URLS[${repository}]}" + PATH_DB_PACKAGES="${TERMUX_DOCKER__TMPDIR}/${repository}_${TERMUX_ARCH}.json" + if [ ! -e "${PATH_DB_PACKAGES}" ]; then + echo "[*] Downloading ${repository} package list for architecture '${TERMUX_ARCH}'..." + curl --fail --location \ + --output "${PATH_DB_PACKAGES}" \ + "${REPO_BASE_URL}/${TERMUX_ARCH}/${repository}.json" + fi + done +} + +read_db_packages_pacman() { + jq -r '."'${package_name}'"."'${1}'" | if type == "array" then .[] else . end' "${PATH_DB_PACKAGES}" +} + +print_desc_package_pacman() { + echo -e "%${1}%\n${2}\n" +} + +# Download specified package, its dependencies and then extract *.pkg.tar.xz files to the root +pull_package_pacman() { + local package_name="$1" local package_filename="" local package_url="" repository + for repository in "${!REPO_BASE_URLS[@]}"; do + REPO_BASE_URL="${REPO_BASE_URLS[${repository}]}" + PATH_DB_PACKAGES="${TERMUX_DOCKER__TMPDIR}/${repository}_${TERMUX_ARCH}.json" + local package_filename=$(read_db_packages_pacman "FILENAME") + package_url="${REPO_BASE_URL}/${TERMUX_ARCH}/${package_filename}" + if curl -sSf "${package_url}" >/dev/null 2>&1; then + break + fi + done + local package_tmpdir="${TERMUX_DOCKER__PKGDIR}/${package_name}" + mkdir -p "$package_tmpdir" + + local package_dependencies=$(read_db_packages_pacman "DEPENDS" | sed 's/<.*$//g; s/>.*$//g; s/=.*$//g') + + if [ "$package_dependencies" != "null" ]; then + local dep + for dep in $package_dependencies; do + if [ ! -e "${TERMUX_DOCKER__PKGDIR}/${dep}" ]; then + pull_package_pacman "$dep" + fi + done + unset dep + fi + + if [ ! -e "$package_tmpdir/package.pkg.tar.xz" ]; then + echo "[*] Downloading '$package_name'..." + curl --fail --location --output "$package_tmpdir/package.pkg.tar.xz" "${package_url}" + + echo "[*] Extracting '$package_name'..." + (cd "$package_tmpdir" + local package_desc="${package_name}-$(read_db_packages_pacman VERSION)" + mkdir -p "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/pacman/local/${package_desc}" + { + echo "%FILES%" + $TAR xvf package.pkg.tar.xz -C "$TERMUX_DOCKER__ROOTFS" .INSTALL .MTREE data 2> /dev/null | grep '^data/' || true + } >> "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/pacman/local/${package_desc}/files" + mv "${TERMUX_DOCKER__ROOTFS}/.MTREE" "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/pacman/local/${package_desc}/mtree" + if [ -f "${TERMUX_DOCKER__ROOTFS}/.INSTALL" ]; then + mv "${TERMUX_DOCKER__ROOTFS}/.INSTALL" "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/pacman/local/${package_desc}/install" + fi + { + local keys_desc="VERSION BASE DESC URL ARCH BUILDDATE PACKAGER ISIZE GROUPS LICENSE REPLACES DEPENDS OPTDEPENDS CONFLICTS PROVIDES" + for i in "NAME ${package_name}" \ + "INSTALLDATE $(date +%s)" \ + "VALIDATION $(test $(read_db_packages_pacman PGPSIG) != 'null' && echo 'pgp' || echo 'sha256')"; do + print_desc_package_pacman ${i} + done + jq -r -j '."'${package_name}'" | to_entries | .[] | select(.key | contains('$(sed 's/^/"/; s/ /","/g; s/$/"/' <<< ${keys_desc})')) | "%",(if .key == "ISIZE" then "SIZE" else .key end),"%\n",.value,"\n\n" | if type == "array" then (.| join("\n")) else . end' \ + "${PATH_DB_PACKAGES}" + } >> "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/var/lib/pacman/local/${package_desc}/desc" + ) + fi +} + +echo "[*] Regenerating rootfs..." +rm -rf "${TERMUX_DOCKER__ROOTFS}" +mkdir -p "${TERMUX_DOCKER__ROOTFS}" + +echo "[*] Downloading bootstrap..." +curl --fail --location --output "${TERMUX_DOCKER__TMPDIR}/bootstrap-${TERMUX_ARCH}.zip" "${TERMUX_DOCKER__BOOTSTRAP_SRCURL}" +mkdir -p "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}" \ + "${TERMUX_DOCKER__ROOTFS}${TERMUX__HOME}" \ + "${TERMUX_DOCKER__ROOTFS}${TERMUX__CACHE_DIR}" + +echo "[*] Extracting bootstrap..." +unzip -q -d "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}" "${TERMUX_DOCKER__TMPDIR}/bootstrap-${TERMUX_ARCH}.zip" +pushd "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/" +cat "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/SYMLINKS.txt" | while read -r line; do + dest=$(echo "$line" | awk -F '←' '{ print $1 }'); + link=$(echo "$line" | awk -F '←' '{ print $2 }'); + ln -s "$dest" "$link"; +done +popd +rm "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/SYMLINKS.txt" + +case "${TERMUX_PACKAGE_MANAGER}" in + apt) + read_package_lists_apt + for package in "${TERMUX_DOCKER__DEPENDS_ARRAY[@]}"; do + pull_package_apt "${package}" + done + ;; + pacman) + read_package_lists_pacman + for package in "${TERMUX_DOCKER__DEPENDS_ARRAY[@]}"; do + pull_package_pacman "${package}" + done + ;; +esac + +echo '[*] Linking /system to $PREFIX/opt/aosp...' +ln -s "data/data/${TERMUX_APP__PACKAGE_NAME}/files/usr/opt/aosp" "${TERMUX_DOCKER__ROOTFS}/system" + +echo '[*] Linking /etc/passwd to /system/etc/passwd for "docker exec -itu system"...' +# /etc itself must be a folder, not a symbolic link, because when docker runs the container, +# it overwrites the folder itself, and some files, but not the passwd file inside. +mkdir -p "${TERMUX_DOCKER__ROOTFS}/etc" +ln -s /system/etc/passwd "${TERMUX_DOCKER__ROOTFS}/etc/passwd" + +echo "[*] Creating /system/etc/group..." +cat << 'EOF' > "${TERMUX_DOCKER__ROOTFS}/system/etc/group" +root:x:0: +system:!:1000:system +EOF + +echo "[*] Creating /system/etc/hosts..." +cat << 'EOF' > "${TERMUX_DOCKER__ROOTFS}/system/etc/hosts" +127.0.0.1 localhost +::1 ip6-localhost +EOF + +echo "[*] Creating /system/etc/passwd..." +cat << EOF > "${TERMUX_DOCKER__ROOTFS}/system/etc/passwd" +root:x:0:0:root:/:/system/bin/sh +system:x:1000:1000:system:${TERMUX__ROOTFS}/home:${TERMUX__PREFIX}/bin/login +EOF + +echo "[*] Copying entrypoint.sh to /..." +cp entrypoint.sh "${TERMUX_DOCKER__ROOTFS}/" + +echo "[*] Copying entrypoint_root.sh to /..." +cp entrypoint_root.sh "${TERMUX_DOCKER__ROOTFS}/" + +echo "[*] Setting permissions..." +find -L "${TERMUX_DOCKER__ROOTFS}/data" \ + -type d -exec \ + chmod 755 "{}" \; +find -L "${TERMUX_DOCKER__ROOTFS}${TERMUX__ROOTFS}" \ + -type f -o -type d -exec \ + chmod g-rwx,o-rwx "{}" \; +find -L "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/bin" \ + "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/libexec" \ + -type f -exec \ + chmod 700 "{}" \; +if [ "${TERMUX_PACKAGE_MANAGER}" = "apt" ]; then + find -L "${TERMUX_DOCKER__ROOTFS}${TERMUX__PREFIX}/lib/apt" \ + -type f -exec \ + chmod 700 "{}" \; +fi +case "${BUILD_MACHINE}" in + BSD) + find_executable_arg="-perm +111" + ;; + *) + find_executable_arg="-executable" + ;; +esac +find -L "${TERMUX_DOCKER__ROOTFS}/system" \ + -type f $find_executable_arg -exec \ + chmod 755 "{}" \; +find -L "${TERMUX_DOCKER__ROOTFS}/system" \ + -type f ! $find_executable_arg -exec \ + chmod 644 "{}" \; + +echo "[*] Rootfs generation complete. Building termux-docker image..." +$SUDO $OCI ${OCI_ARG} \ + --no-cache \ + -t "${TERMUX_DOCKER__IMAGE_NAME}:${TERMUX_ARCH}" \ + ${PLATFORM_ARG} \ + --build-arg TERMUX_DOCKER__ROOTFS="$(basename "${TERMUX_DOCKER__ROOTFS}")" \ + --build-arg TERMUX__PREFIX="${TERMUX__PREFIX}" \ + --build-arg TERMUX__HOME="${TERMUX__HOME}" \ + --build-arg TERMUX__CACHE_DIR="${TERMUX__CACHE_DIR}" \ + . + +if [ "${1-}" = "publish" ]; then + $SUDO $OCI push "${TERMUX_DOCKER__IMAGE_NAME}:${TERMUX_ARCH}" +fi + +if [ "${TERMUX_ARCH}" = "x86_64" ]; then + $SUDO $OCI tag "${TERMUX_DOCKER__IMAGE_NAME}:${TERMUX_ARCH}" "${TERMUX_DOCKER__IMAGE_NAME}:latest" + if [ "${1-}" = "publish" ]; then + $SUDO $OCI push "${TERMUX_DOCKER__IMAGE_NAME}:latest" + fi +fi diff --git a/system/arm/bin/busybox b/system/arm/bin/busybox deleted file mode 100755 index 0fda79b..0000000 Binary files a/system/arm/bin/busybox and /dev/null differ diff --git a/system/arm/bin/dnsmasq b/system/arm/bin/dnsmasq deleted file mode 100755 index 0759a74..0000000 Binary files a/system/arm/bin/dnsmasq and /dev/null differ diff --git a/system/arm/bin/linker b/system/arm/bin/linker deleted file mode 100755 index b96f20a..0000000 Binary files a/system/arm/bin/linker and /dev/null differ diff --git a/system/arm/bin/linker64 b/system/arm/bin/linker64 deleted file mode 100755 index 2045039..0000000 Binary files a/system/arm/bin/linker64 and /dev/null differ diff --git a/system/arm/bin/mksh b/system/arm/bin/mksh deleted file mode 100755 index be881bb..0000000 Binary files a/system/arm/bin/mksh and /dev/null differ diff --git a/system/arm/bin/sh b/system/arm/bin/sh deleted file mode 120000 index c3fa810..0000000 --- a/system/arm/bin/sh +++ /dev/null @@ -1 +0,0 @@ -busybox \ No newline at end of file diff --git a/system/arm/etc/group b/system/arm/etc/group deleted file mode 100644 index 7296ccb..0000000 --- a/system/arm/etc/group +++ /dev/null @@ -1,2 +0,0 @@ -root:x:0: -system:!:1000:system diff --git a/system/arm/etc/hosts b/system/arm/etc/hosts deleted file mode 100644 index 0c4db27..0000000 --- a/system/arm/etc/hosts +++ /dev/null @@ -1,2 +0,0 @@ -127.0.0.1 localhost -::1 ip6-localhost diff --git a/system/arm/etc/ld.config.28.txt b/system/arm/etc/ld.config.28.txt deleted file mode 100644 index 6f9caee..0000000 --- a/system/arm/etc/ld.config.28.txt +++ /dev/null @@ -1,348 +0,0 @@ -# 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/arm/etc/mkshrc b/system/arm/etc/mkshrc deleted file mode 100644 index c254a01..0000000 --- a/system/arm/etc/mkshrc +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2010, 2012, 2013, 2014 -# Thorsten Glaser -# This file is provided under the same terms as mksh. -#- -# Minimal /system/etc/mkshrc for Android -# -# Support: https://launchpad.net/mksh - -: ${HOSTNAME:=$(getprop ro.product.device)} -: ${HOSTNAME:=android} -: ${TMPDIR:=/data/local/tmp} -export HOSTNAME TMPDIR - -if (( USER_ID )); then PS1='$'; else PS1='#'; fi -PS4='[$EPOCHREALTIME] '; PS1='${| - local e=$? - - (( e )) && REPLY+="$e|" - - return $e -}$HOSTNAME:${PWD:-?} '"$PS1 " diff --git a/system/arm/etc/passwd b/system/arm/etc/passwd deleted file mode 100644 index cba8c63..0000000 --- a/system/arm/etc/passwd +++ /dev/null @@ -1,2 +0,0 @@ -root:x:0:0:root:/:/system/bin/sh -system:x:1000:1000:system:/data/data/com.termux/files/home:/data/data/com.termux/files/usr/bin/login diff --git a/system/arm/lib/ld-android.so b/system/arm/lib/ld-android.so deleted file mode 100644 index 4111481..0000000 Binary files a/system/arm/lib/ld-android.so and /dev/null differ diff --git a/system/arm/lib/libc++.so b/system/arm/lib/libc++.so deleted file mode 100644 index c404afb..0000000 Binary files a/system/arm/lib/libc++.so and /dev/null differ diff --git a/system/arm/lib/libc.so b/system/arm/lib/libc.so deleted file mode 100644 index 071f53f..0000000 Binary files a/system/arm/lib/libc.so and /dev/null differ diff --git a/system/arm/lib/libc_malloc_debug.so b/system/arm/lib/libc_malloc_debug.so deleted file mode 100644 index 6177f20..0000000 Binary files a/system/arm/lib/libc_malloc_debug.so and /dev/null differ diff --git a/system/arm/lib/libc_malloc_hooks.so b/system/arm/lib/libc_malloc_hooks.so deleted file mode 100644 index f183032..0000000 Binary files a/system/arm/lib/libc_malloc_hooks.so and /dev/null differ diff --git a/system/arm/lib/libcutils.so b/system/arm/lib/libcutils.so deleted file mode 100644 index 741414d..0000000 Binary files a/system/arm/lib/libcutils.so and /dev/null differ diff --git a/system/arm/lib/libdl.so b/system/arm/lib/libdl.so deleted file mode 100644 index 68b99d8..0000000 Binary files a/system/arm/lib/libdl.so and /dev/null differ diff --git a/system/arm/lib/libicuuc.so b/system/arm/lib/libicuuc.so deleted file mode 100644 index 61b354a..0000000 Binary files a/system/arm/lib/libicuuc.so and /dev/null differ diff --git a/system/arm/lib/liblog.so b/system/arm/lib/liblog.so deleted file mode 100644 index bd2c38a..0000000 Binary files a/system/arm/lib/liblog.so and /dev/null differ diff --git a/system/arm/lib/libm.so b/system/arm/lib/libm.so deleted file mode 100644 index 6152ab6..0000000 Binary files a/system/arm/lib/libm.so and /dev/null differ diff --git a/system/arm/lib/libnetd_client.so b/system/arm/lib/libnetd_client.so deleted file mode 100644 index 6cc6b75..0000000 Binary files a/system/arm/lib/libnetd_client.so and /dev/null differ diff --git a/system/arm/lib64/ld-android.so b/system/arm/lib64/ld-android.so deleted file mode 100644 index 2a2021e..0000000 Binary files a/system/arm/lib64/ld-android.so and /dev/null differ diff --git a/system/arm/lib64/libc++.so b/system/arm/lib64/libc++.so deleted file mode 100644 index 12ddc93..0000000 Binary files a/system/arm/lib64/libc++.so and /dev/null differ diff --git a/system/arm/lib64/libc.so b/system/arm/lib64/libc.so deleted file mode 100644 index 4fdcda4..0000000 Binary files a/system/arm/lib64/libc.so and /dev/null differ diff --git a/system/arm/lib64/libc_malloc_debug.so b/system/arm/lib64/libc_malloc_debug.so deleted file mode 100644 index fcb7310..0000000 Binary files a/system/arm/lib64/libc_malloc_debug.so and /dev/null differ diff --git a/system/arm/lib64/libc_malloc_hooks.so b/system/arm/lib64/libc_malloc_hooks.so deleted file mode 100644 index 7184e8c..0000000 Binary files a/system/arm/lib64/libc_malloc_hooks.so and /dev/null differ diff --git a/system/arm/lib64/libdl.so b/system/arm/lib64/libdl.so deleted file mode 100644 index 093484a..0000000 Binary files a/system/arm/lib64/libdl.so and /dev/null differ diff --git a/system/arm/lib64/libicuuc.so b/system/arm/lib64/libicuuc.so deleted file mode 100644 index 78d7243..0000000 Binary files a/system/arm/lib64/libicuuc.so and /dev/null differ diff --git a/system/arm/lib64/liblog.so b/system/arm/lib64/liblog.so deleted file mode 100644 index c73ae7a..0000000 Binary files a/system/arm/lib64/liblog.so and /dev/null differ diff --git a/system/arm/lib64/libm.so b/system/arm/lib64/libm.so deleted file mode 100644 index ef4ccc0..0000000 Binary files a/system/arm/lib64/libm.so and /dev/null differ diff --git a/system/arm/lib64/libnetd_client.so b/system/arm/lib64/libnetd_client.so deleted file mode 100644 index 8c0c944..0000000 Binary files a/system/arm/lib64/libnetd_client.so and /dev/null differ diff --git a/system/arm/usr/icu/icudt60l.dat b/system/arm/usr/icu/icudt60l.dat deleted file mode 100644 index 0d1232a..0000000 Binary files a/system/arm/usr/icu/icudt60l.dat and /dev/null differ diff --git a/system/arm/usr/share/zoneinfo/tzdata b/system/arm/usr/share/zoneinfo/tzdata deleted file mode 100644 index 5c17a8b..0000000 Binary files a/system/arm/usr/share/zoneinfo/tzdata and /dev/null differ diff --git a/system/arm/usr/share/zoneinfo/tzlookup.xml b/system/arm/usr/share/zoneinfo/tzlookup.xml deleted file mode 100644 index 43dfb98..0000000 --- a/system/arm/usr/share/zoneinfo/tzlookup.xml +++ /dev/null @@ -1,926 +0,0 @@ - - - - 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/system/x86/bin/busybox b/system/x86/bin/busybox deleted file mode 100755 index 6bc7737..0000000 Binary files a/system/x86/bin/busybox and /dev/null differ diff --git a/system/x86/bin/dnsmasq b/system/x86/bin/dnsmasq deleted file mode 100755 index a5d3cc5..0000000 Binary files a/system/x86/bin/dnsmasq and /dev/null differ diff --git a/system/x86/bin/linker b/system/x86/bin/linker deleted file mode 100755 index d834765..0000000 Binary files a/system/x86/bin/linker and /dev/null differ diff --git a/system/x86/bin/linker64 b/system/x86/bin/linker64 deleted file mode 100755 index 728ca6d..0000000 Binary files a/system/x86/bin/linker64 and /dev/null differ diff --git a/system/x86/bin/mksh b/system/x86/bin/mksh deleted file mode 100755 index 9bc591d..0000000 Binary files a/system/x86/bin/mksh and /dev/null differ diff --git a/system/x86/bin/sh b/system/x86/bin/sh deleted file mode 120000 index c3fa810..0000000 --- a/system/x86/bin/sh +++ /dev/null @@ -1 +0,0 @@ -busybox \ No newline at end of file diff --git a/system/x86/etc/group b/system/x86/etc/group deleted file mode 100644 index 7296ccb..0000000 --- a/system/x86/etc/group +++ /dev/null @@ -1,2 +0,0 @@ -root:x:0: -system:!:1000:system diff --git a/system/x86/etc/hosts b/system/x86/etc/hosts deleted file mode 100644 index 0c4db27..0000000 --- a/system/x86/etc/hosts +++ /dev/null @@ -1,2 +0,0 @@ -127.0.0.1 localhost -::1 ip6-localhost diff --git a/system/x86/etc/ld.config.28.txt b/system/x86/etc/ld.config.28.txt deleted file mode 100644 index 1da5840..0000000 --- a/system/x86/etc/ld.config.28.txt +++ /dev/null @@ -1,15 +0,0 @@ -# -# 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/system/x86/etc/mkshrc b/system/x86/etc/mkshrc deleted file mode 100644 index 778cf09..0000000 --- a/system/x86/etc/mkshrc +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2010, 2012, 2013, 2014 -# Thorsten Glaser -# This file is provided under the same terms as mksh. -#- -# Minimal /system/etc/mkshrc for Android -# -# Support: https://launchpad.net/mksh - -if (( USER_ID )); then PS1='$'; else PS1='#'; fi -PS4='[$EPOCHREALTIME] '; PS1='${| - local e=$? - - (( e )) && REPLY+="$e|" - - return $e -}$HOSTNAME:${PWD:-?} '"$PS1 " diff --git a/system/x86/etc/passwd b/system/x86/etc/passwd deleted file mode 100644 index cba8c63..0000000 --- a/system/x86/etc/passwd +++ /dev/null @@ -1,2 +0,0 @@ -root:x:0:0:root:/:/system/bin/sh -system:x:1000:1000:system:/data/data/com.termux/files/home:/data/data/com.termux/files/usr/bin/login diff --git a/system/x86/lib/ld-android.so b/system/x86/lib/ld-android.so deleted file mode 100644 index 1591aca..0000000 Binary files a/system/x86/lib/ld-android.so and /dev/null differ diff --git a/system/x86/lib/libc++.so b/system/x86/lib/libc++.so deleted file mode 100644 index eae6a13..0000000 Binary files a/system/x86/lib/libc++.so and /dev/null differ diff --git a/system/x86/lib/libc.so b/system/x86/lib/libc.so deleted file mode 100644 index 6431384..0000000 Binary files a/system/x86/lib/libc.so and /dev/null differ diff --git a/system/x86/lib/libc_malloc_debug.so b/system/x86/lib/libc_malloc_debug.so deleted file mode 100644 index 55e29de..0000000 Binary files a/system/x86/lib/libc_malloc_debug.so and /dev/null differ diff --git a/system/x86/lib/libc_malloc_hooks.so b/system/x86/lib/libc_malloc_hooks.so deleted file mode 100644 index a462811..0000000 Binary files a/system/x86/lib/libc_malloc_hooks.so and /dev/null differ diff --git a/system/x86/lib/libcutils.so b/system/x86/lib/libcutils.so deleted file mode 100644 index 32b955c..0000000 Binary files a/system/x86/lib/libcutils.so and /dev/null differ diff --git a/system/x86/lib/libdl.so b/system/x86/lib/libdl.so deleted file mode 100644 index 0972879..0000000 Binary files a/system/x86/lib/libdl.so and /dev/null differ diff --git a/system/x86/lib/libicuuc.so b/system/x86/lib/libicuuc.so deleted file mode 100644 index 99aaa1a..0000000 Binary files a/system/x86/lib/libicuuc.so and /dev/null differ diff --git a/system/x86/lib/liblog.so b/system/x86/lib/liblog.so deleted file mode 100644 index 3745c98..0000000 Binary files a/system/x86/lib/liblog.so and /dev/null differ diff --git a/system/x86/lib/libm.so b/system/x86/lib/libm.so deleted file mode 100644 index 3d5dcee..0000000 Binary files a/system/x86/lib/libm.so and /dev/null differ diff --git a/system/x86/lib/libnetd_client.so b/system/x86/lib/libnetd_client.so deleted file mode 100644 index 19f620a..0000000 Binary files a/system/x86/lib/libnetd_client.so and /dev/null differ diff --git a/system/x86/lib64/ld-android.so b/system/x86/lib64/ld-android.so deleted file mode 100644 index f0de289..0000000 Binary files a/system/x86/lib64/ld-android.so and /dev/null differ diff --git a/system/x86/lib64/libc++.so b/system/x86/lib64/libc++.so deleted file mode 100644 index 4318f18..0000000 Binary files a/system/x86/lib64/libc++.so and /dev/null differ diff --git a/system/x86/lib64/libc.so b/system/x86/lib64/libc.so deleted file mode 100644 index 90e3fea..0000000 Binary files a/system/x86/lib64/libc.so and /dev/null differ diff --git a/system/x86/lib64/libc_malloc_debug.so b/system/x86/lib64/libc_malloc_debug.so deleted file mode 100644 index f424b52..0000000 Binary files a/system/x86/lib64/libc_malloc_debug.so and /dev/null differ diff --git a/system/x86/lib64/libc_malloc_hooks.so b/system/x86/lib64/libc_malloc_hooks.so deleted file mode 100644 index 6b6aa98..0000000 Binary files a/system/x86/lib64/libc_malloc_hooks.so and /dev/null differ diff --git a/system/x86/lib64/libdl.so b/system/x86/lib64/libdl.so deleted file mode 100644 index 6894ba6..0000000 Binary files a/system/x86/lib64/libdl.so and /dev/null differ diff --git a/system/x86/lib64/libicuuc.so b/system/x86/lib64/libicuuc.so deleted file mode 100644 index 77a4592..0000000 Binary files a/system/x86/lib64/libicuuc.so and /dev/null differ diff --git a/system/x86/lib64/liblog.so b/system/x86/lib64/liblog.so deleted file mode 100644 index 746a7f1..0000000 Binary files a/system/x86/lib64/liblog.so and /dev/null differ diff --git a/system/x86/lib64/libm.so b/system/x86/lib64/libm.so deleted file mode 100644 index 4c6d8c5..0000000 Binary files a/system/x86/lib64/libm.so and /dev/null differ diff --git a/system/x86/lib64/libnetd_client.so b/system/x86/lib64/libnetd_client.so deleted file mode 100644 index 8bbcbc9..0000000 Binary files a/system/x86/lib64/libnetd_client.so and /dev/null differ diff --git a/system/x86/usr/icu/icudt60l.dat b/system/x86/usr/icu/icudt60l.dat deleted file mode 100644 index 0d1232a..0000000 Binary files a/system/x86/usr/icu/icudt60l.dat and /dev/null differ diff --git a/system/x86/usr/share/zoneinfo/tzdata b/system/x86/usr/share/zoneinfo/tzdata deleted file mode 100644 index 5c17a8b..0000000 Binary files a/system/x86/usr/share/zoneinfo/tzdata and /dev/null differ diff --git a/system/x86/usr/share/zoneinfo/tzlookup.xml b/system/x86/usr/share/zoneinfo/tzlookup.xml deleted file mode 100644 index 43dfb98..0000000 --- a/system/x86/usr/share/zoneinfo/tzlookup.xml +++ /dev/null @@ -1,926 +0,0 @@ - - - - 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 - - -