kernel-clean-v3.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env bash -ex
  2. set -euo pipefail
  3. shopt -s inherit_errexit nullglob
  4. YW=`echo "\033[33m"`
  5. BL=`echo "\033[36m"`
  6. RD=`echo "\033[01;31m"`
  7. BGN=`echo "\033[4;92m"`
  8. GN=`echo "\033[1;92m"`
  9. DGN=`echo "\033[32m"`
  10. CL=`echo "\033[m"`
  11. BFR="\\r\\033[K"
  12. HOLD="-"
  13. CM="${GN}✓${CL}"
  14. CROSS="${RD}✗${CL}"
  15. PARTY="🎉"
  16. current_kernel=$(uname -r)
  17. pve=$(pveversion)
  18. while true; do
  19. read -p "This will Clean Unused Kernel Images. Proceed(y/n)?" yn
  20. case $yn in
  21. [Yy]* ) break;;
  22. [Nn]* ) exit;;
  23. * ) echo -e "${RD}Please answer y/n${CL}";;
  24. esac
  25. done
  26. clear
  27. function header_info {
  28. echo -e "${RD}
  29. _ __ _ _____ _
  30. | |/ / | | / ____| |
  31. | / ___ _ __ _ __ ___| | | | | | ___ __ _ _ __
  32. | < / _ \ __| _ \ / _ \ | | | | |/ _ \/ _ | _ \
  33. | \ __/ | | | | | __/ | | |____| | __/ (_| | | | |
  34. |_|\_\___|_| |_| |_|\___|_|v3\_____|_|\___|\__,_|_| |_|
  35. ${CL}"
  36. }
  37. function msg_info() {
  38. local msg="$1"
  39. echo -ne " ${HOLD} ${YW}${msg}..."
  40. }
  41. function msg_ok() {
  42. local msg="$1"
  43. echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
  44. }
  45. function check_root() {
  46. if [[ $EUID -ne 0 ]]; then
  47. echo -e "${CROSS}${RD}Error: This script must be ran as the root user.\n${CL}"
  48. exit 1
  49. else
  50. header_info
  51. kernel_info
  52. kernel_clean
  53. fi
  54. }
  55. function kernel_info() {
  56. latest_kernel=$(dpkg --list| grep 'kernel-.*-pve' | awk '{print $2}' | tac | head -n 1)
  57. echo -e "${YW}PVE Version: ${BL}$pve\n${CL}"
  58. if [[ "$current_kernel" == *"pve"* ]]; then
  59. if [[ "$latest_kernel" != *"$current_kernel"* ]]; then
  60. echo -e "${GN}Latest Kernel: $latest_kernel\n${CL}"
  61. fi
  62. else
  63. echo -e "\n${CROSS}${RD}ERROR: No PVE Kernel Found\n${CL}"
  64. exit 1
  65. fi
  66. }
  67. function kernel_clean() {
  68. kernels=$(dpkg --list| grep 'kernel-.*-pve' | awk '{print $2}' | sort -V)
  69. remove_kernels=""
  70. for kernel in $kernels
  71. do
  72. if [ "$(echo $kernel | grep $current_kernel)" ]; then
  73. break
  74. else
  75. echo -e "${BL}'$kernel' ${CL}${YW}has been added to the remove Kernel list\n${CL}"
  76. remove_kernels+=" $kernel"
  77. fi
  78. done
  79. msg_ok "Kernel Search Completed\n"
  80. if [[ "$remove_kernels" != *"pve"* ]]; then
  81. echo -e "${PARTY} ${GN}It appears there are no old Kernels on your system. \n${CL}"
  82. msg_info "Exiting"
  83. sleep 2
  84. msg_ok "Done"
  85. else
  86. read -p "${YW}Would you like to remove the${BL} $(echo $remove_kernels | awk '{print NF}') ${CL}${YW}selected Kernels listed above? [y/n]: ${CL}" -n 1 -r
  87. echo
  88. if [[ $REPLY =~ ^[Yy]$ ]]; then
  89. msg_info "Removing ${CL}${RD}$(echo $remove_kernels | awk '{print NF}') ${CL}${YW}old Kernels...${CL}"
  90. /usr/bin/apt purge -y $remove_kernels > /dev/null 2>&1
  91. msg_ok "Successfully Removed Kernels"
  92. msg_info "Updating GRUB"
  93. /usr/sbin/update-grub > /dev/null 2>&1
  94. msg_ok "Successfully Updated GRUB"
  95. msg_info "Exiting"
  96. sleep 2
  97. msg_ok "Done"
  98. else
  99. msg_info "Exiting"
  100. sleep 2
  101. msg_ok "Done"
  102. fi
  103. fi
  104. }
  105. check_root