Add a build script to patch paths and inject proot

This commit is contained in:
Alexander Sosedkin 2019-12-30 02:41:27 +01:00
parent c399757156
commit 4018b987bf
4 changed files with 76 additions and 3 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
result
result-*
out

58
build.sh Executable file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env bash
set -e
repo=${repo:-t184256/nix-on-droid-bootstrap} # set this to your fork!
branch=${branch:-$(git rev-parse --abbrev-ref HEAD)}
arches='aarch64 i686'
nixOnDroidChannelURL=https://github.com/$repo/archive/$branch.tar.gz
mkdir -p out
rm -f out/*
for arch in $arches; do
echo $arch: building talloc...
nix build --show-trace -f pkgs --argstr arch $arch tallocStatic -o out/talloc-$arch
talloc=$(realpath out/talloc-$arch)
echo $arch: building proot...
nix build --show-trace -f pkgs --argstr arch $arch prootTermux -o out/proot-$arch
proot=$(realpath out/proot-$arch)
echo $arch: patching proot path in modules/environment/login/default.nix...
grep "$arch = \"/nix/store/" modules/environment/login/default.nix
sed -i "s|$arch = \"/nix/store/.*\";|$arch = \"$proot\";|" modules/environment/login/default.nix
grep "$arch = \"/nix/store/" modules/environment/login/default.nix
echo $arch: building nix-on-droid...
nix build --show-trace -f pkgs --argstr arch $arch --argstr nixOnDroidChannelURL $nixOnDroidChannelURL bootstrapZip -o out/nix-on-droid-$arch
echo $arch: injecting talloc/proot for initial bootstrap
pwd
cat out/nix-on-droid-$arch/bootstrap-$arch.zip > out/bootstrap-$arch.zip
nix-store --export --readonly-mode $talloc > out/talloc-$arch.closure
nix-store --export --readonly-mode $proot > out/proot-$arch.closure
mkdir out/repack-$arch
pushd out/repack-$arch >/dev/null
unzip -q ../bootstrap-$arch.zip
rm ../bootstrap-$arch.zip
cp ../talloc-$arch.closure ./talloc.closure
cp ../proot-$arch.closure ./proot.closure
zip --quiet -r ../bootstrap-$arch.zip .
popd >/dev/null
chmod -R +w out/repack-$arch
rm -rf out/repack-$arch
done
if [ -z "$rsync_to" ]; then
echo 'Done. Now put out/bootstrap-*.zip on some HTTP server and point the app to it. Good luck!'
else
if [ $branch == master ]; then
rsync -vP out/bootstrap-*.zip "$rsync_to/bootstrap/"
else
rsync -vP out/bootstrap-*.zip "$rsync_to/bootstrap-$branch/"
fi
fi

View file

@ -84,9 +84,12 @@ in
inherit login loginInner;
prootStatic =
if config.build.arch == "aarch64"
then "/nix/store/r09n7pp4fwhrld2a1k2al6bgdx2qqfaj-proot-termux-unstable-2019-09-05-aarch64-unknown-linux-android"
else "/nix/store/ccv4y9ndl1w7ksmwnsr9jm2iwnrrbgcq-proot-termux-unstable-2019-09-05-i686-unknown-linux-android";
let crosscompiled_paths = {
aarch64 = "/nix/store/r09n7pp4fwhrld2a1k2al6bgdx2qqfaj-proot-termux-unstable-2019-09-05-aarch64-unknown-linux-android";
i686 = "/nix/store/4gpm0rmrq0mm69kl3cb1gjslr7ihhp01-proot-termux-unstable-2019-09-05-i686-unknown-linux-android";
};
in
"${crosscompiled_paths.${config.build.arch}}";
};
};

View file

@ -32,6 +32,17 @@ writeText "login-inner" ''
export NIX_SSL_CERT_FILE=${cacert}
if [ -r ${config.build.installationDir}/proot.closure ]; then
echo "Injecting bundled talloc closure..."
${nix}/bin/nix-store --import < ${config.build.installationDir}/talloc.closure
${coreutils}/bin/rm -f ${config.build.installationDir}/talloc.closure
echo "Injecting bundled proot closure..."
${nix}/bin/nix-store --import < ${config.build.installationDir}/proot.closure
${coreutils}/bin/rm -f ${config.build.installationDir}/proot.closure
else
echo "No bundled talloc/proot closures found, which is OK for official builds..."
fi
echo "Installing and updating nix-channels..."
${nix}/bin/nix-channel --add ${config.build.channel.nixpkgs} nixpkgs
${nix}/bin/nix-channel --update nixpkgs