百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

分享一个实用脚本-一键升级Kernel版本

qiyuwang 2024-10-26 13:56 13 浏览 0 评论

基于ELRepo仓库源一键升级Kernel版本

最近需要初始化升级内核版本的机器有点多,为了方便写下升级脚本;操作环境:CentOS Linux release 7.8.2003 (Core);内核是底层,升级内核版本请慎重,非初始化服务器升级,请在测试环境多次验证确保升级后的内核版本对现有的应用服务无影响;该脚本底层实现参考:二进制部署Kubernetes V1.18.X(内核升级篇)

代码部分

#!/bin/bash
######################################
# 一键升级内核Kernel(基于ELRepo仓库)
# ***************
# date:2021-4-28
######################################
set -e 
#调用函数库
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
source /etc/profile >/dev/null 2>&1 
source /etc/bashrc >/dev/null 2>&1
Run_user="ordinaryUser"
#必须使用root用户执行脚本
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
# 定义日志输出
WORKPATH="$(dirname $(readlink -f $0))"
SCRIPTNAMEALL="$(basename $0)"
SCRIPTNAME="${SCRIPTNAMEALL%.*}"
LOGDATA="date '+%Y-%m-%d %H:%M:%S'"
LOGFILE="${WORKPATH}/logs/${SCRIPTNAME}_$(date +%F).log"
LOG="eval echo \`date +\"%Y-%m-%d %H:%M:%S\"\`"
[ ! -d ${WORKPATH}/logs ] && mkdir -p ${WORKPATH}/logs
#exec 2>> ${LOGFILE}
find ${WORKPATH}/logs -name "${SCRIPTNAME}_*.log" -type f -mtime +30 -exec rm {} \;
# 日志输出示例
# ${LOG}"[INFO]:Log output!" | tee -a ${LOGFILE}
#定义环境变量
Rpm=/usr/bin/rpm
Yum=/usr/bin/yum
#网络环境校验
function check_network_env(){
Elrepo_Url="www.elrepo.org"
Elrepo_Version=7.0-5
System_Version=el7
${LOG}"[INFO]:校验网络环境" | tee -a ${LOGFILE}
ping -c 4 $Elrepo_Url >/dev/null 2>&1 
if [ $? -eq 0 ];then
   ${LOG}"[INFO]:网络正常,可访问$DOCKER_URL" | tee -a ${LOGFILE}
   ${LOG}"[INFO]:导入elrepo仓库秘钥" | tee -a ${LOGFILE}
   $Rpm --import https://$Elrepo_Url/RPM-GPG-KEY-elrepo.org ||true >/dev/null 2>&1 
   ${LOG}"[INFO]:安装elrepo仓库" | tee -a ${LOGFILE}
   $Rpm -Uvh https://$Elrepo_Url/elrepo-release-$Elrepo_Version.$System_Version.elrepo.noarch.rpm ||true  >/dev/null 2>&1 
   ${LOG}"[INFO]:刷新yum仓库" | tee -a ${LOGFILE}
   $Yum makecache fast >/dev/null 2>&1 
else
    ${LOG}"[INFO]:网络无法访问$Elrepo_Url,请检查网络环境" | tee -a ${LOGFILE}
    exit 0
fi
return 0 
}
function install_kernel_lt(){
#查询内核稳定版本lt的版本型号
Lt_Kernel_Version=$(yum --disablerepo="*" --enablerepo="elrepo-kernel" list available|grep kernel-lt|awk -F '[ |-]+' '{print$4}'|grep -v '[a-Z]'|sort -nr|uniq)
${LOG}"[INFO]:安装lt稳定版本的最新内核" | tee -a ${LOGFILE}
echo -e "\033[41;30m当前更新内核版本:$Lt_Kernel_Version\033[0m" 
N=`$Rpm -qa|grep kernel-lt-$Lt_Kernel_Version|wc -l `
if [[ $N -eq 0 ]];then
   ${LOG}"[INFO]:安装依赖环境网络预计需要等待3-5分钟,请耐心等待" | tee -a ${LOGFILE}
   $Yum --enablerepo=elrepo-kernel install kernel-lt -y  >/dev/null 2>&1 
else
   echo -e "\033[41;30m新内核kernel-lt-$Lt_Kernel_Version已安装\033[0m" 
fi
return 0
}
function config_kernel(){
#查询内核稳定版本lt的版本型号
Lt_Kernel_Version=$(yum --disablerepo="*" --enablerepo="elrepo-kernel" list available|grep kernel-lt|awk -F '[ |-]+' '{print$4}'|grep -v '[a-Z]'|sort -nr|uniq)
#查看安装内核排序编号
Kernel_Sort_Number=$(cat  /etc/grub2.cfg|awk -F "'" '$1=="menuentry " {print i++ " : " $2}'|grep -w Core|grep -w $Lt_Kernel_Version|awk -F ":" '{print$1}')
awk -F "'" '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
echo -e "\033[41;30m新安装内核版本启动排序编号:$Kernel_Sort_Number\033[0m"
if [[ "$Kernel_Sort_Number" == " " ]];then
   ${LOG}"[INFO]:安装新版本内核失败,推出" | tee -a ${LOGFILE}
   exit 1 
else
  ${LOG}"[INFO]:设置内核更新版本默认启动" | tee -a ${LOGFILE}
  grub2-set-default $Kernel_Sort_Number
  ${LOG}"[INFO]:修改/etc/default/grub中的GRUB_DEFAULT=$Kernel_Sort_Number" | tee -a ${LOGFILE}
  sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=\$Kernel_Sort_Number/g' /etc/default/grub
  ${LOG}"[INFO]:重置/boot/grub2/grub.cfg" | tee -a ${LOGFILE}
  grub2-mkconfig -o /boot/grub2/grub.cfg
fi
  return 0 
}
check_network_env
install_kernel_lt
config_kernel
echo -e "\033[32m使用reboot命令重启系统,然后使用uname -sr查看看内核版本是否更新生效\033[0m"

