1- #! /bin/sh
1+ #! /bin/bash
22
33set -ex
44
5+ # build in a temporary directory
6+ # this makes sure that subsequent runs do not influence each other
7+ # also makes cleaning up easier: just dump the entire directory
8+ tempdir=" $( mktemp -d) "
9+
10+ # need to memorize the repository root directory's path so that we can copy files from it
11+ repo_root_dir=" $( readlink -f " $( dirname " ${BASH_SOURCE[0]} " ) " ) " /..
12+
13+ # cleanup takes care of unmounting and removing all downloaded files
14+ cleanup () {
15+ sudo umount " $tempdir " /miniroot/{dev,proc,sys}
16+ sudo rm -rf " $tempdir "
17+ }
18+ trap cleanup EXIT
19+
20+ cd " $tempdir "
21+
522# ############################################
623# Download and extract minimal Alpine system
724# ############################################
825
926wget " http://dl-cdn.alpinelinux.org/alpine/v3.17/releases/${ARCHITECTURE} /alpine-minirootfs-3.17.2-${ARCHITECTURE} .tar.gz"
10- sudo rm -rf ./miniroot true # Clean up from previous runs
1127mkdir -p ./miniroot
1228cd ./miniroot
1329sudo tar xf ../alpine-minirootfs-* -" ${ARCHITECTURE} " .tar.gz
1733# Prepare chroot
1834# ############################################
1935
20- sudo cp -r . /src miniroot/src
21- sudo cp -r . /patches miniroot/patches
36+ sudo cp -r " $repo_root_dir " /src miniroot/src
37+ sudo cp -r " $repo_root_dir " /patches miniroot/patches
2238
2339sudo mount -o bind /dev miniroot/dev
2440sudo mount -t proc none miniroot/proc
@@ -31,33 +47,27 @@ sudo cp -p /etc/resolv.conf miniroot/etc/
3147
3248if [ " $ARCHITECTURE " = " x86" ] || [ " $ARCHITECTURE " = " x86_64" ]; then
3349 echo " Architecture is x86 or x86_64, hence not using qemu-arm-static"
34- sudo cp build.sh miniroot/build.sh && sudo chroot miniroot /bin/sh -ex /build.sh
50+ sudo cp " $repo_root_dir " /chroot/ build.sh miniroot/build.sh && sudo chroot miniroot /bin/sh -ex /build.sh
3551elif [ " $ARCHITECTURE " = " aarch64" ] ; then
3652 echo " Architecture is aarch64, hence using qemu-aarch64-static"
3753 sudo cp " $( which qemu-aarch64-static) " miniroot/usr/bin
38- sudo cp build.sh miniroot/build.sh && sudo chroot miniroot qemu-aarch64-static /bin/sh -ex /build.sh
54+ sudo cp " $repo_root_dir " /chroot/ build.sh miniroot/build.sh && sudo chroot miniroot qemu-aarch64-static /bin/sh -ex /build.sh
3955elif [ " $ARCHITECTURE " = " armhf" ] ; then
4056 echo " Architecture is armhf, hence using qemu-arm-static"
4157 sudo cp " $( which qemu-arm-static) " miniroot/usr/bin
42- sudo cp build.sh miniroot/build.sh && sudo chroot miniroot qemu-arm-static /bin/sh -ex /build.sh
58+ sudo cp " $repo_root_dir " /chroot/ build.sh miniroot/build.sh && sudo chroot miniroot qemu-arm-static /bin/sh -ex /build.sh
4359else
4460 echo " Edit chroot_build.sh to support this architecture as well, it should be easy"
4561 exit 1
4662fi
4763
48- # ############################################
49- # Clean up chroot
50- # ############################################
51-
52- sudo umount miniroot/proc miniroot/sys miniroot/dev
53-
5464# ############################################
5565# Copy build artefacts out
5666# ############################################
5767
5868# Use the same architecture names as https://github.com/AppImage/AppImageKit/releases/
5969if [ " $ARCHITECTURE " = " x86" ] ; then ARCHITECTURE=i686 ; fi
6070
61- mkdir out/
62- sudo find miniroot/ -type f -executable -name ' runtime-fuse3 ' -exec cp {} " out/runtime- ${ARCHITECTURE} " \;
63- sudo rm -rf miniroot/
71+ cd " $repo_root_dir "
72+ mkdir -p ./ out/
73+ sudo find " $tempdir " /miniroot/ -type f -executable -name ' runtime-fuse3 ' -exec cp {} " out/runtime- ${ARCHITECTURE} " \;
0 commit comments