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

Kus*_*nda 1 ubuntu dpkg not-root-user package-management

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

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

我没有(也不应该)sudo访问我正在尝试的机器。该软件不是要在系统范围内安装,而是仅供我个人使用。

我试过了

$ dpkg --root="$HOME/local" -i package_x.y.z_x86_64.deb
Run Code Online (Sandbox Code Playgroud)

但我明白了

dpkg: error: requested operation requires superuser privilege
Run Code Online (Sandbox Code Playgroud)

在尝试--force-all并创建满足dpkg( local/usr/bin,local/var/dpkg子目录info, triggersand updates, 以及 中的空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
Run Code Online (Sandbox Code Playgroud)

显然没有chown按照包规范将文件发送给正确的用户。

对我来说,下一步可能是与这台机器上的系统管理员交谈,看看他们是否可以为我安装这个软件,但我想知道我是否遗漏了什么可以让我拥有自己的本地包安装根?

Ste*_*itt 5

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

dpkg-deb -x package_x.y.z_x86_64.deb my-private-root
Run Code Online (Sandbox Code Playgroud)

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

dpkg-deb -e package_x.y.z_x86_64.deb my-private-control
Run Code Online (Sandbox Code Playgroud)