构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的Nginx1.24.0的RPM包

本文适用:rhel9系列,或同类系统(CentOS9,AlmaLinux9,RockyLinux9等)

文档形成时期:2023年

因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。

因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。

文章目录

环境准备

yum install rpmdevtools

#创建目录

rpmdev-setuptree

#或手动创建目录:

bash 复制代码
mkdir rpmbuild-nginx-1.24.0; cd rpmbuild-nginx-1.24.0
mkdir -p ./{BUILD,RPMS,SOURCES,SPECS,SRPMS}

#无论是使用rpmdev-setuptree创建目录,还是手动创建的,默认使用路径是/root/rpmbuild,除非使用参数--define "_topdir `pwd`",可在其它目录下构建。

rpmbuild命令简要说明

rpmbuild --help

-ba build source and binary packages from

-bb build binary package only from

rpmbuild的spec文件说明

%pre和%post中的scriptlet分别在安装软件包之前和之后运行。脚本%preun和%postun在软件包卸载之前和之后运行。脚本%pretrans和%posttrans在事务的开始和结束时运行。

依赖包和必要文件准备

准备好依赖包:

/root/software/{openssl-1.1.1w.tar.gz,pcre-8.45.tar.gz,zlib-1.2.13.tar.gz}

解压即可,不必安装

各依赖包可在各官网下载

http://zlib.net

http://www.pcre.org #官方已停更pcre,但介绍了第三方下载:https://sourceforge.net/projects/pcre/files/ ,最后的版本是pcre-8.45.tar.gz,而官方开始发布pcre2了。

https://www.openssl.org

源目录文件列表:

ls SOURCES/

nginx-1.24.0.tar.gz nginx.conf nginx.service phpinfo.php

说明:

  • nginx-1.24.0.tar.gz在官方可下载,spec文件中也可直接指定其下载地址;
  • phpinfo.php用于在有php服务时的测试,不是必要的,也可以临时写个静态文件,比如index.html;
  • nginx.conf可以采用默认的,建议参考生产环境的常用配置准备一个比较通用的;
  • nginx.service是系统服务文件,内容如下:
text 复制代码
[Unit]
Description=nginx-The High-performance HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

nginx-1.24.0-el9.spec内容

和专栏内RHEL8的相比,仅date命令格式中的日期后缀少了%S,其它相同

Name:           nginx
Version:        1.24.0
Release:        custom%{?dist}
Summary:        www.nginx.org
 
Group:          GNU Linux Nginx Product
License:        GPLv3+
URL:            https://nginx.org/en/download.html
Source0:        https://nginx.org/download/%{name}-%{version}.tar.gz
 
BuildRequires:  gcc
Requires:       perl perl-devel



%define debug_package %{nil}
%define _prefix  /opt/nginx
Prefix:     %{_prefix}




%description
nginx install
 



%prep
%setup -q
 
 


%build
./configure --prefix=%{_prefix} \
--user=www --group=www \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-stream \
--with-pcre=/root/software/pcre-8.45 \
--with-openssl=/root/software/openssl-1.1.1w \
--with-zlib=/root/software/zlib-1.2.13

make %{?_smp_mflags}
 
 



#
# Installation section
#
%install
[ %{buildroot} != "/" ] && rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

%__install -c -d -m 755 "%{buildroot}%{_prefix}/conf"
%__install -c -d -m 755 "%{buildroot}/usr/lib/systemd/system"
%__install -c -d -m 755 "%{buildroot}/opt/web/eg"
cp -f %_sourcedir/nginx.service "%{buildroot}/usr/lib/systemd/system/nginx.service"
cp -f %_sourcedir/nginx.conf "%{buildroot}%{_prefix}/conf/"
cp -f %_sourcedir/phpinfo.php "%{buildroot}/opt/web/eg/"





#
# Clean section
#

%clean
[ %{buildroot} != "/" ] && rm -rf "%{buildroot}"






#将所需要打包的文件都存放到这边中;-f %{name}.lang 加上后的意思为声明找到的文件
%files
%{_prefix}
%doc
/usr/lib/systemd/system/nginx.service
/opt/web/eg




#安装后执行的命令
%post
if [ $1 == 1 ];then
    groupadd www -g 319 2> /dev/null
    useradd -s /sbin/nologin -M www -u 319 -g 319 2> /dev/null
    mkdir /home/www 2> /dev/null
    chown www:www /home/www 2> /dev/null
    chown www:www -R /opt/web/eg
    
    systemctl daemon-reload
    systemctl enable nginx
fi

 



#卸载前执行的命令
%preun
if [ "$1" = 0 ]
then
    systemctl disable nginx
    systemctl stop nginx
    # userdel -r www
    cp -r %{_prefix}/conf /opt/nginx_conf.rpmsave-`date +"%Y%m%d-%H%M"`
fi






%postun
if [ "$1" = 0 ]
then
    systemctl disable nginx
    rm -f /usr/lib/systemd/system/nginx.service
    rm -rf /opt/nginx
    echo "%{name}-%{version}-%{release} uninstalled."
fi





#软件更新说明
%changelog
* Thu Dec 14 2023 N
- For the first time, Custom made Nginx1.24.0 in AlmaLinux9.2.

构建

bash 复制代码
cd /root/rpmbuild-nginx-1.24.0
rpmbuild --define "_topdir `pwd`" --nodebuginfo -ba SPECS/nginx-1.24.0-el9.spec

构建后的主要文件:

安装

dnf localinstall nginx-1.24.0-custom.el9.x86_64.rpm

卸载

dnf remove nginx-1.24.0-custom.el9.x86_64

注意"nginx-1.24.0-custom.el9.x86_64"这个名称,可以通过rpm -qa|grep nginx查询

相关推荐
cominglately2 小时前
centos单机部署seata
linux·运维·centos
魏 无羡2 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse2 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0662 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8243 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维3 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops3 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
阿甘知识库3 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
滴水之功4 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt