]>
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 | ||
7 | # relative to the ESP mountpoint | |
8 | PMX_ESP_DIR="EFI/proxmox" | |
9 | PMX_LOADER_CONF="loader/loader.conf" | |
10 | ||
b17a1cf3 SI |
11 | # adapted from /etc/kernel/postinst.d/apt-auto-removal as present in |
12 | # debian's apt package: | |
13 | # | |
14 | # Mark as not-for-autoremoval those kernel packages that are: | |
15 | # - the currently booted version | |
16 | # - the kernel version we've been called for | |
17 | # - the latest kernel version (as determined by debian version number) | |
18 | # - the second-latest kernel version | |
19 | # - the latest kernel version of each series (e.g. 4.13, 4.15, 5.0) by | |
20 | # marking the meta-packages | |
21 | ||
22 | kernel_keep_versions() { | |
23 | eval "$(apt-config shell DPKG Dir::bin::dpkg/f)" | |
24 | test -n "$DPKG" || DPKG="/usr/bin/dpkg" | |
25 | ||
26 | list="$("${DPKG}" -l | awk '/^[ih][^nc][ ]+pve-kernel-[0-9]+\./ && $2 !~ /-dbg(:.*)?$/ && $2 !~ /-dbgsym(:.*)?$/ { print $2; }' \ | |
27 | | sed -e 's#^pve-kernel-##' -e 's#:[^:]\+ # #')" | |
28 | ||
29 | sorted_list="$(echo "$list" | sort --unique --reverse --version-sort)" | |
30 | ||
31 | [ -n "$1" ] && install_version="$1" | |
32 | ||
33 | running_version="$(uname -r | tr 'A-Z' 'a-z')" | |
34 | ||
35 | # ignore the currently running version if attempting a reproducible build | |
36 | if [ -n "${SOURCE_DATE_EPOCH}" ]; then | |
37 | running_version="" | |
38 | fi | |
39 | ||
40 | latest_2_versions="$(echo "$sorted_list" | grep -E '^[^ ]+-pve' | head -n2 )" | |
41 | ||
42 | series_metapackages="$(echo "$sorted_list" | grep -Ev '^[^ ]+-pve')" | |
43 | ||
44 | kernels="$(cat <<-EOF | |
45 | $running_version | |
46 | $install_version | |
47 | $latest_2_versions | |
48 | $series_metapackages | |
49 | EOF | |
50 | )" | |
51 | ||
52 | echo "$kernels" | sort -u | sed -e '/^$/ d' | |
53 | } | |
54 | ||
55 | #bootable kernels are the same as the no_autoremove ones without the meta-package | |
56 | boot_kernel_list() { | |
57 | list="$(kernel_keep_versions "$@")" | |
58 | ||
59 | echo "$list" | grep -E '^[^ ]+-pve' | |
60 | ||
61 | } | |
62 | ||
63 | warn() { | |
64 | echo "$@" 1>&2 | |
65 | } | |
7800310c FG |
66 | |
67 | reexec_in_mountns() { | |
68 | if [ -z "$PVE_EFIBOOT_UNSHARED" ]; then | |
69 | export PVE_EFIBOOT_UNSHARED=1 | |
70 | echo "Re-executing '$0' in new private mount namespace.." | |
71 | unshare --mount --propagation private "$0" "$@" | |
72 | exit 0 | |
73 | fi | |
74 | } |