随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理。 RedHat系那当然就是使用rpmbuild来做定制化管理了。

今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包。

Building主机系统环境约定:

  • OS : CentOS release 6.6

  • Arch : i686

第一部分,rpm包简单定制

注意: 这里我们首先要预留至少20GB的临时文件空间。

一、rpm 制作前的环境准备:

  1. yum -y groupinstall "Development Tools"
  2. yum -y install ncurses-devel qt-devel
  3. yum -y install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto
  4. yum -y install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
  5. yum -y install newt-devel python-devel zlib-devel bc

二、准备内核的源代码组件

  1. cd /usr/src
  2. wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
  3. tar -Jxvf linux-3.19.1.tar.xz
  4. ln -s linux-3.19.1 linux
  5. cd linux
  6. make oldconfig # 验证和更新配置.config配置文件(如果只想在原来内核配置的基础上修改一些小地方)
  7. make menuconfig # 简单图形化的内核配置管理

三、此时,我们就可以开始编译新内核rpm包了

  1. make rpm # 自动生成rpmtree,kernel.spec文件,自动编译, 会生成debug包在内的所有rpm包组件。

这个时候我们就等着吧,或者喝杯下午茶什么的。

好了, 我们找一下已经编译好的内核 rpm 包。

  1. cd /root/rpmbuild/RPMS/`uname -m`/
  2. tree RPMS/
  3. RPMS/
  4. └── i386
  5. ├── kernel-3.19.1-2.i386.rpm
  6. ├── kernel-devel-3.19.1-2.i386.rpm
  7. └── kernel-headers-3.19.1-2.i386.rpm
  8. 1 directory, 3 files

四、安装新内核

  1. rpm -Uvh kernel-*-.rpm

五、重启,验证内核版本

  1. uname -a

第二部分, rpm包深度定制化

一、我们先创建好rpm的“制作车间”(我觉得这样说可能更形象一些)。

  1. yum install rpmdevtools # rpm 制作车间快速创建工具
  2. useradd -m builder # 新建一个临时用户以便创建 RPM 包,如果有错误发生,构建程序不会破坏现有的系统环境。
  3. su - builder
  4. rpmdev-setuptree # 创建”制作车间“

将会在builder用户的家目录下生成如下目录结构:

  1. tree -L 1 ~/rpmbuild/
  2. rpmbuild/
  3. ├── BUILD
  4. ├── RPMS
  5. ├── SOURCES
  6. ├── SPECS
  7. └── SRPMS

二、编译前准备

此时我们需要包收集来的新版内核源码包放到 /home/builder/rpmbuild/SOURCES 目录下

  1. su - builder
  2. cd ~/rpmbuild/SOURCES
  3. wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
  4. cp /boot/config-`uname -r` .config # 将现有的内核配置文件 config 拷贝到 SOURCES 目录下

三、切换到SPECS目录下, 开始 building 内核

  1. tar Jxvf ../SOURCES/linux-3.19.1.tar.xz
  2. bash ../linux-3.19.1/scripts/package/mkspec >./kernel.spec # 生成 kernel.spec 文件
  3. rm -rf linux-3.19.1
  4. vim kernel.spec # 可以根据个人情况做深度定制化
  5. rpmbuild -bb --with baseonly --without debug --without debuginfo --target=`uname -m` kernel.spec
  6. # --with <option> 指明编译某一种 kernel,可选的 option 有 baseonly、smponly 和 xenonly 等。
  7. # --without <option> 指明去除一些功能模块,可选的 option 有 xen、smp、up、pae、kdump、debug 和 debuginfo 等。
  8. # 其中,debug 选项会剔除内核中的调试代码,debuginfo 选项会禁止建立 kernel-debuginfo 包。

完成以后,请到 ~/rpmbuild/RPMS/`uname -m`/ 目录中获取 rpm 安装包。

---------------------------------------------------------------------------------------------------------------------------

rpm 包 building 参考文档:

http://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn

http://fedoraproject.org/wiki/Building_a_custom_kernel

http://wiki.centos.org/zh/HowTos/Custom_Kernel#head-981e27f326384c58516d3b2051b225526bb0a50a