脚本执行完成视图:

关于源码升级内核,过程比较复杂,有兴趣的朋友可自行研究;对于内核版本rpm包、deb包建议在内网做镜像站点,以便能够积累不同历史版本包;各平台源提供的都是最新版本

相关推荐

基于Docker方式安装与部署Camunda流程引擎

1Camunda简介官网:https://docs.camunda.org/manual/7.19/installation/docker/Camunda是一个轻量级、开源且高度灵活的工作流和决策自...

宝塔Linux面板如何部署Java项目?(宝塔面板 linux)

通过宝塔面板部署Java还是很方便的,至少不需要自己输入tomcat之类的安装命令了。在部署java项目前,我还是先说下目前的系统环境,如果和我的系统环境不一样,导致部署不成功,那你可能需要去找其他资...

浪潮服务器如何用IPMI安装Linux系统

【注意事项】此处以浪潮服务器为例进行演示所需使用的软件:Chrome浏览器个人PC中需要预先安装java,推荐使用jdk-8u181-windows-x64.exe【操作步骤】1、在服务器的BIOS中...

Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)

由于项目需要存储历史业务数据,经过评估数据量会达到100亿以上,在原有mongodb集群和ES集群基础上,需要搭建Hbase集群进行调研,所以首先总结一下Hadoop集群的搭建过程。一、三个节点的集群...

Hadoop高可用集群搭建及API调用(hadoop高可用原理)

NameNodeHA背景在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNo...

使用Wordpress搭建一个属于自己的网站

现在开源的博客很多,但是考虑到wordpress对网站的seo做的很好,插件也多。并且全世界流量排名前1000万的网站有33.4%是用Wordpress搭建的!所以尝试用Wordpress搭建一个网站...

Centos 安装 Jenkins(centos 安装ssh)

1、Java安装查看系统是否已安装Javayumlistinstalled|grepjava...

Java教程:gitlab-使用入门(java中的git)

1导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作...

Dockerfile部署Java项目(docker部署java应用)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

如何在Eclipse中搭建Zabbix源码的调试和开发环境

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...

Java路径-02-Java环境配置(java环境搭建及配置教程)

1Window环境配置1.1下载...

35.Centos中安装python和web.py框架

文章目录前言1.Centos7python:2.Centos8python:3.进行下载web.py框架然后应用:4.安装好之后进行验证:5.总结:前言...

《我的世界》服务器搭建(我的世界服务器如何搭建)

1.CentOS7环境1.1更改YUM源#下载YUM源文件curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com...

CentOS 7 升级 GCC 版本(centos7.4升级7.5)

1.GCC工具介绍GCC编译器:...

Linux安装Nginx详细教程(linux安装配置nginx)

环境准备1.因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。命令:yuminstallgcc-c++显示完毕,表示安装完成:2.Nginx的http模块需要...

取消回复欢迎 发表评论: