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

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

软件准备:

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

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

正文:

步骤目录:

步骤一:系统环境要求

步骤二:准备 rpm-build 软件
2.1 安装 rpm-build
2.2 生成 rpm-build 目录
2.3 查看生成的 rpm-build 目录

步骤三:制作 Nginx 软件的 rpm 包
3.1 将 Nginx 的源码安装包放在固定的位置
3.2 制作 Nginx 的 nginx.spec 文件
3.3 SPEC 配置文件里的内容说明
3.4 安装 Nginx 软件的依赖包
3.6 查看新生成的 Nginx rpm 软件包

步骤四:使用新生成的 Nginx rpm 软件包
4.1 安装刚刚新生成的 Nginx rpm 软件包
4.2 启动 Nginx 服务
4.3 查看 Nginx 服务的启动状态
4.3.1 查看 Nginx 网页是否可以访问
4.3.2 查看 Nginx 的端口有没有启动

具体的操作步骤:

步骤一:系统环境要求

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&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>

内容三:Linux 常用软件清单

1) bash-completion #用于 tab 键补全命令
2) vim-enhanced #可以使用 vim 命令编辑文档
3) redhat-lsb-core #可以在 CentOS&RHEL 上查看系统版本信息
4) lsb-release #可以在 openSUSE&SUSE 上查看系统版本信息

[命令] openSUSE&SUSE 命令 zypper (管理软件和软件库)

内容目录:

内容一:zypper 的帮助文档查看

内容二: zypper 的常用案例
2.1 案例一:使用 zypper 的帮助信息
2.1.1 查看 zypper 的所有选项
2.1.2 查看 zypper 某个选项的所有子选项
2.1.2.1 查看 zypper 某个选项的所有子选项的格式
2.1.2.2 查看 zypper 某个选项的所有子选项的案例
2.2 案例二:软件相关
2.2.1 交互式
2.2.1.1 安装软件
2.2.1.1.1 安装软件包格式
2.2.1.1.2 安装软件的案例
2.2.1.2 删除软件
2.2.1.2.1 删除软件的格式
2.2.1.2.2 删除软件的案例
2.2.1.3 升级软件和系统
2.2.2 非交互式
2.2.2.1 安装软件
2.2.2.1.1 安装软件的格式
2.2.2.1.2 安装软件的案例
2.2.2.2 删除软件
2.2.2.2.1 删除软件的格式
2.2.2.2.2 删除软件的案例
2.2.2.3 查找软件
2.2.2.3.1 查找软件的格式
2.2.2.3.2 查找软件的案例
2.2.2.4 查看软件的生命周期
2.2.2.4.1 查看软件的生命周期的格式
2.2.2.4.2 查看软件的生命周期的案例
2.2.2.4 锁定软件
2.2.2.4.1 锁定软件的格式
2.2.2.4.2 锁定软件的案例
2.2.2.5 查看所有已锁软件
2.2.2.6 解锁软件
2.2.2.6.1 解锁软件的格式
2.2.2.6.2 解锁软件的案例
2.2.2.7 清除所有已锁软件
2.2.2.8 升级软件和系统
2.2.2.8.1 查看所有可用更新包
2.2.2.8.2 升级软件和系统
2.3 案例三:软件组相关
2.3.1 交互式
2.3.1.1 安装某一个软件组
2.3.1.1.1 安装某一个软件组的格式
2.3.1.1.2 安装某一个软件组的案例
2.3.1.2 删除某一个软件组
2.3.1.2.1 删除某一个软件组的格式
2.3.1.2.2 删除某一个软件组的案例
2.3.2 非交互式
2.3.2.1 安装某一个软件组
2.3.2.1.1 安装某一个软件组的格式
2.3.2.1.2 安装某一个软件组的案例
2.3.2.2 删除某一个软件组
2.3.2.2.1 删除某一个软件组的格式
2.3.2.3 查看所有可用软件组
2.3.2.4 查看某一个软件组的详细信息
2.3.2.4.1 查看某一个软件组详细信息的格式
2.3.2.4.2 查看某一个软件组详细信息的案例
2.4 案例四:软件源相关
2.4.1 禁用原来的所有软件源
2.4.2 删除原来的所有软件源
2.4.3 新增软件源并指定软件源名
2.4.3.1 新增软件源并指定软件源名的格式
2.4.3.2 新增软件源并指定软件源名的案例
2.4.4 查看所有软件源的链接
2.5 案例五:补丁相关

具体的内容:

内容一:zypper 的帮助文档查看

# zypper --h

内容二: zypper 的常用案例
2.1 案例一:使用 zypper 的帮助信息
2.1.1 查看 zypper 的所有选项

# zypper help

2.1.2 查看 zypper 某个选项的所有子选项
2.1.2.1 查看 zypper 某个选项的所有子选项的格式

