centos 6.9 更新内核方法

更新内核 联网默认版 非最新

1:查看系统版本
# uname -r

或者

#rpm -qa |grep kernel

或者

#rpm -q | grep kernel

2.更新内核

#yum -yinstall kernel

或者全局更新

#yum update

3.删除升级内核

#rpm -qa |grep kernel

或者

# rpm -q |grep kernel

然后

#yum remove +内核名称

或者

#rpm -e +内核名称

或者

安装yum-utls: yuminstall -y yum-utils

设置你想要保留多少旧的内核,比如我想保留两个:sudo package-cleanup--oldkernels --count=2

再次用rpm -q kernel查看内核信息,只剩最新的两个

4.修改文件修改数字几 系统保留内核数量

# vi /etc/yum.conf

修改该项值

installonly_limit=2  // 系统保留2个内核

 

5.修改Grub引导顺序

安装完成后,需要修改Grub引导顺序,让新安装的内核作为默认内核。

编辑 grub.conf文件,

sudo vim /etc/grub.conf

数一下刚刚新安装的内核在哪个位置,从0开始,然后设置default为那个数字,一般新安装的内核在第一个位置,所以设置default=0。

6.最后重启查看

#rpm -qa kernel

 

更新内核 软件安装指定版本

 

1.确定发行版的内核源码

# cat /etc/redhat-release

然后

如果是centos,则下载地址为类似如下的地址:

http://vault.centos.org/6.9/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm

 

2.导入系统 使用如下命令安装源码包

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

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

2. 登录本地服务器下载

[email protected]:/home/worker/kernel-3.10.0-123.1.2.el7.x86_64.rpm

[email protected]'spassword:

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

 

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

或者

#rpm -i kernel-2.6.32-696.el6.src.rpm

 

Warning:user mockbuild does not exist.using root

 

解决办法:

# yum install mock

# useradd -s /sbin/nologin mockbuild

 

首先是安装mock,由于mock是在epel仓库里的,所以还需要先装epel仓库

1

2

 

yum  install epel-release

yum  install mock

 

安装完成后,在 /usr/src/redhat/目录下会生成一些目录:如果是centos,相关目录是生成在 /root/rpmbuild目录下。

例如,BUILD SOURCES  SPECS等。

其中SOURCES 目录下,应该是内核源码文件与补丁等。

以red hat为例,SOURCES 中包含:

linux-2.6.18.tar.bz2   ---- 标准的Linux内核源码包

一大堆.patch的文件  ---- 这些是源码补丁文件

若干个.config            ---- 这些是内核配置文件

其他的文件                ----  在下目前也不理解 :)

 

3.获得内核源码

 使用如下命令得到完整的redhatlinux内核源码

cd   /root/rpmbuild/SPECS

rpmbuild-bp --target=$(uname -m) kernel.spec

如果提示

xmltois needed by kernel-2.6.32-696.el6.x86_64

解决方法

#yuminstall xmlto 

什么isneeded就yum install什么。

如果一切顺利,那么在/root/rpmbuild/BUILD/kernel-2.6.32-696.el6/linux-2.6.32-696.el6.x86_64目录中,就会生成一份内核源码。这个源码,是在标准Linux内核源码的基础上,打上了RedHat(或centos/fedora)的补丁及相关配置的源码。

4. 安装前配置

#cd/root/rpmbuild/BUILD/

#yuminstall ncurses-devel

 

//make[-jn]

  """ n 为数字,如:make -j4 拆分 4 个作业任务并行编译,加快编译速度 """

  """ 使用make -j 则不限制并行编译的任务数,但是出错率可能会高一些 """

  """ 如果不使用任何编译参数,一两个小时也是很常见的 """

#makemenuconfig  /* 配置内核 */

//makemenuconfig

  """ 此命令运行将弹出"kernel configuration"界面"""

  """ 按"ESC",点"YES"退出即可 """

  """ 如需定制内核,请按提示进行选择 """

//makeoldconfig

  """ 如果定制内核,则不需要此步 """

  """ 为要编译的内核源码使用当前系统内核配置文件 """

  """ 当前目录下将会创建 ".config" 文件 """

