RPM包修订,重新打包

3 篇文章 0 订阅

项目有需求,需要自己重新编译nginx,添加一些模块,需要生成rpm包,这网上二进制的nginx rpm包,可以根据该rpm包,修改一下spec文件,再重新打包即可。具体步骤如下所示:

1.安装相关工具,主要是rpmbuild等相关工具

从下载https://sourceforge.net/projects/rpmrebuild/files/rpmrebuild/2.12-1/下载:
wget https://jaist.dl.sourceforge.net/project/rpmrebuild/rpmrebuild/2.14/rpmrebuild-2.14.tar.gz
tar -zxvf rpmrebuild-2.14.tar.gz
make && make install

yum install -y  rpm-build  rpmdevtools

1.下载nginx rpm包

wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

3.提取rpm包的spec文件,具体命令为:

rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
./rpmrebuild.sh -s /root/rpmbuild/SPECS/nginx.spec nginx-release-centos-7-0.el7.ngx.noarch

4.解压原版RPM包,具体命令如下所示:

cd /root/rpmbuild/BUILDROOT/
mkdir -p nginx-1.16.2-1.el7_4.ngx.x86_64 -- 后面要生成的rpm包
cd nginx-1.16.2-1.el7_4.ngx.x86_64
cp -rf xx/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm .
rpm2cpio *.rpm | cpio -idv -- 解压原版RPM包,执行完后会在当前目录生成原版RPM包包含的文件

5.根据需求替换修改rpm解压出来的文件及修改对应的spec文件,修改完成后,到 /root/rpmbuild/SPECS/执行命令:

rpmbuild -ba nginx.spec

6.到对应的RPM目录下就可以看到重新生成的RPM包,如/root/rpmbuild/RPMS/x86_64/

7.把对应的rpm包安装到centos 7设备上,然后执行service nginx start就可启动,我这边启动过程中有遇到一个问题,导致nginx无法启动,具体日志如下所示:

[root@localhost ~]# systemctl status nginx.service
● nginx.service - nginx - high performance est proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 五 2019-12-13 17:42:03 CST; 7s ago
     Docs: http://nginx.org/en/docs/
  Process: 5838 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)

12月 13 17:42:03 localhost.localdomain systemd[1]: Starting nginx - high performance est proxy server...
12月 13 17:42:03 localhost.localdomain nginx[5838]: nginx: [emerg] bind() to 0.0.0.0:5900 failed (13: Permission denied)
12月 13 17:42:03 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1
12月 13 17:42:03 localhost.localdomain systemd[1]: Failed to start nginx - high performance est proxy server.
12月 13 17:42:03 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.
12月 13 17:42:03 localhost.localdomain systemd[1]: nginx.service failed.

该问题主要是我这有侦听UDP 5900,而systemctl 会走selinux,而selinux会限制UDP 5900,导致nginx无权限,关闭selinux即可,具体命令为:

临时关闭selinux
 setenforce 0

永久关闭selinux
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启服务reboot

至此nginx可正常启动了,另外也通过systemctl list-unit-files查看所有的启动项,是否开机启动

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值