diff --git a/generate_bootstrap_zipball b/generate_bootstrap_zipball deleted file mode 100755 index 42a0d29..0000000 --- a/generate_bootstrap_zipball +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/env bash - -# This script builds the initial bootstrap zipball for Nix on Android. -# Copyright (c) 2019 Alexander Sosedkin - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . - -set -uex - -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" - -export PROOT_NO_SECCOMP=1 # see https://github.com/proot-me/PRoot/issues/106 - -rm -rf ./bootstrap -mkdir -p bootstrap - -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 - -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 - -echo -n "extracting $ARCHIVE " -tar -xf "$ARCHIVE" -C bootstrap --checkpoint=200 --checkpoint-action=dot -echo " done" -mv bootstrap/nix* bootstrap/nix-installer - -echo -n "copying store... " -mkdir bootstrap/nix -cp -r bootstrap/nix-installer/store bootstrap/nix/ -echo "done" - -mkdir -p bootstrap/bin -TGT_SHELL=$(find bootstrap/nix/store -path '*/bin/bash' | sed s/^bootstrap//) -echo "shell found at $TGT_SHELL" -ln -s "$TGT_SHELL" bootstrap/bin/sh - -mkdir -p bootstrap/usr/bin -TGT_ENV=$(find bootstrap/nix/store -path '*/bin/env' | sed s/^bootstrap//) -echo "env found at $TGT_ENV" -ln -s "$TGT_ENV" bootstrap/usr/bin/env - -TGT_NIX=$(find bootstrap/nix/store -path '*/bin/nix' | sed s/^bootstrap//) -TGT_NIX=${TGT_NIX%/bin/nix} -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" - -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 - -echo "registering paths..." -$PROOT_CMD "$TGT_NIX/bin/nix-store" --load-db < bootstrap/nix-installer/.reginfo - -echo "injecting proot..." -mkdir -p bootstrap/bin -cp proot-$ARCH/bin/proot bootstrap/bin/proot - -echo "making up some resolv.conf..." -mkdir -p bootstrap/etc -echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" > bootstrap/etc/resolv.conf - -echo "disabling sandboxing..." # we can't rely on USER_NS support -mkdir -p bootstrap/etc/nix -echo "sandbox = false " > bootstrap/etc/nix/nix.conf - -echo "composing login scripts..." -mkdir -p bootstrap/bin -mkdir -p bootstrap/root -mkdir -p bootstrap/tmp -mkdir -p bootstrap/.l2s -cat > bootstrap/bin/login < $INST/etc/passwd - echo "nix-on-droid:x:\$(/system/bin/stat -c '%u:%g' $INST):nix-on-droid:/data/data/com.termux.nix/files/home:/bin/sh" >> $INST/etc/passwd -fi - -exec $INST/bin/proot \ - -b $INST/nix:/nix \ - -b $INST/bin:/bin \ - -b $INST/etc:/etc \ - -b $INST/tmp:/tmp \ - -b $INST/usr:/usr \ - -b /:/android \ - --link2symlink \ - $INST/bin/sh $INST/bin/.login-inner \$USER "\$@" -EOF - -chmod +x bootstrap/bin/login -cat > bootstrap/bin/.login-inner < bootstrap/bin/nix-on-droid-install <' -A install - -echo "Edit ~/.config/nixpkgs/home.nix and home-manager rebuild to control what is going on." -echo "Run bash or restart your session to enjoy a much nicer environment." -EOF -chmod +x bootstrap/bin/nix-on-droid-install - - -echo "providing a default home-manager config..." - -cat > bootstrap/etc/home.nix.default < bootstrap/EXECUTABLES.txt - -echo "finding symlinks..." -find bootstrap -type l | -while read -r LINK; do - LNK=${LINK#bootstrap/} - TGT=$(readlink "$LINK") - echo "$TGT←$LNK" >> bootstrap/SYMLINKS.txt - rm "$LINK" -done - -echo "packing..." -rm -f bootstrap-$ARCH.zip -(cd bootstrap; zip -q -9 -r ../bootstrap-$ARCH ./* ./.l2s) - -echo "done" diff --git a/proot.nix b/proot.nix deleted file mode 100644 index 1c40b5b..0000000 --- a/proot.nix +++ /dev/null @@ -1,121 +0,0 @@ -{arch}: - -let - pinnedPkgs = builtins.fetchTarball { - name = "nixos-19.03-2019-07-14"; - url = https://github.com/nixos/nixpkgs/archive/cf16778cd6870d349581eb30e350ff2f95a55e06.tar.gz; - sha256 = "1xzsybpw5k68fima6pxpl7b3ifgisrm1cyci4hi10gvx9q8xj97z"; - }; - - buildPkgs = import pinnedPkgs {}; - - overlay-jpeg-no-static = self: super: { - libjpeg = buildPkgs.libjpeg; - }; - - crossSystem = rec { - config = arch + "-unknown-linux-android"; - sdkVer = "24"; - ndkVer = "18b"; - useAndroidPrebuilt = true; - }; - - crossPkgs = import pinnedPkgs { inherit crossSystem; }; - - crossStaticPkgs = import pinnedPkgs { - inherit crossSystem; - crossOverlays = [ - (import "${pinnedPkgs}/pkgs/top-level/static.nix") - overlay-jpeg-no-static - ]; - }; - - talloc = crossPkgs.stdenv.mkDerivation rec { - name = "talloc-2.1.14"; - - src = crossPkgs.fetchurl { - url = "mirror://samba/talloc/${name}.tar.gz"; - sha256 = "1kk76dyav41ip7ddbbf04yfydb4jvywzi2ps0z2vla56aqkn11di"; - }; - - depsBuildBuild = [ buildPkgs.python2 buildPkgs.zlib ]; - - buildDeps = [ crossPkgs.zlib ]; - - configurePhase = '' - substituteInPlace buildtools/bin/waf \ - --replace "/usr/bin/env python" "${buildPkgs.python2}/bin/python" - ./configure --prefix=$out \ - --disable-rpath \ - --disable-python \ - --cross-compile \ - --cross-answers=cross-answers.txt - ''; - - buildPhase = '' - make - ''; - - installPhase = '' - mkdir -p $out/lib - make install - ${crossPkgs.stdenv.cc.targetPrefix}ar q $out/lib/libtalloc.a bin/default/talloc_[0-9]*.o - ''; - - fixupPhase = ""; - - prePatch = '' - cat < cross-answers.txt - Checking uname sysname type: "Linux" - Checking uname machine type: "dontcare" - Checking uname release type: "dontcare" - Checking uname version type: "dontcare" - Checking simple C program: OK - building library support: OK - Checking for large file support: OK - Checking for -D_FILE_OFFSET_BITS=64: OK - Checking for WORDS_BIGENDIAN: OK - Checking for C99 vsnprintf: OK - Checking for HAVE_SECURE_MKSTEMP: OK - rpath library support: OK - -Wl,--version-script support: FAIL - Checking correct behavior of strtoll: OK - Checking correct behavior of strptime: OK - Checking for HAVE_IFACE_GETIFADDRS: OK - Checking for HAVE_IFACE_IFCONF: OK - Checking for HAVE_IFACE_IFREQ: OK - Checking getconf LFS_CFLAGS: OK - Checking for large file support without additional flags: OK - Checking for working strptime: OK - Checking for HAVE_SHARED_MMAP: OK - Checking for HAVE_MREMAP: OK - Checking for HAVE_INCOHERENT_MMAP: OK - Checking getconf large file support flags work: OK - EOF - ''; - }; - - - proot = crossStaticPkgs.stdenv.mkDerivation rec { - name = "proot-termux-${version}"; - version = "2019-05-05"; - - src = crossStaticPkgs.fetchFromGitHub { - repo = "proot"; - owner = "termux"; - rev = "0717de26d1394fec3acf90efdc1d172e01bc932b"; - sha256 = "1g0r3a67x94sgffz3gksyqk8r06zynfcgfdi33w6kzxnb03gbm4m"; - }; - - buildInputs = [ talloc ]; - - makeFlags = [ "-Csrc CFLAGS=-D__ANDROID__" ]; - - installPhase = '' - mkdir -p $out/bin - cp src/proot $out/bin/ - ''; - }; - - -in proot