kernel-clean-v3.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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, USE AT YOUR OWN RISK. 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. edge_kernel
  52. kernel_info
  53. kernel_clean
  54. fi
  55. }
  56. function edge_kernel() {
  57. if [[ "$current_kernel" == *"edge"* ]]; then
  58. echo -e "\n${CROSS} ${RD}ERROR:${CL} Proxmox ${BL}${current_kernel}${CL} Kernel Active"
  59. echo -e "\nAn Active PVE Kernel is required to use Kernel Clean\n"
  60. exit 1
  61. fi
  62. }
  63. function kernel_info() {
  64. latest_kernel=$(dpkg --list| grep 'kernel-.*-pve' | awk '{print $2}' | tac | head -n 1)
  65. echo -e "${YW}PVE Version: ${BL}$pve\n${CL}"
  66. if [[ "$current_kernel" == *"pve"* ]]; then
  67. if [[ "$latest_kernel" != *"$current_kernel"* ]]; then
  68. echo -e "${GN}Latest Kernel: $latest_kernel\n${CL}"
  69. fi
  70. else
  71. echo -e "\n${CROSS} ${RD}ERROR: No PVE Kernel Found\n${CL}"
  72. exit 1
  73. fi
  74. }
  75. function kernel_clean() {
  76. kernels=$(dpkg --list| grep 'kernel-.*-pve' | awk '{print $2}' | sort -V)
  77. remove_kernels=""
  78. for kernel in $kernels
  79. do
  80. if [ "$(echo $kernel | grep $current_kernel)" ]; then
  81. break
  82. else
  83. echo -e "${BL}'$kernel' ${CL}${YW}has been added to the remove Kernel list\n${CL}"
  84. remove_kernels+=" $kernel"
  85. fi
  86. done
  87. msg_ok "Kernel Search Completed\n"
  88. if [[ "$remove_kernels" != *"pve"* ]]; then
  89. echo -e "${PARTY} ${GN}It appears there are no old Kernels on your system. \n${CL}"
  90. msg_info "Exiting"
  91. sleep 2
  92. msg_ok "Done"
  93. else
  94. read -p "Would you like to remove the $(echo $remove_kernels | awk '{print NF}') selected Kernels listed above? [y/n]: " -n 1 -r
  95. echo
  96. if [[ $REPLY =~ ^[Yy]$ ]]; then
  97. msg_info "Removing ${CL}${RD}$(echo $remove_kernels | awk '{print NF}') ${CL}${YW}old Kernels${CL}"
  98. /usr/bin/apt purge -y $remove_kernels > /dev/null 2>&1
  99. msg_ok "Successfully Removed Kernels"
  100. msg_info "Updating GRUB"
  101. /usr/sbin/update-grub > /dev/null 2>&1
  102. msg_ok "Successfully Updated GRUB"
  103. msg_info "Exiting"
  104. sleep 2
  105. msg_ok "Done"
  106. else
  107. msg_info "Exiting"
  108. sleep 2
  109. msg_ok "Done"
  110. fi
  111. fi
  112. }
  113. check_root