当我尝试使用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。