#makebzImage        /* 编译内核 */

#makemodules       /* 编译模块 */

 

#makemodules_install   /* 安装模块 */

#makeinstall        /* 安装内核 */

 

#reboot         /* 重启机器。起来之后就是新内核了 */

 

 

更新内核 联网 指定版本

1.安装必要的工具

#yuminstall rng-tools

#yuminstall rpm-build redhat-rpm-config unifdef

2. 安装源码

#rpm -i http://vault.centos.org/6.7/updates/Source/SPackages/kernel-2.6.32-573.8.1.el6.src.rpm2>&1 | grep -v exist

3.编译工具

#yum install rpm-buildredhat-rpm-config asciidoc bison hmaccalc patchutils perl-ExtUtils-Embed xmlto

 

#yum install audit-libs-develbinutils-devel elfutils-devel elfutils-libelf-devel

 

#yum install newt-develpython-devel zlib-devel

 

#yum install gcc bc bison

4.获得内核源码

 使用如下命令得到完整的redhat linux内核源码

cd   /root/rpmbuild/SPECS

rpmbuild -bp --target=$(uname-m) kernel.spec

如果提示

xmlto is needed bykernel-2.6.32-696.el6.x86_64

解决方法

#yum install xmlto 

什么is needed就yuminstall什么。

如果一切顺利,那么在/root/rpmbuild/BUILD/kernel-2.6.32-696.el6/linux-2.6.32-696.el6.x86_64目录中,就会生成一份内核源码。这个源码,是在标准Linux内核源码的基础上,打上了RedHat(或centos/fedora)的补丁及相关配置的源码。

 

4. 安装前配置

#cd /root/rpmbuild/BUILD/

#yum install ncurses-devel

 

//make [-jn]

  """ n 为数字,如:make-j4 拆分 4 个作业任务并行编译,加快编译速度"""

  """ 使用 make -j 则不限制并行编译的任务数,但是出错率可能会高一些 """

  """ 如果不使用任何编译参数,一两个小时也是很常见的 """

#make menuconfig  /* 配置内核 */

//make menuconfig

  """ 此命令运行将弹出"kernelconfiguration"界面 """

  """ 按"ESC",点"YES"退出即可 """

  """ 如需定制内核,请按提示进行选择 """

//make oldconfig

  """ 如果定制内核,则不需要此步"""

  """ 为要编译的内核源码使用当前系统内核配置文件 """

  """ 当前目录下将会创建".config" 文件 """

#make bzImage        /* 编译内核 */

#make modules       /* 编译模块 */

 

#make modules_install   /* 安装模块 */

#make install        /* 安装内核 */

 

#reboot         /* 重启机器。起来之后就是新内核了 */

 

 

更新内核 联网下载 指定版本

二、内核升级攻略
1.
查看linux内核版本:
# uname -r
2.6.18-194.el5


2. 下载新的内核版本:
去官网上下载最新的内核版本和对应的补丁:
https://www.kernel.org/

我选的是3.2.14
#wget -chttp://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.14.tar.bz2

3.
解压
将所需文件复制到/usr/src 下并解压。
(
注:如果/usr/src下的空间不够,将源文件放在别的目录下也是一样的)
# cplinux-3.2.14.tar.gz /usr/src/
# cd /usr/src/

将文件解压到/usr/src/kernels
# tar -xvflinux-3.2.14.tar.gz -C /usr/src/kernels

4.
清理文件
清除掉以前升级留下的一些不正确文件。
# cd/usr/src/kernels/linux-3.2.14
# yum installncurses-devel       #升级ncurses
# make mrporper
# cp/boot/config-‘uname -r’/usr/src/kernels/linux3.2.14/.config  #使用原来的配置文件

5.
通过菜单方式配置内核
# cd/usr/src/kernels/linux-3.2.14
# makemenuconfig
linux
配置菜单如下图所示:


一定要勾选(输入y选中,M编译为模块)
a
、General setup→[*]enable deprecated sysfs features to support old userspace tools
b
、Processor type and features→HighMemory Support。
c
、找到以下选中选项并选中:
networking support
→ networking options → network packet filtering framework(netfilter)
(1)Corenetfilter configuration

