From 9a154663de41c9669a7f64dfad963bb7e03de3e8 Mon Sep 17 00:00:00 2001 From: Alexander Sosedkin Date: Sat, 14 Sep 2019 16:42:15 +0700 Subject: [PATCH] Add (untested) support for multiple arches --- .gitignore | 10 ++++++++-- proot.nix | 20 +++++++++++++------- script | 28 ++++++++++++++++++---------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 60c8bdf..30a7063 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ -bootstrap-aarch64.zip bootstrap +bootstrap-aarch64.zip +bootstrap-i686.zip +bootstrap-x86_64.zip nix-*-aarch64-linux.tar.bz2 +nix-*-i686-linux.tar.bz2 +nix-*-x86_64-linux.tar.bz2 proot-host -proot-tgt +proot-aarch64 +proot-i686 +proot-x86_64 qemu-aarch64 diff --git a/proot.nix b/proot.nix index 2bc2ea1..1c40b5b 100644 --- a/proot.nix +++ b/proot.nix @@ -1,8 +1,10 @@ +{arch}: + let pinnedPkgs = builtins.fetchTarball { - name = "nixos-19.03-2019-06-14"; - url = https://github.com/nixos/nixpkgs/archive/86191b5b91322bdd88303e31d4507a684fc1b120.tar.gz; - sha256 = "1di2s3d9fqvidix2ww3jiaq2m96xl0qn3gxh7vlw8j0z8b13z175"; + name = "nixos-19.03-2019-07-14"; + url = https://github.com/nixos/nixpkgs/archive/cf16778cd6870d349581eb30e350ff2f95a55e06.tar.gz; + sha256 = "1xzsybpw5k68fima6pxpl7b3ifgisrm1cyci4hi10gvx9q8xj97z"; }; buildPkgs = import pinnedPkgs {}; @@ -11,19 +13,23 @@ let libjpeg = buildPkgs.libjpeg; }; - crossPkgs = import pinnedPkgs { - crossSystem = (import "${pinnedPkgs}/lib").systems.examples.aarch64-android-prebuilt; + crossSystem = rec { + config = arch + "-unknown-linux-android"; + sdkVer = "24"; + ndkVer = "18b"; + useAndroidPrebuilt = true; }; + crossPkgs = import pinnedPkgs { inherit crossSystem; }; + crossStaticPkgs = import pinnedPkgs { - crossSystem = (import "${pinnedPkgs}/lib").systems.examples.aarch64-android-prebuilt; + inherit crossSystem; crossOverlays = [ (import "${pinnedPkgs}/pkgs/top-level/static.nix") overlay-jpeg-no-static ]; }; - talloc = crossPkgs.stdenv.mkDerivation rec { name = "talloc-2.1.14"; diff --git a/script b/script index 98f745e..42a0d29 100755 --- a/script +++ b/script @@ -16,9 +16,11 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -set -ue +set -uex -ARCHIVE=nix-2.2.2-aarch64-linux.tar.bz2 +ARCH=${1:-aarch64} + +ARCHIVE=nix-2.2.2-$ARCH-linux.tar.bz2 BASEURL=https://nixos.org/releases/nix/nix-2.2.2 URL="$BASEURL/$ARCHIVE" INST="/data/data/com.termux.nix/files/usr" @@ -28,14 +30,16 @@ export PROOT_NO_SECCOMP=1 # see https://github.com/proot-me/PRoot/issues/106 rm -rf ./bootstrap mkdir -p bootstrap -echo "building proot-tgt (this may take a lot of time...)" -nix build -f proot.nix -o proot-tgt +echo "building proot for $ARCH (this may take a lot of time...)" +nix build -f proot.nix -o proot-$ARCH --argstr arch aarch64 wget https://github.com/proot-me/proot-static-build/blob/master/static/proot-x86_64?raw=true -O proot-host chmod +x proot-host -wget https://github.com/multiarch/qemu-user-static/releases/download/v3.1.0-2/qemu-aarch64-static -O qemu-aarch64 -chmod +x qemu-aarch64 +if [[ $ARCH != x86_64 && $ARCH != i686 ]]; then + wget https://github.com/multiarch/qemu-user-static/releases/download/v4.0.0-4/qemu-$ARCH-static -O qemu-$ARCH + chmod +x qemu-$ARCH +fi echo "downloading nix archive" wget $URL -O $ARCHIVE @@ -67,7 +71,11 @@ echo "nix derivation found at $TGT_NIX" TGT_CACERT=$(find bootstrap/nix/store -path '*-nss-cacert-*/ca-bundle.crt' | sed s/^bootstrap//) echo "cacert found at $TGT_CACERT" -PROOT_CMD="./proot-host -q ./qemu-aarch64 -r bootstrap -w /" +if [[ $ARCH != x86_64 && $ARCH != i686 ]]; then + PROOT_CMD="./proot-host -q ./qemu-$ARCH -r bootstrap -w /" +else + PROOT_CMD="./proot-host -b /dev -r bootstrap -w /" +fi echo "initialising Nix database..." $PROOT_CMD "$TGT_NIX/bin/nix-store" --init @@ -77,7 +85,7 @@ $PROOT_CMD "$TGT_NIX/bin/nix-store" --load-db < bootstrap/nix-installer/.reginfo echo "injecting proot..." mkdir -p bootstrap/bin -cp proot-tgt/bin/proot bootstrap/bin/proot +cp proot-$ARCH/bin/proot bootstrap/bin/proot echo "making up some resolv.conf..." mkdir -p bootstrap/etc @@ -282,7 +290,7 @@ while read -r LINK; do done echo "packing..." -rm -f bootstrap-aarch64.zip -(cd bootstrap; zip -q -9 -r ../bootstrap-aarch64 ./* ./.l2s) +rm -f bootstrap-$ARCH.zip +(cd bootstrap; zip -q -9 -r ../bootstrap-$ARCH ./* ./.l2s) echo "done"