写在前面的话

对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时候就会牵扯到内核升级,当然,这一次写这篇文章的场景不是这个,而是最近又再度学习 Kubernetes,所以升级下内核,尽可能避免已知的因为内核导致的 BUG。

升级方法

特别说明:生产环境需谨慎,请确保测试通过没问题后再进行升级!

我的虚拟机安装的是 CentOS Linux release 7.5.1804 (Core)

查看方法:

cat /etc/redhat-release

内核版本:

uname -r

结果为:3.10.0-1062.7.1.el7.x86_64,这里希望将其升级为 4+ 版本。

1. 更新 yum 仓库为 EL 仓库:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

2. 查看可供更新的版本:

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

结果如下:

我们选择更新为 4.4 即可。注意 4.4 是 kernel-lt

yum --enablerepo=elrepo-kernel install kernel-lt

3. 此时可以查看系统已经安装的内核版本:

awk -F\' '$=="menuentry " {print i++ " : " $}' /etc/grub2.cfg

结果如图:

可以看到新安装的 4.4 版本索引是

4. 修改默认版本:

grub2-set-default 

修改配置文件:

vim /etc/default/grub

设置 GRUB_DEFAULT=0

5. 生成配置文件:

grub2-mkconfig -o /boot/grub2/grub.cfg

重启服务器测试:

reboot

查看:

uname -r

结果为:4.4.206-1.el7.elrepo.x86_64,到此内核升级完成,当然还可以后续操作,比如删除旧版本的内核。

卸载旧版

1. 查看已安装的内核:

rpm -qa | grep kernel

结果如下:

2. 卸载所有 3 版本:

yum -y remove kernel-tools-3.10.-.el7.x86_64 kernel-tools-libs-3.10.-.el7.x86_64 kernel-3.10.-1062.7..el7.x86_64 kernel-headers-3.10.-1062.7..el7.x86_64 kernel-3.10.-.el7.x86_64

3. 此时查看内核:

awk -F\' '$=="menuentry " {print i++ " : " $}' /etc/grub2.cfg

结果如下:

只剩下两个!到此真正算是升级完成!

升级脚本

内容如下:

#!/bin/bash