. 勾中"Netfilter connection trackingsupport" -m state相关模块是依赖它的,不选则没有。
.
将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
.
勾中"Netfilter Xtables support (requiredfor ip_tables)"

(2)IP: Netfilter Configuration

. 将 "IPv4 connection tracking support(require for NAT)" 编译成模块。
.
勾中IP tables support (required forfiltering/masq/NAT)
.
将 "Full NAT" 下的 "MASQUERADE target support" 和"REDIRECT target support" 编译成模块

6.
编译并安装内核
# make clean         // 清除下内核编译的目标文件
# make bzImage   // 生成内核文件
# make modules    // 编码模块
# makemodules_install // 安装模块
# make install        // 安装

7.
编辑开机菜单选项grub文件
将default=1 改为 default=0
# vim/etc/grub.conf

# grub.conf generated by anaconda

#
# Note that you do not have to rerun grub aftermaking changes to this file
# NOTICE:  You do not have a /bootpartition.  This means that
#          all kerneland initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel/boot/vmlinuz-version ro root=/dev/sda1
#          initrd/boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (3.2.14)
        root (hd0,0)
        kernel/boot/vmlinuz-3.2.14 ro root=LABEL=/
        initrd/boot/initrd-3.2.14.img
title Red Hat Enterprise Linux Server(2.6.18-274.el5)
        root (hd0,0)
        kernel/boot/vmlinuz-2.6.18-274.el5 ro root=LABEL=/
        initrd/boot/initrd-2.6.18-274.el5.img
【保存并退出】

8.
重启
# shutdown -r"now"

9.
查看内核编译结果
# uname -r
3.2.14-rt24

 

CentOS yum方式升级内核kernel

 

(此方法只限于CentOS派系的yum/rpm。补充:限于64BitCentOS732位,我试过用CentOS632位内核来升级,可升级可重启可使用,半个小时后删除了此系统没再尝试使用,所以不知道会带来什么不良体验。)

CentOSDebian升级内核的方式,前几篇日志中也提到过。

自编译内核:升级内核至当前最新稳定版 4.4.1

今儿个介绍一种更快捷的方式,直接yum安装编译好的内核,也就几个命令


# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

这步必须要执行的,要得到Key


若只想升级至当前的最新稳定内核,只需要执行下面两个命令

# yum install -yhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm  //添加源

# yum --enablerepo=elrepo-kernel install -y kernel-ml  //安装当前最新内核,以后升级内核直接运行这句就可


若只想升级只指定的内核,或者由于不能访问到源地址,也可以用以下方法。

先在以下两个网址中找到想要的内核。

1http://elrepo.reloumirrors.NET/kernel/el7/x86_64/RPMS/    //官方源

2http://hkg.mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/  //香港镜像,最新版本会比官网延迟12

上图中显示当前最新版本是 kernel-ml-4.5.2-1.el7.elrepo.x86_64.rpm MainLine = ml ),

链接地址为:http://hkg.mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.5.2-1.el7.elrepo.x86_64.rpm(香港速度相对快一些)

# yum install -yhttp://hkg.mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.5.2-1.el7.elrepo.x86_64.rpm


升级完内核,自动按最新内核启动,修改以下文件

# vi /etc/default/grub

修改成 GRUB_DEFAULT=0

# grub2-mkconfig -o /boot/grub2/grub.cfg   //重新编译内核启动文件,以后升级完内核也要执行一次


删除旧内核

# rpm -qa | grep kernel

# yum autoremove kernel-3.10.0-327.13.1.el7.x86_64

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其他版本更新内核

 

 

二、Fedora指导

如果你使用Fedora或其衍生版,整个过程与Ubuntu非常类似。只是下载不同文件的位置不同,安装命令也不同。

查看为Fedora构建的最新内核列表。从列表中选择最新的稳定版,然后向下翻到i686或x86_64版本,这取决于你系统的架构。在这个部分,你需要下载下列文件,并保存到各自的文件夹下(比如Downloads文件夹下的“Kernel”):

  • kernel
  • kernel-core
  • kernel-headers
  • kernel-modules
  • kernel-modules-extra
  • kernel-tools
  • perf和python-perf(可选)

