制作nginx的RPM包,一不小心就会犯的错

使用RPM包和源码包安装软件各自的优缺点:

RPM包:安装简单,但无法自定义配置,为保证稳定性、兼容性软件版本都相对陈旧;

源码包:可以较快获得软件最新版本, 可根据需要自定义配置(如安装目录,用户,模块等),安装相对麻烦。

实验目标:

使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体要求如下:

一、部署rpm-build软件

1、安装rpm-build软件包

# yum -y install rpm-build

2、生成目录结构

# rpmbuild -ba nginx.spec           ##输入任意 **.spec,这一步报错,此时将自动生成目录

error: failed to stat /root/nginx.spec: No such file or directory

# ls /root/rpmbuild/                        ##查看自动生成的目录结构

BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

3、准备源码软件到SOURCES

# cp nginx-1.12.2.tar.gz  /root/rpmbuild/SOURCES/

4、创建修改SPEC配置文件

# vim /root/rpmbuild/SPECS/nginx.spec                     ##编写后缀为 .spec 的文件

Name:         nginx                   ##源码包软件名称要与源码包名称对应(注意,名称包括大小写不一致可能导致报错!)

Version:       1.12.2                 ##源码包软件的版本号

Release:      10                       ##RPM包的版本号,不填默认为1

Summary:    Nginx is a web server.              ##RPM软件包的简述    

License:       GPL                  ##软件的协议

#Group                                 ##该软件所属的组包,若不需要可以注释或删除

URL:            test.rpm.com    ##网址信息,可写RPM包的下载地址或个人博客地址或公司网址

Source0:      nginx-1.12.2.tar.gz                                           ##源码包文件的全称(必须对应!)

BuildRequires:        gcc,gcc-c++,pcre-devel,zlib-devel          ##制作RPM包的依赖包

#Requires:                           ##安装RPM包的依赖包

%description                       ##软件的详细描述

Building a nginx-1.12.2.rpm from nginx-1.12.2.tar.gz

%post                                 ##安装后执行脚本(非必要)

useradd nginx                    ##创建用户

%prep                                ##安装前执行脚本(非必要)

%setup -q                          ##自动解压源码包,并cd进入目录

%build                               ##配置

./configure

make %{?_smp_mflags}

%install                            ##安装

make install DESTDIR=%{buildroot}

%files                               ##(需要一同打包的文件与目录)

%doc

/usr/local/nginx/*             ##安装以后产生的目录位置

%changelog

二、创建RPM包

1、使用配置文件创建rpm包

# yum -y install gcc pcre-devel openssl-devel                      ##安装依赖包

# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec                                      ##使用nginx.spec文件生成

# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm                 ##查看生成的软件包

2、安装软件

# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm

# rpm -qa | grep nginx

# ls /usr/local/nginx/

常见报错

1、缺少依赖包

这一步主要是在./configure配置nginx时软件默认自带的某些模块需要特定的依赖关系

根据报错提示信息,安装依赖包即可。

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

error: Bad exit status from /var/tmp/rpm-tmp.qfdEOj (%build)
#yum -y install zlib-devel                 ##根据报错信息,安装所需依赖

2、软件包名称指定错误

这一步在编写spec配置文件时一不小心就会犯错,在制作不同软件时,指定的Name名称要严格与源码包一致。

软件根据指定的Name与Version生成软件包名字,再与源码包匹配,若名称不一致则会报错。

修改指定的名字与源码包名字一致,包括大小写一致。

[root@proxy ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.vPgQlI
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf Nginx-1.12.2
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/nginx-1.12.2.tar.gz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd Nginx-1.12.2
/var/tmp/rpm-tmp.vPgQlI: line 35: cd: Nginx-1.12.2: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.vPgQlI (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.vPgQlI (%prep)
 

 

<think>嗯,用户想了解如何制作NginxRPM。参考了提供的引用内容,特别是引用[1][2][3][4]中关于打流程的详细步骤。用户可能是个系统管理员或DevOps工程师,需要将Nginx标准化部署。 从引用[1]和[3]看,核心工具是rpmbuild,需要先准备spec文件。引用[3]特别强调了spec文件里Name/Version/Release这些元数据的规范写法,还提到BuildRequires要含gcc等依赖。用户可能容易忽略这些细节导致打失败。 引用[4]提到编译参数很重要,比如--with-http_ssl_module这些功能模块要提前规划。用户如果漏掉关键模块,可能得重新打,这点需要重点提醒。 考虑到用户可能第一次打,建议分三部分回答:环境准备阶段要装rpm-build和编译工具;spec文件编写要示范关键段落;实际构建时注意解决依赖问题。最后补充验证方法,就像引用[1]里用rpm -ihv测试安装那样。 用户可能后续会问如何添加自定义模块或处理依赖冲突,所以相关问题设计要覆盖这些场景。比如引用[3]提到的BuildRequires字段,如果用户需要新依赖就可能出问题。</think>制作Nginx RPM的核心流程如下,结合了引用中的关键步骤和最佳实践: --- ### **1. 环境准备** ```bash # 安装编译工具和依赖 yum install -y rpm-build gcc openssl-devel zlib-devel pcre-devel make # 创建标准目录结构 mkdir -p ~/rpmbuild/{SOURCES,SPECS,RPMS,SRPMS} ``` --- ### **2. 准备源码和资源** ```bash # 将Nginx源码放入SOURCES目录 cp nginx-1.25.3.tar.gz ~/rpmbuild/SOURCES/ # 添加系统服务文件(如nginx.service) cp nginx.service ~/rpmbuild/SOURCES/ ``` --- ### **3. 编写Spec文件 (`~/rpmbuild/SPECS/nginx.spec`)** ```spec Name: nginx Version: 1.25.3 # 与源码版本一致 Release: 1%{?dist} # 发行号(如1.el7) Summary: High Performance Web Server License: BSD Group: System Environment/Daemons URL: http://nginx.org/ Source0: %{name}-%{version}.tar.gz # 编译依赖 BuildRequires: gcc, pcre-devel, openssl-devel, zlib-devel # 运行时依赖 Requires: pcre, openssl, zlib %description Nginx [engine x] is an HTTP and reverse proxy server. %prep %setup -q # 自动解压源码 %build # 关键配置参数(按需添加模块) ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} # 安装系统服务文件 install -Dm644 %{_sourcedir}/nginx.service %{buildroot}%{_unitdir}/nginx.service %files /usr/local/nginx/* %{_unitdir}/nginx.service %post # 安装后创建nginx用户 useradd -r -s /sbin/nologin nginx || true systemctl daemon-reload %clean rm -rf %{buildroot} ``` > **关键说明** > - `BuildRequires` 确保编译环境完整(引用[3]) > - `--with-http_ssl_module` 等参数需提前规划(引用[4]) > - 服务文件需手动放入`%files`(引用[1]) --- ### **4. 构建RPM** ```bash cd ~/rpmbuild/SPECS # 检查依赖并编译 rpmbuild -ba nginx.spec ``` * 生成的RPM路径:`~/rpmbuild/RPMS/x86_64/nginx-1.25.3-1.el7.x86_64.rpm`(引用[2]) --- ### **5. 验证安装** ```bash # 安装并检查 rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-*.rpm systemctl start nginx systemctl status nginx ``` --- ### **常见问题解决** 1. **依赖缺失** 执行 `yum provides */<缺失文件>` 查找对应,补充到`BuildRequires`(引用[3])。 2. **服务启动失败** 检查`/usr/local/nginx/logs/error.log`,通常因端口冲突或配置误。 3. **模块未生效** 用 `nginx -V` 确认编译参数是否含所需模块(引用[4])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值