[实验] Linux RPM 软件包的制作 (通过 rpm-build 实现) (Nginx 版)

注意:

文中的很多信息例如软件的名称等是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

软件准备:

在 Nginx 官网上下载搭建集群所需软件 Nginx:

http://nginx.org/en/download.html

正文:

步骤一:系统环境要求

1) 服务器的系统是 CentOS 7 版本
2) 服务器系统要配置好 YUM 源

步骤二:准备 rpm-build 软件

2.1 安装 rpm-build

# yum -y install rpm-build

2.2 生成 rpm-build 目录

# rpmbuild -ba nginx.spec
error: failed to stat /root/nginx.spec: No such file or directory

2.3 显示生成的 rpm-build 目录

# ls /root/rpmbuild/
BUILD  BUILDROOT  RPMS	SOURCES  SPECS	SRPMS

步骤三:制作 Nginx 软件的 RPM 包

3.1 将 Nginx 的源码安装包放在固定的位置

# cp nginx-1.16.1.tar.gz /root/rpmbuild/SOURCES/

(补充:这里要安装的 Nginx 版本是 1.16.1)

3.2 制作 Nginx 的 nginx.spec 文件

# vi /root/rpmbuild/SPECS/nginx.spec

将部分内容修改如下:

Name:nginx
Version:1.16.1
Release:1.0
Summary:Nginx is a web server software.
......
License:GPL
URL:www.nginx.org
Source0:%{name}-%{version}.tar
......
%description
nginx is an HTTP and reverse proxy server ......
......
%post
useradd nginx
......
%prep
%setup -q
......
%build
./configure --user=nginx --group=nginx --with-http_ssl_module
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
......
%files
......
%doc
/usr/local/nginx/*
......
%changelog


补充:
1) 这里的 Name:nginx 是指软件名称是 nginx
2) 这里的 Version:1.16.1 是指软件的版本是 1.16.1
3) 这里的 Release:1.0 是指发布的版本是 1。0
4) 这里的 Summary: Nginx is a web server software. 是指软件的描述是 Summary: Nginx is a web server software.
5) 这里的 License:GPL 是指软件使用的协议是 GPL
6) 这里的 URL:www.nginx.org 是指软件的官网是 www.nginx.org
7) 这里的 Source0:%{name}-%{version}.tar 是指软件源码文件的名称
8) 这里的 #BuildRequires: 是指软件编译安装时需要的依赖包,这里没有内容
9) 这里的 #Requires: 是指软件安装时所需要的依赖包,这里没有内容
10) 这里的 %description 是指软件的详细描述,这里没有内容
11) 这里的

%post
useradd nginx

是指软件安装后创建 nginx 用户

12) 这里的 %prep 是指软件安装前的准备,这里没有内容
13) 这里的 %setup –q 是指自动解压软件的源码包,并 cd 进入刚刚解压出来的目录
14) 这里的

%build
./configure
make %{?_smp_mflags}

是指对源码安装包进行配置
15) 这里的

%install
make install DESTDIR=%{buildroot}

是指对源码安装包进行编译安装
16) 这里的

%files
%doc
/usr/local/nginx/*

是指将源码安装包安装到 /usr/local/nginx/ 目录里

3.4 安装 Nginx 软件的依赖包

# yum -y install gcc pcre-devel openssl-devel

3.5 生成 Nginx rpm 软件包

# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

3.6 显示新生成的 Nginx rpm 软件包

# rpm -qpi /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

步骤四:使用新生成的 Nginx rpm 软件包

4.1 安装刚刚新生成的 Nginx rpm 软件包

# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

4.2 启动 Nginx 服务

# /usr/local/nginx/sbin/nginx

4.3 显示 Nginx 服务的启动状态

4.3.1 显示 Nginx 网页是否可以访问
# curl http://127.0.0.1/
4.3.2 显示 Nginx 的端口有没有启动
# ss -ntulap | grep 80

[步骤] CentOS Linux & RHEL YUM 的使用(添加软件源)

步骤一:移除不可用的 YUM 软件源配置文件

1.1 方法一:备份系统自带的 YUM 软件源配置文件

# mkdir /etc/yum.repos.d/repobackup
# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobackup/

1.2 方法二:删除系统自带的 YUM 软件源配置文件

# rm -rf /etc/yum.repos.d/*.repo

步骤二:添加指定的 YUM 软件源配置

2.1 方法一:使用 yum-config-manager 工具建立新配置文件

# yum-config-manager --add-repo http://example.com/

(补充:这里的 http://example.com/ 指的是官方提供的公共 yum 库链接)

(注意:添加了这个源之后确保对应的 /etc/yum.repos.d/ 配置文件中的 enable=0)

2.2 方法二:手动写一个 YUM 软件源配置文件指定 YUM 软件源

# vim  /etc/yum.repos.d/local.repo

创建以下内容:

[local]
name=local
baseurl=file:///temp
enabled=1
gpgcheck=0 

(补充:这里以软件仓库在 /temp 为例)

步骤三:确认新配置的 YUM 软件源可用

3.1 清理过时 YUM 库的缓存

# yum clean all

3.2 刷新并列出所有可用的软件源

# yum repolist 

[内容] Linux 软件的查找

内容一:显示所有可安装软件的方法

1.1 CentOS&RHEL 显示所有可安装软件的方法

# yum list all

1.2 openSUSE&SUSE 显示所有可安装软件的方法

# zypper search

或者:

# zypper se

内容二:寻找某个可安装软件的方法

2.1 CentOS&RHEL 通过某个命令查找软件的方法

# yum -y provides <commands to use the software>

2.2 CentOS&RHEL 查找某个可安装软件的方法

# yum search <software>

或者:

# yum se <software>

2.3 openSUSE&SUSE 通过某个命令查找软件的方法

# command-not-found <commands to use the software>

2.4 openSUSE&SUSE 查找某个可安装软件的方法

# zypper se <software>

[命令] openSUSE & SLES 命令 zypper (管理软件和软件源)

内容一: 帮助文档相关

1.1 显示 zypper 帮助信息

# zypper help

或者:

# zypper --h

1.2 显示 zypper 选项的帮助信息

1.2.1 显示 zypper 选项帮助信息的格式
# zypper help <option>

或者:

# zypper <option> help
1.2.2 显示 zypper 选项帮助信息的案例
# zypper help install

(补充:这里以显示 install 子选项为例)

或者:

# zypper install help

(补充:这里以显示 install 子选项为例)

内容二:软件相关

2.1 安装软件包

2.1.1 安装软件包的格式
2.1.1.1 交互式安装软件包的格式
# zypper in <software>

或者:

# zypper install <software>

(补充:这里的 -f 参数是强制安装软件)

2.1.1.2 非交互式安装软件包的格式
# zypper -n in <software>

(补充:这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断)

或者:

# zypper --no-gpg-checks --non-interactive install <software>


补充:
1) 这里的 –no-gpg-checks 代表不检验证书
2) 这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断

2.1.2 安装软件包的案例

2.1.2.1 交互式安装软件包的案例
# zypper in httpd

(补充:这里以交互式安装 httpd 软件包为例)

或者:

# zypper install httpd

(补充:这里以交互式安装 httpd 软件包为例)

2.1.2.2 非交互式安装软件包的案例
# zypper -n in httpd


补充:
1) 这里以非交互式安装 httpd 软件包为例
2) 这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断

或者:

# zypper --no-gpg-checks --non-interactive install httpd


补充:
1) 这里以交互式安装 httpd 软件包为例
2) 这里的 –no-gpg-checks 代表不检验证书
3) 这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断

2.2 删除软件包

2.2.1 删除软件包的格式
2.2.1.1 交互式删除软件包的格式
# zypper rm <software>

或者:

# zypper remove <software>
2.2.1.2 非交互式删除软件包的格式
# zypper -n rm <software>

(补充:这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断)

或者:

# zypper --no-gpg-checks --gpg-auto-import-keys --non-interactive remove <software>


补充:
1) 这里的 –no-gpg-checks 代表不检验证书
2) 这里的 –gpg-auto-import-keys 代表自动信任并导入新的签名密钥
3) 这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断

2.2.2 删除软件包的案例
2.2.2.1 交互式删除软件包的案例
# zypper rm httpd

(补充:这里以交互式删除 httpd 软件包为例)

或者:

# zypper remove httpd

(补充:这里以交互式删除 httpd 软件包为例)

2.2.2.2 非交互式删除软件包的案例
# zypper -n rm httpd


补充:
1) 这里以非交互式删除 httpd 软件包为例
2) 这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断

或者:

# zypper --no-gpg-checks --gpg-auto-import-keys --non-interactive remove httpd


补充:
1) 这里以非交互式删除 httpd 软件包为例
2) 这里的 –no-gpg-checks 代表不检验证书
3) 这里的 –gpg-auto-import-keys 代表自动信任并导入新的签名密钥
4) 这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断

2.3 锁定软件包

2.3.1 锁定软件包的格式
# zypper addlock <software>

或者:

# zypper al <software>
2.3.2 锁定软件包的案例
# zypper addlock httpd

或者:

# zypper al httpd

(补充:这里以锁定 httpd 软件包的周期为例)

2.4 显示所有已锁软件包

# zypper locks

或者:

# zypper ll

2.5 解锁软件包

2.5.1 解锁软件包的格式
# zypper removelocks <software>

或者:

# zypper rl <software>
2.5.2 解锁软件包的案例
# zypper removelocks httpd

(补充:这里以解锁 httpd 软件包为例)

或者:

# zypper rl httpd

(补充:这里以解锁 httpd 软件包为例)

2.5.3 清除所有已锁软件包
# zypper cleanlocks

或者:

# zypper cl

2.6 升级软件包

2.6.1 升级软件包
2.6.1.1 升级软件包的格式
2.6.1.1.1 交互式升级软件包的格式
# zypper update <software>
2.6.1.1.2 非交互式升级软件包的格式
# zypper -n update <software>

(补充:这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断)

或者:

# zypper --non-interactive update <software>

(补充:这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断)

2.6.1.2 升级软件包的案例
2.6.1.2.1 交互式升级软件包的案例
# zypper update nginx

(补充:这里以交互式升级 nginx 软件包为例)

2.6.1.2.2 非交互式升级软件包的案例
# zypper -n update nginx


补充:
1) 这里以非交互式升级 nginx 软件包为例
2) 这里的 -n 代表会通过忽略交互式的步骤从而避免运行中断

或者:

# zypper --non-interactive update nginx


补充:
1) 这里以非交互式升级 nginx 软件包为例
2) 这里的 –non-interactive 代表会通过忽略交互式的步骤从而避免运行中断

2.6.2 升级所有软件包
2.6.2.1 升级所有软件包
2.6.2.1.1 交互式升级所有软件包
# zypper update
2.6.2.1.2 非交互式升级所有软件包
# zypper -n update
2.6.2.2 显示所有可升级的软件包
# zypper lp
2.6.3 升级软件包以后确认系统需不需要重启
# needs-restarting

2.7 查找软件包

2.7.1 查找软件包的格式
# zypper se <software>

或者:

# zypper search <software>

或者:

# zypper search --match-exact --type package --details <software>

(补充:这里 –match-exact 参数的作用是精确匹配,–type package 参数的作用是指定查找的对象是软件)

2.7.2 查找软件包的案例
# zypper se httpd

(补充:这里以查找 httpd 软件包为例)

或者:

# zypper search httpd

(补充:这里以查找 httpd 软件包为例)

或者:

# zypper se --match-exact --type package --details httpd

(补充:此方法会精确查找 httpd 软件包为例)

2.8 显示软件包所有可以安装的版本

2.8.1 显示某个软件包所有可以安装版本的格式
# zypper se -s <software>

或者:

# zypper search -details <software>
2.8.2 显示某个软件包所有可以安装版本的案例
# zypper se -s kernel-default

或者:

# zypper search -details kernel-default

(补充:这里以查找 httpd 软件为例)

2.9 显示软件的生命周期

2.9.1 显示软件的生命周期的格式
# zypper lifecycle <software>
2.9.2 显示软件的生命周期的案例
# zypper lifecycle httpd

(补充:这里以查找 httpd 软件的周期为例)

2.10 显示软件包的详细信息

# zypper if httpd

(补充:这里以显示 httpd 软件包的详细信息为例)

2.11 清理旧的内核软件包

2.11.1 交互式清理旧的内核软件包
# zypper purge-kernels
2.11.2 非交互式清理旧的内核软件包
# zypper -n purge-kernels

内容三:软件组相关

3.1 安装软件组

3.1.1 安装软件组的格式
3.1.1.1 交互式安装软件组的格式
# zypper in -t pattern <pattern>
3.1.1.2 非交互式安装软件组的格式
# zypper -n in -t pattern <pattern>
3.1.2 安装软件组的案例
3.1.2.1 交互式安装软件组的案例
# zypper in -t pattern kvm_server

(补充:这里以交互式安装 kvm_server 软件组为例)

3.1.2.2 非交互式安装软件组的案例
# zypper -n in -t pattern kvm_server

(补充:这里以非交互式安装 kvm_server 软件组为例)

3.2 删除软件组

3.2.1 删除软件组的格式
3.2.1.1 交互式删除软件组的格式
# zypper rm -t pattern <pattern>
3.2.1.2 非交互式删除软件组的格式
# zypper -n rm -t pattern <pattern>
3.2.2 删除软件组的案例
3.2.2.1 交互式删除软件组的案例
# zypper -n rm -t pattern kvm_server

(补充:这里以交互式删除 kvm_server 软件组为例)

3.2.2.2 非交互式删除软件组的案例
# zypper -n rm -t pattern kvm_server

(补充:这里以非交互式删除 kvm_server 软件组为例)

3.3 显示所有可用软件组
# zypper patterns

或者:

# zypper pt

或者:

# zypper se -t pattern

3.4 显示软件组的详细信息

3.4.1 显示软件组详细信息的格式
# zypper pattern-info <pattern>
3.4.2 显示软件组详细信息的案例
# zypper pattern-info kvm_server

(补充:这里以显示 kvm_server 软件组为例)

3.5 显示软件组所需要的所有软件包

3.5.1 显示软件组所需要的所有软件包的格式
# zypper info --requires <pattern>
3.5.2 显示软件组所需要的所有软件包的案例
# zypper info --requires kvm_server

(补充:这里以显示 kvm_server 软件组所需要的所有软件包为例)

内容四:安全相关

4.1 安全补丁

4.1.1 安装安全补丁
4.1.1.1 安装安全补丁的格式
4.1.1.1.1 交互式安装安全补丁的格式
# zypper in -t patch <patch>
4.1.1.1.2 非交互式安装安全补丁的格式
# zypper -n in -t patch <patch>
4.1.1.2 安装安全补丁的案例
4.1.1.2.1 交互式安装安全补丁的案例
# zypper in -t patch SUSE-SLE-SERVER-12-SP5-2022-323=1

(补充:这里以安装 SUSE-SLE-SERVER-12-SP5-2022-323=1 补丁为例)

4.1.1.2.2 非交互式安装安全补丁的案例
# zypper -n in -t patch SUSE-SLE-SERVER-12-SP5-2022-323=1

(补充:这里以安装 SUSE-SLE-SERVER-12-SP5-2022-323=1 补丁为例)

4.1.2 所有安全补丁
4.1.2 安装所有安全补丁
4.1.2.1 非交互式安装所有安全补丁
# zypper patch
4.1.2.2 交互式安装所有安全补丁
# zypper -n patch

内容五:软件源相关

5.1 新增软件源并指定软件源名

5.1.1 新增软件源并指定软件源名的格式
# zypper ar -fcg <software source link> <define software source name>
5.1.2 新增软件源并指定软件源名的案例
# zypper ar -fcg http://192.168.1.1/update-oss/ update-oss

(补充:这里以添加 http://192.168.1.1/update-oss/ 库并命名为 update-oss 为例)

5.2 删除软件源

5.2.1 删除软件源
5.2.1.1 删除软件源的格式
# zypper rr <software source name/software source URL>
5.2.1.2 删除软件源的案例
# zypper rr 'Main Repository'

或者:

# zypper rr http://download.opensuse.org/distribution/leap/15.3/repo/oss/

(补充:这里以删除名为 Main Repository 链接为 http://download.opensuse.org/distribution/leap/15.3/repo/oss/ 的软件源为例)

5.2.2 删除所有软件源
# zypper rr -a

或者:

# zypper rr `zypper ls | awk '{print $1}'`

5.3 启用软件源

5.3.1 启用软件源
5.3.1.1 启用软件源的格式
# zypper mr -e <software source name/software source URL>

或者:

# zypper modifyrepo -e <software source name/software source URL>
5.3.1.2 启用软件源的案例
# zypper mr -e 'Main Repository'

或者:

# zypper modifyrepo -e http://download.opensuse.org/distribution/leap/15.3/repo/oss/

(补充:这里以启用名为 Main Repository 链接为 http://download.opensuse.org/distribution/leap/15.3/repo/oss/ 的软件源为例)

5.3.2 启用所有软件源
# zypper mr -ea

或者:

# zypper modifyrepo -ea

或者:

# zypper mr -e `zypper ls | awk '{print $1}'`

或者:

# zypper modifyrepo -e `zypper ls | awk '{print $1}'`

5.4 禁用软件源

5.4.1 禁用软件源
5.4.1.1 禁用软件源的格式
# zypper mr -d <software source name/software source URL>

或者:

# zypper modifyrepo -d <software source name/software source URL>
5.4.1.2 禁用软件源的案例
# zypper mr -d 'Main Repository'

或者:

# zypper modifyrepo -d http://download.opensuse.org/distribution/leap/15.3/repo/oss/

(补充:这里以禁用名为 Main Repository 链接为 http://download.opensuse.org/distribution/leap/15.3/repo/oss/ 的软件源为例)

5.4.2 禁用所有软件源
# zypper mr -da

或者:

# zypper modifyrepo -da

或者:

# zypper mr -d `zypper ls | awk '{print $1}'`

或者:

# zypper modifyrepo -d `zypper ls | awk '{print $1}'`

5.5 显示软件源

5.5.1 显示所有软件源
# zypper ls

或者:

# zypper lr

(补充:zypper ls 会多显示软件源的 Type)

5.5.2 显示所有软件源的链接
5.2.2.1 显示所有软件源的链接 (显示时进行软件源验证)
# zypper ls -d

或者:

# zypper ls -u

或者:

# zypper repos -d

或者:

# zypper repos -u

或者:

# zypper ls --details

或者:

# zypper ls --uri

或者:

# zypper repos --details

或者:

# zypper repos --uri
5.2.2.2 显示所有软件源的链接 (显示时不进行软件源言政)
# zypper --non-interactive --no-gpg-checks repos -d


补充:
1) –non-interactive 代表非交互式
2) –no-gpg-checks 代表不检查证书

5.6 缓存软件源列表

5.6.1 缓存所有已启用软件源列表
# zypper ref

或者:

# zypper refresh
5.6.2 清除所有软件源列表缓存
# zypper clean

内容六:系统本版相关

升级系统版本

# zypper migration

[内容] 软件源的设置 (openSUSE 版) (非官方版)

步骤一:禁用所有原有的软件源

# zypper mr -da

步骤二:添加阿里的 openSUSE 软件源

# sudo zypper ar -fc https://mirrors.aliyun.com/opensuse/distribution/leap/15.0/repo/oss openSUSE-Aliyun-OSS
# sudo zypper ar -fc https://mirrors.aliyun.com/opensuse/distribution/leap/15.0/repo/non-oss openSUSE-Aliyun-NON-OSS
# sudo zypper ar -fc https://mirrors.aliyun.com/opensuse/update/leap/15.0/oss openSUSE-Aliyun-UPDATE-OSS
# sudo zypper ar -fc https://mirrors.aliyun.com/opensuse/update/leap/15.0/non-oss openSUSE-Aliyun-UPDATE-NON-OSS


补充:
1) 命令中最后一个参数为每这个源指定了一个别称
2) 这里以添加 openSUSE 15.0 版本的 oss、non-oss、update 和 update-now-oss 库为例

步骤三:刷新所有处于 enable 状态的软件源

# zypper ref