如果你的系统是i686(32位),又有4GB或更多的内存,就需要下载所有这些文件的PAE版本。PAE是用于32位系统的地址扩展技术,让系统可以使用超过3GB的内存。

现在使用cd命令进入该文件夹,比如:

  1. cd /home/user/Downloads/Kernel 

然后运行下面这个命令来安装所有文件:

  1. yum --nogpgcheck localinstall *.rpm 

最后,重启计算机,这时你应该运行新内核了!

 

 

 

 

三、内核编译中遇到的错误及解决办法
错误一、 编译时出现错误提示
In file included from/usr/include/sys/time.h:31,

                from /usr/include/linux/input.h:12,
                from samples/hidraw/hid-example.c:14:
/usr/include/sys/select.h:78: error: conflictingtypes for 'fd_set'
/usr/include/linux/types.h:12: error: previousdeclaration of 'fd_set' was here
In file included from /usr/include/linux/input.h:14,
                from samples/hidraw/hid-example.c:14:
/usr/include/sys/types.h:46: error: conflictingtypes for 'loff_t'
/usr/include/linux/types.h:30: error: previousdeclaration of 'loff_t' was here
/usr/include/sys/types.h:62: error: conflictingtypes for 'dev_t'
/usr/include/linux/types.h:13: error: previousdeclaration of 'dev_t' was here
In file included from/usr/include/sys/types.h:133,
                from /usr/include/linux/input.h:14,
                from samples/hidraw/hid-example.c:14:
/usr/include/time.h:105: error: conflictingtypes for 'timer_t'
/usr/include/linux/types.h:22: error: previousdeclaration of 'timer_t' was here
In file included from/usr/include/linux/input.h:14,
                from samples/hidraw/hid-example.c:14:
/usr/include/sys/types.h:198: error: conflictingtypes for 'int64_t'
/usr/include/linux/types.h:98: error: previousdeclaration of 'int64_t' was here
/usr/include/sys/types.h:204: error: conflictingtypes for 'u_int64_t'
/usr/include/linux/types.h:97: error: previousdeclaration of 'u_int64_t' was here
In file included from/usr/include/linux/input.h:14,
                from samples/hidraw/hid-example.c:14:
/usr/include/sys/types.h:235: error: conflictingtypes for 'blkcnt_t'
/usr/include/linux/types.h:114: error: previousdeclaration of 'blkcnt_t' was here
samples/hidraw/hid-example.c:15:26: error:linux/hidraw.h: No such file or directory
samples/hidraw/hid-example.c: In function'main':
samples/hidraw/hid-example.c:48: error: storagesize of 'rpt_desc' isn't known
samples/hidraw/hid-example.c:49: error: storagesize of 'info' isn't known
samples/hidraw/hid-example.c:65: error:'HIDIOCGRDESCSIZE' undeclared (first use in this function)
samples/hidraw/hid-example.c:65: error: (Each undeclaredidentifier is reported only once
samples/hidraw/hid-example.c:65: error: for eachfunction it appears in.)
samples/hidraw/hid-example.c:73: error:'HIDIOCGRDESC' undeclared (first use in this function)
samples/hidraw/hid-example.c:84: warning: implicitdeclaration of function 'HIDIOCGRAWNAME'
samples/hidraw/hid-example.c:91: warning:implicit declaration of function 'HIDIOCGRAWPHYS'
samples/hidraw/hid-example.c:98: error:'HIDIOCGRAWINFO' undeclared (first use in this function)
samples/hidraw/hid-example.c:49: warning: unusedvariable 'info'
samples/hidraw/hid-example.c:48: warning: unusedvariable 'rpt_desc'
samples/hidraw/hid-example.c: In function'bus_str':
samples/hidraw/hid-example.c:171: error:'BUS_VIRTUAL' undeclared (first use in this function)
make[2]: *** [samples/hidraw/hid-example] Error1
make[1]: *** [samples/hidraw] Error 2
make: *** [vmlinux] Error 2

