]>
Commit | Line | Data |
---|---|---|
b17a1cf3 SI |
1 | #! /bin/sh |
2 | set -e | |
3 | ||
e3928378 FG |
4 | ESP_LIST="/etc/kernel/pve-efiboot-uuids" |
5 | ESPTYPE='c12a7328-f81f-11d2-ba4b-00a0c93ec93b' | |
6 | ||
427fba71 FG |
7 | MANUAL_KERNEL_LIST="/etc/kernel/pve-efiboot-manual-kernels" |
8 | ||
e3928378 FG |
9 | # relative to the ESP mountpoint |
10 | PMX_ESP_DIR="EFI/proxmox" | |
11 | PMX_LOADER_CONF="loader/loader.conf" | |
12 | ||
b17a1cf3 SI |
13 | # adapted from /etc/kernel/postinst.d/apt-auto-removal as present in |
14 | # debian's apt package: | |
15 | # | |
16 | # Mark as not-for-autoremoval those kernel packages that are: | |
17 | # - the currently booted version | |
18 | # - the kernel version we've been called for | |
19 | # - the latest kernel version (as determined by debian version number) | |
20 | # - the second-latest kernel version | |
21 | # - the latest kernel version of each series (e.g. 4.13, 4.15, 5.0) by | |
22 | # marking the meta-packages | |
23 | ||
24 | kernel_keep_versions() { | |
25 | eval "$(apt-config shell DPKG Dir::bin::dpkg/f)" | |
26 | test -n "$DPKG" || DPKG="/usr/bin/dpkg" | |
27 | ||
28 | list="$("${DPKG}" -l | awk '/^[ih][^nc][ ]+pve-kernel-[0-9]+\./ && $2 !~ /-dbg(:.*)?$/ && $2 !~ /-dbgsym(:.*)?$/ { print $2; }' \ | |
29 | | sed -e 's#^pve-kernel-##' -e 's#:[^:]\+ # #')" | |
30 | ||
31 | sorted_list="$(echo "$list" | sort --unique --reverse --version-sort)" | |
32 | ||
33 | [ -n "$1" ] && install_version="$1" | |
34 | ||
35 | running_version="$(uname -r | tr 'A-Z' 'a-z')" | |
36 | ||
37 | # ignore the currently running version if attempting a reproducible build | |
38 | if [ -n "${SOURCE_DATE_EPOCH}" ]; then | |
39 | running_version="" | |
40 | fi | |
41 | ||
42 | latest_2_versions="$(echo "$sorted_list" | grep -E '^[^ ]+-pve' | head -n2 )" | |
43 | ||
44 | series_metapackages="$(echo "$sorted_list" | grep -Ev '^[^ ]+-pve')" | |
45 | ||
e0379dcf FG |
46 | oldseries="$(echo "$series_metapackages" | head -n2 | tail -n1)" |
47 | oldseries_latest_kernel="$(echo "$sorted_list" | grep -E "^${oldseries}\.[^ ]+-pve" | head -n1 )" | |
48 | ||
427fba71 FG |
49 | if [ -e "$MANUAL_KERNEL_LIST" ]; then |
50 | manual_kernels="$(cat "$MANUAL_KERNEL_LIST")" | |
51 | fi | |
52 | ||
b17a1cf3 SI |
53 | kernels="$(cat <<-EOF |
54 | $running_version | |
55 | $install_version | |
427fba71 | 56 | $manual_kernels |
b17a1cf3 SI |
57 | $latest_2_versions |
58 | $series_metapackages | |
e0379dcf | 59 | $oldseries_latest_kernel |
b17a1cf3 SI |
60 | EOF |
61 | )" | |
62 | ||
63 | echo "$kernels" | sort -u | sed -e '/^$/ d' | |
64 | } | |
65 | ||
66 | #bootable kernels are the same as the no_autoremove ones without the meta-package | |
67 | boot_kernel_list() { | |
68 | list="$(kernel_keep_versions "$@")" | |
69 | ||
70 | echo "$list" | grep -E '^[^ ]+-pve' | |
71 | ||
72 | } | |
73 | ||
74 | warn() { | |
75 | echo "$@" 1>&2 | |
76 | } | |
7800310c FG |
77 | |
78 | reexec_in_mountns() { | |
79 | if [ -z "$PVE_EFIBOOT_UNSHARED" ]; then | |
80 | export PVE_EFIBOOT_UNSHARED=1 | |
81 | echo "Re-executing '$0' in new private mount namespace.." | |
82 | unshare --mount --propagation private "$0" "$@" | |
83 | exit 0 | |
84 | fi | |
85 | } | |
4bd56b83 FG |
86 | |
87 | loop_esp_list() { | |
88 | if [ ! -e ${ESP_LIST} ]; then | |
89 | return 2 | |
90 | fi | |
91 | ||
92 | cat "${ESP_LIST}" | while IFS= read -r curr_uuid; do | |
93 | if [ -z "$curr_uuid" ]; then | |
94 | continue | |
95 | fi | |
96 | "$@" | |
97 | done | |
98 | } |