]> git.proxmox.com Git - pve-kernel-meta.git/commitdiff
efiboot: add manual kernel list
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 12 Jul 2019 13:16:46 +0000 (15:16 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 15 Jul 2019 12:28:21 +0000 (14:28 +0200)
with 'kernels <add|remove>' command in pve-efiboot-tool to add/remove
kernels to/from manual kernel list, and honor it when generating lists
of kernels to not autoremove/sync to ESPs

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
bin/pve-efiboot-tool
efiboot/functions

index 1000bde6a42019e7fc846811f76130ccd5c84442..5c51cc0ce0cf7e325f25f589ca0c5a1e032f50cf 100755 (executable)
@@ -200,6 +200,40 @@ refresh() {
        exec $hookscript
 }
 
+add_kernel() {
+       ver="$1"
+
+       if [ -z "$ver" ]; then
+               warn "E: <kernel-version> is mandatory"
+               warn ""
+               exit 1
+       fi
+
+       if [ ! -e "/boot/vmlinuz-$ver" ]; then
+               warn "E: no kernel image found in /boot for '$ver', not adding."
+               exit 1
+       fi
+       _add_entry_to_list_file "$MANUAL_KERNEL_LIST" "$ver"
+       echo "Added kernel '$ver' to manual kernel list."
+}
+
+remove_kernel() {
+       ver="$1"
+
+       if [ -z "$ver" ]; then
+               warn "E: <kernel-version> is mandatory"
+               warn ""
+               exit 1
+       fi
+
+       if grep -sqFx "$ver" "$MANUAL_KERNEL_LIST"; then
+               _remove_entry_from_list_file "$MANUAL_KERNEL_LIST" "$ver"
+               echo "Removed kernel '$ver' from manual kernel list."
+       else
+               echo "Kernel '$ver' not found in manual kernel list."
+       fi
+}
+
 usage() {
        warn "USAGE: $0 <commands> [ARGS]"
        warn ""
@@ -207,6 +241,7 @@ usage() {
        warn "       $0 init <partition>"
        warn "       $0 clean [--dry-run]"
        warn "       $0 refresh"
+       warn "       $0 kernels <add|remove> <kernel-version>"
        warn "       $0 help"
 }
 
@@ -227,6 +262,10 @@ help() {
        echo ""
        echo "    refresh all configured EFI system partitions."
        echo ""
+       echo "USAGE: $0 kernels <add|remove> <kernel-version>"
+       echo ""
+       echo "    add/remove pve-kernel with ABI <kernel-version> to list of synced kernels, in addition to automatically selected ones."
+       echo ""
 }
 
 if [ -z "$1" ]; then
@@ -268,6 +307,32 @@ case "$1" in
                refresh
                exit 0
        ;;
+       'kernels')
+               shift
+               if [ -z "$1" ]; then
+                       warn "E: subcommand is mandatory."
+                       warn ""
+                       usage
+                       exit 1
+               fi
+               cmd="$1"
+               case "$cmd" in
+                       'add')
+                               add_kernel "$2"
+                               exit 0
+                       ;;
+                       'remove')
+                               remove_kernel "$2"
+                               exit 0
+                       ;;
+                       *)
+                               warn "E: invalid subcommand '$cmd'."
+                               warn ""
+                               usage
+                               exit 1
+                       ;;
+               esac
+       ;;
        'help')
                shift
                help
index b926170eed5d27575ce22d171b6d6d5d1496f76d..34a70426f8a0a2a1fa3d3fe336e1a0e15d384326 100755 (executable)
@@ -4,6 +4,8 @@ set -e
 ESP_LIST="/etc/kernel/pve-efiboot-uuids"
 ESPTYPE='c12a7328-f81f-11d2-ba4b-00a0c93ec93b'
 
+MANUAL_KERNEL_LIST="/etc/kernel/pve-efiboot-manual-kernels"
+
 # relative to the ESP mountpoint
 PMX_ESP_DIR="EFI/proxmox"
 PMX_LOADER_CONF="loader/loader.conf"
@@ -44,9 +46,14 @@ kernel_keep_versions() {
        oldseries="$(echo "$series_metapackages" | head -n2 | tail -n1)"
        oldseries_latest_kernel="$(echo "$sorted_list" | grep -E "^${oldseries}\.[^ ]+-pve" | head -n1 )"
 
+       if [ -e "$MANUAL_KERNEL_LIST" ]; then
+               manual_kernels="$(cat "$MANUAL_KERNEL_LIST")"
+       fi
+
        kernels="$(cat <<-EOF
                $running_version
                $install_version
+               $manual_kernels
                $latest_2_versions
                $series_metapackages
                $oldseries_latest_kernel