解决方案:
# cpinclude/linux/hidraw.h /usr/include/linux/
# cpinclude/linux/hid.h /usr/include/linux/
# vimsamples/hidraw/hid-example.c
(
在Linux下编译程序有时会遇到这种问题,这貌似是一个Linux历史遗留问题: 
把所有#include都提到最前面,把#include 的包含放在其后,就可以编译通过了,
之所以出现面的问题是存在循环引用所致。)
将13-15行的如下3行移动到33行以后。    
13 #include    

14 #include    
15 #include    
29 #include    
30 #include    
31 #include    
32 #include     
33 #include
【保存并退出】

# vim/usr/include/linux/input.h
line 647

#define BUS_PCI                0x01
#define BUS_ISAPNP             0x02
#define BUS_USB                0x03
#define BUS_HIL                0x04
#define BUS_BLUETOOTH          0x05
/*以下一行为新增*/
#define BUS_VIRTUAL            0x06

#define BUS_ISA                0x10
#define BUS_I8042              0x11
#define BUS_XTKBD              0x12
#define BUS_RS232              0x13
#define BUS_GAMEPORT           0x14
#define BUS_PARPORT            0x15
#define BUS_AMIGA              0x16
#define BUS_ADB                0x17
#define BUS_I2C                0x18
#define BUS_HOST               0x19
#define BUS_GSC                0x1A

/*以下两行为新增*/
#define BUS_ATARI              0x1B

#define BUS_SPI                0x1C 
【保存并退出】
再重新编译;

错误二:
错误提示:Kernelpanic—not syncing :vfs:unable to mount root fs onunkown—block (0,0)
错误分析:initrd-*.*.img文件有问题;未能成功挂载真正的根文件系统。
解决方法:请你确认执行了make install 命令,我就因为没有执行这条命令而浪费了一周时间

错误三:
错误提示:Createroot device  mkrootdev: label / not found 
                    Mountingrootfilesystem 

                    mount :error2 mounting ext3
                    mount :error 2mountingnone 
                    switch root mount failed:22
                    umount  /initrd/dev failed :2
                    kernel panic-not synicncing :Attempted to kill init .
(错误提示是不是有点长,貌似错误很多哦,其实可能就一个原因导致)
错误分析:
1
、根文件系统找不到挂载点 ,修改grub.conf文件为 root=/dev/ * 
2
、硬盘驱动未能找到,请看看你机器的硬盘是都是 SATA盘,是的话同样恭喜你本文对你有帮助。

错误解决:
1.
、修改grub.conf文件试试,具体修改点
root=/dev/*

* 指的是原系统中/分区的挂载点。修改后,重启进入新内核系统,估计十有八九又会遇到如下错误提示:
Mounting root filesystem 

mount :error6 mounting ext3
mount :error 2 mountingnone 
switchroot mount failed:22
umount  /initrd/dev failed :2
kernel panic-not synicncing :Attempted tokil linit .
如果不幸被我言中,请接着往下看。
2
、硬盘驱动未能成功找到,SCSI驱动有问题。
我在内核编译升级中遇到这个问题,对内核选项选了又选,方法试了很多种,错误依旧。
最终让我无意中选正确选项,成功升级内核。
具体选项是:
Device Drivers--------SCSI

device support------SCSI
low-level drivers----Serial ATA(SATA)support 选为 M,
然后再选择相应的子选项,我选择了Intel PIIX/ICH  SATA support (new)后机器就成功启动了。

错误四:
错误提示:Enforcingmode requested but no policy loaded. Halting now.
kernel panic - not syncing: Attenpted to killinit!

错误分析:原内核中启用了selinux,新内核未选择selinux的选项,不能成功启动。
解决方法:修改grub.conf文件,在root=LABEL=/ 后加入 enforcing=0 

错误五:
编译完重启后出现:
switchroot:   mount   failed:  22 

umount   /initrd/dev   failed:  2 
kernel   panic   -   not  symcing:   Attempted   to   kill   init! 
的错误,

解决办法:
重新makemenuconfig, 使CONFIG_SYSFS_DEPRECATED_V2=y
也可以打开文件.config做修改和验证;
再执行:
# make bzImage

# make modules
# make modules_install
# make install
# shutdown -r "now"

你可能感兴趣的:(liunx资料)