我们在使用Linux的使用会安装很多软件,有的软件是rpm包形式的,我们只需要输入命令就可以安装,而有的是一些源码包,如nginx,mysql等源码包,源码包的安装比较麻烦,如果我们希望通过rpm安装软件包,我们可以将源码包转换为rpm包方便我们的安装
利用rpmbuild打包,需要两类文件:
1、源码,源码以tar归档进行压缩的源码包,以及一些.patch文件,存放于目录./SOURCES下;
2、.spec文件,定义了打包的动作,以及依赖,是打包的最主要类容。
rpmbuild目录结构
目录名 | macros宏名 | 说明 |
BUILD | %_builddir | 编译rpm包的临时目录 |
BUILDROOT | %_buildrootdir | 编译后生成的软件临时安装目录 |
RPMS | %_rpmdir | 最终生成的可安装rpm包的所在目录 |
SOURCES | %_sourcedir | 所有源代码和补丁文件的存放目录 |
SPECS | %_specdir | 存放SPEC文件的目录(重要) |
SRPMS | %_srcrpmdir | 软件最终的rpm源码格式存放路径(暂时忽略掉,别挂在心上) ? |
下面以安装nginx包为例
1.安装rpm-bulid软件和gcc依赖包
- [root@web1 ~]# yum -y install rpm-build
- [root@web1 ~]# yum -y install gcc pcre-devel openssl-devel
2.生成rpmbuild目录结构
第一条命令会报错但是没有关系它会为我们创建一个目录,在当前的路径下
- [root@web1 ~]# rpmbuild -ba nginx.spec //会报错,没有文件或目录
- [root@web1 ~]# ls /root/rpmbuild //自动生成的目录结构
- BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3.准备工作,将源码软件复制到SOURCES目录
- [root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4.创建并修改SPEC配置文件
有几点需要注意,第一是版本号,Version要与Nginx源码包版本一致,第二是Source0,要与源码包包名一致
第三是参数名后面不能为空,哪怕你将它注释掉,也不能为空
- [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
- Name:nginx #源码包软件名称
- Version:1.12.2 #源码包软件的版本号
- Release: 10 #制作的RPM包版本号
- Summary: Nginx is a web server software. #RPM软件的概述
- License:GPL #软件的协议
- URL: www.test.com #网址
- Source0:nginx-1.12.2.tar.gz #源码包文件的全称
- #BuildRequires: #制作RPM时的依赖关系
- #Requires: #安装RPM时的依赖关系
- %description
- nginx [engine x] is an HTTP and reverse proxy server. #软件的详细描述
- %post
- useradd nginx #非必需操作:安装后脚本(创建账户)
- %prep
- %setup -q #自动解压源码包,并cd进入目录
- %build
- ./configure
- make %{?_smp_mflags}
- %install
- make install DESTDIR=%{buildroot}
- %files
- %doc
- /usr/local/nginx/* #对哪些文件与目录打包
- %changelog
5.rpmbuild创建RPM软件包
安装成功后查看一下
- [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
- [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
6.通过rpm安装Nginx
- [root@web1 ~]# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
- [root@web1 ~]# rpm -qa | grep nginx
- [root@web1 ~]# /usr/local/nginx/sbin/nginx
- [root@web1 ~]# curl http://127.0.0.1/
7.补充
rpm-bulid主要有四个阶段:
%pre //预处理阶段,解压缩软件包
%setup //准备阶段
%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch0 -p0 打第1个补丁,0表示利用当前相对路径名称
%pacth1 -p2 打第2个补丁,2表示忽略补丁文件第一层目录
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。
%build //编译阶段
./configure --prefix=$RPM_BUILD_ROOT/usr make
or
%configure make
%install 将软件安装到虚拟根目录