#############################################################################################
# 用途:CentOS7.5 内核版本升级
# 作者:Dy1an<1214966109@qq.com>
# 时间:2019-12-09
############################################################################################# #############################################################################################
# 导入系统变量
#############################################################################################
. /etc/init.d/functions
source /etc/profile #############################################################################################
# 服务变量定义
#############################################################################################
# 线条
LINE='---------------------------------------------------------------------------------------' # 进程用户
USER_PROCESS='root' #############################################################################################
# 颜色输出函数
#############################################################################################
function FUNC_COLOR_TEXT() {
echo -e " \e[0;$2m$1\e[0m"
} function FUNC_ECHO_RED() {
echo $(FUNC_COLOR_TEXT "$1" "")
} function FUNC_ECHO_GREEN() {
echo $(FUNC_COLOR_TEXT "$1" "")
} function FUNC_ECHO_YELLOW() {
echo $(FUNC_COLOR_TEXT "$1" "")
} function FUNC_ECHO_BLUE() {
echo $(FUNC_COLOR_TEXT "$1" "")
} #############################################################################################
# 颜色通知输出函数
#############################################################################################
# 通知信息
function FUNC_ECHO_INFO() {
echo $(FUNC_COLOR_TEXT "${LINE}" "")
echo $(FUNC_COLOR_TEXT "$1" "")
echo $(FUNC_COLOR_TEXT "${LINE}" "")
} # 完成信息
function FUNC_ECHO_SUCCESS() {
echo $(FUNC_COLOR_TEXT "${LINE}" "")
echo $(FUNC_COLOR_TEXT "$1" "")
echo $(FUNC_COLOR_TEXT "${LINE}" "")
} # 错误信息
function FUNC_ECHO_ERROR() {
echo $(FUNC_COLOR_TEXT "${LINE}" "")
echo $(FUNC_COLOR_TEXT "$1" "")
echo $(FUNC_COLOR_TEXT "${LINE}" "")
} #############################################################################################
# 系统版本检测函数
#############################################################################################
function FUNC_SYSTEM_CHECK() {
VAR_SYSTEM_FLAG=$(/usr/bin/cat /etc/redhat-release | grep 'CentOS' | grep '' | wc -l)
if [[ ${VAR_SYSTEM_FLAG} -ne 1 ]];then
FUNC_ECHO_ERROR '本脚本基于 [ CentOS 7 ] 编写,目前暂不支持其他版本系统!'
exit 1001
fi
} #############################################################################################
# 用户检测函数
#############################################################################################
function FUNC_USER_CHECK() {
VAR_USER=$(/usr/bin/whoami)
if [[ ${VAR_USER} != 'root' ]];then
FUNC_ECHO_ERROR '脚本目前只支持 [ root ] 用户执行,请先切换用户...'
exit 1002
fi
} #############################################################################################
# 服务器联网函数
#############################################################################################
function FUNC_NETWORK_CHECK() {
VAR_PING_NUM=$(/usr/bin/ping -c 3 www.baidu.com | grep 'icmp_seq' | wc -l)
if [[ ${VAR_PING_NUM} -eq 0 ]];then
FUNC_ECHO_ERROR '网络连接失败,请先配置好网络连接...'
exit 1003
fi
} #############################################################################################
# 打印系统信息
#############################################################################################
function FUNC_PRINT_SYSTEM_INFO() {
# 获取系统信息
SYSTEM_DATE=$(/usr/bin/date)
SYSTEM_VERSION=$(/usr/bin/cat /etc/redhat-release)
SYSTEM_CPU=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | head -1 | awk -F: '{print $2}' | sed 's#^[ \t]*##g')
SYSTEM_CPU_NUMS=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | wc -l)
SYSTEM_KERNEL=$(/usr/bin/uname -a | awk '{print $3}')
SYSTEM_IPADDR=$(/usr/sbin/ip addr | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}') # 打印系统信息
FUNC_ECHO_YELLOW ${LINE}
echo "服务器的信息: ${SYSTEM_IPADDR}"
FUNC_ECHO_YELLOW ${LINE}
echo "操作系统版本: ${SYSTEM_VERSION}"
echo "系统内核版本: ${SYSTEM_KERNEL}"
echo "处理器的型号: ${SYSTEM_CPU}"
echo "处理器的核数: ${SYSTEM_CPU_NUMS}"
echo "系统当前时间: ${SYSTEM_DATE}"
FUNC_ECHO_YELLOW ${LINE}
} #############################################################################################
# 升级内核
#############################################################################################
function FUNC_UPDATE_KERNEL() {
# 安装 EL 源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "EL 源安装失败,请检查是否存在问题!"
exit 1004
fi # 查看可提供升级的版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available VAR_KERNEL_NAME="kernel-lt"
read -p "请输入上面列出的版本中你想安装的版本(默认 lt 版本) [lt/ml]: " VAR_VERSION_CHOICE
if [[ ${VAR_VERSION_CHOICE} == "ml" ]];then
VAR_KERNEL_NAME="kernel-ml"
fi FUNC_ECHO_INFO "本次选择升级的版本为:${VAR_KERNEL_NAME}" # 升级内核
yum --enablerepo=elrepo-kernel install ${VAR_KERNEL_NAME} if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "内核升级失败,请根据报错检查是否存在问题!"
exit 1005
fi # 查看目前版本
FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg # 选择默认内核版本
VAR_NUM_CHOICE=0
read -p "请输入上面列出的版本序号选择系统最终默认版本(默认 0): " VAR_NUM_CHOICE
if [[ $(echo ${VAR_NUM_CHOICE} | sed 's/[0-9]//g') == '' ]];then
if [[ ${VAR_NUM_CHOICE} == "" ]];then
VAR_NUM_CHOICE=0
fi
else
FUNC_ECHO_INFO "输入有误,将以默认配置执行..."
VAR_NUM_CHOICE=0
fi # 配置系统默认
grub2-set-default ${VAR_NUM_CHOICE} sed -i "s#^GRUB_DEFAULT=.*#GRUB_DEFAULT=${VAR_NUM_CHOICE}#g" /etc/default/grub if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "默认内核配置失败,可以手动配置/etc/default/grub文件中:GRUB_DEFAULT参数为指定内核索引!"
fi
} #############################################################################################
# 卸载旧版本内核
#############################################################################################
function FUNC_UNINSTALL_KERNEL() {
# 显示内核版本
FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
rpm -qa | grep kernel # 提示卸载
FUNC_ECHO_INFO "你可以手动卸载旧版本:yum -y remove 包名字,然后重启使用:uname -r 查看升级结果"
} #############################################################################################
# 安装程序开始
#############################################################################################
# 系统检查
FUNC_SYSTEM_CHECK
# 用户检查
FUNC_USER_CHECK
# 联网检测
FUNC_NETWORK_CHECK
# 打印系统信息
FUNC_PRINT_SYSTEM_INFO read -p "是否继续安装升级(默认 y) [y/n]: " VAR_CHOICE
case ${VAR_CHOICE} in
[yY][eE][sS]|[yY])
FUNC_UPDATE_KERNEL
FUNC_UNINSTALL_KERNEL
;;
[nN][oO]|[nN])
FUNC_ECHO_YELLOW "安装升级即将终止..."
exit
;;
*)
FUNC_UPDATE_KERNEL
FUNC_UNINSTALL_KERNEL
esac

效果如图 - 开始执行:

结束执行:

