Rpmbuild原码打包成rpm包
RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。
linux软件包分为两大类:
(1)二进制类包,包括rpm安装包(一般分为i386和x86等几种)
(2)源码类包,源码包和开发包应该归位此类(.src.rpm)。
有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二进制安装包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根据spec file来实现的。在制作自定义rpm包的时候最好不要使用管理员进行,因为管理员权限过大,如果一个命令写错了,结果可能是灾难性的,而制件一个rpm 包普通用户完全可以实现。
1、安装rpm-build软件包
RPM打包使用的是rpmbuild命令,这个命令来自rpm-build软件包,这个是必装的。
yum -y install rpm-build
2、生成打包.spec文件(以nginx为例)
rpmbuild -ba nginx.spec
//制作rpm包,但是没有配置文件会报错,报错也需要敲,会产生所需的目录。
当执行rpmbuild命令失败之后,会在当前目录下生成一个rpmbuild目录,该目录中包含下面的6个目录
BUILD:源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录。
BUILDROOT:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除。
RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc)。
SOURCES:收集的源文件,源材料,补丁文件等存放位置。
SPECS:存放spec文件,作为制作rpm包的领岗文件,文件以.spec结尾。
SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了。
3、将nginx源码文件拷贝到rpmbuild/SOURCES/中
cp nginx-1.17.6.tar.gz rpmbuild/SOURCES/
//拷贝源码包到rpmbuild的工作目录
4、安装编译nginx所需库
yum -y install gcc make pcre-devel openssl-devel
5、编写nginx.spec文件
vim rpmbuild/SPECS/nginx.spec //编写将nginx转换为rpm包的配置文件 Name:nginx //软件名 Version:1.17.6 //版本 Release:1 //发布的rpm包的版本 Summary:test~ //简单描述 #Group: License:GPL //授权协议 ,GPL表示自由软件 URL:www.abc.com //网址 Source0:nginx-1.17.6.tar.gz //源码包 #BuildRequires: #Requires: %description //详细描述 test~ test~ %post //可以添加安装rpm包之后执行的命令,不是必须 useradd nginx %prep %setup -q %build ./configure //配置,如果要添加选项或者模块可以继续写 make %{?_smp_mflags} //编译 %install make install DESTDIR=%{buildroot} //安装 %files %doc /usr/local/nginx/* //将改路径下文件打包成rpm %changelog
6、生成rpm包
rpmbuild -ba rpmbuild/SPECS/nginx.spec //根据上述文件制作rpm包
7、查看结果
ls rpmbuild/RPMS/x86_64/
如果有错误,欢迎各位网友指导。
另外喜欢的话,给个推荐呗,谢谢!