第 8 章 RPM
作为自动安装的一部分,管理员会经常部署那些不是由红帽提供的自定义应用程序,比如备份和监控软件。要做到这一点,这个软件必须以 RPM 格式打包。在运行红帽企业版 Linux 的系统中可设置 RPM 构建环境。应该注意的是构建环境必须包含与目标系统所使用的软件包的同一版本。就是说为基于红帽企业版 Linux 5 系统构建 RPM 必须使用红帽企业版 Linux 5 系统,构建红帽企业版 Linux 6 RPM 必须使用红帽企业版 Linux 6 系统。
必须在构建系统中安装
rpm-build
软件包。您可能还需要其他软件包,比如编译程序和库文件。
应使用 GPG 密钥签注可用于产品的 RPM 软件包,这样可让用户确认软件包的来源及其完整性。只有信托管理员组才知道用于签注 RPM 的 GPG 密钥密码短语。
过程 8.1. 生成 GPG 密钥
重要
下面的命令可生成 GPG 密钥并将其以适合客户端系统的格式导出。创建的密钥应保存在安全的地方并进行备份。
- 为生成该密钥创建目录:
mkdir -p ~/.gnupg
mkdir -p ~/.gnupg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 生成密钥对:
gpg --gen-key
gpg --gen-key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您需要选择密钥类型、大小以及该密钥的有效期限(按 enter 使用默认值)。您还需要指定名称、注释和电子邮件地址:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 按 O 接受详情并继续。 - 列出所有密钥及其指纹:
gpg --list-keys --fingerprint
gpg --list-keys --fingerprint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 导出该密钥:
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 root 在所有目标系统中运行
gpg --import
即可将这个密钥导入到 RPM 数据库,确认其来源和完整性:rpm --import EXAMPLE-RPM-GPG-KEY
rpm --import EXAMPLE-RPM-GPG-KEY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在客户端安装的过程中自动出现,且应不需要手动运行。 - 生成 RPM 后,可使用 GPG 密钥签注并上传到正确的频道中:
rpm --resign package.rpm rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
rpm --resign package.rpm rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要确认 RPM 软件包,请导航至包含该软件包的目录并运行以下命令:
rpm –qip package.rpm rpm -K package.rpm
rpm –qip package.rpm rpm -K package.rpm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
过程 8.2. 构建 RPM
- 为构建软件包生成名为
rpmbuild
的非特权帐户。这可让几个管理员共享构建环境和 GPG 密钥。 - 在
rpmbuild
用户的主目录/home/rpmbuild
中,创建名为.rpmmacros
的文件:touch /home/rpmbuild/.rpmmacros
touch /home/rpmbuild/.rpmmacros
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用您喜欢的文本编辑器打开
.rpmmacros
并添加以下行。_gpg_name
必须与签注 RPM 的 GPG 密钥名称匹配:%_topdir %(echo $HOME)/rpmbuild %_signature %gpg %_gpg_name rpmbuild <rpmbuild@example.com>
%_topdir %(echo $HOME)/rpmbuild %_signature %gpg %_gpg_name rpmbuild <rpmbuild@example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义的顶级目录的目录列表(上面的示例中为/home/rpmbuild/rpmbuild
)必须与在/usr/src/redhat
中出现的目录有同样的目录布局。
例 8.1. RPM 说明文件
下面是 RPM 说明文件的基本示例。在构建时,它应位于
_topdir
下的 SPECS
目录中,并在用户的 .rpmmacros
文件中定义,同时对应的源和路径文件应位于 SOURCES
目录中。