edge-kernel.sh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/usr/bin/env bash
  2. # Copyright (c) 2021-2023 tteck
  3. # Author: tteck (tteckster)
  4. # License: MIT
  5. # https://github.com/tteck/Proxmox/raw/main/LICENSE
  6. # bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/edge-kernel.sh)"
  7. function header_info {
  8. cat <<"EOF"
  9. ____ _ ________ ______ __ __ __ __
  10. / __ \ | / / ____/ / ____/___/ /___ ____ / //_/__ _________ ___ / /____
  11. / /_/ / | / / __/ / __/ / __ / __ `/ _ \ / ,< / _ \/ ___/ __ \/ _ \/ / ___/
  12. / ____/| |/ / /___ / /___/ /_/ / /_/ / __/ / /| / __/ / / / / / __/ (__ )
  13. /_/ |___/_____/ /_____/\__,_/\__, /\___/ /_/ |_\___/_/ /_/ /_/\___/_/____/
  14. /____/
  15. EOF
  16. }
  17. set -e
  18. KERNEL_ON=$(uname -r)
  19. PVE_KERNEL=$(dpkg --list | grep 'kernel-.*-pve' | awk '{print substr($2, 12, length($2)-1) }' | tac | head -n 1)
  20. EDGE_KERNEL=$(dpkg --list | grep 'kernel-.*-edge' | awk '{print substr($2, 12, length($2)-1) }' | tac | head -n 1)
  21. VER=$(curl -s https://api.github.com/repos/fabianishere/pve-edge-kernel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-9) }')
  22. KER=$(curl -s https://api.github.com/repos/fabianishere/pve-edge-kernel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-6) }')
  23. clear
  24. header_info
  25. while true; do
  26. read -p "This is a Proxmox Edge Kernel Tool, USE AT YOUR OWN RISK. Proceed(y/n)?" yn
  27. case $yn in
  28. [Yy]*) break ;;
  29. [Nn]*) exit ;;
  30. *) echo "Please answer yes or no." ;;
  31. esac
  32. done
  33. clear
  34. header_info
  35. show_menu() {
  36. normal=$(echo "\033[m")
  37. safe=$(echo "\033[32m")
  38. menu=$(echo "\033[36m")
  39. number=$(echo "\033[33m")
  40. bgred=$(echo "\033[41m")
  41. fgred=$(echo "\033[31m")
  42. proxmox-boot-tool kernel list
  43. echo -e "\nCurrent Kernel: ${menu}${KERNEL_ON}${normal}"
  44. printf "\n${menu}*********************************************${normal}\n"
  45. printf "${menu}**${number} 1)${normal} Install Proxmox Edge Kernel ${menu}${KER}${normal} & Reboot\n"
  46. printf "${menu}**${number} 2)${normal} Switch to Proxmox VE 7 ${menu}${PVE_KERNEL}${normal} Kernel & Reboot\n"
  47. printf "${menu}**${number} 3)${normal} Switch to Proxmox Edge ${menu}${EDGE_KERNEL}${normal} Kernel & Reboot\n"
  48. printf "${menu}**${number} 4)${normal} Unpin Current Kernel\n"
  49. printf "${menu}**${number} 5)${normal} Remove All Current ${menu}${VER}*${normal} Proxmox Edge Kernels & Reboot\n"
  50. printf "${menu}*********************************************${normal}\n"
  51. printf "Please choose an option from the menu, or ${fgred}x${normal} to exit."
  52. read opt
  53. }
  54. option_picked() {
  55. msgcolor=$(echo "\033[01;31m")
  56. normal=$(echo "\033[00;00m")
  57. message=${@:-"${normal}Error: No message passed"}
  58. printf "${msgcolor}${message}${normal}\n"
  59. }
  60. clear
  61. header_info
  62. show_menu
  63. while [ "$opt" != "" ]; do
  64. if [ "$opt" = "" ]; then
  65. exit
  66. else
  67. case $opt in
  68. 1)
  69. while true; do
  70. read -p "Are you sure you want to Install Proxmox Edge Kernel & Reboot? Proceed(y/n)?" yn
  71. case $yn in
  72. [Yy]*) break ;;
  73. [Nn]*) exit ;;
  74. *) echo "Please answer yes or no." ;;
  75. esac
  76. done
  77. clear
  78. option_picked "Installing Proxmox Edge Kernel & Rebooting"
  79. apt-get install -y gnupg
  80. curl -1sLf 'https://dl.cloudsmith.io/public/pve-edge/kernel/gpg.8EC01CCF309B98E7.key' | apt-key add -
  81. echo "deb https://dl.cloudsmith.io/public/pve-edge/kernel/deb/debian bullseye main" >/etc/apt/sources.list.d/pve-edge-kernel.list
  82. apt-get -y update
  83. apt-get -y install pve-kernel-${VER}-edge
  84. reboot
  85. break
  86. ;;
  87. 2)
  88. while true; do
  89. read -p "Are you sure you want to Switch to Proxmox VE 7 ${PVE_KERNEL} Kernel & Reboot? Proceed(y/n)?" yn
  90. case $yn in
  91. [Yy]*) break ;;
  92. [Nn]*) exit ;;
  93. *) echo "Please answer yes or no." ;;
  94. esac
  95. done
  96. clear
  97. option_picked "Switching to Proxmox VE 7 Kernel & Rebooting"
  98. proxmox-boot-tool kernel pin ${PVE_KERNEL}
  99. reboot
  100. break
  101. ;;
  102. 3)
  103. while true; do
  104. read -p "Are you sure you want to Switch to Proxmox ${EDGE_KERNEL} Edge Kernel & Reboot? Proceed(y/n)?" yn
  105. case $yn in
  106. [Yy]*) break ;;
  107. [Nn]*) exit ;;
  108. *) echo "Please answer yes or no." ;;
  109. esac
  110. done
  111. clear
  112. option_picked "Switching to Proxmox Edge Kernel & Rebooting"
  113. proxmox-boot-tool kernel pin ${EDGE_KERNEL}
  114. reboot
  115. break
  116. ;;
  117. 4)
  118. while true; do
  119. read -p "Are you sure you want to Unpin the Current Kernel? Proceed(y/n)?" yn
  120. case $yn in
  121. [Yy]*) break ;;
  122. [Nn]*) exit ;;
  123. *) echo "Please answer yes or no." ;;
  124. esac
  125. done
  126. clear
  127. option_picked "Unpinning Current Kernel"
  128. proxmox-boot-tool kernel unpin
  129. clear
  130. break
  131. ;;
  132. 5)
  133. while true; do
  134. read -p "Are you sure you want to Remove Proxmox Edge Kernel & Reboot? Proceed(y/n)?" yn
  135. case $yn in
  136. [Yy]*) break ;;
  137. [Nn]*) exit ;;
  138. *) echo "Please answer yes or no." ;;
  139. esac
  140. done
  141. clear
  142. option_picked "Removing Proxmox Edge Kernel & Rebooting"
  143. apt --purge remove -y pve-kernel-${VER}*edge pve-headers-${VER}*edge
  144. rm -rf /etc/apt/sources.list.d/pve-edge-kernel.list
  145. proxmox-boot-tool kernel unpin
  146. reboot
  147. break
  148. ;;
  149. x)
  150. exit
  151. ;;
  152. \n)
  153. exit
  154. ;;
  155. *)
  156. clear
  157. option_picked "Please choose an option from the menu"
  158. header_info
  159. show_menu
  160. ;;
  161. esac
  162. fi
  163. done
  164. header_info
  165. show_menu