RPM 无法使用 sudo rpm -e 卸载

use*_*144 5 rpm sudo

我在尝试使用sudo. 当我执行以下操作时:

sudo rpm -e mypackage  
rpm -qa | grep mypackage
Run Code Online (Sandbox Code Playgroud)

我发现包裹还在!尽管rpm -e运行没有任何明显错误,但仍然如此。这会阻止我删除此包所依赖的其他包。

经过一番调查,我发现该软件包包含一个似乎失败的卸载后脚本。script-let 只是尝试删除一个目录,例如

rm -rf /some_directory
Run Code Online (Sandbox Code Playgroud)

然后我发现通过绕过这个脚本,软件包将被卸载。所以如果我这样做:

sudo rpm -e --noscripts mypackage  
rpm -qa | grep mypackage
Run Code Online (Sandbox Code Playgroud)

然后不再列出该包。现在我的问题是为什么使用sudo阻止这样一个简单的脚本运行,其次为什么 rpm 命令不报告问题?

顺便说一句,以下命令序列也有效,因此删除目录肯定是可能的:

sudo rm -rf /some_directory  
sudo rpm -e mypackage  
rpm -qa | grep mypackage
Run Code Online (Sandbox Code Playgroud)

这些都不是真正可以接受的解决方案,因为我需要一种可靠的通用方法来正确卸载不受我控制的 rpm 包。我也无法以 root 身份执行此操作,因为我正在编写其他用户必须能够运行的脚本。

最后在绝望中我尝试了 sudo 的 -H 选项,即

sudo -H rpm -e mypackage
Run Code Online (Sandbox Code Playgroud)

现在这似乎也有效,但有人能解释为什么设置$HOMEto/root会有所作为吗?由于我工作环境中的严格流程,如果没有令人信服的论据,我无法真正将此作为解决方案提交,即我必须能够解释为什么-H需要并证明我的脚本是可靠的。sudo -H不幸的是,只是说似乎在我的机器上工作并不会与我的老板削减它!

我希望这里的一些专家可以解释发生了什么,任何帮助将不胜感激!

use*_*144 3

我现在自己找到了解释,但将来可能对其他人有帮助。我在我的主区域中发现了一个名为 .rpmmacros 的文件,该文件在 root 的主区域中不存在。因此,调用 sudo 时设置 -H 会产生影响。

此 .rpmmacros 文件将 %_topdir 设置为未安装的目录(实际上是一个clearcase vob)。挂载目录或删除文件解决了我的问题,即我可以在不使用 -H 选项的情况下卸载 RPM。