为什么要 .spec转成.rpm文件,因为在一些工作中,有些服务器是权限设置特严格,任何文件的创建都是不被允许的,需要特定安装,如.rpm文件安装。
‌.spec文件是一个配置规范文件,主要用于RPM软件包的编译过程。‌ 它详细说明了软件包如何被配置、需要打哪些补丁、安装哪些文件、安装到哪里以及安装过程需要哪些系统级别的活动。
.spec文件由多个段组成,这些段分别定义了rpm的编译打包安装等阶段的工作内容。

spec基本说明

.spec文件

创建 demo.spec 文件.内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Name:xxxx                        #名称 
Version:1.0.0 #版本号
Summary:xxxx # 概要标签,描述软件包
Release:1
License:1 # (授权许可) 标签
Group:Application/System #(组别) 标签 只可以使用 [RPM Group](https://zh.opensuse.org/openSUSE:Package_group_guidelines) 组指南 里预定义的组
Vendor:xxx #(厂商) 标签

%description #描述标签
%prep #预备处理
%build #编译
%pre #代码片段 (%post* / %pre*) 非必须的
%post #以下就会运行下方代码 1.创建一个名为www的系统组 2.创建一个名为www的系统用户,该用户属于www组,登录shell设置为/sbin/nologin(即不允许登录),家目录指定为/home/www,并且不创建新的家目录 3.递归地将/home/nginx目录及其内部所有文件和子目录的所有者和组都更改为www
groupadd -r www
useradd -r -g www -s /sbin/nologin -d /home/www -M www
chown -R www:www /home/nginx
%preun
%postun
%files #文件 ,该标准定义了文件应该被放置在系统的哪个位置
/home/nginx

%changelog #修订日志

.spec目录变成.rpm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#安装 rpm-build:
sudo yum install rpm-build # CentOS/RHEL 7 或更早版本
sudo dnf install rpm-build # Fedora、CentOS/RHEL 8 及更高版本


#设置 rpmbuild 目录结构:
sudo yum install rpm-devtools # CentOS/RHEL 7 或更早版本
sudo dnf install rpm-devtools # Fedora、CentOS/RHEL 8 及更高版本

#以上执行完后,我在/root 下执行
rpmdev-setuptree

#这将创建以下目录结构
~/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

#把 demo.spec 放到 SPECS 目录下
#再把 /home/nginx 目录放到 BUILDROOT 目录下
#最后执行以下代码
cd /root/rpmbuild/SPECS && rpmbuild -bb demo.spec
#未报错的话,就会在 /root/rpmbuild/RPMS/aarch64/ 目录下生成 demo-1.0.0-1.aarch64.rpm 文件

#检测是否成功,正常
cd /root/rpmbuild/RPMS/aarch64/
rpm -qpl demo-1.0.0-1.aarch64.rpm
#显示paperlessserver1011目录结构及文件 即成功

.rpm内容解压

1
2
3
4
5
#如果没有该命令 需要安装
sudo yum install rpm2cpio cpio

#执行解压命令 把rpm文件内容解压出来,得到 usr/local/paperless/paperlessserver1002 目录
rpm2cpio demo-1.0.0-1.aarch64.rpm | cpio -idmv