@@ -16,17 +16,17 @@ function header_info {
1616
1717EOF
1818}
19+
20+ # Color variables for output
1921YW=$( echo " \033[33m" )
2022RD=$( echo " \033[01;31m" )
2123GN=$( echo " \033[1;92m" )
2224CL=$( echo " \033[m" )
2325BFR=" \\ r\\ 033[K"
2426HOLD=" -"
2527CM=" ${GN} ✓${CL} "
26- current_kernel=$( uname -r)
27- available_kernels=$( dpkg --list | grep ' kernel-.*-pve' | awk ' {print $2}' | grep -v " $current_kernel " | sort -V)
28- header_info
2928
29+ # Functions for logging messages
3030function msg_info() {
3131 local msg=" $1 "
3232 echo -ne " ${HOLD} ${YW}${msg} ..."
@@ -37,39 +37,84 @@ function msg_ok() {
3737 echo -e " ${BFR} ${CM} ${GN}${msg}${CL} "
3838}
3939
40- whiptail --backtitle " Proxmox VE Helper Scripts" --title " Proxmox VE Kernel Clean" --yesno " This will Clean Unused Kernel Images, USE AT YOUR OWN RISK. Proceed?" 10 68 || exit
40+ # Detect current kernel
41+ current_kernel=$( uname -r)
42+
43+ # Detect all installed kernels except the current one
44+ available_kernels=$( dpkg --list | grep ' kernel-.*-pve' | awk ' {print $2}' | grep -v " $current_kernel " | sort -V)
45+
46+ header_info
47+
48+ # If no old kernels are available, exit with a message
4149if [ -z " $available_kernels " ]; then
42- whiptail --backtitle " Proxmox VE Helper Scripts" --title " No Old Kernels" --msgbox " It appears there are no old Kernels on your system. \nCurrent kernel ($current_kernel )." 10 68
50+ whiptail --backtitle " Proxmox VE Helper Scripts" --title " No Old Kernels" \
51+ --msgbox " It appears there are no old kernels on your system.\nCurrent kernel: $current_kernel " 10 68
4352 echo " Exiting..."
4453 sleep 2
4554 clear
4655 exit
4756fi
48- KERNEL_MENU=()
49- MSG_MAX_LENGTH=0
57+
58+ # Prepare kernel options for selection
59+ KERNEL_MENU=()
5060while read -r TAG ITEM; do
5161 OFFSET=2
52- (( ${# ITEM} + OFFSET > MSG_MAX_LENGTH )) && MSG_MAX_LENGTH= ${# ITEM} + OFFSET
62+ MSG_MAX_LENGTH= $(( MSG_MAX_LENGTH < ${# ITEM} + OFFSET ? ${# ITEM} + OFFSET : MSG_MAX_LENGTH ))
5363 KERNEL_MENU+=(" $TAG " " $ITEM " " OFF" )
5464done < <( echo " $available_kernels " )
5565
56- remove_kernels=$( whiptail --backtitle " Proxmox VE Helper Scripts" --title " Current Kernel $current_kernel " --checklist " \nSelect Kernels to remove:\n" 16 $(( MSG_MAX_LENGTH + 58 )) 6 " ${KERNEL_MENU[@]} " 3>&1 1>&2 2>&3 | tr -d ' "' ) || exit
66+ # Display checklist to select kernels for removal
67+ remove_kernels=$( whiptail --backtitle " Proxmox VE Helper Scripts" \
68+ --title " Current Kernel: $current_kernel " \
69+ --checklist " \nSelect kernels to remove:\n" \
70+ 16 $(( MSG_MAX_LENGTH + 58 )) 6 " ${KERNEL_MENU[@]} " 3>&1 1>&2 2>&3 | tr -d ' "' ) || exit
71+
72+ # Exit if no kernel was selected
5773[ -z " $remove_kernels " ] && {
58- whiptail --backtitle " Proxmox VE Helper Scripts" --title " No Kernel Selected" --msgbox " It appears that no Kernel was selected" 10 68
74+ whiptail --backtitle " Proxmox VE Helper Scripts" --title " No Kernel Selected" \
75+ --msgbox " It appears no kernel was selected." 10 68
5976 echo " Exiting..."
6077 sleep 2
6178 clear
6279 exit
6380}
64- whiptail --backtitle " Proxmox VE Helper Scripts" --title " Remove Kernels" --yesno " Would you like to remove the $( echo $remove_kernels | awk ' {print NF}' ) previously selected Kernels?" 10 68 || exit
6581
66- msg_info " Removing ${CL}${RD} $( echo $remove_kernels | awk ' {print NF} ' ) ${CL}${YW} old Kernels ${CL} "
67- /usr/bin/apt purge -y $remove_kernels > /dev/null 2>&1
68- msg_ok " Successfully Removed Kernels "
82+ # Confirm removal
83+ whiptail --backtitle " Proxmox VE Helper Scripts " --title " Remove Kernels " \
84+ --yesno " Would you like to remove the $( echo $remove_kernels | awk ' {print NF} ' ) selected kernels? " 10 68 || exit
6985
86+ # Process kernel removal
87+ msg_info " Removing ${RD} $( echo $remove_kernels | awk ' {print NF}' ) ${YW} old kernels${CL} "
88+ for kernel in $remove_kernels ; do
89+ if [[ $kernel == * " -signed" ]]; then
90+ # Handle signed kernels with dependencies
91+ touch /please-remove-proxmox-ve # Temporarily bypass Proxmox warnings
92+ if sudo apt-get purge -y " $kernel " > /dev/null 2>&1 ; then
93+ msg_ok " Removed kernel: $kernel "
94+ else
95+ msg_info " Failed to remove kernel: $kernel . Check dependencies or manual removal."
96+ fi
97+ rm -f /please-remove-proxmox-ve # Clean up bypass file
98+ else
99+ # Standard kernel removal
100+ if sudo apt-get purge -y " $kernel " > /dev/null 2>&1 ; then
101+ msg_ok " Removed kernel: $kernel "
102+ else
103+ msg_info " Failed to remove kernel: $kernel . Check dependencies or manual removal."
104+ fi
105+ fi
106+ sleep 1
107+ done
108+
109+ # Update GRUB configuration
70110msg_info " Updating GRUB"
71- /usr/sbin/update-grub > /dev/null 2>&1
72- msg_ok " Successfully Updated GRUB"
111+ if /usr/sbin/update-grub > /dev/null 2>&1 ; then
112+ msg_ok " GRUB updated successfully"
113+ else
114+ msg_info " Failed to update GRUB"
115+ fi
116+
117+ # Completion message
73118msg_info " Exiting"
74119sleep 2
75120msg_ok " Finished"
0 commit comments