uzbek-plus/b12/mk-router-bundle.sh

17 lines
1.8 KiB
Bash

#!/bin/sh
# Build the B12 host-side router bundle (nft + dnsmasq from Alpine 3.24 aarch64, own musl loader) -> out/router-bundle.tar.gz
# Board: extracted to /tmp/aurora-router; binaries run as $B/lib/ld-musl-aarch64.so.1 --library-path $B/lib $B/sbin/X (host musl untouched).
set -e; cd "$(dirname "$0")"; A=$PWD/dl/apkst/sbin/apk.static; W=${TMPDIR:-/tmp}/b12-rt.$$; R=$W/root; C=$PWD/dl/apkcache
mkdir -p $R/etc/apk $C out; tar xzf dl/alpine-minirootfs-3.24.2-aarch64.tar.gz -C $W ./etc/apk/keys ./etc/apk/repositories 2>/dev/null; cp -a $W/etc/apk/keys $W/etc/apk/repositories $R/etc/apk/
$A --root $R --arch aarch64 --keys-dir $R/etc/apk/keys --cache-dir $C --usermode --initdb --no-scripts add nftables dnsmasq > $W/apk.log
grep -E "Installing" $W/apk.log | sed 's/.*Installing //' > out/router-bundle.pkgs
T=$W/aurora-router; mkdir -p $T/lib $T/sbin
cp -L $R/lib/ld-musl-aarch64.so.1 $T/lib/
for l in libnftables.so.1 libnftnl.so.11 libmnl.so.0 libjansson.so.4 libgmp.so.10 libreadline.so.8 libncursesw.so.6; do f=$(find $R/usr/lib $R/lib -name "$l" | head -1); [ -n "$f" ] || { echo "missing $l"; exit 1; }; cp -L $f $T/lib/; done
cp $R/usr/sbin/nft $R/usr/sbin/dnsmasq $T/sbin/
cp router/router.conf router/router-common.sh router/router-up.sh router/router-down.sh router/router-status.sh $T/
# every NEEDED must be in lib/
for f in $T/sbin/* $T/lib/*.so*; do aarch64-linux-gnu-readelf -d $f 2>/dev/null | sed -n 's/.*NEEDED.*\[\(.*\)\]/\1/p'; done | sort -u | while read n; do [ "$n" = libc.musl-aarch64.so.1 ] || [ -e $T/lib/$n ] || { echo "UNRESOLVED $n"; exit 1; }; done
(cd $W && tar --owner=0 --group=0 --numeric-owner -czf - aurora-router) > out/router-bundle.tar.gz
(cd $T && find . -type f | sort | xargs sha256sum) > out/router-bundle.files; rm -rf $W
sha256sum out/router-bundle.tar.gz; cat out/router-bundle.pkgs | tr '\n' ' '; echo