非根包管理器

elm*_*lmt 56 yum root not-root-user package-management

从我的研究中,我似乎注意到所有包管理器都坚持被用作特权用户,并且必须安装到/.

通常,我喜欢做的是创建一个一次性帐户,编译一些软件,然后$HOME为该帐户安装。我可以尝试各种设置,然后当我完成后,只需销毁帐户。

然而,编译软件变得乏味。

我的经验是真的只是限于yum,但我不明白为什么我会无法回购文件拖放到~/etc/yum.repos.d并已百胜一切安装到主账户。

是否有任何理由必须将包管理器用作特权用户来安装软件?

eph*_*ent 37

编译二进制包时假设它们将安装到/. 这并不总是很容易改变,并且需要额外的 QA 工作(首先这已经足够困难了!)来确定特定的二进制文件是否可重定位。

在某种程度上,您可以使用fakechroot 之类的东西以非 root 用户身份在子目录中创建整个系统,但这既乏味又脆弱。

使用源代码包会更好。 Gentoo PrefixRootless GoboLinux都是可以安装到非/位置的包管理器,非root用户也可以使用。

  • 我要补充的是,有两种可重定位性。包可能假设它总是在某个地方或其他东西在某个地方(如`/bin`),或者它可能假设它安装在--prefix 指定的地方。虽然后者可能会被那些项目解决,但前者需要对源代码进行修补。 (3认同)
  • *二进制包的编译假设它们将被安装到`/`* 中的特定位置。这听起来像是一个要求,可能在 30 年前是合理的,但现在不行。例如,`env` 程序不是要解决这类问题吗?如果不是,很容易想出一个方案来配置任何二进制文件以在特定位置查找其他二进制文件。 (2认同)
  • @PiotrDobrogost 在某种程度上是的,在某种程度上不是。例如,没有“/etc”或(据我所知)“/usr/lib/<packagename>/”或“/usr/libexec/<packagename>/”的环境变量。`/usr/share` 可以通过 XDG 变量进行更改,XDG 变量已在本世纪某个时候发布,并且不一定适用于较旧的程序。 (2认同)

imz*_*hev 30

有一个包管理器项目——Nix——有一个有趣的基本想法(一个“功能性”的包管理器),它也支持每个用户的操作:

多用户支持

从 0.11 版本开始,Nix 具有多用户支持。这意味着非特权用户可以安全地安装软件。每个用户都可以拥有不同的配置文件,即 Nix 商店中出现在用户 PATH 中的一组包。如果用户安装了另一个用户之前已经安装过的包,则不会再次构建或下载该包。同时,一个用户不可能将特洛伊木马程序注入另一个用户可能使用的包中。

我想补充的一点: Nix应该可以在您选择的类 Unix 系统中使用(例如,Linux 发行版)。

还有一个相关的大型软件包集合可以与 Nix 软件包管理一起安装 - Nixpkgs - 为许多平台构建

  • 32 位和 64 位 x86(i686-linux 和 x86_64-linux)上的 GNU/Linux
  • Mac OS X(i686-darwin 和 x86_64-darwin)
  • FreeBSD(i686-freebsd 和 x86_64-freebsd)
  • OpenBSD (i686-openbsd)
  • Windows / Cygwin (i686-cygwin),

以及相关的发行版——NixOS

NixOS 是基于 Nix 的 Linux 发行版。它不仅使用 Nix 来管理包,还管理系统配置(例如,在 /etc 中构建配置文件)。这意味着,除其他外,可以轻松地将系统的整个配置回滚到较早的状态。此外,用户可以在没有 root 权限的情况下安装软件。阅读更多…

以及相关的“连续”构建系统-水润

  • 不错的总结。最近发布了 GNU Guix。基于 nix 的 GNU 包管理器。https://savannah.gnu.org/forum/forum.php?forum_id=7436 (4认同)
  • @Davorak `nix` 和 `guix` 之间的区别是什么。因为现在我真的在我的工作中使用 `nix`,我想知道我是否可以考虑将 `guix` 作为我需要的工具的另一个实现。我可以在某处阅读差异摘要吗?也许,您甚至可以在这里写下这样一个总结的答案,宣布另一种替代解决方案? (2认同)

小智 9

我使用JuNest,它基本上允许在您的 $HOME/.junest 目录中有一个非常小的 linux 发行版(仅包含包管理器)。

它允许通过 proot 访问主目录中的自定义系统,因此,您可以在没有 root 权限的情况下安装任何软件包。它可以在所有主要的 linux 发行版上正常运行,唯一的限制是 JuNest 可以在 linux 内核上运行,最低推荐版本为 2.6.32。


Mac*_*tka 6

首先是因为依赖。某些软件包可能不会由用户安装 - 例如 PolicyKit。因此,这会给那些贡献空闲时间的打包人员带来额外的负担,并且通常安装程序就像打字sudo(单用户站)或唠叨管理员一样简单。

在 $HOME 中有安装选项

  • 语言原语“包管理器”通常支持开箱即用(如 Ruby 的 gem、Haskell 的 cabal、Python 的 pip)或小幅调整
  • 好旧./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install(或像 jhbuild 这样的变体)。
  • 程序在$ HOME几年前安装。但是我找不到它 - 我想几乎没有人使用它,因为他们要么自己安装,要么唠叨管理员。


eMP*_*584 5

有一个新的孩子:“ JuNest(被监禁的用户 NEST) - 基于 Arch Linux 的发行版,可以在没有 root 访问权限的任何 Linux 发行版上运行。” @ https://github.com/fsquillace/junest 优点是它没有引入一种新的包格式,所以安装后很容易(最小:ca. 320M),完整的 Arch Linux 存储库(超过 13000包 ATM)触手可及。