第 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 密钥并将其以适合客户端系统的格式导出。创建的密钥应保存在安全的地方并进行备份。
  1. 为生成该密钥创建目录:
    mkdir -p ~/.gnupg
    
    Copy to Clipboard Toggle word wrap
  2. 生成密钥对:
    gpg --gen-key
    
    Copy to Clipboard Toggle word wrap
    您需要选择密钥类型、大小以及该密钥的有效期限(按 enter 使用默认值)。您还需要指定名称、注释和电子邮件地址:
    Real name: rpmbuild
    Email address: rpmbuild@example.com
    Comment: this is a comment
    You selected this USER-ID:
        "rpmbuild (this is a comment) <rpmbuild@example.com>"
    
    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
    
    Copy to Clipboard Toggle word wrap
    O 接受详情并继续。
  3. 列出所有密钥及其指纹:
    gpg --list-keys --fingerprint
    
    Copy to Clipboard Toggle word wrap
  4. 导出该密钥:
    gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
    
    Copy to Clipboard Toggle word wrap
  5. 以 root 在所有目标系统中运行 gpg --import 即可将这个密钥导入到 RPM 数据库,确认其来源和完整性:
    rpm --import EXAMPLE-RPM-GPG-KEY
    
    Copy to Clipboard Toggle word wrap
    这会在客户端安装的过程中自动出现,且应不需要手动运行。
  6. 生成 RPM 后,可使用 GPG 密钥签注并上传到正确的频道中:
    rpm --resign package.rpm
    rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
    Copy to Clipboard Toggle word wrap
  7. 要确认 RPM 软件包,请导航至包含该软件包的目录并运行以下命令:
    rpm –qip package.rpm
    rpm -K package.rpm
    Copy to Clipboard Toggle word wrap

过程 8.2. 构建 RPM

  1. 为构建软件包生成名为 rpmbuild 的非特权帐户。这可让几个管理员共享构建环境和 GPG 密钥。
  2. rpmbuild 用户的主目录 /home/rpmbuild 中,创建名为 .rpmmacros 的文件:
    touch /home/rpmbuild/.rpmmacros
    
    Copy to Clipboard Toggle word wrap
  3. 使用您喜欢的文本编辑器打开 .rpmmacros 并添加以下行。_gpg_name 必须与签注 RPM 的 GPG 密钥名称匹配:
    %_topdir            %(echo $HOME)/rpmbuild
    %_signature         %gpg
    %_gpg_name          rpmbuild <rpmbuild@example.com>
    
    Copy to Clipboard Toggle word wrap
    定义的顶级目录的目录列表(上面的示例中为 /home/rpmbuild/rpmbuild)必须与在 /usr/src/redhat 中出现的目录有同样的目录布局。

例 8.1. RPM 说明文件

下面是 RPM 说明文件的基本示例。在构建时,它应位于 _topdir 下的 SPECS 目录中,并在用户的 .rpmmacros 文件中定义,同时对应的源和路径文件应位于 SOURCES 目录中。
  Name: foo
  Summary: The foo package does foo
  Version: 1.0
  Release: 1
  License: GPL
  Group: Applications/Internet
  URL: http://www.example.org/
  Source0 : foo-1.0.tar.gz
  Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
  Requires: pam
  BuildPrereq: coreutils
  %description
  This package performs the foo operation.
  %prep
  %setup -q
  %build
  %install
  mkdir -p %{buildroot}/%{_datadir}/%{name}
  cp -p foo.spec %{buildroot}/%{_datadir}/%{name}
  %clean
  rm -fr %{buildroot}
  %pre
  # Add user/group here if needed
  %post
  /sbin/chkconfig --add food
  %preun
  if [ $1 = 0 ]; then # package is being erased, not upgraded
      /sbin/service food stop > /dev/null 2>&1
      /sbin/chkconfig --del food
  fi
  %postun
  if [ $1 = 0 ]; then # package is being erased
      # Any needed actions here on uninstalls
  else
      # Upgrade
      /sbin/service food condrestart > /dev/null 2>&1
  fi
  %files
  %defattr(-,root,root)
  %{_datadir}/%{name}
  %changelog
  * Mon Jun 16 2003 Some One <one@example.com>
  - fixed the broken frobber (#86434)
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat