Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 是否有安全的方法修改另一个包';RPM数据库中的哪个条目?_Installation_Rpm_Rpm Spec - Fatal编程技术网

Installation 是否有安全的方法修改另一个包';RPM数据库中的哪个条目?

Installation 是否有安全的方法修改另一个包';RPM数据库中的哪个条目?,installation,rpm,rpm-spec,Installation,Rpm,Rpm Spec,我遇到了中描述的问题,其中一个旧包被淘汰,其%preun脚本以$1=0运行,导致了不希望出现的行为。我知道这可以通过使用-e+-I来解决,正如答案中所建议的,或者使用--nopreun标志,但是很难将这些信息传递给习惯于使用-U的用户 我无法在野外修改现有的%preun脚本。我看不到在旧包的preun之后从新包运行额外代码的任何方法。我找不到任何方法让我的新包以编程方式阻止旧的%preun脚本执行 是否有安全的方法访问RPM数据库并删除现有包的scriptlet?否您无法编辑rpmdb:标头受保

我遇到了中描述的问题,其中一个旧包被淘汰,其%preun脚本以$1=0运行,导致了不希望出现的行为。我知道这可以通过使用-e+-I来解决,正如答案中所建议的,或者使用--nopreun标志,但是很难将这些信息传递给习惯于使用-U的用户

我无法在野外修改现有的%preun脚本。我看不到在旧包的preun之后从新包运行额外代码的任何方法。我找不到任何方法让我的新包以编程方式阻止旧的%preun脚本执行


是否有安全的方法访问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基础,因此,未来的管理系统,如果你搞砸了。如果你这样做了,并且没有后援或出路,那么你就很难学会对自己的行为负责。只是说你被警告了