Installation 是否有安全的方法修改另一个包';RPM数据库中的哪个条目?
我遇到了中描述的问题,其中一个旧包被淘汰,其%preun脚本以$1=0运行,导致了不希望出现的行为。我知道这可以通过使用-e+-I来解决,正如答案中所建议的,或者使用--nopreun标志,但是很难将这些信息传递给习惯于使用-U的用户 我无法在野外修改现有的%preun脚本。我看不到在旧包的preun之后从新包运行额外代码的任何方法。我找不到任何方法让我的新包以编程方式阻止旧的%preun脚本执行Installation 是否有安全的方法修改另一个包';RPM数据库中的哪个条目?,installation,rpm,rpm-spec,Installation,Rpm,Rpm Spec,我遇到了中描述的问题,其中一个旧包被淘汰,其%preun脚本以$1=0运行,导致了不希望出现的行为。我知道这可以通过使用-e+-I来解决,正如答案中所建议的,或者使用--nopreun标志,但是很难将这些信息传递给习惯于使用-U的用户 我无法在野外修改现有的%preun脚本。我看不到在旧包的preun之后从新包运行额外代码的任何方法。我找不到任何方法让我的新包以编程方式阻止旧的%preun脚本执行 是否有安全的方法访问RPM数据库并删除现有包的scriptlet?否您无法编辑rpmdb:标头受保
是否有安全的方法访问RPM数据库并删除现有包的scriptlet?否您无法编辑rpmdb:标头受保护 通过SHA1或数字签名进行更改 而是使用--nopreun升级到包的固定版本
为了防止运行错误脚本,让Jeff Johnson绝对正确地认为它不应该执行。然而,这肯定是可以做到的 我已经在一个RPM中完成了这项工作,用于分发,但请注意,这是一个包含的半结构化环境,所有系统都有no远程操作。 如果您有远程手动访问权限,请选择“删除,安装”路径,并编写脚本 如果你真的觉得你应该这样做,那么这些就是指针。我不会向你们展示我是如何做到的,因为这是“工作”,不是我的分享。这些概念是我的:-) 首先,备份/var/lib/rpm/Packages文件(
cp/var/lib/rpm/Packages/var/tmp/Packages.bkp
)。把它放在安全的地方。在您处理解决方案时,如果其他人更改了系统,请更新您的备份。从周日开始,在每次更改或步骤后,定期检查RPM的计数并进行测试
您需要使用db_unload和db_load命令。为了提高速度,您需要使用“s2p”将任何shell sed模式转换为perl。然后构建一个如下所示的管道:
db_unload/var/tmp/Packages.bkp | perl-i-e“s2p转换字符串”| db_load/var/tmp/Packages.new
然后,您可以尝试通过在原始文件上复制ot来测试Packages.new。始终运行rpm--在手动更改后重建数据库。如果您看到任何错误,请恢复备份并重新重建数据库
如果需要将其放入RPM中,则将其转换为Lua,并将其放入pretrans或posttrans脚本中(%pretrans-p
)。选择取决于您试图实现的顺序。Lua解释器内置于rpm中,因此即使您的rpm被调用,它也会在新系统安装期间正常运行。我将我的“管道”包装在一个lua长字符串中,并使其仅在系统已经存在时执行。它没有别的作用。如果你在想“那永远不会发生”,那就看看“永不说永不”
顺便说一句,你可以完全僵化你的RPM基础,因此,未来的管理系统,如果你搞砸了。如果你这样做了,并且没有后援或出路,那么你就很难学会对自己的行为负责。只是说你被警告了