一、RPM包的分类
RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。
linux软件包分为两大类:
(1)二进制类包,包括rpm安装包(一般分为i386和x86等几种)
(2)源码类包,源码包和开发包应该归位此类(.src.rpm)。
有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二进制安装包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根据spec file来实现的。在制作自定义rpm包的时候最好不使用普通用户实现。
二、修改宏及自定义车间位置
在redhat下,rpm包的默认制作路径在/usr/src/redhat下,这其中包含了6个目录(要求全部大写)
Directory Usage BUILD 源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录 RPMS 制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc) SOURCES 收集的源文件,源材料,补丁文件等存放位置 SPECS 存放spec文件,作为制作rpm包的领岗文件,以 rpm名.spec SRPMS src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了 BuiltRoot 假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除
centos下没有该目录,我们必须自定义工作车间,(即使在redhat下有该目录,一般也是自定义到普通用户的家目录下)
rpmbuild --showrc 显示所有的宏,以下划线开头,
一个下划线:定义环境的使用情况,
二个下划线:通常定义的是命令,
为什么定义宏?不同的系统,命令的存放位置可能不同,所以通过宏的定义找到命令的真正存放位置
查看默认工作车间
[root@localhost /]# rpmbuild --showrc | grep _topdir -14: _builddir %{_topdir}/BUILD -14: _buildrootdir %{_topdir}/BUILDROOT -14: _desktopdir %{_datadir}/applications -14: _rpmdir %{_topdir}/RPMS -14: _sourcedir %{_topdir}/SOURCES -14: _specdir %{_topdir}/SPECS -14: _srcrpmdir %{_topdir}/SRPMS -14: _topdir %{getenv:HOME}/rpmbuild
三、rpm包制作原理图
四、制作rpm包
1、安装rpm-build
# yum -y install rpm-build
2、增加普通用户并修改工作车间目录
# useradd rpmbuild # su - rpmbuild $ vim ~/.rpmmacros %_topdir /home/rpmbuild/rpmbuild # mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} # rpmbuild --showrc | grep _topdir -14: _topdir /home/rpmbuild/rpmbuild
3、收集源码文件
(1)文件列表
[rpmbuild@RS1 SOURCES]$ pwd /home/rpmbuild/rpmbuild/SOURCES
(2)源码包
[rpmbuild@RS1 SOURCES]$ cp /wh_k/httpd-2.4.34.tar.gz . [rpmbuild@RS1 SOURCES]$ ll 总用量 8888 -rw-r--r--. 1 rpmbuild rpmbuild 9098780 8月 29 15:16 httpd-2.4.34.tar.gz
(3)httpd脚本文件
4、在 SPECS 目录下创建 httpd.spec
$ cd rpmbuild/SPECS/ 查看系统组: [root@RS1 rpm-4.11.3]# less /usr/share/doc/rpm-4.11.3/GROUPS $ vim httpd.spec Name:httpd Version:2.4.34 Release: 1%{?dist} Summary:wang123 Group: Applications/System License: GPLV2 URL: 350161345@qq.com Source0: /home/rpmbuild/rpmbuild/SOURCES/httpd-2.4.34.tar.gz BuildRequires: gcc Requires: gcc %description build by wang123 %prep %setup -q %build %configure make %{?_smp_mflags} %install make install DESTDIR=%{buildroot} %files %defattr(-,root,root) /* %doc
5、制作rpm包
[rpmbuild@RS1 SPECS]$ rpmbuild -bp httpd.spec 制作到%prep段 [rpmbuild@RS1 SPECS]$ rpmbuild -bc httpd.spec 制作到%build段 [rpmbuild@RS1 SPECS]$ rpmbuild -bi httpd.spec 执行 spec 文件的 "%install" 阶段 (在执行了 %prep 和 %build 阶段之后)。这通常等价于执行了一次 "make install"rpmbuild -bb nginx.spec 制作二进制包 [rpmbuild@RS1 SPECS]$ rpmbuild -ba httpd.spec 表示既制作二进制包又制作src格式包
五、rpm包的签名
1、查询软件包信息
[rpmbuild@RS1 x86_64]$ pwd /home/rpmbuild/rpmbuild/RPMS/x86_64 [rpmbuild@RS1 x86_64]$ ll 总用量 10052 -rw-rw-r--. 1 rpmbuild rpmbuild 7428624 8月 29 16:12 httpd-2.4.18-1.el7.x86_64.rpm -rw-rw-r--. 1 rpmbuild rpmbuild 2859268 8月 29 16:12 httpd-debuginfo-2.4.18-1.el7.x86_64.rpm
到这里,一个完整的 rpm 包就制作完成了!