# zypper help <option>

或者:

# zypper <option> help

2.1.2.2 查看 zypper 某个选项的所有子选项的案例

# zypper help install

或者:

# zypper install help

(补充:这里以查看 install 子选项为例)

2.2 案例二:软件相关
2.2.1 交互式
2.2.1.1 安装软件
2.2.1.1.1 安装软件包格式

# zypper in <software name>

2.2.1.1.2 安装软件的案例

# zypper in httpd

(补充:这里以安装 httpd 软件为例)

2.2.1.2 删除软件
2.2.1.2.1 删除软件的格式

# zypper rm <software name>

2.2.1.2.2 删除软件的案例

# zypper rm httpd

(补充:这里以删除 httpd 软件为例)

2.2.1.3 升级软件和系统

# zypper update

2.2.2 非交互式
2.2.2.1 安装软件
2.2.2.1.1 安装软件的格式

# zypper -n in <software name>

2.2.2.1.2 安装软件的案例

# zypper -n in httpd

(补充:这里以安装 httpd 软件为例)

2.2.2.2 删除软件
2.2.2.2.1 删除软件的格式

# zypper -n rm <software name>

2.2.2.2.2 删除软件的案例

# zypper -n rm httpd

(补充:这里以删除 httpd 软件为例)

2.2.2.3 查找软件
2.2.2.3.1 查找软件的格式

# zypper se <software name>

2.2.2.3.2 查找软件的案例

# zypper se httpd

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

2.2.2.4 查看软件的生命周期
2.2.2.4.1 查看软件的生命周期的格式

# zypper lifecycle <software name>

2.2.2.4.2 查看软件的生命周期的案例

# zypper lifecycle httpd

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

2.2.2.4 锁定软件
2.2.2.4.1 锁定软件的格式

# zypper addlock <software name>

或者:

# zypper al <software name>

2.2.2.4.2 锁定软件的案例

# zypper addlock httpd

或者:

# zypper al httpd

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

2.2.2.5 查看所有已锁软件

# zypper locks

或者:

# zypper ll

2.2.2.6 解锁软件
2.2.2.6.1 解锁软件的格式

# zypper removelocks <software name>

或者:

# zypper rl <software name>

2.2.2.6.2 解锁软件的案例

# zypper removelocks httpd

或者:

# zypper rl httpd

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

2.2.2.7 清除所有已锁软件

# zypper cleanlocks

或者:

# zypper cl

2.2.2.8 升级软件和系统
2.2.2.8.1 查看所有可用更新包

# zypper lp

2.2.2.8.2 升级软件和系统

# zypper update

2.3 案例三:软件组相关
2.3.1 交互式
2.3.1.1 安装某一个软件组
2.3.1.1.1 安装某一个软件组的格式

# zypper in -t pattern <pattern name>

2.3.1.1.2 安装某一个软件组的案例

# zypper in -t pattern kvm_server

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

2.3.1.2 删除某一个软件组
2.3.1.2.1 删除某一个软件组的格式

# zypper rm -t pattern <pattern name>

2.3.1.2.2 删除某一个软件组的案例

# zypper rm -t pattern kvm_server

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

2.3.2 非交互式
2.3.2.1 安装某一个软件组
2.3.2.1.1 安装某一个软件组的格式

# zypper -n in -t pattern <pattern name>

2.3.2.1.2 安装某一个软件组的案例

# zypper -n in -t pattern kvm_server

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

2.3.2.2 删除某一个软件组
2.3.2.2.1 删除某一个软件组的格式

# zypper -n rm -t pattern <pattern name>

2.3.2.2.2 删除某一个软件组的案例

# zypper -n rm -t pattern kvm_server

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

2.3.2.3 查看所有可用软件组

# zypper patterns

或者:

# zypper pt

2.3.2.4 查看某一个软件组的详细信息
2.3.2.4.1 查看某一个软件组详细信息的格式

# zypper pattern-info <pattern name>

2.3.2.4.2 查看某一个软件组详细信息的案例

# zypper pattern-info kvm_server

(补充:这里以查看 kvm_server 软件组为例)

2.4 案例四:软件源相关
2.4.1 禁用原来的所有软件源

# zypper mr -da

2.4.2 删除原来的所有软件源

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

2.4.3 新增软件源并指定软件源名
2.4.3.1 新增软件源并指定软件源名的格式

# zypper ar -fcg <software source link> <define software source name>

2.4.3.2 新增软件源并指定软件源名的案例

# zypper ar -fcg http://192.168.1.1/update-oss/ update-oss

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

2.4.4 查看所有软件源的链接

# zypper ls -d

2.5 案例五:补丁相关

# zypper in -t patch <patch name>

[内容] 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

(补充:命令中最后一个参数为每这个源指定了一个别称)

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

# zypper ref