Centos和Ubutun系统内核升级操作
<p><img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/ad13d046c5760eadf5601a876da0c4b3.jpg" width="auto"></p>
<p>
在日常运维中有时候会出现内核版本过低,导致一系列的问题,比如k8s使用3.10会出现cgroup内存泄漏,或者有的软件依赖内核版本,最近我在安装Pixie就需要内核版本大于4.14+,因此就专门总结了centos和ubutun操作系统的内核升级操作步骤</p>
<h3>
1 centos7升级内核</h3>
<p>
</p>
<p>
<strong>1.1 检查已安装的内核版本</strong></p>
<p>
让我们安装了一个发行版,它包含了一个特定版本的内核。为了展示当前系统中已安装的版本,我们可以:</p>
<ol class="dp-sql">
<li class="alt">
<span><span># uname -sr </span></span>
</li>
<li>
<span>Linux 3.10.0-862.el7.x86_64 </span>
</li>
</ol>
<p>
如果我们现在进入https://www.kernel.org/,在撰写本文时,我们看到最新的内核版本是5.12(其他版本可以从同一网站获得)。还要考虑的一个重要的事情是内核版本的生命周期 - 如果你当前使用的版本接近它的生命周期结束,那么在该日期后将不会提供更多的 bug 修复。关于更多信息,请参阅内核发布页。</p>
<p>
<strong>1.2 升级内核</strong></p>
<p>
大多数现代发行版提供了一种使用 yum 等包管理系统和官方支持的仓库升级内核的方法。但是,这只会升级内核到仓库中可用的最新版本 - 而不是在 https://www.kernel.org/ 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。要在 CentOS 7 上启用 ELRepo 仓库,请运行:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>#导入ELRepo仓库的公共密钥 </span></span>
</li>
<li>
<span>rpm <span class="comment">--import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org</span><span> </span></span>
</li>
<li class="alt">
<span>#安装ELRepo仓库的yum源 </span>
</li>
<li>
<span>rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm </span>
</li>
</ol>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/57de1929ed601bf9c1a8d61b91af9a36.jpg" width="auto"></p>
<p>
<strong>1.3 查看可用的系统内核包</strong></p>
<p>
仓库启用后,你可以使用下面的命令列出可用的内核相关包:可以看到5.4和5.12两个版本</p>
<ol class="dp-sql">
<li class="alt">
<span><span>yum </span><span class="comment">--disablerepo="*" --enablerepo="elrepo-kernel" list available</span><span> </span></span>
</li>
</ol>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/8d81ec2d050d2b796be6e6fda7b73f0c.jpg" width="auto"></p>
<p>
<strong>1.4 安装最新版本内核</strong></p>
<p>
对于centos操作系统,直接使用yum进行rpm包安装,可以避免一些依赖的问题,但是默认会安装最新版本内核,如果不需要的话,可以自己到网站下载对应版本,然后指定版本安装,https://buildlogs.centos.org/c7-kernels.x86_64/kernel/</p>
<ol class="dp-sql">
<li class="alt">
<span><span>#</span><span class="comment">--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换。</span><span> </span></span>
</li>
<li>
<span>yum -y <span class="comment">--enablerepo=elrepo-kernel install kernel-ml</span><span> </span></span>
</li>
</ol>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/64d64f52b9f90db4d40c21bd2da82ca6.jpg" width="auto"></p>
<p>
<strong>1.5 设置 GRUB 默认的内核版本</strong></p>
<p>
内核安装好后,需要设置为默认启动选项并重启后才会生效</p>
<p>
<strong>查看系统上的所有可用内核:</strong></p>
<ol class="dp-sql">
<li class="alt">
<span><span># sudo awk -F\</span><span class="string">' '</span><span>$1==</span><span class="string">"menuentry "</span><span> {print i++ </span><span class="string">" : "</span><span> $2}' /etc/grub2.cfg </span></span>
</li>
<li>
<span>0 : CentOS Linux 7 Rescue 8916e15095f33283a3b46d8f9ac7c654 (5.12.1-1.el7.elrepo.x86_64) </span>
</li>
<li class="alt">
<span>1 : CentOS Linux (5.12.1-1.el7.elrepo.x86_64) 7 (Core) </span>
</li>
<li>
<span>2 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) </span>
</li>
<li class="alt">
<span>3 : CentOS Linux (0-rescue-ea3169a040da42e0b632f72ceb5abd82) 7 (Core) </span>
</li>
</ol>
<p>
<strong>设置新的内核为grub2的默认版本</strong></p>
<p>
服务器上存在4 个内核,我们要使用 5.12 这个版本,为了让新安装的内核成为默认启动选项,可以通过 grub2-set-default 0 命令或编辑 /etc/default/grub 文件来设置</p>
<ol class="dp-sql">
<li class="alt">
<span><span>#设置 GRUB_DEFAULT=0。意思是 GRUB 初始化页面的第一个内核将作为默认内核 </span></span>
</li>
<li>
<span>grub2-<span class="keyword">set</span><span>-</span><span class="keyword">default</span><span> 0 </span></span>
</li>
</ol>
<p>
<strong>生成 grub 配置文件并重启</strong></p>
<ol class="dp-sql">
<li class="alt">
<span><span>#接下来运行下面的命令来重新创建内核配置 </span></span>
</li>
<li>
<span># grub2-mkconfig -o /boot/grub2/grub.cfg </span>
</li>
<li class="alt">
<span>Generating grub configuration file ... </span>
</li>
<li>
<span>Found linux image: /boot/vmlinuz-5.12.1-1.el7.elrepo.x86_64 </span>
</li>
<li class="alt">
<span>Found initrd image: /boot/initramfs-5.12.1-1.el7.elrepo.x86_64.img </span>
</li>
<li>
<span>Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64 </span>
</li>
<li class="alt">
<span>Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img </span>
</li>
<li>
<span>Found linux image: /boot/vmlinuz-0-rescue-8916e15095f33283a3b46d8f9ac7c654 </span>
</li>
<li class="alt">
<span>Found initrd image: /boot/initramfs-0-rescue-8916e15095f33283a3b46d8f9ac7c654.img </span>
</li>
<li>
<span>Found linux image: /boot/vmlinuz-0-rescue-ea3169a040da42e0b632f72ceb5abd82 </span>
</li>
<li class="alt">
<span>Found initrd image: /boot/initramfs-0-rescue-ea3169a040da42e0b632f72ceb5abd82.img </span>
</li>
<li>
<span>done </span>
</li>
</ol>
<p>
<strong>验证</strong></p>
<ol class="dp-sql">
<li class="alt">
<span><span># reboot </span></span>
</li>
<li>
<span># uname -r </span>
</li>
<li class="alt">
<span>5.12.1-1.el7.elrepo.x86_64 </span>
</li>
</ol>
<p>
已升级成功</p>
<p>
<strong>题外话</strong></p>
<p>
没有外网,制作离线内核升级包</p>
<ol class="dp-sql">
<li class="alt">
<span><span># 下载制作升级包的工具 </span></span>
</li>
<li>
<span>yum -y install yum-utils </span>
</li>
<li class="alt">
<span>yum -y install createrepo -y </span>
</li>
<li>
<span>repotrack httpd -p ./httpds/ 或者 yumdownloader <span class="comment">--resolve --destdir /tmp/ansible ansible</span><span> </span></span>
</li>
<li class="alt">
<span># 制作最新版本的内核软件包,保存在了./kernel-ml.x86_64/目录 </span>
</li>
<li>
<span>repotrack kernel-ml.x86_64 -p ./kernel-ml.x86_64/ 或者 yumdownloader <span class="comment">--resolve --destdir ./kernel-ml.x86_64 kernel-ml.x86_64</span><span> </span></span>
</li>
<li class="alt">
<span># 制作好了之后只需要把kernel-ml.x86_64目录拷贝到需要升级的机器升级即可 </span>
</li>
</ol>
<p>
<strong>删除旧内核</strong></p>
<p>
查看系统中全部的内核:</p>
<ol class="dp-sql">
<li class="alt">
<span><span># rpm -qa | grep kernel </span></span>
</li>
<li>
<span>kernel-headers-3.10.0-957.27.2.el7.x86_64 </span>
</li>
<li class="alt">
<span>kernel-tools-3.10.0-862.el7.x86_64 </span>
</li>
<li>
<span>kernel-debug-devel-3.10.0-957.27.2.el7.x86_64 </span>
</li>
<li class="alt">
<span>kernel-ml-5.12.1-1.el7.elrepo.x86_64 </span>
</li>
<li>
<span>kernel-3.10.0-862.el7.x86_64 </span>
</li>
<li class="alt">
<span>kernel-tools-libs-3.10.0-862.el7.x86_64 </span>
</li>
</ol>
<p>
方法1、yum remove 删除旧内核的 RPM 包</p>
<ol class="dp-sql">
<li class="alt">
<span><span># yum remove kernel-3.10.0-514.el7.x86_64 \ </span></span>
</li>
<li>
<span>kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \ </span>
</li>
<li class="alt">
<span>kernel-tools-3.10.0-862.11.6.el7.x86_64 \ </span>
</li>
<li>
<span>kernel-3.10.0-862.11.6.el7.x86_64 </span>
</li>
</ol>
<p>
方法2、yum-utils 工具</p>
<p>
如果安装的内核不多于 3 个,yum-utils 工具不会删除任何一个。只有在安装的内核大于 3 个时,才会自动删除旧内核。</p>
<ol class="dp-sql">
<li class="alt">
<span><span># 安装yum-utils </span></span>
</li>
<li>
<span>yum install -y yum-utils </span>
</li>
<li class="alt">
<span># 删除旧版本 </span>
</li>
<li>
<p>
<span>package-cleanup <span class="comment">--oldkernels</span><span> </span></span></p>
</li>
</ol>
<h3>
2 Ubutun升级内核</h3>
<p>
</p>
<p>
<strong>2.1 环境</strong></p>
<p>
在虚拟机上运行的ubuntu16.04 , 使用命令uname -r查看当前系统内核版本 当前版本为4.15.0-45-generic 要升级的内核为4.20.2</p>
<p>
<strong>2.2 准备需要的材料</strong></p>
<p>
到网址下载要升级的内核版本</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/c755df7258ecc0ccdd117b1e781475f8.jpg" width="auto"></p>
<p>
选择对应的文件,我的是amd64</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/011d5690a92ff575f838c10d28c9fe55.jpg" width="auto"></p>
<p>
使用命令下载(也可以网页下载)</p>
<ol class="dp-sql">
<li class="alt">
<span><span>wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005_4.20.5-042005.201901260434_all.deb </span></span>
</li>
<li>
<span>wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb </span>
</li>
<li class="alt">
<span>wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-image-unsigned-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb </span>
</li>
<li>
<span>wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-modules-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb </span>
</li>
</ol>
<p>
<strong>2.3 安装</strong></p>
<p>
直接使用dpkg命令安装下载好的deb包</p>
<ol class="dp-sql">
<li class="alt">
<span><span>sudo dpkg -i *.deb </span></span>
</li>
</ol>
<p>
安装完成后,重启ubuntu系统 使用命令uname -r查看当前版本号</p>
<ol class="dp-sql">
<li class="alt">
<span><span># reboot </span></span>
</li>
<li>
<span>等待机子重启 </span>
</li>
<li class="alt">
<span># uname -r </span>
</li>
<li>
<span>Linux hadoop-master02 4.20.5-042005-generic </span>
</li>
</ol>
<p>
内核升级成功。</p>
<p>
<strong>2.4 遇到问题及解决方案</strong></p>
<p>
* 遇到问题</p>
<p>
升级ubuntu 16.04的新内核时出现依赖libssl1.1.0问题</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Centos和Ubutun系统内核升级操作" alt="Centos和Ubutun系统内核升级操作" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/809def8d82c5aa67983b9ba26ecc0776.jpg" width="auto"></p>
<p>
解决方案</p>
<p>
需要安装包 libssl1.1, 直接使用命令会安装失败,需要更添加源,这个包的更新数据ubuntu官方认可的源才能更新。到该网址去查看或者单独下载安装一个libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb文件然后再dpkg -i *.deb升级就可以了</p>
<ol class="dp-sql">
<li class="alt">
<span><span>wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb </span></span>
</li>
<li>
<span>dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb </span>
</li>
</ol>
<p>
</p>
<p>
原文链接:https://mp.weixin.qq.com/s/1xRc4DzyG4c8e2XYGk28Vg</p>
頁:
[1]