rpmbuild
如何将源码包打成RPM包
Linux系统中一般安装软件有两种方法,源码安装和yum安装或者rpm包安装,由于光盘中的rpm包都是几年前制作成的,所以软件版本都很低,同时yum安装对软件的可定制性很低,所以为了使用最新的软件,一般都采用源码安装,但是源码安装的步骤很繁琐,所以为了简化源码安装的过程,我们一般会把源码包制作成rpm包来安装,这样不仅解决了源码安装的繁琐步骤,又增加了rpm包的可定制性。下面我们来介绍一下如何制作rpm包
1. 安装 rpm-build 工具
[root@localhost ~]# yum install -y rpm-build rpmdevtools
2. 生成 rpm 包制作工具
[root@localhost ~]# rpmdev-setuptree
这个命令会在当前目录生成一个 rpmbuild 的目录,这个目录就是制作 rpm 包的环境
[root@localhost ~]# cd rpmbuild
[root@localhost rpmbuild]# ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
以下这三个目录很重要:
- RPMS:存放生成的 rpm 包
- SOURCES:放置软件的源码包,未解压的
- SPECS:放置配置文件
3. 制作 rpm 包
3.1 将源码包放到 /root/rpmbuild/SOURCES 目录中
[root@localhost rpmbuild]# cp /root/nginx-1.17.9.tar.gz /root/rpmbuild/SOURCES
3.2 编写配置文件
配置文件必须放在 /root/rpmbuild/SPECS 目录中,而且名字是自己定义的,但是必须以 .spec 结尾
[root@localhost rpmbuild]# cd SPECS/
[root@localhost SPECS]# vim nginx.spec
本文以 nginx 配置文件为例,配置文件内容如下
Name:nginx # 软件包名称
Version:1.17.9 # 软件版本,填写必须和源码包一样
Release: 1%{?dist} # 制作 rpm 包版本,每次制作版本自动加一
Summary:this is web server # 简要信息描述
#Group: # 软件包组,这里不属于包组,直接注释掉
License:GPL # 声明软件开源免费,不得用于谋利,一般直接写 GPL
URL:www.yv.com # 这个地址可以随便写
Source0:nginx-1.17.9.tar.gz # 源码包名称,和之前拷贝的要一致
#BuildRequires: # 提示要安装依赖包,但是并不能解决依赖包,依赖包还是需要自己安装,所以注释掉
#Requires:
%description
this is nginx # 详细描述信息
%post # 这里表示要安装软件包前,要执行的命令
useradd -s /usr/sbin/nologin nginx
mkdir /usr/local/httpd/logs
touch /usr/local/httpd/logs/error.log
%prep
%setup -q # 解压源码包并进入到解压目录
%build
./configure --prefix=/usr/local/httpd --user=nginx --group=nginx # 定制安装目录并开启模块
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot} # 编译安装
%files
%doc
/usr/local/httpd/conf/fastcgi.conf # 一下是一些打包目录
/usr/local/httpd/conf/fastcgi.conf.default
/usr/local/httpd/conf/fastcgi_params
/usr/local/httpd/conf/fastcgi_params.default
/usr/local/httpd/conf/koi-utf
/usr/local/httpd/conf/koi-win
/usr/local/httpd/conf/mime.types
/usr/local/httpd/conf/mime.types.default
/usr/local/httpd/conf/nginx.conf
/usr/local/httpd/conf/nginx.conf.default
/usr/local/httpd/conf/scgi_params
/usr/local/httpd/conf/scgi_params.default
/usr/local/httpd/conf/uwsgi_params
/usr/local/httpd/conf/uwsgi_params.default
/usr/local/httpd/conf/win-utf
/usr/local/httpd/html/50x.html
/usr/local/httpd/html/index.html
/usr/local/httpd/sbin/nginx
%changelog
保存退出(不写打包目录,或者不知道目录,之后编译会报错,会提示缺少什么打包目录,再添加上就行了)
3.3 开始制作源码包
[root@localhost SPECS]# rpmbuild -ba nginx.spec
tips:
- 过程中可能缺少 c 编译工具
[root@localhost SPECS]# yum install -y gcc
- 可能缺少 PCRE 库
[root@localhost SPECS]# yum install -y openssl openssl-devel pcre
- 可能缺少部分打包目录,需要在文件中手动添加
- 编译完成后,可能缺少一些文件,可在 %post 写加入创建命令
完成后,进入 RPMS 中可看到编译好的包
[root@localhost SPECS]# cd /root/rpmbuild/RPMS/
[root@localhost RPMS]# ls
x86_64
[root@localhost RPMS]# cd x86_64/
[root@localhost x86_64]# ls
nginx-1.17.9-1.el7.x86_64.rpm nginx-debuginfo-1.17.9-1.el7.x86_64.rpm
4. 测试安装制作的 rpm 包
[root@localhost ~]# rpm -ivh nginx-1.17.9-1.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:nginx-1.17.9-1.el7 ################################# [100%]
[root@localhost ~]# /usr/local/httpd/sbin/nginx
[root@localhost test]# netstat -antlp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22439/nginx: master
希望这篇文章能对你有帮助哦~