![如何在没有 root 权限的情况下在 Linux 上安装软件包?](https://linux22.com/image/1567725/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%20root%20%E6%9D%83%E9%99%90%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%9C%A8%20Linux%20%E4%B8%8A%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
无论出于什么原因,我们组织中具有 root 权限的管理员将软件包的选择限制在供应商的官方“基础”存储库(RHEL)内。
甚至连 EPEL 都不可能,更不用说 IUS 了。
我们自己的-- 手工制作 -- RPM 是允许的,但仍然需要填写票据和等待。这不仅使安装过程变得不必要地痛苦,而且妨碍了软件包开发 -- 我无法立即测试我的新 RPM。
但是,我们可以构建和安装任何我们想要的软件 - 只要它进入“我们的”目录。我们已经构建和安装这些东西一段时间了,我想知道,我们是否可以更好地组织这些东西,例如,gcc-8.2 可以在一个系统上构建(使用类似prefix
/Data/local`)并安装在多个其他系统上。
当然,我可以使用普通的 tar-ball 来做到这一点,但如果有某种包管理器功能(例如,跟踪依赖关系)就更好了……
有没有什么办法呢?还是我们还是坚持使用自制的工具?
答案1
您可以尝试--prefix
和--dbpath
选项。并非所有 RPM 都支持--prefix
,但如果您自己制作 RPM,那就不是问题,只需使它们可重定位即可。
我已经成功将系统 rpm DB 复制/tmp/lib/rpm
到我自己的目录并通过 指定--dbpath
。然后我可以rpm -i
在不使用 root 的情况下运行。当然,您现在拥有 DB 的私人副本,并且当您的 IT 安装新软件包时它将变得过时 - 并且其他用户不会知道您私人安装的软件包。但是,嘿,考虑到您提出的问题,这可能没问题。
不幸的是,分发您的 RPM 仍然需要其他用户通过 IT 或创建他们自己的数据库,例如。
rpm -ivh --dpath ~/rpmdb --prefix ~/ mypkg-1.0-1.el8.x86_64.rpm
您还可以要求您的 IT 使系统 RPM DB 可写。