使用 sudo rpm -e 卸载 RPM 失败

使用 sudo rpm -e 卸载 RPM 失败

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

sudo rpm -e mypackage  
rpm -qa | grep mypackage

我发现该包仍然列出!尽管rpm -e运行时没有任何明显的错误。这会阻止我删除该包所依赖的其他包。

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

rm -rf /some_directory

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

sudo rpm -e --noscripts mypackage  
rpm -qa | grep mypackage

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

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

sudo rm -rf /some_directory  
sudo rpm -e mypackage  
rpm -qa | grep mypackage

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

最后无奈之下我尝试了sudo的-H选项,即

sudo -H rpm -e mypackage

现在这似乎也有效,但有人能解释为什么设置$HOME/root产生任何影响吗?由于我的工作环境中有严格的流程,如果没有令人信服的论据,我无法真正将其作为解决方案提交,即我必须能够解释为什么-H需要并证明我的脚本是健壮的。不幸的是,仅仅说sudo -H似乎在我的机器上工作并不能让我的老板满意!

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

答案1

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

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

相关内容