RPMs - HOWTO简短故事

作者:Mitch Frazier

如果您喜欢一切最新的版本,并且您使用基于 RPM 的系统,您可能想学习如何创建 RPM。 您不必这样做,您可以只下载最新的源代码,然后在 /usr/local 中编译和安装它。 当然,这会使您的系统处于 RPM 数据库无法准确反映系统上安装的内容的状态。 同样,这也能工作,但是构建 RPM 并不(通常至少)那么困难。

首先在您的主目录中创建一些目录

  $ mkdir ~/rpm
  $ mkdir -p ~/rpm/SOURCES
  $ mkdir -p ~/rpm/SPECS
  $ mkdir -p ~/rpm/BUILD
  $ mkdir -p ~/rpm/SRPMS
  $ mkdir -p ~/rpm/RPMS

接下来,在您的主目录中创建一个 RPM 宏文件

  $ echo "%_topdir   $HOME/rpm" > $HOME/.rpmmacros

现在,获取您要升级的程序的源代码 RPM。 这通常看起来像是一个障碍,因为如果您可以找到您的发行版的源代码 RPM,那么通常可以获得编译后的 RPM,因此不需要构建它。 所以实际上这一步是:*创建*程序的源代码 RPM。 简单的方法是获取您已安装的版本的源代码 RPM 并修改它

  • 下载您已安装的版本或您可以找到的发行版的最新版本的源代码 RPM。 假设您的系统上安装了 abc 的 2.3.4-55 版本,因此请查找并下载 abc-2.3.4-55.src.rpm。
  • 下载该程序新版本的源代码。 因此,请访问 abc.org 并下载 abc-2.4.1.tar.gz 并将其保存到 ~/rpm/SOURCES。
  • 安装源代码 RPM(作为普通用户)
      $ rpm -i abc-2.3.4-55.src.rpm
    
    这应该创建一个文件 ~/rpm/SPECS/abc.spec
  • 编辑 spec 文件并将旧版本信息更改为新版本。 可能有几个地方需要更改,因此请花一点时间检查该文件并找到所有需要更改的地方。 您可能希望将“Release”值更改为一些“特殊”的东西,比如 2001,以便将来您可以将其识别为您的版本。 您可能还想在 spec 文件的变更日志部分中添加注释。
  • 构建 RPM
      $ cd ~/rpm/SPECS
      $ rpmbuild -ba abc.spec
    
    如果您已安装所有必需的工具和依赖项,并且运气不错,这将在 ~/RPMS/i586 或 ~/RPMS/x86_64(或适合您架构的内容)中创建 RPM 文件。
  • 安装新创建的 RPM
      $ sudo rpm -U ~/RPMS/i586/abc-2.4.1-2001.i586.rpm
    

可能给您带来问题的一件事是补丁文件。 RPM 可以在构建过程中自动应用补丁,通常在升级到新版本时,某些补丁已经包含在新源代码分发中,因此构建会尝试再次安装它们。 要解决此问题,请编辑 spec 文件并删除补丁的应用。

如果您尝试安装您的发行版(或您当前运行的版本)中未包含的程序,您可以尝试使用来自其他发行版的 spec 文件,或来自您的发行版的新版本的 spec 文件,但这通常需要大量的 spec 文件修改才能工作。 发行版具有不同的内置 RPM 宏,并假定某些内容的位于不同的位置,因此 spec 文件通常需要调整。 即使在同一发行版的不同版本之间也是如此,事物可能会被重新排列并破坏兼容性。

有了这个,您可以使您的系统和您的 RPM 数据库保持同步,如果您不能,至少您仍在运行 Linux。

Mitch Frazier 是 Emerson Electric Co. 的一名嵌入式系统程序员。自 2000 年代初以来,Mitch 一直是 *Linux Journal* 的贡献者和朋友。

加载 Disqus 评论