在日常运维中,有时内核版本过低,导致出现一系列问题。比如k8s使用3.10时会出现cgroup内存泄漏,或者某些软件依赖内核版本。最近我在安装Pixie的时候,要求内核版本大于4.14+,所以特地总结了centos和ubutun操作系统的内核升级操作步骤1centos7升级内核1.1查看安装的内核版本让我们安装一个release版本,其中包含特定版本的内核。要显示系统上当前安装的版本,我们可以:#uname-srLinux3.10.0-862.el7.x86_64如果我们现在转到https://www.kernel.org/,在撰写本文时,我们会看到最新的内核版本为5.12(其他版本可从同一网站获得)。还需要考虑的重要事项是内核版本的生命周期-如果您当前使用的版本接近其生命周期的尽头,则在该日期之后将不再提供错误修复。有关详细信息,请参阅内核发布页面。1.2升级内核大多数现代发行版都提供了一种使用包管理系统(如yum)和官方支持的存储库来升级内核的方法。但是,这只会将内核升级到存储库中可用的最新版本-而不是https://www.kernel.org/中可用的最新版本。不幸的是,RedHat只允许使用前者进行内核升级。与RedHat不同,CentOS允许使用ELRepo,这是一个将内核升级到最新版本的第三方存储库。ELRepo存储库是一个基于社区的企业Linux存储库,为RedHatEnterprise(RHEL)和其他基于RHEL的Linux发行版(CentOS、Scientific、Fedora等)提供支持。ELRepo专注于硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动、摄像头驱动等。在CentOS7上启用ELRepo仓库,运行:#ImportthepublickeyrpmoftheELReporepository--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org#InstalltheyumsourcerpmoftheELReporepository-Uvhhttp://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm1.3查看可用的系统内核包仓库启用后可以使用以下命令列出可用的kernelpackages包:可以看到5.4和5.12两个版本yum--disablerepo="*"--enablerepo="elrepo-kernel"listavailable1.4安装最新版本的内核对于centos操作系统,直接使用yum即可安装rpm包,可以避免一些依赖问题,但是默认会安装最新版本的内核。如果不需要,可以从官网下载对应的版本,然后指定要安装的版本,https://buildlogs.centos.org/c7-kernels.x86_64/kernel/#--enablerepo选项在CentOS系统上启用指定的仓库。默认是elrepo,这里换成了elrepo-kernel。yum-y--enablerepo=elrepo-kernelinstallkernel-ml1.5设置GRUB默认内核版本内核安装完成后,需要设置为默认启动选项,重启生效查看系统所有可用内核:#sudoawk-F\''$1=="menuentry"{printi++":"$2}'/etc/grub2.cfg0:CentOSLinux7Rescue8916e15095f33283a3b46d8f9ac7c654(5.12.1-1.el7.elrepo.x86_64)1:CentOSLinux(5.12.1-1.el7.elrepo.x86_64)7(Core)2:CentOSLinux(3.10.0-862.el7.x86_64)7(Core)3:CentOSLinux(0-rescue-ea3169a040da42e0b632f72ceb5abd82)7(Core)设置新内核为服务器上grub2默认版本有4个内核,我们要使用5.12版本,为了让新安装的内核成为默认启动选项,可以使用grub2-set-default0命令或者编辑/etc/default/grub文件来设置#setGRUB_DEFAULT=0。表示GRUB初始化页面的第一个内核会作为默认内核grub2-set-default0生成grub配置文件并重启#然后运行以下命令重新创建内核配置#grub2-mkconfig-o/boot/grub2/grub.cfg生成grub配置文件...找到linux镜像:/boot/vmlinuz-5.12.1-1.el7.elrepo.x86_64找到initrd镜像:/boot/initramfs-5.12.1-1.el7.elrepo.x86_64.img-862.el7.x86_64Foundinitrdimage:/boot/initramfs-3.10.0-862.el7.x86_64.imgFoundlinuximage:/boot/vmlinuz-0-rescue-8916e15095f33283a3b46d8f9ac7c654Foundinitrdimage:/boot/initramfs-0-rescue-8916e15095f33283a3b46d8f9ac7c654.imgFoundlinuximage:/boot/vmlinuz-0-rescue-ea3169a040da42e0b632f72ceb5abd82Foundinitrdimage:/boot/initramfs-0-rescue-ea3169a040da42e0b632f72ceb5abd82.imgdoneVerification#reboot#uname-r5.12.1-1.el7.elrepo升级工具外网升级包#下载未升级成功packagesyum-yinstallyum-utilsyum-yinstallcreaterepo-yrepotrackhttpd-p./httpds/或yumdownloader--resolve--destdir/tmp/ansibleansible#制作最新版本的内核包,保存在./kernel-ml.x86_64/目录下repotrackkernel-ml.x86_64-p./kernel-ml.x86_64/或yumdownloader--resolve--destdir./kernel-ml.x86_64kernel-ml.x86_64#制作完成后,只需将kernel-ml.x86_64目录复制到需要升级的机器即可升级删除老内核查看系统所有内核:[root@hadoop-iot-test-01~]#rpm-qa|grepkernelkernel-headers-3.10.0-957.27.2.el7.x86_64kernel-tools-3.10.0-862.el7.x86_64kernel-debug-devel-3.10.0-957.27.2.el7.x86_64kernel-ml-5.12.1-1.el7.elrepo.x86_64kernel-3.10.0-862.el7.x86_64kernel-tools-libs-3.10.0-862.el7.x86_64方法一、yumremove删除旧内核的rpm包#yumremovekernel-3.10.0-514.el7.x86_64\kernel-tools-libs-3.10.0-862.11.6.el7.x86_64\内核工具-3.10。0-862.11.6.el7.x86_64\kernel-3.10.0-862.11.6.el7.x86_64方法二、yum-utils工具如果安装的内核不超过3个,yum-utils工具不会删除任何一个只有当安装了超过3个内核时,才会自动删除较旧的内核。#安装yum-utilsyuminstall-yyum-utils#删除旧版本package-cleanup--oldkernels2Ubutun升级内核2.1环境ubuntu16.04运行在虚拟机上,使用命令uname-r查看当前系统内核版本当前版本为4.15.0-45-generic要升级的内核为4.20.22.2。准备所需材料。到网站[https://kernel.ubuntu.com/~kernel-ppa/mainline/]下载需要升级的内核版本,选择对应的文件。我的是amd64使用命令下载(网页也可以下载)wgethttps://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005_4.20.5-042005.201901260434_all.debwgethttps://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.debwgethttps://kernel.ubuntucom/~kernel-ppa/mainline/v4.20.5/linux-image-unsigned-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.debwgethttps://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-modules-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb2.3安装直接使用dpkg命令安装下载的deb包sudodpkg-i*.deb安装完成后重启ubuntu系统,使用命令uname-r查看当前版本号#reboot等待机器重启#uname-rLinuxhadoop-master024.20.5-042005-generic内核升级成功。2.4遇到问题及解决办法*遇到问题升级ubuntu16.04新内核时,出现依赖libssl1.1.0的问题。该解决方案需要安装软件包libssl1.1。如果直接使用命令,会安装失败,需要添加源,本包的更新数据只能更新ubuntu官方认可的源。去这个网站查看[https://packages.ubuntu.com/bionic/libssl1.1]或者单独下载安装一个libssl1.1_1.1.0g-2ubuntu4.1_amd64.deb文件然后dpkg-i*.deb升级okwgethttp://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.debdpkg-ilibssl1.1_1.1.0g-2ubuntu4_amd64.deb
