随着Linux服务器越来越多,如果底层系统内核想要保持统一的版本,就需要定制专门的二进制安装包,方便升级和管理。当然,RedHat系统使用rpmbuild进行定制化管理。今天我们分两部分(root和普通用户)讲解如何制作内核的二进制rpm包。搭建宿主系统环境协议:OS:CentOSrelease6.6Arch:i6861.rpm包的简单定制注意:这里首先需要预留至少20GB的临时文件空间。1、rpm制作前的环境准备yum-ygroupinstall"开发工具"yum-yinstallncurses-develqt-develyum-yinstallrpm-buildredhat-rpm-configasciidochmaccalcperl-ExtUtils-Embedxmltoyum-yinstallaudit-libs-develbinutils-develelfutils-develelfutils-libelf-develyum-y安装newt-develpython-develzlib-develbc2。准备内核的源代码组件cd/usr/srcwget-chttps://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xztar-Jxvflinux-3.19。1.tar.xzln-slinux-3.19.1linuxcdlinuxmakeoldconfig#验证并更新configuration.config配置文件(如果只想在原有内核配置的基础上修改一些小地方)makemenuconfig#简单的图形化内核配置管理3、至此,我们就可以开始编译新的内核rpm包了makerpm#自动生成rpmtree,kernel。spec文件,自动编译,生成包括debug包在内的所有rpm包组件。这个时候就等着吧,要不喝杯下午茶什么的。好吧,让我们找到编译好的内核rpm包。cd/root/rpmbuild/RPMS/`uname-m`/treeRPMS/RPMS/└──i386├──kernel-3.19.1-2.i386.rpm├──kernel-devel-3.19.1-2。i386.rpm└──kernel-headers-3.19.1-2.i386.rpm1目录,3个文件4。安装新内核rpm-Uvhkernel-*-.rpm5。重启,验证内核版本uname-a2.RPM包深度自定义1.我们先创建rpm的“生产车间”(我觉得这样说可能更形象)。yuminstallrpmdevtools#rpmworkshop快速创建工具useradd-mbuilder#创建一个临时用户来创建RPM包。如果发生错误,构建程序不会破坏现有的系统环境。su-builderrpmdev-setuptree#创建“生产车间”会在builder用户的主目录下生成如下目录结构:tree-L1~/rpmbuild/rpmbuild/├──BUILD├──RPMS├──SOURCES├──规格└──SRPMS#p#2。编译前的准备此时我们需要收集新版本的内核源码包,放到/home/builder/rpmbuild/SOURCES目录下。su-buildercd~/rpmbuild/SOURCESwget-chttps://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz#注意:rpmbuild使用gzip进行构建解压之前的源码包可以用,所以这个压缩包需要转成.tar.gz格式。#这里没有记录cp/boot/config-`uname-r`.#将已有的内核配置文件config-`uname-r`复制到SOURCES目录下,切换到SPECS目录下生成kernel.spec:tarJxvf../SOURCES/linux-3.19.1.tar.xz-C.bash../linux-3.19.1/scripts/package/mkspec>./kernel.specrm-rflinux-3.19.1#这里需要我们手动使用源码包中提供的脚本生成kernel.spec文件#切记生成kernel.spec后清理linux-3.19.1文件夹vimkernel.spec#可以根据个人情况进行深度定制。到这里,我们的准备工作基本完成,目录结构和内容如下:treerpmbuild/-arpmbuild/├──BUILD├──RPMS├──SOURCES│├──config-`uname-r`│└-bb--withbaseonly--withoutdebug--withoutdebuginfo--target=`uname-m`kernel.specrpmbuild参数说明:(1)--with