CENTOS 7 升级内核版本(附带升级脚本)的更多相关文章

  1. yum-cron更新 CentOS yum update 不升级内核版本方法

    http://www.360doc.com/content/15/0608/17/15798950_476597844.shtml 相关yum-cron说明有一些 CentOS yum update ...

  2. 升级CentOS 7.4内核版本的三种方案

    https://blog.csdn.net/breeze915/article/details/79243673 在实验环境下,已安装了最新的CentOS 7.4操作系统,现在需要升级内核版本. 实验 ...

  3. 升级CentOS 7.4内核版本--升级到最新

    在实验环境下,已安装了最新的CentOS 7.4操作系统,现在需要升级内核版本.实验环境 CentOS-7-x86_64-Minimal-1708.isoCentOS Linux release 7. ...

  4. 升级Centos 7/6内核版本到4.12.4的方法

    一.查看那系统内核版本 二.升级内核 三.修改grub中默认的内核版本 四.重启系统并查看系统内核 公司打算上Docker服务,目前需要安装运行环境,Docker新的功能除了需要Centos 7系统之 ...

  5. CentOS 7 升级内核版本

    1.查看当前内核版本 $ uname -r 3.10.0-514.el7.x86_64 $ uname -a Linux k8s-master 3.10.0-514.el7.x86_64 #1 SMP ...

  6. centos6.9 升级内核版本

    想在centos6.9上安装docket,不过因为内核版本是2.6的故而想升级到最新的内核版本 晚上有编译升级的比较麻烦,不过有助于理解内核升级,我使用的直接升级到最新版方法 1. 导入public ...

  7. Centos7 升级内核版本

    1.查看当前内核版本 $ uname -r -.el7.x86_64 $ uname -a Linux k8s-master -.el7.x86_64 # SMP Tue Nov :: UTC x86 ...

  8. Ubantu 16.04升级内核版本和还原到升级之前的内核版本的方法

    一.查看系统信息 1.查看发布版本: 命令: lsb_release -a 运行结果: / 2.查看内核版本: 命令: uname -sr 运行结果: 二.升级内核的方法 1.内核下载地址:http: ...

  9. centos7升级内核版本

    本文转载http://blog.csdn.net/nciasd/article/details/51490146,大神非常厉害!!!!! 查看当前系统的内核版本 # uname -r 1.导入key ...

随机推荐

  1. [算法模板]FFT-快速傅里叶变换

    [算法模板]FFT-快速傅里叶变换 感谢ZYW聚聚为我们讲解FFT~ 思路 我懒,思路和证明部分直接贴链接: rvalue LSJ-FFT与NTT基础 代码 主要思想是利用了单位根特殊的性质(n次单位 ...

  2. 如何使redis中存放的都是热点数据?

    当redis使用的内存超过设置的最大内存时,会触发redis的key淘汰机制,在redis3.0中的6中淘汰策略如下: (1)noeviction :不删除策略.当达到最大内存限制时,如果需要使用更多 ...

  3. Java的BIO和NIO很难懂?用代码实践给你看,再不懂我转行!

    本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动. 1.引言 这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关 ...

  4. 软件文档写作-plantuml画用例图和时序图

    背景 当下的软件开发人员,不可避免的需要输出一些软件设计文档,作为一个软件工程专业毕业的工程师,最常用的设计工具就是UML,使用UML工具绘制一些软件相关的图,是必备技能,也是输出的技术文档中的重要组 ...

  5. win10禁止自动更新的终极方法(亲测有效)

    想必用过win10的朋友对其自动更新一定不会陌生,并且深恶痛绝,    有时正专注做一件事,突然就开始自动更新,被杀个措手不及,而且更新时间真的太久了,尤其最近更新频繁,真是伤脑筋,    期间也尝试 ...

  6. 【开发工具】IDEA简明使用指南

    目录 1. 搭建idea的开发环境 2. 调试技巧 3. 常用快捷键(小技巧) 4. 插件推荐 工欲善其事,必先利其器.在Java开发中挑选一款好的Ide环境能大大提升我们的开发效率,IntelliJ ...

  7. 记一次Ubuntu19无法安装docker源

    按照各大网站以及个人习惯我会使用下面这种方法添加Docker源: root@ubuntu:~# sudo add-apt-repository "deb [arch=amd64] https ...

  8. C#Winform窗体利用单例子窗体传值父窗体

    简述:最近在做C#和HALCON编程,要用到单例的参数由子窗体改变父窗体的值.此例为简化版 1,点击系统设置 2,弹出子窗体,在其输入修改参数后点修改按钮 3,点击确定按钮后,关闭子窗体后,主窗体te ...

  9. navicat 12激活

    激活软件:https://github.com/DoubleLabyrinth/navicat-keygen/releases 激活说明:https://github.com/DoubleLabyri ...

  10. Selenium(十六):unittest单元测试框架(二) 初识unittest(续)

    1. 认识unittest(续) 关于unittest单元测试框架,还有一些问题值得进一步探讨.你可能在前一章的学习过程中产生了一些疑问,也许你会在本节中找到答案. 1.1 用例执行的顺序 用例的执行 ...