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

14 lines
1.5 KiB
Bash

#!/bin/sh
# Host-side e2fsprogs bundle (mke2fs/e2fsck/tune2fs/dumpe2fs from Alpine 3.24 aarch64, own musl loader) -> out/e2fs-bundle.tar.gz
# Board: /tmp/aurora-e2fs (provisioning) or initramfs /usr/libexec/aurora/e2fs (boot fsck). Run: $B/lib/ld-musl-aarch64.so.1 --library-path $B/lib $B/sbin/X
set -e; cd "$(dirname "$0")"; A=$PWD/dl/apkst/sbin/apk.static; W=${TMPDIR:-/tmp}/b12-e2.$$; R=$W/root; C=$PWD/dl/apkcache
mkdir -p $R/etc/apk 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 e2fsprogs > $W/apk.log
grep Installing $W/apk.log | sed 's/.*Installing //' > out/e2fs-bundle.pkgs
T=$W/aurora-e2fs; mkdir -p $T/lib $T/sbin; cp -L $R/lib/ld-musl-aarch64.so.1 $T/lib/
for b in mke2fs e2fsck; do cp -L $R/sbin/$b $T/sbin/ 2>/dev/null || cp -L $R/usr/sbin/$b $T/sbin/; done
need() { for f in "$@"; do aarch64-linux-gnu-readelf -d $f | sed -n 's/.*NEEDED.*\[\(.*\)\]/\1/p'; done | sort -u | grep -v '^libc.musl'; }
for i in 1 2 3; do for n in $(need $T/sbin/* $T/lib/*.so* 2>/dev/null); do [ -e $T/lib/$n ] || cp -L $(find $R/lib $R/usr/lib -name $n | head -1) $T/lib/; done; done
for n in $(need $T/sbin/* $T/lib/*.so*); do [ -e $T/lib/$n ] || { echo "UNRESOLVED $n"; exit 1; }; done
(cd $W && tar --owner=0 --group=0 --numeric-owner -czf - aurora-e2fs) > out/e2fs-bundle.tar.gz
ls $T/lib | tr '\n' ' '; echo; rm -rf $W; sha256sum out/e2fs-bundle.tar.gz