目录
第1步:准备源码
以nginx为例:nginx: download
第2步:安装rpm-build
yum install rpm-build -y #默认自带
rpmbuild -ba xxx #后面的xxx自定义,执行会报错,不用管,只要在当前目录生成rpmbuild目录即可
如上图,其中SOURCES目录是放置文件源码的地方,RPMS是编译后的rpm包存放位置,SPECS是存放配置文件以供rpmbuild的时候读取。
将nginx源码包拷贝到SOURCES目录
第3步:编写编译配置文件
在SPECS目录创建配置文件,名称自定义,格式必须为.spec,如创建nginx.spec
vim nginx.spec
Name:nginx #rpm包名,非自定义,需要和源码包对应
Version:1.16.1 #软件版本,非自定义,需要和源码包对应
Release: 1%{?dist} #release版本,默认是1
Summary:This is a web server. #描述信息
#Group: #组包,定义属于哪个组,以便于yum grouplist管理和批量自动安装,如果不想添加到组,可以注释该行配置
License:GPL #所属协议,GPL是可以免费下载,使用,修改的协议
URL:www.baidu.com #网址
Source0:nginx-1.16.1.tar.gz #源码包全称,非自定义,需要和源码包对应
#BuildRequires: #编译源码时所需的依赖包,这里只是提醒,不会帮你解决,没有可以注释
#Requires: #安装时所需依赖包,只做提示,没有可以注释
%description #软件详细描述,可以是任意字符串
This is a web server.
%post #安装后脚本
useradd nginx #安装rpm后自动创建nginx用户,这里谨防防止危险操作,比如rm删根或者wget下载病毒文件,或者自动添加ssh密钥,可以远程免密登陆攻击
%prep
%setup -q #脚本,解压源码包,并cd进去
%build
./configure --user=nginx # %变./ 前面已经cd进去了,即只要./执行当前目录configure即可,--user是指定用户,如果没有这个用户就会有问题,可以在上方添加%post,作为安装后脚本,添加nginx用户,这样别人只要装了这个rpm包,就会自动创建nginx用户,像安装httpd,系统就会自动创建一个apache用户
make %{?_smp_mflags} #make编译
%install #make install 安装
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/* #指定打包目录,编译完成后,对/usr/local/nginx整个目录进行打包
%changelog #历史变更记录
注:实际spec配置文件不要跟#号注释说明,不然会报错
第4步:编译rpm包
在编译安装前,先检查当前系统编译环境是否满足:
rpm -qa | grep -E 'gcc|pcre-devel|openssl-devel'
进入到SPEC目录,进行打包:
rpmbuild -ba nginx.spec
如上图编译打包完成,rpm包如下图:
安装测试:
#安装过程实际就是对上文编译后的/usr/local/nginx目录的解压过程
rpm -ivh nginx-1.16.1-1.el7.centos.x86_64.rpm
如下图可以看到安装目录:/usr/local/nginx,并自动创建了nginx用户:
查看描述信息:
yum info nginx
如上图可以看到描述信息都是上面spec配置自定义的内容。