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

news2024/11/19 9:27:05

本文适用:rhel9系列,或同类系统(CentOS9,AlmaLinux9,RockyLinux9等)
文档形成时期:2023年
因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。
因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。

文章目录

  • 环境准备
  • rpmbuild命令简要说明
  • rpmbuild的spec文件说明
  • 依赖包和必要文件准备
  • nginx-1.24.0-el9.spec内容
  • 构建
  • 安装
  • 卸载

环境准备

yum install rpmdevtools
#创建目录
rpmdev-setuptree
#或手动创建目录:

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是系统服务文件,内容如下:
[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.

构建

cd /root/rpmbuild-nginx-1.24.0
rpmbuild --define "_topdir `pwd`" --nodebuginfo -ba SPECS/nginx-1.24.0-el9.spec

构建后的主要文件:
Nginx1.24.0构建后的主要文件

安装

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查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM】初识 Jvm

目录 什么是JVM JVM 的功能 常见的JVM 什么是JVM JVM 的全程是 Java Virtual Machine ( java 虚拟机 ) JVM 是一种用于计算设备的规范,也是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能实现,JVM 屏蔽了…

函数——自制函数(c++)

今天进入自制函数。 自制函数,需要自己定义其功能。比如,设置一个没有参数没有返回值的积木,叫“aaa”。那么,如果想要运行“aaa”,就需要以下代码: void aaa(); 告诉系统有“aaa”…

如何从多个文件夹里各提取相应数量的文件放一起到新文件夹中形成多文件夹组合

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 说明一下情况 文件夹:1、2、3里面分别放置了各100张动物的图片,模拟实际情况的各种文件 操作:这里演示的是从3个文件夹里各取2张图…

恒创科技:解决Windows服务器磁盘空间不足的问题

​  服务器硬盘的大小是决定空间是否充足的主要因素。但在日常使用中,服务器和网站备份会消耗大量存储空间,如果维护不当,最终将耗尽您的容量。同样,日志文件、临时文件和数据库可以在硬盘驱动器上或回收站中无休止地建立。当您…

MidTool的GPT-4:开启智能语言新纪元

MidTool平台上的GPT-4是由OpenAI开发的最新一代语言预测模型。与前一代GPT-3相比,GPT-4在理解深度、文本生成的连贯性和创造性方面都有了显著的提升。这意味着用户可以期待更加自然、更加精准的交流体验,以及更高质量的内容创作。 1. 无缝对话体验 在M…

高效构建Java应用:Maven入门和进阶(四)

高效构建Java应用:Maven入门和进阶(四) 四. Maven聚合和继承特性4.1 Maven工程继承关系4.2 Maven工程聚合关系 四. Maven聚合和继承特性 4.1 Maven工程继承关系 继承概念 Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目…

使用 Docker 部署 Halo 博客系统

:::info 项目地址:https://github.com/halo-dev/halo ::: 一、Halo 介绍 1)Halo 简介 Halo 是一款强大易用的开源建站工具,它让你无需太多的技术知识就可以快速搭建一个博客、网站或者内容管理系统。具备可插拔架构、主题套用、富文本编辑器…

05-微服务Sentinel流量哨兵

一、Sentinel介绍 1.1 什么是Sentinel 分布式系统的流量防卫兵:随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。特点&#xff1…

MyBatis实战指南(二):工作原理与基础使用详解

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。那么,它是如何工作的呢?又如何进行基础的使用呢?本文将带你了解MyBatis的工作原理及基础使用。 一、MyBatis的工作原理 1.1 MyBatis的工作原理 工作原理…

Vue基础-搭建Vue运行环境

这篇文章介绍了在Vue.js项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Vue及Vue CLI工具、安装webpack模板、安装vue-router、创建Vue项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Vue.js开发环境,为后续的项目开发奠定…

小汪,TCP连接和断连夺命6连问你可能扛得住?

目录 TCP三次握手连接和四次挥手断连的几处疑问 一、建立连接,为什么是三次握手,而不是二次握手? 二、为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢? 三、断开连接,为什么是四次握手&#x…

HarmonyOS 开发基础(八)Row和Column

HarmonyOS 开发基础(八)Row和Column 一、Column 容器 1、容器说明: 纵向容器主轴方向:从上到下纵向交叉轴方向:从左到右横向 2、容器属性: justifyContent:设置子元素在主轴方向的对齐格式…

30道JVM综合面试题详解含答案(值得珍藏)

1. 描述一下JVM加载Class文件的原理机制? Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都…

流程控制详解

1、Java流程控制 主要涉及三大流程控制:顺序、分支、循环 如下图: 1)流程2 存在对用户名和密码的校验,是否为空,存在分支控制 2)流程3 用户名和密码在数据库是否存在,存在分支控制 3&#xf…

ant design vue Tree组件叶子节点横向排列

antdesignvue的树形组件要实现组件叶子节点横向排列有点坑,没有 配置属性,需要自己想办法。 要实现的效果 看tree组件的dom结构,父元素flex竖向布局,子项不论节点层级都在同一层!!! 难点在于想…

中级Python面试问题

文章目录 专栏导读1、xrange 和 range 函数有什么区别?2、什么是字典理解?举个例子3、元组理解吗?如果是,怎么做,如果不是,为什么?4、 列表和元组的区别?5、浅拷贝和深拷贝有什么区别…

SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板

SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板 SV-298XT网络广播模块是一款全数字网络型广播模组,核心部分采用了成熟的私有协议解决方案,性能稳定可靠。支持TCP、UDP、组播协议能针对当前服务器中不同的广播任务设置不同的广播传输方式…

DLT:dlt-daemon示例解析2

DLT:dlt-daemon示例解析 回顾一下上期第一个示例打印DLT日志的流程。 这次来分析第二个示例。 目录dlt-daemon/examples/example2/下有以下文件 CMakeLists.txt dlt_id.h example2.c example2.xml 其中example2.xml编译用不到,里面描述了一些程序的…

Elasticsearch聚合优化 | 聚合速度提升5倍!

1、聚合为什么慢? 大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用 Elasticsearch大量内存,从而导致 OOM 的情况发生。 实践应用发现&#xff0…

git入门之本地操作

1、启动git命令输入 在想要建立仓库,建议的方式是在文件夹中右键单击,选择git bash here 2、初始化仓库命令:git init 3、查看仓库状态:git status 4、更新仓库特定文件:git add xxx 5、更新仓库所有文件&#xff1…