#!/usr/bin/env bash # Wird von build.sh und build_customer_iso.sh eingebunden (source), nicht # eigenstaendig ausgefuehrt. # Haengt initrd-hooks/casper-bottom/* als zusaetzliche cpio-Schicht an ein # bestehendes Casper-Initrd an - derselbe Mechanismus, den # backend_launch() (backends/mint/backend.sh) bereits fuer das # Kexec-Preseed nutzt und der per QEMU verifiziert ist: der Kernel haengt # spaeter aneinandergereihte cpio-Archive additiv an ein bestehendes # initramfs an. Noetig, weil Casper keinen automatischen /updates-Merge # kennt (real per QEMU-Boot widerlegt) - der Hook selbst kopiert # /cdrom/updates beim Boot auf das Root-Dateisystem, siehe # initrd-hooks/casper-bottom/21tuxflotte_updates. inject_casper_bottom_hooks() { local repo_dir="$1" local src_initrd="$2" local dest_initrd="$3" local hook_dir="${repo_dir}/initrd-hooks" local layer_dir layer_dir="$(mktemp -d)" # Ausserhalb von layer_dir, damit die Archiv-Datei sich beim Bauen nicht # selbst als leeren Eintrag einfaengt (find laeuft im selben Moment, in # dem die Shell-Redirection sie bereits anlegt). local cpio_out cpio_out="$(mktemp)" cp -a "${hook_dir}/casper-bottom" "${layer_dir}/scripts-casper-bottom-tmp" mkdir -p "${layer_dir}/scripts" mv "${layer_dir}/scripts-casper-bottom-tmp" "${layer_dir}/scripts/casper-bottom" chmod 0755 "${layer_dir}"/scripts/casper-bottom/* (cd "${layer_dir}" && find . -mindepth 1 | cpio -o -H newc 2>/dev/null | gzip) \ >"${cpio_out}" || { echo "Error: Casper-Bottom-Hook-Schicht konnte nicht gebaut werden." >&2; rm -rf "${layer_dir}"; rm -f "${cpio_out}"; return 1; } cat "${src_initrd}" "${cpio_out}" >"${dest_initrd}" || { echo "Error: Initrd konnte nicht mit Hook-Schicht zusammengesetzt werden." >&2; rm -rf "${layer_dir}"; rm -f "${cpio_out}"; return 1; } rm -rf "${layer_dir}" rm -f "${cpio_out}" }