Add (untested) support for multiple arches

This commit is contained in:
Alexander Sosedkin 2019-09-14 16:42:15 +07:00
parent d76c378c2a
commit 9a154663de
3 changed files with 39 additions and 19 deletions

10
.gitignore vendored
View file

@ -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

View file

@ -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";

28
script
View file

@ -16,9 +16,11 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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"