summaryrefslogtreecommitdiff
path: root/src/kernel-install/test-kernel-install.sh
blob: f16bb9f50f9d4d328c942b9365bbf54b3c5b54b1 (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
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
# shellcheck disable=SC2235
set -eu
set -o pipefail

kernel_install="${1:?}"
plugin="${2:?}"

D="$(mktemp --tmpdir --directory "test-kernel-install.XXXXXXXXXX")"

export _KERNEL_INSTALL_BOOTCTL="$PROJECT_BUILD_ROOT/bootctl"

# shellcheck disable=SC2064
trap "rm -rf '$D'" EXIT INT QUIT PIPE
mkdir -p "$D/boot"
mkdir -p "$D/efi"
mkdir -p "$D/sources"

echo 'buzy image' >"$D/sources/linux"
echo 'the initrd' >"$D/sources/initrd"
echo 'the-token' >"$D/sources/entry-token"
echo 'opt1 opt2' >"$D/sources/cmdline"

cat >"$D/sources/install.conf" <<EOF
layout=bls
initrd_generator=none
# those are overridden by envvars
BOOT_ROOT="$D/badboot"
MACHINE_ID=badbadbadbadbadbad6abadbadbadbad
EOF

export KERNEL_INSTALL_CONF_ROOT="$D/sources"
export KERNEL_INSTALL_PLUGINS="$plugin"
export BOOT_ROOT="$D/boot"
export BOOT_MNT="$D/boot"
export MACHINE_ID='3e0484f3634a418b8e6a39e8828b03e3'

"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"

entry="$BOOT_ROOT/loader/entries/the-token-1.1.1.conf"
test -f "$entry"
grep -qE '^title ' "$entry"
grep -qE '^version +1.1.1' "$entry"
grep -qE '^options +opt1 opt2' "$entry"
grep -qE '^linux .*/the-token/1.1.1/linux' "$entry"
grep -qE '^initrd .*/the-token/1.1.1/initrd' "$entry"

grep -qE 'image' "$BOOT_ROOT/the-token/1.1.1/linux"
grep -qE 'initrd' "$BOOT_ROOT/the-token/1.1.1/initrd"

"$kernel_install" inspect

"$kernel_install" -v remove 1.1.1
test ! -f "$entry"
test ! -f "$BOOT_ROOT/the-token/1.1.1/linux"
test ! -f "$BOOT_ROOT/the-token/1.1.1/initrd"

# Invoke kernel-install as installkernel
ln -s --relative -v "$kernel_install" "$D/sources/installkernel"
"$D/sources/installkernel" -v 1.1.2 "$D/sources/linux" System.map /somedirignored

entry="$BOOT_ROOT/loader/entries/the-token-1.1.2.conf"
test -f "$entry"
grep -qE '^title ' "$entry"
grep -qE '^version +1.1.2' "$entry"
grep -qE '^options +opt1 opt2' "$entry"
grep -qE '^linux .*/the-token/1.1.2/linux' "$entry"
( ! grep -qE '^initrd' "$entry" )

grep -qE 'image' "$BOOT_ROOT/the-token/1.1.2/linux"
test ! -e "$BOOT_ROOT/the-token/1.1.2/initrd"

# Check installation with boot counting
echo '56' >"$D/sources/tries"

"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"
entry="$BOOT_ROOT/loader/entries/the-token-1.1.1+56.conf"
test -f "$entry"
grep -qE '^title ' "$entry"
grep -qE '^version +1.1.1' "$entry"
grep -qE '^options +opt1 opt2' "$entry"
grep -qE '^linux .*/the-token/1.1.1/linux' "$entry"
grep -qE '^initrd .*/the-token/1.1.1/initrd' "$entry"

grep -qE 'image' "$BOOT_ROOT/the-token/1.1.1/linux"
grep -qE 'initrd' "$BOOT_ROOT/the-token/1.1.1/initrd"

if test -x "$_KERNEL_INSTALL_BOOTCTL"; then
    echo "Testing bootctl"
    e2="${entry%+*}_2.conf"
    cp "$entry" "$e2"
    export SYSTEMD_ESP_PATH=/

    # create file that is not referenced. Check if cleanup removes
    # it but leaves the rest alone
    :> "$BOOT_ROOT/the-token/1.1.2/initrd"
    "$_KERNEL_INSTALL_BOOTCTL" --root="$BOOT_ROOT" cleanup
    test ! -e "$BOOT_ROOT/the-token/1.1.2/initrd"
    test -e "$BOOT_ROOT/the-token/1.1.2/linux"
    test -e "$BOOT_ROOT/the-token/1.1.1/linux"
    test -e "$BOOT_ROOT/the-token/1.1.1/initrd"
    # now remove duplicated entry and make sure files are left over
    "$_KERNEL_INSTALL_BOOTCTL" --root="$BOOT_ROOT" unlink "${e2##*/}"
    test -e "$BOOT_ROOT/the-token/1.1.1/linux"
    test -e "$BOOT_ROOT/the-token/1.1.1/initrd"
    test -e "$entry"
    test ! -e "$e2"
    # remove last entry referencing those files
    entry_id="${entry##*/}"
    entry_id="${entry_id%+*}.conf"
    "$_KERNEL_INSTALL_BOOTCTL" --root="$BOOT_ROOT" unlink "$entry_id"
    test ! -e "$entry"
    test ! -e "$BOOT_ROOT/the-token/1.1.1/linux"
    test ! -e "$BOOT_ROOT/the-token/1.1.1/initrd"
fi