我知道这是非标准的,但它的目的是克服专有发行版的短期问题。因为存在我们的部署系统所独有的依赖项,所以我们必须从%post编译一些库。因为这里的失败可能会导致RPM数据库的损坏,我们静默地失败,或者更准确地说,我们成功地失败了:-/
使用%verifyscript,我们能够验证编译是否未完成,然后适当地退出。我们的想法是我们可以这样做:
rpm -Uvvvh proprietary-dist-1.0-2.i686.rpm
rpm --verify proprietary-dist || rpm -Uvvvh proprietary-dist-1.0-1.1686.rpm或者像这样:
rpm -Uvvvh proprietary-dist-1.0-2.i686.rpm
rpm --verify proprietary-dist || rpm --rollback proprietary-dist但是,利用%posttrans,我认为我们可以将其简化为:
rpm -Uvvvh proprietary-dist-1.0-2.i686.rpm || rpm --rollback proprietary-dist从文档中似乎不清楚从%posttrans中退出非零值是否安全并且不会导致RPMDB损坏-好吧,至少在引入%pretrans和%posttrans之前不应该退出非零值的文档是这样的。
我假设%posttrans是在RPMDB更新并提交之后运行的,所以实际上,RPM被认为是已安装的。但这是一个糟糕的假设吗?
发布于 2015-06-30 23:18:27
是的,您是正确的,%posttrans是在rpmdb更新之后运行的(在您可能使用的rpm中没有commit )。同时,rpmdb仍处于打开状态,通常会禁用fsync(2) (出于性能考虑)。
来自%posttrans的非零值充其量被忽略,否则将留下一个“不成功”的部分安装,需要手动“修复”。
YMMV.如果rpm使用%posttrans中断,您可以保留所有部分。
https://stackoverflow.com/questions/31069879
复制相似问题