如何在spec文件“Requires”行中要求不属于RPM的文件?

时间:2016-11-10 22:37:59

标签: linux eclipse rpm centos7 specfiles

我已经安装了(在CentOS 7中)一个名为Rational Software Architect(RSA 9.5)的程序,它是一个富客户端平台,就像Eclipse一样,但没有实际安装RPM。 RSA附带了一个安装bash脚本,它几乎只是将eclipse文件丢弃到文件系统上。我的Eclipse可执行文件位于/opt/IBM/SDP/eclipse,普通的Eclipse文件夹,如“插件”,“功能”和“dropins”在同一级别。

我为之前版本的“真正的”Eclipse编写了一个spec文件,它只是安装了我编写为jar文件的一些java插件,将它们放在“dropins”文件夹中,然后调用eclipse -clean -initialize来同步Eclipse用我的新插件。这仍适用于RSA。

我的问题归结为以前的事实,我只是在spec文件中有一行类似于

Requires: eclipse >= 4.4.2

因为Eclipse是作为RPM安装的。既然已经安装了RSA,取代了Eclipse,并且没有与之关联的RPM,我需要找到一种方法来告诉spec文件在安装RPM之前要求“dropins”文件夹存在。也许是这样的:

Requires: /opt/IBM/SDP/eclipse

我没有在上述方法上取得任何成功,并想知道是否甚至可以根据文件而不是包来设置RPM要求?我找不到关于这个主题的任何文档,并希望你们都能提供帮助!提前谢谢。

仅供参考...我在CentOS 7.2中使用rpm-build-4.11.3和rpmdevtools-8.3。

编辑:在规范中使用绝对路径时添加从yum返回的错误消息

[root@localhost trunk]# yum localinstall myplugin-1.1.6-rev1255.x86_64.rpm Loaded plugins: fastestmirror, langpacks, rhnplugin This system is receiving updates from RHN Classic or Red Hat Satellite. Examining myplugin-1.1.6-rev1255.x86_64.rpm: myplugin-1.1.6-rev1255.x86_64 Marking myplugin-1.1.6-rev1255.x86_64.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package myplugin.x86_64 0:1.1.6-rev1255 will be installed --> Processing Dependency: /opt/IBM/SDP/eclipse for package: myplugin-1.1.6-rev1255.x86_64 Loading mirror speeds from cached hostfile --> Processing Dependency: /opt/IBM/SDP/eclipse for package: myplugin-1.1.6-rev1255.x86_64 --> Finished Dependency Resolution Error: Package: myplugin-1.1.6-rev1255.x86_64 (/myplugin-1.1.6-rev1255.x86_64) Requires: /opt/IBM/SDP/eclipse You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest

[root@localhost trunk]# ll /opt/IBM/SDP/eclipse -rwxr-xr-x. 1 root root 74675 Jan 28 2015 /opt/IBM/SDP/eclipse

1 个答案:

答案 0 :(得分:5)

根据Fedora Packaging Guidelines

  

... rpm文件依赖项根据文件系统上的内容不起作用,它们根据rpm%files部分中指定的路径工作。

因此,您无法使用Requires:来要求不属于RPM的文件。

一种可能的替代方法是检查%pre部分中是否存在该文件,如果不存在则以非零状态退出。有关如何使用该技术的示例,请参阅Paul Rubel's replyFailing an RPM install programatically in a spec stepᴳᵁᴵᴰᴼ's replyHow to abort the installation of an rpm package if some conditions are not met in specfile?

请注意,%pre部分的非零退出状态将导致RPM无法安装,但RPM事务似乎仍然成功,这可能会导致混淆。请参阅How to exit rpm install in case of an error