修改规范文件spec

RPM包的spec文件包含有关包本身的重要信息,比如指明所需的依赖项和文件。

首先下载Atom包到当前目录:

$rpmrebuild -enp atom.x86_64.rpm

-e,是--edit-specfile的简写版本,告诉程序我们要编辑包的specfile;
-n,是--notest-install的简写版本,它修改了程序的行为,因此生成的rpm不会在构建过程结束时自动安装。
使用-p或者 --package选项,我们指定要使用实际的“.rpm”包文件作为重建的基础,而不是使用已安装的rpm。

执行上面的命令后,默认文本编辑器将会打开spec文件。
我们现在需要做的是添加Requires子句。 以便包括缺少的依赖项:

Requires:      lsb-core-noarch
Requires:      GConf2 # Here is our extra dependency
Requires:      libXss.so.1()(64bit)
Requires:      libsecret-1.so.0()(64bit)

同时,我们可以修改包版本,以便将修改的版本与官方版本区分开来。

Release:       0.1

改成

Release:       0.1_custom

完成后,我们保存并关闭文件。

将询问我们是否要继续和构建修改后的包:

Do you want to continue ? (y/N)

将开始构建新的rpm。
新的RPM将位于$home/rpmbuild/rpms/x86_64 /目录中:

$ls $HOME/rpmbuild/RPMS/x86_64/
atom-1.27.0-0.1_custom.x86_64.rpm

验证是否已正确添加依赖项:

$rpm -qRp $HOME/rpmbuild/RPMS/x86_64/atom-1.27.0-0.1_custom.x86_64.rpm
GConf2
libXss.so.1()(64bit)
libsecret-1.so.0()(64bit)
lsb-core-noarch
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1

gconf2现在包含在包依赖项的列表中。

使用dnf命令尝试安装新的rpm包:

[...]
================================================================================
 Package                    Arch   Version                   Repository    Size
================================================================================
Installing:
 atom                       x86_64 1.27.0-0.1_custom         @commandline  99 M
Installing dependencies:
 GConf2                     x86_64 3.2.6-20.fc28             fedora       1.0 M
 at                         x86_64 3.1.20-10.fc28            fedora        80 k

Transaction Summary
================================================================================
Install  19 Packages
[...]

依赖项已经包含在列表中。

安装RPMREBuild

安装“RPMREBuild”包,在默认的Fedora存储库中可用:

$sudo dnf install rpmrebuild

修复Atom包中缺少依赖项

在本教程中,我们将修复“Atom”编辑器rpm包中的一个错误。

但是,在最小环境中安装Atom时,会出现下面问题:
在尝试启动编辑器时,报错:

/usr/share/atom/atom: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory

gconf2包提供的libgconf-2.so.4共享对象,使用以下Linux命令确认:

$dnf whatprovides libgconf-2.so.4
GConf2-3.2.6-20.fc28.i686 : A process-transparent configuration system
Repo        : fedora
Matched from:
Provide    : libgconf-2.so.4

让我们通过在spec文件中添加缺少的依赖项来解决此错误。

如何使用rpmrebuild修改RPM包
日期:2020-07-07 20:56:27 来源:oir作者:oir