以非特权用户身份安装 Debian 软件包

以非特权用户身份安装 Debian 软件包

我有一个软件,我想将其安装在$HOME/localUbuntu 16.04 计算机上的单独层次结构中。

该软件作为 Debian 软件包分发,并且源代码不可用(如果有的话,我很乐意下载并自己编译它)。

我没有(也不应该)sudo访问我正在尝试执行此操作的计算机。该软件不是在系统范围内安装的,仅供我个人使用。

我尝试过了

$ dpkg --root="$HOME/local" -i package_x.y.z_x86_64.deb

但我得到

dpkg: error: requested operation requires superuser privilege

在尝试--force-all并创建满足需要的所有必要文件和目录dpkglocal/usr/binlocal/var/dpkg带有子目录infotriggersupdates,以及status中的空文件local/var/dpkg)之后,我陷入困境

$ dpkg --root=$HOME/local -i --force-all package-x.y.z_x86_64.deb
dpkg: could not open log '/var/log/dpkg.log': Permission denied
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack package_x.y.z_x86_64.deb ...
Unpacking package (1:x.y.z) ...
dpkg: error processing archive package_x.y.z_x86_64.deb (--install):
 error setting ownership of './usr/bin/application': Operation not permitted
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 package_x.y.z_x86_64.deb

显然未能chown根据包规范将文件发送给正确的用户。

对我来说,下一步可能是与这台机器上的系统管理员进行交谈,看看他们是否可以为我安装这个软件,但我想知道是否有一些我错过的东西可以让我拥有自己的本地软件包安装根目录?

答案1

不,你没有错过任何事情。在这种情况下,您能做的最好的事情就是使用dpkg-deb提取包的内容,并希望它们能够工作:

dpkg-deb -x package_x.y.z_x86_64.deb my-private-root

这不会运行包中包含的任何维护者脚本;你可以使用提取那些

dpkg-deb -e package_x.y.z_x86_64.deb my-private-control

答案2

允许用户使用系统的包管理器来安装软件,会带来很多问题,其中一个容易实现的问题就是依赖关系的维护。即使您想要安装的软件包的依赖关系今天已经满足,但当真正的系统管理员做了一些更改时,明天它们可能就不会满足 - 如果您的安装阻止了他们的工作(没有多少人会相信这一点),如果您的软件被卸载或者只是坏掉了?

Debian 软件包只是ar包含两个 tarball 的归档文件,因此它们应该很容易在任何 unix 系统上提取,但如果您使用的是 Debian(或不删除它的衍生版本),则更容易使用,dpkg-deb如 Stephen 建议的那样他的回答。请注意,除了手动提取包内容时不运行维护者脚本之外,还不会检查依赖项。检查依赖关系很简单(但正如所指出的情况可能会发生变化),执行维护者脚本要做的事情可能很简单,但也可能很困难。您需要阅读脚本并弄清楚它们的作用以及如何在有限的环境中执行此操作。

相关内容