Red Hat 系列如何快速定制二进制内核 RPM 包?的更多相关文章

  1. Red Hat Enterprise Linux 7.2下使用RPM包安装SQL Server vNext

    1.下载安装包 mssql-server:https://packages.microsoft.com/rhel/7/mssql-server/ mssql-tools:https://package ...

  2. Red Hat Enterprise Server 6.0 安装Sendmail相关包

    由于需要在Linux服务器(Red Hat Enterprise Linux Server release 6.0)上配置邮件服务,需要安装Sendmail包,一般Sendmail的安装有两种方式:R ...

  3. Centos 中如何快速定制二进制的内核RPM 包

    随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...

  4. 编译制作Linux 3.18内核rpm包(升级centos6.x虚拟机内核)

    介绍 openstack平台需要使用各种Linux发行版模板镜像,其制作方法主要有两种,要么是基于各大Linux发行版ISO光盘手动制作,要么是使用官方提供的模板镜像再做修改 之前制作的opensta ...

  5. 定制LNMP的RPM包

    自动化部署必备技能—定制化RPM包 回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. ...

  6. 编译一个Centos6.4下可用的内核rpm升级包-3.8.13内核rpm包

    在Centos6.4下进行内核升级,采用内核源码的升级方式比较简单,但是需要升级的机器多的情况下进行内核升级就比较麻烦,并且编译内核的速度依赖于机器的性能,一般需要20分钟,而通过rpm内核包的方式进 ...

  7. Red Hat、Fedora和Ubuntu软件包操作

    五.Red Hat.Fedora和Ubuntu软件包操作对比 最后总结: 在 /etc/yum.conf 的 [main] 后面添加以下配置即可! 复制代码 代码如下: exclude=kernel* ...

  8. FPM定制RPM包实践

    1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...

  9. 自动化部署必备技能—部署yum仓库、定制rpm包

    部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...

随机推荐

  1. flv格式的播放代码

    <object classid="clsid:D27CDB6E-AE6D-444553540000" class="player2" codebase=& ...

  2. test20181024 nan

    题意 nan 问题描述 我们有一个序列,现在他里面有三个数1,2,2.我们从第三个数开始考虑: 第三个数是2,所以我们在序列后面写2个3,变成1,2,2,3,3. 第四个数是3,所以我们在序列后面写3 ...

  3. centos7 开放mongodb端口

    CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启端口是不可以的 CentOS 7 采用了 firewalld 防火墙 如要查询是否开启27019端口则: 1 ...

  4. angularJS指令动态加载template

    angularJS提供了自定义指令的功能,指令可以定义自己的模板控制器,这个就类似于现在框架的组件,一个指令一般对应一个模板, templateUrl: 'templates/exportTmp.ht ...

  5. Linux环境kafka安装

    一. 安装包下载地址 https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.12-2.0.0.tgz 注:下载kafka时有S ...

  6. AngularJS开发指南14:依赖注入

    推荐两种使用场景: 1.控制器中的依赖注入 控制器是负责应用行为的类.推荐的控制器声明方法如下: var MyController = function(dep1, dep2) { ... } MyC ...

  7. WCF揭秘学习笔记(1):基础知识

    最近找工作,面试时经常被问懂不懂WCF.不少招聘高级.NET工程师的要求上都 写着有WCF开发经验的优先考虑.我对于WCF仅仅是通过看一些教学视频这种山寨学习法了解一些.现在要下决心好好学习一下WCF ...

  8. mediawikide

    wiki.conf server { listen 80; server_name wiki.talkvip.cn; index index.html index.htm index.php; roo ...

  9. Bootstrap-Plugin:轮播(Carousel)插件

    ylbtech-Bootstrap-Plugin:轮播(Carousel)插件 1.返回顶部 1. Bootstrap 轮播(Carousel)插件 Bootstrap 轮播(Carousel)插件是 ...

  10. linux shell 修改文本 sed

    linux shell 修改文本echo [root@DSI tmp]# echo 'yhqt1 test1' > test1.txt [root@DSI tmp]# cat test1.txt ...