使用system()API时rpm post安装脚本失败

时间:2017-01-19 12:30:22

标签: linux ld rpm rpmbuild

在系统调用中发出RPM后安装脚本失败。在spec文件中未提及post script时,我们看不到安装问题。

*。spec.in
%后
sfile =的/ etc / ld.so.conf中
如果! grep'^ / usr / lib'$ sfile> / dev / null 2>& 1;然后
printf“%s \ n”“/ usr / lib”>> $ sfile;
网络

帖子脚本看起来很简单。

准备安装包... readline的-4.2-4 错误:从readline-4.2-4执行%post scriptlet失败,退出状态255

你能帮我们一下吗?

ret = system("/bin/rpm -ivU --nodeps --force --root /mnt /tmp/readline-4.2-4.ppc.rpm");

当我们在shell提示符中发出上述rpm命令时,我们看不到问题。

2 个答案:

答案 0 :(得分:0)

你有一个错误的帖子(嗯嗯!; - )

尝试添加"退出0"在%post scriptlet的末尾。似乎正在发生的是最后执行的命令(即grep)的返回代码作为失败的退出代码返回到rpm。

请注意,您可以非常轻松地调试失败的软件包scriptlet(尽管该技术并不是很明显)。在/ var / tmp中查找rpm-tmp *文件:当脚本失败时,RPM不会擦除扩展的scriptlet(即脚本)。您可以(通常,并非总是)使用" sh -x"调试RPM尝试运行的脚本。然后将更改传播回* .spec文件

答案 1 :(得分:-1)

我不确定您的scriptlet有什么问题。但是你不应该修改/etc/ld.so.conf。您应该在/etc/ld.so.conf.d/%{name}.conf

中创建和分发文件