1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#!/bin/sh
#
# SPDX-FileCopyrightText: 2022-2025 Helmut Grohne <helmut@subdivi.de>
# 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
|