| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- #!/bin/bash
- # Check root Permissions
- clear
- if [ "$(id -u)" -ne 0 ]; then
- echo "You must run this script as root."
- exit 1
- fi
- # Program: Display Current Boot Linux Kernel version
- function display_current_kernel() {
- echo ""
- echo "Current Boot Linux Kernel:"
- uname -r
- sleep 3s
- }
- # Program: Display Next Boot Default Kernel version
- function display_default_kernel() {
- default_kernel=$(grubby --default-kernel)
- echo ""
- echo "Next Boot Default Kernel:"
- echo "$default_kernel"
- sleep 3s
- }
- # Program: Identify Linux (RHEL) version
- CURRENT_LINUX_MAIN_VERSION=$(cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/')
- echo "Current Linux Main Version is: " $CURRENT_LINUX_MAIN_VERSION
- ELREPO_KEY_URL="https://www.elrepo.org/RPM-GPG-KEY-elrepo.org"
- ELREPO_RPM_URL="https://www.elrepo.org/elrepo-release-$CURRENT_LINUX_MAIN_VERSION.el$CURRENT_LINUX_MAIN_VERSION.elrepo.noarch.rpm"
- RPM_PACKAGE="elrepo-release"
- # Program: Upgrade Kernel (LongTerm or MainLine Kernel Canbe Select)
- function upgrade_kernel() {
- # Program: Check ELRepo public key
- echo "Check and Import ELRepo public key...."
- curl -s -o /tmp/elrepo-public-key.temp $ELREPO_KEY_URL
- rpm --import /tmp/elrepo-public-key.temp 2>/dev/null
- if [ $? -eq 0 ]; then
- echo "Finished"
- else
- echo "Error"
- rm -f /tmp/elrepo-public-key.temp
- exit 1
- fi
- rm -f /tmp/elrepo-public-key.temp
- # Program: Install ELRepo
- if ! dnf list installed | grep -q $RPM_PACKAGE
- then
- echo "Install ELRepo..."
- dnf install -y $ELREPO_RPM_URL &>/dev/null
- sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/elrepo.repo
- sed -i 's#elrepo.org/linux#mirrors.tuna.tsinghua.edu.cn/elrepo#g' /etc/yum.repos.d/elrepo.repo
- dnf makecache &>/dev/null
- dnf --disablerepo=\* --enablerepo=elrepo-kernel repolist
- echo "ELRepo Install Done."
- else
- echo "ELRepo has been Installed."
- fi
- # Program: Check ELRepo Installation status
- if dnf list installed | grep -q $RPM_PACKAGE
- then
- echo "ELRepo Successfully Installed and Available."
- else
- echo "ELRepo Installation Failed or NotFound."
- exit 1
- fi
- # Display available Kernel packages
- echo "available Kernel packages:"
- dnf --disablerepo=\* --enablerepo=elrepo-kernel list 'kernel*'
- echo "Select Kernel version to Upgrade:"
- echo "1. LongTerm(lt)"
- echo "2. MainLine(ml)"
- echo -n "Please Select (1-2): "
- read -r kernel_type
- case $kernel_type in
- 1)
- # Upgrade to LongTerm(lt) Kernel
- echo "Upgrade to LongTerm(lt) Kernel..."
- dnf --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt.x86_64 &>/dev/null1
- dnf remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y &>/dev/null
- dnf --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64 &>/dev/null
- if [ $? -eq 0 ]; then
- echo "LongTerm(lt) Kernel Upgrade Completed."
- else
- echo "Failed to Upgrade Linux Kernel."
- fi
- sleep 3s
- ;;
- 2)
- # Upgrade to MainLine(ml) Kernel
- echo "Upgrade to MainLine(ml) Kernel..."
- dnf --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64 &>/dev/null
- dnf remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y &>/dev/null
- dnf --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64 &>/dev/null
- if [ $? -eq 0 ]; then
- echo "MainLine(ml) Kernel Upgrade Completed."
- else
- echo "Failed to Upgrade Linux Kernel."
- fi
- sleep 3s
- ;;
- *)
- echo "Invalid Input, Check keyboard input."
- sleep 3s
- ;;
- esac
- }
- # Program: Set Next Boot Kernel
- function set_next_boot_kernel() {
- echo "List the Installed Kernels and index Number."
- grubby --info=ALL | grep -E '^(index=|kernel=)'
- echo -n "Enter the Index Number of the Kernel for Next Boot: "
- read -r modir_type
- grubby --set-default $modir_type
- echo "The Next Default Boot Kernel is set successfully."
- grubby --default-kernel
- # Ask the user for restart server
- read -p "Do you want to restart the server? (y/n): " response
- # Restart System Option
- case "$response" in
- [yY][eE][sS]|[yY])
- echo "Server is Restarting......"
- sleep 3s
- reboot
- ;;
- *)
- echo "User Ignores Restart Server."
- sleep 3s
- ;;
- esac
- }
- # Program: Clean Kernel
- function clean_kernel() {
- # List All Installed Kernel packages.
- INSTALLED_KERNELS=$(rpm -qa | grep kernel | grep -v "^kernel-devel" | grep -v "^kernel-headers" | grep -v "^kernel-tools" | sort -V)
- # Get Currently Boot Kernel version.
- CURRENT_KERNEL=$(uname -r)
- # Displays All Installed Kernel versions.
- echo "Installed Kernel version: "
- echo "$INSTALLED_KERNELS"
- echo
- # Prompt User to Enter the Kernel Version to be Deleted (Multiple versions can be Entered, Separated by Spaces).
- read -p "Please enter the kernel version to be deleted (separated by spaces, or enter 'all' to delete all kernels except the current boot): " KERNELS_TO_REMOVE
- # If User inputs 'all', All Kernels will be Deleted except the Currently Boot Kernel.
- if [ "$KERNELS_TO_REMOVE" == "all" ]; then
- KERNELS_TO_REMOVE=$(echo "$INSTALLED_KERNELS" | grep -v "$CURRENT_KERNEL")
- fi
- # Traverse the Kernel version Entered by user, check whether it contains the currently boot kernel.
- for KERNEL in $KERNELS_TO_REMOVE; do
- if [ "$KERNEL" == "$CURRENT_KERNEL" ]; then
- echo "Error: Cannot Delete Currently Boot Kernel. $CURRENT_KERNEL"
- exit 1
- fi
- done
- # Ask User If you are Sure you want to Delete these Kernels.
- read -p "Are you sure you want to delete the following kernel? $KERNELS_TO_REMOVE (y/n): " CONFIRM
- if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
- echo "Wrong Input, Operation Cancelled."
- exit 0
- fi
- # Delete the User-Specified Kernel package.
- for KERNEL in $KERNELS_TO_REMOVE; do
- echo "Deleting Kernel $KERNEL..."
- rpm -e --nodeps "$KERNEL"
- if [ $? -ne 0 ]; then
- echo "Error: Unable Delete Kernel. $KERNEL"
- else
- echo "Kernel $KERNEL Successfully Deleted."
- fi
- done
- echo "Operation Completed."
- sleep 3s
- }
- # Show Kernel Manger Menu
- function show_menu() {
- clear
- echo ""
- echo "================================"
- echo "Linux Kernel Management Tool"
- echo "for RHEL/CentOS/Rocky/Alma/Oracle"
- echo "via: cxthhhhh.com"
- echo "================================"
- echo "Please Select:"
- echo "1. Display Currently Boot Linux Kernel"
- echo "2. Display Next Boot Default Kernel"
- echo "3. Upgrade Kernel"
- echo "4. Set Next Boot Kernel"
- echo "5. Clean Kernel"
- echo "0. Quit"
- echo "================================"
- echo ""
- }
- # Menu
- while true; do
- show_menu
- read -p "Please Select (0-5): " choice
- case $choice in
- 1)
- display_current_kernel
- ;;
- 2)
- display_default_kernel
- ;;
- 3)
- upgrade_kernel
- ;;
- 4)
- set_next_boot_kernel
- ;;
- 5)
- clean_kernel
- ;;
- 0)
- echo "Quit Tool..."
- exit 0
- ;;
- *)
- echo "Invalid Input, Check keyboard input."
- sleep 3s
- ;;
- esac
- done
|