From fb8af1fd8033f2ca4d7c5c4df8953a8d6e2cccac Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Fri, 25 Jun 2021 10:25:40 +1200 Subject: [PATCH] add a way to prevent a layer (and descendants) from being made into a sqashfs for the live server build, i want to make a layer to install the kernel into but do not want the layer itself to be published. the implementation is a bit clunky but it works. --- live-build/auto/config | 3 ++ live-build/lb_binary_layered | 75 ++++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 29 deletions(-) diff --git a/live-build/auto/config b/live-build/auto/config index 6ddde4ea..df5bc887 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -1023,6 +1023,9 @@ echo "IMAGEFORMAT=\"$IMAGEFORMAT\"" >> config/chroot if [ -n "$PASSES" ]; then echo "PASSES=\"$PASSES\"" >> config/common fi +if [ -n "$NO_SQUASHFS_PASSES" ]; then + echo "NO_SQUASHFS_PASSES=\"$NO_SQUASHFS_PASSES\"" >> config/common +fi if [ -n "$LIVE_PASSES" ]; then echo "LIVE_PASSES=\"$LIVE_PASSES\"" >> config/common fi diff --git a/live-build/lb_binary_layered b/live-build/lb_binary_layered index bea1a0fc..acd6f591 100755 --- a/live-build/lb_binary_layered +++ b/live-build/lb_binary_layered @@ -92,37 +92,54 @@ build_layered_squashfs () { rm -f chroot/boot/initrd.img-* chroot/boot/vmlinu{x,z}-* fi - # Full manifest until that PASS - squashfs_f_manifest="${base}.manifest" - create_manifest "chroot" "${squashfs_f_manifest}.full" - - # Delta manifest - diff -NU0 ${PWD}/livecd.${PROJECT}.$(get_parent_pass $pass).manifest.full ${squashfs_f_manifest}.full|grep -v ^@ > $squashfs_f_manifest - - squashfs_f_size="${base}.size" - du -B 1 -s "overlay.${pass}/" | cut -f1 > "${squashfs_f_size}" - - # We take first live pass for "global" ISO properties (used by installers and checkers): - # Prepare initrd + kernel - # Main manifest and size files - prefix="livecd.$PROJECT${SUBARCH:+-$SUBARCH}" - if [ ! -e "${prefix}.manifest" ] && $(is_live_layer "$pass"); then - totalsize=$(cat ${squashfs_f_size}) - curpass="$pass" - while :; do - curpass=$(get_parent_pass $curpass) - # We climbed up the tree to the root layer, we are done - [ -z "$curpass" ] && break - - totalsize=$(expr $totalsize + $(cat "${PWD}/livecd.${PROJECT}.${curpass}.size")) - done - echo ${totalsize} > "${prefix}.size" - - cp "${squashfs_f_manifest}.full" "${prefix}.manifest" + make_squashfs=yes + ppass="${pass}" + while :; do + for nsp in ${NO_SQUASHFS_PASSES}; do + if [ "${ppass}" = "${nsp}" ]; then + make_squashfs=no + break 2 + fi + done + ppass="$(get_parent_pass "${ppass}")" + if [ -z "${ppass}" ]; then + break + fi + done + + if [ $make_squashfs = yes ]; then + # Full manifest until that PASS + squashfs_f_manifest="${base}.manifest" + create_manifest "chroot" "${squashfs_f_manifest}.full" + + # Delta manifest + diff -NU0 ${PWD}/livecd.${PROJECT}.$(get_parent_pass $pass).manifest.full ${squashfs_f_manifest}.full|grep -v ^@ > $squashfs_f_manifest + + squashfs_f_size="${base}.size" + du -B 1 -s "overlay.${pass}/" | cut -f1 > "${squashfs_f_size}" + + # We take first live pass for "global" ISO properties (used by installers and checkers): + # Prepare initrd + kernel + # Main manifest and size files + prefix="livecd.$PROJECT${SUBARCH:+-$SUBARCH}" + if [ ! -e "${prefix}.manifest" ] && $(is_live_layer "$pass"); then + totalsize=$(cat ${squashfs_f_size}) + curpass="$pass" + while :; do + curpass=$(get_parent_pass $curpass) + # We climbed up the tree to the root layer, we are done + [ -z "$curpass" ] && break + + totalsize=$(expr $totalsize + $(cat "${PWD}/livecd.${PROJECT}.${curpass}.size")) + done + echo ${totalsize} > "${prefix}.size" + + cp "${squashfs_f_manifest}.full" "${prefix}.manifest" + fi + + create_squashfs "overlay.${pass}/" ${squashfs_f} fi - create_squashfs "overlay.${pass}" ${squashfs_f} - if [ -n "$lowerdirs" ]; then umount chroot rmdir chroot