linux源码NTP构建rpm包的方法

linux源码NTP构建rpm包的方法

linux运维经常遇到漏洞修复问题,针对这些漏洞需要修复。一般采用更新该服务的方式修复漏洞。当机器较少是一台一台的编译安装比较轻松,当机器达到几十上百台时,服务的安装将成为一个繁重的工作,如果能叫服务的源码包制作成rpm格式的安装包,这将降低了安装服务的难度和减轻了安装升级的工作量。本文将介绍如何通过NTP官方源码包生产rpm的安装包。

首先介绍RPM

rpm的全称是Redhat Package Manager,常见的使用rpm软件包的系统主要有Fedora、CentOS、openSUSE、SUSE企业版、PCLinuxOS以及Mandriva Linux、Mageia等,使用deb软件包后缀的类Debian系统最常见的有Debian、Ubuntu、Finnix等。
PM这个软件管理的机制是由 Red Hat 这家公司发开发出来的, RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。

它最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件,通过包装好的软件里默认的数据库记录, 记录这个软件要安装的时候所依赖的软件,当在你的 Linux 主机进行安装时, RPM 会先依照软件里的数据查询 Linux 主机的依赖软件是否满足, 若满足则予以安装,若不满足则不予安装。那么安装的时候就将该软件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与卸载!

优点是:

  1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译)

  2. 由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与卸载

缺点是:
3. 软件文件安装的环境必须与打包时的环境需求一致或相当

  1. 需要满足软件的相依属性需求

  2. 卸载时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题

接下来介绍SRPM

SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 文件里面含有源码。特别注意的是,这个SRPM 所提供的软件内容『并没有经过编译』, 它提供的是源码!

通常 SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的。不过,既然 SRPM 提供的是原始码,那么为什么我们不使用 Tarball 直接来安装就好了?这是因为 SRPM 虽然内容是原始码, 但是他仍然含有该软件所需要依赖说明、以及所有 RPM 文件所提供的数据。同时,他与 RPM 不同的是,它也提供了参数配置文档 (就是 configure 与 makefile),所以如果我们下载的是 SRPM ,那么要安装该软件时,
你就必须要:

  1. 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件

  2. 然后将编译完成的 RPM 文件安装到 Linux 系统当中

怎么 SRPM 这么麻烦呢!还要重新编译一次,那么我们直接使用 RPM 来安装不就好了?通常一个软件在发布的时候,都会同时发布该软件的 RPM 与 SRPM 。我们现在知道 RPM 文件必须要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的格式,自然我们就可以通过修改 SRPM 内的参数配置档,然后重新编译生成能适合我们 Linux 环境的 RPM 文件,如此一来,不就可以将该软件安装到我们的系统当中,而不必与原作者打包的 Linux 环境相同了?这就是 SRPM 的用处了!

接下来介绍用NTP软件包的源代码src.rpm构建自己的rpm软件安装包。

一:实验环境

[root@centos7 x86_64]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

虚拟机:VMware xx.xx.xx.xx (能联网)```

打包软件:[root@centos7 builder]# ll
total 4244
-rw-r--r-- 1 builder builder 4343547 Mar 11 14:34 ntp-4.2.6p5-28.el7.centos.src.rpm

2:先说一下软件包来源
本次打包原因是一部分服务器系统已经过了生命周期,官网已经不提供更新服务,那么就的找到旧版本的源码包打包成rpm方便升级。
于是我就到centOS官网地址去找src.rpm包:https://vault.centos.org/7.6.1810/os/Source/SPackages/
这个是centos的存档地址,里面存放了许多旧的源码包,这些包再新版本的系统中已经不存在了。
本次NTP源码包的完整下载地址是:https://vault.centos.org/7.6.1810/os/Source/SPackages/ntp-4.2.6p5-28.el7.centos.src.rpm

3:安装编译环境

安装相应的软件包

yum -y install vim  wget rpm-build  gcc  make  redhat-lsb-core   libuuid-devel mock

然后创建一个用户,如果你不创建这个用户打包的时候就会出现
Warning: user mockbuild does not exist. using root
这样的警告,虽然不是报错,但是我测试创建这个用户就不会出现警告了。

useradd -s /sbin/nologin mockbuild

最后安装NTP服务所需要的依赖,因为我测试的时候出现了报下面这个缺少依赖,所以这提前安装依赖,如果你打包的时候还包缺依赖那报啥就你安装啥就行了。

yum install -y  libcap-devel  libedit-devel   perl-HTML-Parser  pps-tools-devel   autogen  autogen-libopts-devel  libedit-devel.x86_64 
error: Failed build dependencies:
        libcap-devel is needed by ntp-4.2.6p5-28.el7.x86_64
        libedit-devel is needed by ntp-4.2.6p5-28.el7.x86_64
        perl-HTML-Parser is needed by ntp-4.2.6p5-28.el7.x86_64
        pps-tools-devel is needed by ntp-4.2.6p5-28.el7.x86_64
        autogen is needed by ntp-4.2.6p5-28.el7.x86_64
        autogen-libopts-devel is needed by ntp-4.2.6p5-28.el7.x86_64

接下来添加用于编译src.rpm的用户

# useradd builder

把下载的ntp-4.2.6p5-28.el7.centos.src.rpm包放到该用户的家目录里面去:

[root@centos7 builder]# cp ntp-4.2.6p5-28.el7.centos.src.rpm /home/builder/

编译前看一下这个包的详细信息:
在这里插入图片描述

开始编译:直接生成rpm安装包

rpmbuild --rebuild --clean ntp-4.2.6p5-28.el7.centos.src.rpm 

然后哔哩吧啦一堆东西,最后看到这说明成功了
在这里插入图片描述
可以看到,程序根据操作系统的架构,在 /home/builder/rpmbuild/RPMS/x86_64/ 目录下编译生成用于安装的rpm包。
在这里插入图片描述
就可以拿这些包去升级了

还有编译方式二:通过spec 文件,生成用于安装的rpm包

cd /home/builder/rpmbuild/SPECS/
rpmbuild -bb nginx.spec

细心的你可能会发现,咦,怎么和方式一生成安装用的rpm包方式一样?

其实不一样,相比方式一,在 rpmbuild -bb nginx.spec 之前,我们是可以编辑修改nginx.spec 之前,自定一些东西的,只是我们这里用的默认的nginx.spec文件而已,关于nginx.spec文件,不是本文的关注点,感兴趣可以查看相关文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值