]>
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 | ||
e0bda4e7 | 44 | series_metapackages="$(echo "$sorted_list" | grep -Ev '^[^ ]+-pve' | head -n2)" |
b17a1cf3 | 45 | |
e0bda4e7 | 46 | oldseries="$(echo "$series_metapackages" | tail -n1)" |
e0379dcf FG |
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 | ||
4f11dd63 | 70 | echo "$list" | grep -E '^[^ ]+-pve' || true |
b17a1cf3 SI |
71 | } |
72 | ||
73 | warn() { | |
74 | echo "$@" 1>&2 | |
75 | } | |
7800310c FG |
76 | |
77 | reexec_in_mountns() { | |
78 | if [ -z "$PVE_EFIBOOT_UNSHARED" ]; then | |
79 | export PVE_EFIBOOT_UNSHARED=1 | |
80 | echo "Re-executing '$0' in new private mount namespace.." | |
81 | unshare --mount --propagation private "$0" "$@" | |
82 | exit 0 | |
83 | fi | |
84 | } | |
4bd56b83 FG |
85 | |
86 | loop_esp_list() { | |
87 | if [ ! -e ${ESP_LIST} ]; then | |
88 | return 2 | |
89 | fi | |
90 | ||
91 | cat "${ESP_LIST}" | while IFS= read -r curr_uuid; do | |
92 | if [ -z "$curr_uuid" ]; then | |
93 | continue | |
94 | fi | |
95 | "$@" | |
96 | done | |
97 | } |