前言:
今天姐妹们对“nginxrpm制作”大体比较注重,咱们都想要分析一些“nginxrpm制作”的相关知识。那么小编在网上收集了一些有关“nginxrpm制作””的相关文章,希望看官们能喜欢,各位老铁们一起来了解一下吧!RPM是一种用于在Linux系统上安装软件的软件封装格式,正如在Windows系统中使用exe文件安装软件一样,在基于Fedora衍生的Linux系统中,我们一般使用 yum install packageName.rpm 的方式安装软件,例如 yum install nginx.rpm。相比源文件编译、二进制安装等安装方式,RPM软件包具有易于分发、安装方便等优点,仅需执行yum install packageName.rpm即可完成安装,无需额外操作。现存Linux系统,例如CentOS、OpenEuler、OpenAnolis、UOS服务器版本、Kylin服务器版本等均属于RPM系操作系统。
那么我们如何根据源码构建一个RPM软件包呢?主要分为如下四个步骤:
1.准备构建RPM软件包的基本环境2.准备软件源码3.编写spec文件4.构建RPM软件包
下面根据如上四个步骤进行介绍。
1. 准备构建RPM软件包的基本环境
本文介绍在CentOS操作系统上构建一个完整RPM软件包的过程。首先需要做的是搭建构建RPM软件包需要的系统环境,一共需要两个步骤,具体如下:
1.在CentOS操作系统上安装如下几个软件:
yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools
其中,rpmdevtools软件提供了一系列的工具用于RPM软件包的构建。查看其提供的工具,可以执行如下命令:
rpm -ql rpmdevtools | grep bin
2.创建构建RPM包需要的目录结构:
执行命令:rpmdev-setuptree
结果将在 ~/rpmbuild 目录创建如下目录结构
[root@localhost ~]# tree ~/rpmbuild//root/rpmbuild/├── BUILD├── RPMS├── SOURCES├── SPECS└── SRPMS5 directories, 0 files
3.各个目录介绍
工作目录结构如下,~/rpmbuild~/rpmbuild/BUILD #打包过程中的工作目录。将 SOURCES目录下的tar.gz包解压到此目录。~/rpmbuild/RPMS #存放生成的二进制包~/rpmbuild/SOURCES #放置打包资源,包括源码打包文件和补丁文件等。主要是一些 tar.gz包。~/rpmbuild/SPECS #放置SPEC文档~/rpmbuild/SRPMS #存放生成的源码包2.准备软件源码
本文以C++程序为例进行介绍,其它语言类似。首先准备源代码,具体如下:
[root@localhost opt]# mkdir /opt/helloworld && cd /opt/helloworld[root@localhost helloworld]# touch helloworld.c[root@localhost helloworld]# touch Makefile[root@localhost helloworld]# touch LICENSE[root@localhost helloworld]# tree ..├── helloworld.c└── Makefile0 directories, 2 files
helloworld.c文件内容如下:
//文件:/opt/helloworld/helloworld.c#include <stdio.h>int main(void) { printf("Hello World\n"); return 0;}
Makefile文件内容如下:
#文件:/opt/helloworld/Makefilehelloworld: gcc -g helloworld.c -o helloworldclean: rm -r -f helloworldinstall: mkdir -p $(DESTDIR)/usr/bin install -m 0755 helloworld $(DESTDIR)/usr/bin/helloworlduninstall: rm -r -f $(DESTDIR)/usr/bin/helloworld
LICENSE 文件内容如下:
木兰公共许可证, 第2版2021年5月 本文作为示例,具体木兰协议的引用,请查看3.编写spec文件
RPM软件包的构建需要使用 rpmdevtools软件包提供的 rpmbuild 工具,而 rpmbuild 工具需要按照 spec 文件中的指令来进行RPM软件包的构建。下面我们介绍 spec 文件的编写。
1.生成spec文件
[root@localhost opt]# cd /opt/helloworld/[root@localhost helloworld]# rpmdev-newspec -o helloworld.spec
2.spec文件简介
// /opt/helloworld/helloworld.specName: helloworld 这里是软件的名称Version: 这里是软件的版本号,这个版本号需要和软件源码的 tar.gz 包命名中的版本号一致Release: 1%{?dist} 这个是发型信息,其中的数字1可以理解为这是进行第一次编译Summary: 对该软件的简要介绍License: 该软件遵循的协议URL: 该软件的项目地址,可以写软件网站或者 git 地址Source0: 这里写软件源码的 tar.gz 包名称BuildRequires: 这里写编译该软件需要依赖哪些其它的软件。例如,编译c程序需要依赖gccRequires: 这里写运行该软件需要依赖哪些其它的软件。例如,运行c程序需要依赖glibc%description 这里写对该软件的详细介绍%prep 这一行就保持%prep不变,用于提示 rpmbuild 到这里就进入预准备阶段了,在预准备阶段,可以执行将 Source0 中指示的软件包进行解压%autosetup 这个宏定义的意思就是自动将 Source0 中指示的软件包进行解压%build 这一行保持%build不变,用于提示 rpmbuild 到这里就进入编译阶段了。在编译阶段,开始根据相应的指令对源码进行编译%configure 调用 configure 命令,对需要编译的源码进行配置。可以执行 `rpm --eval %configure` 查看这个宏定义%make_build 调用 make 命令,对源码进行编译。可以执行 `rpm --eval %make_build` 查看这个宏定义%install 这一行保持%install不变,用于提示 rpmbuild 到这里就进入安装阶段了。rm -rf $RPM_BUILD_ROOT 删除/root/rpmbuild/BUILDROOT/%{NAME}-%{VERSION}-%{RELEASE}.x86_64 目录下的内容%make_install 调用 make install 进行对软件进行安装%files 这一行保持%files不变,用于提示 rpmbuild 到这里就进入打包阶段了。在这个阶段将提示rpmbuild需要将哪些文件%license add-license-file-here%doc add-docs-here%changelog 自动生成的,可以暂时先不理会这里* Thu Sep 28 2023 zhangsan <zhangsan@163.com>-
3.针对helloworld项目编写的spec文件
Name: helloworldVersion: 1.0.0Release: 1%{?dist}Summary: hello worldLicense: mulan-2.0URL: : %{name}-%{version}.tar.gzBuildRequires: gccRequires: glibc%descriptionthis software's func is print hello world.%prep%autosetup%build%make_build%installrm -rf %{buildroot}%make_install%files%license LICENSE%{_bindir}/helloworld%changelog* Thu Sep 28 2023 zhangsan <zhangsan@163.com>-4.构建RPM软件包
根据官方指导,构建RPM软件包具体需要如下两个步骤:1. 将源码打包成 tar.gz压缩包,2.执行rpmbuild命令构建软件包。具体如下:
1.打包tar.gz压缩包
[root@localhost opt]# cd /opt/helloworld/[root@localhost helloworld]# mkdir helloworld-1.0.0[root@localhost helloworld]# cp -p helloworld.c LICENSE Makefile helloworld.spec helloworld-1.0.0/[root@localhost helloworld]# tar -cvzf helloworld-1.0.0.tar.gz helloworld-1.0.0/helloworld/helloworld/helloworld.chelloworld/LICENSEhelloworld/helloworld.spechelloworld/Makefile[root@localhost helloworld]# tree ..├── helloworld│ ├── helloworld.c│ ├── LICENSE│ ├── helloworld.spec│ └── Makefile├── helloworld-1.0.0.tar.gz├── helloworld.c├── LICENSE├── helloworld.spec└── Makefile1 directory, 7 files
2.执行rpmbuild命令构建软件包
构建RPM软件包的核心命令是rpmbuild -ba xxx.spec,具体如下:
[root@localhost opt]# cd /opt/helloworld/[root@localhost helloworld]# cp helloworld-1.0.0.tar.gz ~/rpmbuild/SOURCES/[root@localhost helloworld]# cp helloworld.spec ~/rpmbuild/SPECS/[root@localhost helloworld]# tree ~/rpmbuild//root/rpmbuild/├── BUILD├── RPMS├── SOURCES│ └── helloworld-1.0.0.tar.gz├── SPECS│ └── helloworld.spec└── SRPMS5 directories, 2 files[root@localhost helloworld]# rpmbuild -ba ~/rpmbuild/SPECS/helloworld.spec5.总结
至此完成一个简单 RPM 软件包的构建,可以执行 yum install ~/rpmbuild/RPMS/x86_64/helloworld-1.0.0-1.an8.x86_64.rpm 安装构建的软件包,并且直接输入命令helloworld即可执行该程序。
6.参考
[RPM Packaging Guide (rpm-packaging-guide.github.io)]
()
[RPM打包原理、示例、详解及备查-腾讯云开发者社区-腾讯云 (tencent.com)]()
作者:贾兆款
来源:微信公众号:沃享荟
出处:
标签: #nginxrpm制作