Update kernel-clean.sh
Code overhaul with a fresh start.
This commit is contained in:
parent
e09013a8df
commit
644ca75dbd
1 changed files with 37 additions and 107 deletions
|
@ -6,8 +6,9 @@
|
||||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
cat <<"EOF"
|
clear
|
||||||
__ __ __ ________
|
cat <<"EOF"
|
||||||
|
__ __ __ ________
|
||||||
/ //_/__ _________ ___ / / / ____/ /__ ____ _____
|
/ //_/__ _________ ___ / / / ____/ /__ ____ _____
|
||||||
/ ,< / _ \/ ___/ __ \/ _ \/ / / / / / _ \/ __ `/ __ \
|
/ ,< / _ \/ ___/ __ \/ _ \/ / / / / / _ \/ __ `/ __ \
|
||||||
/ /| / __/ / / / / / __/ / / /___/ / __/ /_/ / / / /
|
/ /| / __/ / / / / / __/ / / /___/ / __/ /_/ / / / /
|
||||||
|
@ -15,126 +16,55 @@ function header_info {
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
set -euo pipefail
|
|
||||||
shopt -s inherit_errexit nullglob
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
|
||||||
RD=$(echo "\033[01;31m")
|
RD=$(echo "\033[01;31m")
|
||||||
BGN=$(echo "\033[4;92m")
|
|
||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
DGN=$(echo "\033[32m")
|
|
||||||
CL=$(echo "\033[m")
|
CL=$(echo "\033[m")
|
||||||
BFR="\\r\\033[K"
|
BFR="\\r\\033[K"
|
||||||
HOLD="-"
|
HOLD="-"
|
||||||
CM="${GN}✓${CL}"
|
CM="${GN}✓${CL}"
|
||||||
CROSS="${RD}✗${CL}"
|
|
||||||
PARTY="🎉"
|
|
||||||
current_kernel=$(uname -r)
|
current_kernel=$(uname -r)
|
||||||
clear
|
available_kernels=$(dpkg --list | grep 'kernel-.*-pve' | awk '{print $2}' | grep -v "$current_kernel" | sort -V)
|
||||||
header_info
|
header_info
|
||||||
while true; do
|
|
||||||
read -p "This will Clean Unused Kernel Images, USE AT YOUR OWN RISK. Proceed(y/n)?" yn
|
|
||||||
case $yn in
|
|
||||||
[Yy]*) break ;;
|
|
||||||
[Nn]*) exit ;;
|
|
||||||
*) echo -e "${RD}Please answer y/n${CL}" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
clear
|
|
||||||
function msg_info() {
|
function msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||||
}
|
}
|
||||||
|
|
||||||
function msg_ok() {
|
function msg_ok() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_root() {
|
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
|
||||||
if [[ $EUID -ne 0 ]]; then
|
|
||||||
echo -e "${CROSS}${RD}Error: This script must be ran as the root user.\n${CL}"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
header_info
|
|
||||||
other_kernel
|
|
||||||
kernel_info
|
|
||||||
kernel_clean
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
if [ -z "$available_kernels" ]; then
|
||||||
function other_kernel() {
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Other Kernels" --msgbox "It appears there are no old Kernels on your system. \nCurrent kernel ($current_kernel)." 10 68
|
||||||
if [[ "${VERSION}" == "bullseye" ]]; then
|
msg_info "Exiting"
|
||||||
if [[ "$current_kernel" == *"edge"* ]]; then
|
sleep 2
|
||||||
echo -e "\n${CROSS} ${RD}ERROR:${CL} Proxmox ${BL}${current_kernel}${CL} Kernel Active"
|
msg_ok "Done"
|
||||||
echo -e "\nAn Active PVE Kernel is required to use Kernel Clean\n"
|
exit
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [[ "$current_kernel" == *"6.1"* || "$current_kernel" == *"6.2"* ]]; then
|
|
||||||
echo -e "\n${CROSS} ${RD}ERROR:${CL} Proxmox ${BL}${current_kernel}${CL} Kernel Active"
|
|
||||||
echo -e "\nThe script cannot be used when running opt-in kernels. \nProxmox VE's package management relies directly on the current default kernel, which is 5.15. \nTherefore, it is not possible to utilize this script. In this case, you should use autoremove instead. \n`apt-get autoremove`\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function kernel_info() {
|
|
||||||
if [[ "$MODE" != "PBS" ]]; then
|
|
||||||
echo -e "${YW}PVE Version: ${BL}$(pveversion)\n${CL}"
|
|
||||||
fi
|
|
||||||
if [[ "$current_kernel" == *"pve"* ]]; then
|
|
||||||
echo -e "${YW}Current Kernel: ${BL}$current_kernel\n${CL}"
|
|
||||||
else
|
|
||||||
echo -e "\n${CROSS} ${RD}ERROR: No PVE Kernel Found\n${CL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function kernel_clean() {
|
|
||||||
kernels=$(dpkg --list | grep 'kernel-.*-pve' | awk '{print $2}' | sort -V)
|
|
||||||
remove_kernels=""
|
|
||||||
for kernel in $kernels; do
|
|
||||||
if [ "$(echo $kernel | grep $current_kernel)" ]; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo -e "${BL}'$kernel' ${CL}${YW}has been added to the remove Kernel list\n${CL}"
|
|
||||||
remove_kernels+=" $kernel"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
msg_ok "Kernel Search Completed\n"
|
|
||||||
if [[ "$remove_kernels" != *"pve"* ]]; then
|
|
||||||
echo -e "${PARTY} ${GN}It appears there are no old Kernels on your system. \n${CL}"
|
|
||||||
msg_info "Exiting"
|
|
||||||
sleep 2
|
|
||||||
msg_ok "Done"
|
|
||||||
else
|
|
||||||
read -p "Would you like to remove the $(echo $remove_kernels | awk '{print NF}') selected Kernels listed above? [y/n]: " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
msg_info "Removing ${CL}${RD}$(echo $remove_kernels | awk '{print NF}') ${CL}${YW}old Kernels${CL}"
|
|
||||||
/usr/bin/apt purge -y $remove_kernels >/dev/null 2>&1
|
|
||||||
msg_ok "Successfully Removed Kernels"
|
|
||||||
msg_info "Updating GRUB"
|
|
||||||
/usr/sbin/update-grub >/dev/null 2>&1
|
|
||||||
msg_ok "Successfully Updated GRUB"
|
|
||||||
msg_info "Exiting"
|
|
||||||
sleep 2
|
|
||||||
msg_ok "Done"
|
|
||||||
else
|
|
||||||
msg_info "Exiting"
|
|
||||||
sleep 2
|
|
||||||
msg_ok "Done"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if ! command -v pveversion >/dev/null 2>&1; then
|
|
||||||
echo -e " Switching to PBS mode"
|
|
||||||
MODE="PBS"
|
|
||||||
sleep 2
|
|
||||||
else
|
|
||||||
MODE="PVE"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_root
|
while read -r TAG ITEM; do
|
||||||
|
OFFSET=2
|
||||||
|
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
||||||
|
CTID_MENU+=("$TAG" "$ITEM " "OFF")
|
||||||
|
done < <(echo "$available_kernels")
|
||||||
|
|
||||||
|
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 "${CTID_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit
|
||||||
|
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Remove Kernels" --yesno "Would you like to remove the selected Kernels\n $remove_kernels\n Proceed?" 10 68 || exit
|
||||||
|
|
||||||
|
msg_info "Removing ${CL}${RD}$(echo $remove_kernels | awk '{print NF}') ${CL}${YW}old Kernels${CL}"
|
||||||
|
/usr/bin/apt purge -y $remove_kernels >/dev/null 2>&1
|
||||||
|
msg_ok "Successfully Removed Kernels"
|
||||||
|
|
||||||
|
msg_info "Updating GRUB"
|
||||||
|
/usr/sbin/update-grub >/dev/null 2>&1
|
||||||
|
msg_ok "Successfully Updated GRUB"
|
||||||
|
msg_info "Exiting"
|
||||||
|
sleep 2
|
||||||
|
msg_ok "Done"
|
||||||
|
|
Loading…
Reference in a new issue