为什么程序包管理器没有按用户安装和注册?


23

据我所知,Apt和DNF / Yum是Linux发行版中两种最受欢迎​​的软件包管理方案,它们仅支持系统范围的软件包安装:root拥有的文件,binary进入(/usr)?/s?bin,setting进入/etc等等。

但是,在有多个不具有root特权的个人用户的系统上,经常(即使不是总是)发生了用户想要安装一些可用于该发行版的应用程序或实用程序的情况。他/她可以使用个人安装的安装方式,这种安装方式对许多/所有用户而言并不常见。

现在,要使软件包在安装时具有不同的根目录或一组根目录,以使用户能够做到这一点,似乎并不是一个牵强的想法,甚至是难以置信的复杂想法。管理已安装软件包的用户特定注册表也不是什么问题(无论单个用户是否具有自己的软件包DB)。

那么,为什么没有将这些功能添加到那些常见的软件包管理系统/方案中,是什么原因呢?

注意:这是一个有用的问题,即我要询问的是人们对过去的了解,而不是人们对此功能的看法


3
如果提供了它,那将节省我在没有超级用户特权的计算机上从源代码编译软件的大部分时间。我很想知道答案。

1
诚然,我对此知识不是很了解,但可以这样做是为了防止用户因自己安装的软件的依赖性而填满硬盘驱动器。如果apt没有以root身份运行,则它无法更新系统库,因此用户现在的系统版本比系统的更新。对每个用户和较旧的,较小的硬盘驱动器重复一遍,它们将很快充满。
Thegs

1
@Thegs:我怀疑这是考虑因素。很少有软件项目会因为诸如“如果这样做的人会填满磁盘驱动器”之类的考虑而避免使用重要功能。如果是某种安全风险,也许可以。同样,在多用户系统上,会有配额。而且很少有人会使用它。再加上所有这些都是猜测...
einpoklum-恢复莫妮卡

2
简而言之:弄乱用户数据不是系统软件包管理器的工作。〜/ bin,〜/ lib等来自系统的POV,是“用户数据”。
cas

1
我见过通过分散了几包pipnpm并且gopkg-部分是因为他们的发行无关,部分是因为它们通常允许特定用户安装。
鲍勃,

Answers:


15

尽管常见的软件包管理器没有解决此用例,但是有几个项目可以做到:

关于传统软件包管理器为何不解决此用例的最好猜测是,它使软件包的构建和安装过程变得非常复杂,因为软件包维护者需要非常小心以确保其软件包正确支持动态安装目录。实际上,许多常见的软件包格式(例如RPM)都支持动态安装目录,但是在构建软件包时,几乎没有任何维护者会由于高额额外开销而利用此功能。


因此,RPM支持此功能,但是dpkg不支持吗?
einpoklum-恢复莫妮卡

1
老实说,我不了解dpkg,因为我从未构建过.deb软件包。我猜dpkg确实支持动态安装目录,但是我怀疑许多.deb软件包的维护者是否支持。
jayhendren

另一件事……这些文件通常是从头开始构建,引导生成的,还是继续依赖于系统级安装的内容?
einpoklum-恢复莫妮卡

1
系统范围的软件包管理假定尚未安装,则没有任何可用的内容,因此,搜索依赖于文件的依赖项相当于搜索依赖于已安装的包含那些文件的软件包的依赖项。但是使用辅助软件包管理器,可以得到系统范围的软件包/文件和用户特定的软件包/文件。软件包管理器是否通常仅依赖于他们已下载和/或构建的内容?
einpoklum-恢复莫妮卡

2
要看。从Homebrew和Emerge等源代码进行编译的程序通常只是尝试在没有大量依赖项跟踪的情况下构建程序包。其他人则将依赖项与软件包捆绑在一起(这是大多数App Store样式工具以及Flatpak和Snaps的工作方式)。诸如零安装之类的其他工具则将所有依赖项作为单独的用户级软件包安装。
jayhendren

6

那么,为什么没有将这些功能添加到那些常见的软件包管理系统/方案中,是什么原因呢?

因为这增加了管理系统的复杂性,超出了必需的范围。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.