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:

  1. 过程中可能缺少 c 编译工具
[root@localhost SPECS]# yum install -y gcc
  1. 可能缺少 PCRE 库
[root@localhost SPECS]# yum install -y openssl openssl-devel pcre
  1. 可能缺少部分打包目录,需要在文件中手动添加
  2. 编译完成后,可能缺少一些文件,可在 %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 
posted @ 2021-04-27 19:13  -桃枝夭夭-  阅读(603)  评论(0编辑  收藏  举报