blob: 0a252a43daafc0d2653bb8b1f5371905c89715fb (
plain)
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
#
# Copyright 2022 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
|