|
|
@@ -0,0 +1,250 @@
|
|
|
+#!/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
|