`

docker,升级linux内核

阅读更多

本文出自 “存储之厨” 博客,请务必保留此出处http://xiamachao.blog.51cto.com/10580956/1755354

 

由于最近需要安装docker进行学习,需要升级CentOS内核到3.8以上! 

 

在基于CentOS平台的工作过程中,难免有时需要升级或者降级内核以验证功能、调试性能或者更新整个系统。

如果从头重新编译一个内核,由于现在内核特性越来越复杂,依赖的库或者工具也不少,加之重新编译耗时不菲,了解更新内核的多种方式就显得尤为必要。

下面根据笔者最近的工作,总结了三种方法,供大家参考。

 

方法一

如果机器不能联网,可以下载现有内核包到本地机器,直接在本地更新

1.从http://ftp.scientificlinux.org/linux/scientific/7.0/x86_64/updates/security/下载需要的颁布rpm

 

2. [root@localhost os2]# scp root@192.168.1.64:/home/worker/kernel-3.10.0-123.1.2.el7.x86_64.rpm 

root@192.168.1.64's password:

kernel-3.10.0-123.1.2.el7.x86_64.rpm                                         100%   29MB  28.9MB/s   00:00

 

3.[root@localhost os2]# yum install kernel-3.10.0-123.1.2.el7.x86_64.rpm

 

Loaded plugins: fastestmirror, langpacks

Examining kernel-3.10.0-123.1.2.el7.x86_64.rpm: kernel-3.10.0-123.1.2.el7.x86_64

Marking kernel-3.10.0-123.1.2.el7.x86_64.rpm to be installed

Resolving Dependencies

--> Running transaction check

---> Package kernel.x86_64 0:3.10.0-123.1.2.el7 will be installed

--> Finished Dependency Resolution

epel/x86_64/metalink                                                                    | 5.2 kB  00:00:00

epel/x86_64                                                                           | 4.3 kB  00:00:01

epel/x86_64/updateinfo                                                                  | 517 kB  00:00:01

epel/x86_64/primary_db                                                                  | 4.0 MB  00:02:36

....

 

方法二

如果机器已经联网,直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下:

 

1、导入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

当然,如果已经修改了repo的gpgcheck=0也可以不导入key


2、安装elrepo的yum源

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

 

3、安装内核
在yum的ELRepo源中,有mainline颁布的,可以这样安装:
 yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y

当然也可以安装long term的:

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



其它:

http://elrepo.org/linux/kernel/el6/x86_64/RPMS/

 

复制代码
[root@server-mysql yum.repos.d]# yum --enablerepo=elrepo-kernel  list  |grep kernel*
Unable to read consumer identity
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
abrt-addon-kerneloops.x86_64               2.0.8-6.el6                   @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
dracut-kernel.noarch                       004-283.el6                   @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
kernel.x86_64                              2.6.32-279.el6                @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
kernel-devel.x86_64                        2.6.32-279.el6                @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
kernel-firmware.noarch                     2.6.32-279.el6                @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
kernel-headers.x86_64                      2.6.32-279.el6                @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
libreport-plugin-kerneloops.x86_64         2.0.9-5.el6                   @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3
abrt-addon-kerneloops.x86_64               2.0.8-40.el6.centos           base   
dracut-kernel.noarch                       004-409.el6_8.2               updates
kernel.x86_64                              2.6.32-642.3.1.el6            updates
kernel-abi-whitelists.noarch               2.6.32-642.3.1.el6            updates
kernel-debug.x86_64                        2.6.32-642.3.1.el6            updates
kernel-debug-devel.i686                    2.6.32-642.3.1.el6            updates
kernel-debug-devel.x86_64                  2.6.32-642.3.1.el6            updates
kernel-devel.x86_64                        2.6.32-642.3.1.el6            updates
kernel-doc.noarch                          2.6.32-642.3.1.el6            updates
kernel-firmware.noarch                     2.6.32-642.3.1.el6            updates
kernel-headers.x86_64                      2.6.32-642.3.1.el6            updates
kernel-lt.x86_64 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-devel.x86_64 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-doc.noarch 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-firmware.noarch 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-headers.x86_64 3.10.102-1.el6.elrepo elrepo-kernel
kernel-ml.x86_64 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-devel.x86_64 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-doc.noarch 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-firmware.noarch 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-headers.x86_64 4.6.4-1.el6.elrepo elrepo-kernel libreport-plugin-kerneloops.x86_64 2.0.9-32.el6.centos base perf.x86_64 4.6.4-1.el6.elrepo elrepo-kernel
复制代码

 

 

 

 

方法三

实际工作当中经常碰到需要修改内核配置,编译驱动,调节相关参数等,这就需要定制内核,为此需要手动生成新的内核。还是以3.10.0-123.el7为例子,一般步骤如下:



1.先下载内核:

wget http://vault.centos.org//7.0.1406/os/Source/SPackages/kernel-3.10.0-123.el7.src.rpm

接着解压相关代码:

rpm2cpio kernel-3.10.0-123.el7.src.rpm |cpio -div

默认在/usr/src放有一份kernel的头文件,这样在不需要下载整个内核源代码的情况下就可以编译自己编写的内核模块,如果有patch需要打的话,用patch -p1 *.patch命令给内核打上相应的patch。



2.更新配置文件.config

可以获取系统当前的config文件,也可以用默认的配置文件,比如x86_64_defconfig:

cp /boot/config-3.10.0-123.el7.x86_64  .config  和make oldconfig生产的config一致

然后用make menuconfig来配置。



3.编译和安装

默认的情况下, 内核和initrd会安装到/boot下面,而驱动模块会安装到/lib/modules/`uname -r`下,如果可以都安装都默认的位置,直接运行下面的命令即可:

make -j8;make modules; make modules_install;make install;

如果需要安装到指定的路径,请设置下面的环境变量:

export INSTALL_PATH=….

export INSTALL_MOD_PATH=



4.创建initrd.img

initrd.img即为初始化的ramdisk文件,它是一个内存镜像文件。它是把一些最基本的驱动程序和命令工具打包而成,作用就是在系统还没有挂载根分区前,保证系统能够执行基础的初始化和加载一些基本的驱动,比如挂载scsi驱动等。制作initrd传统的方法是用mkinitramfs这一个系统工具,现在mkinitrd会调用dracut完成实际的工作。比如下面的命令进行:



mkinitrd3.0.4 -o /boot/initrd.img-3.0.4

然后把生成的initrd映像拷贝到/boot下面即可。



5.更新grub

为了让boot loader能够找到刚生成的内核和initrd映像,需要修改grub。注意如果使用的是grub2,不宜直接修改/boot/grub2/grub.cfg文件,而应该修改grub2的配置文件。grub2默认的配置文件在/etc/grub2.cfg。更新完这个文件之后,需要运行下面的文件:

grub2-mkconfig

至于启动那个linux镜像,由/etc/default/grub的GRUB_DEFAULT=saved来决定;

其意思是上一次使用的value;

修改内核默认启动项

grub2-set-default 0



这种方法需要注意kernel和模块签名的问题,如果模块签名没有通过内核检查,将不会加载,这可能导致生成系统启动失败。



总而言之,工程师和维护人员需要集合实际情况灵活选择合适的方法来更新内核。

 

分享到:
评论

相关推荐

    K8s搭建部署、docker部署、linux内核升级,k8s升级操作

    K8s搭建部署、docker部署、linux内核升级,k8s升级操作

    适用于 x64 计算机的 WSL2 Linux 内核更新包

    描述中的内容与标题一致,再次强调了这个更新包是为x64(即64位)计算机设计的,用于WSL2的Linux内核升级。 **Linux内核** Linux内核是Linux操作系统的核心部分,负责管理系统的硬件资源,如处理器、内存和磁盘,...

    centos6.5-(docker)升级内核linux.part1.rar

    带aufs模块的3.10内核 下载后先使用gzip -dv命令解压,然后再使用rpm -ivh命令安装。 安装好后,设置/etc/grub.conf里default=0,重启系统。 本资料共包含以下附件: kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz ...

    Linux 内核升级

    1. Linux 内核升级的原因:在使用 Docker-ce 时,需要 overlay 模块,但是系统内核版本为 3.10,缺少该模块,故需要升级内核。 2. Linux 内核升级的步骤:升级 Linux 内核的步骤包括下载稳定版内核、安装必要的库...

    centos6.5-(docker)升级内核linux.part3.rar

    带aufs模块的3.10内核 下载后先使用gzip -dv命令解压,然后再使用rpm -ivh命令安装。 安装好后,设置/etc/grub.conf里default=0,重启系统。 本资料共包含以下附件: kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz ...

    升级linux内核到kernel-ml-aufs-devel-3.10.5-3.el6所需的内核

    当我们提到“升级Linux内核到kernel-ml-aufs-devel-3.10.5-3.el6所需的内核”时,这涉及到对现有Linux内核的更新,以获取最新的功能、性能优化和安全修复。 `kernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm` 和 `...

    linux内核包.zip

    本包为linux3.1和3.5内核包,主要用于安装docker 时,linux内核版本过低,2.x linux内核版本升级 3.x 可以下载

    用于x64机器的WSL2 Linux内核更新程序包

    这个“用于x64机器的WSL2 Linux内核更新程序包”正是针对x64架构的Windows系统设计的,旨在为WSL2提供最新的Linux内核更新,以提升性能和兼容性。 WSL2与之前的WSL1相比,最大的改变在于其引入了完整的Linux内核,...

    centos6.5-(docker)升级内核linux.part4.rar

    带aufs模块的3.10内核 下载后先使用gzip -dv命令解压,然后再使用rpm -ivh命令安装。 安装好后,设置/etc/grub.conf里default=0,重启系统。 本资料共包含以下附件: kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz ...

    centos6.5-(docker)升级内核linux.part2.rar

    带aufs模块的3.10内核 下载后先使用gzip -dv命令解压,然后再使用rpm -ivh命令安装。 安装好后,设置/etc/grub.conf里default=0,重启系统。 本资料共包含以下附件: kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz ...

    centos6.5-(docker)升级内核linux.part5.rar

    带aufs模块的3.10内核 下载后先使用gzip -dv命令解压,然后再使用rpm -ivh命令安装。 安装好后,设置/etc/grub.conf里default=0,重启系统。 本资料共包含以下附件: kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz ...

    redhat-4 升级linux内核到3.10-2

    升级Linux内核的步骤如下: 1. **检查当前内核版本**: 使用`uname -r`命令来查看当前运行的内核版本。这将帮助我们确认是否需要升级以及升级前的版本。 2. **备份现有内核**: 升级内核前,应确保有当前内核的...

    Linux 内核更新包 wsl_update_x64

    Linux 内核更新包 wsl_update_x64 Linux 内核更新包 wsl_update_x64 Linux 内核更新包 wsl_update_x64 Linux 内核更新包 wsl_update_x64 Linux 内核更新包 wsl_update_x64 Linux 内核更新包 wsl_update_x64 Linux ...

    centos6 docker docker1.7.1 kernel2.6

    由于centos6仓库已经不再维护,网上已经很难找到在内核2.6中可以允许的docker安装包 Linux localhost.localdomain 2.6.32-642.el6.x86_64 docker-engine-1.7.1-1.el6.x86_64.rpm 安装命令:yum localinstall docker...

    ubuntu vps安装docker报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.问题解决

    解决这个问题的关键在于升级Linux内核。对于使用OpenVZ虚拟化技术的VPS,其内核版本通常由VPS提供商决定。在这种情况下,需要联系VPS提供商,确认是否支持内核更新。例如,如果是基于OpenVZ 6的VPS,内核版本是2.6,...

    docker离线安装 linux

    docker1.8 要求内核3.10起,但是redhat7.1内核是”2.6.32-431.el6.x86_64”奔溃,又不能升级内核,还不能联网。。。怎么办呢? 只好去网上下了docker1.7的rpm包手动安装吧,经过多次实验发现,1. 所需包如下: ...

    适用于 x64 计算机的 wsl2 linux 内核更新包

    WSL2是该技术的第二个版本,引入了重大改进,包括更接近于真实Linux环境的性能和全功能Linux内核。本文将深入探讨WSL2、Linux内核更新及其对x64计算机的重要性。 首先,让我们理解WSL2的核心特性。与最初的WSL(也...

    linux内核linux-5.4.56.tar.xz

    docker版本在19.03后 可能linux需要升级内核的 此内核版本是5.4.56稳定版 算是当前最新的稳定版

Global site tag (gtag.js) - Google Analytics