#!/bin/sh # # Copyright 2022 Helmut Grohne # SPDX-License-Identifier: MIT # # This is a mmdebstrap customize hook that installs a kernel image. The name # of the kernel image depends on the architecture, derivative and release. set -eu if [ "${MMDEBSTRAP_VERBOSITY:-1}" -ge 3 ]; then set -x fi TARGET="$1" ARCHITECTURES=$(xargs < "$TARGET/var/lib/dpkg/arch") affected_by_1079443() { case "${ARCHITECTURES%% *}" in armel|armhf) ;; *) return 1 ;; esac test "${1:-}" = --maybe && return 0 test -d "$TARGET/etc/initramfs-tools/hooks" || return 1 dpkg-query --root="$TARGET" --showformat='${db:Status-Status}\n' --show dracut-install 2>/dev/null | grep -q '^installed$' } work_around_1079443() { # FTS or its usage in dracut-install is broken on some 32bit architectures. echo "Warning: working around #1079443" cat >"$TARGET/etc/initramfs-tools/hooks/work_around_1079443" <<'EOF' #!/bin/sh test "${1-}" = prereqs && exit 0 . /usr/share/initramfs-tools/hook-functions # work around #1079443 manual_add_modules virtio_blk EOF chmod +x "$TARGET/etc/initramfs-tools/hooks/work_around_1079443" if test "${1:-}" = --update && test -x "$TARGET/usr/bin/update-initramfs"; then chroot "$TARGET/update-initramfs -u" fi } if dpkg-query --root="$TARGET" --showformat='${db:Status-Status}\n' --show 'linux-image-*' 2>/dev/null | grep -q '^installed$'; then if affected_by_1079443; then work_around_1079443 --update fi exit 0 fi KERNEL_ARCH="${ARCHITECTURES%% *}" case "$KERNEL_ARCH" in armel) KERNEL_ARCH=rpi case "$ARCHITECTURES " in *" arm64 "*) KERNEL_ARCH=arm64:arm64 ;; *" armhf "*) KERNEL_ARCH=armmp:armhf ;; esac ;; armhf) KERNEL_ARCH=armmp case "$ARCHITECTURES " in *" arm64 "*) KERNEL_ARCH=arm64:arm64 ;; esac ;; hppa) KERNEL_ARCH=parisc ;; i386) KERNEL_ARCH=686-pae case "$ARCHITECTURES " in *" amd64 "*) KERNEL_ARCH=amd64:amd64 ;; esac ;; mips64el) KERNEL_ARCH=5kc-malta ;; mipsel) KERNEL_ARCH=4kc-malta case "$ARCHITECTURES " in *" mips64el "*) KERNEL_ARCH=5kc-malta:mips64el esac ;; ppc64) KERNEL_ARCH=powerpc64 ;; ppc64el) KERNEL_ARCH=powerpc64le ;; esac export APT_CONFIG="$MMDEBSTRAP_APT_CONFIG" if test "${MMDEBSTRAP_MODE:-}" = chrootless; then set -- \ -oDPkg::Options::=--force-not-root \ -oDPkg::Options::=--force-script-chrootless \ -oDPkg::Options::=--root="$TARGET" \ -oDPkg::Options::=--log="$TARGET/var/log/dpkg.log" else set -- -oDPkg::Chroot-Directory="$TARGET" fi # On some derivatives such as Ubuntu, linux image does not depend on an initramfs. KERNEL_SATISFY="linux-image-cloud-$KERNEL_ARCH | linux-image-$KERNEL_ARCH | linux-image-generic" INITRD_SATISFY="initramfs-tools | linux-initramfs-tool" if affected_by_1079443 --maybe; then apt-get --yes satisfy "$@" "$INITRD_SATISFY" if affected_by_1079443; then work_around_1079443 fi apt-get --yes satisfy "$@" "$KERNEL_SATISFY" else apt-get --yes satisfy "$@" "$KERNEL_SATISFY" "$INITRD_SATISFY" fi