如何安装没有root访问权限的软件包?


125

我在这台机器上没有root访问权限

我想知道是否可以下载Ubuntu软件包并将其安装为非root用户吗?

大概在我~/bin~/usr/share类似的东西?那行得通吗?


1
希望他们会尽快支持。
米2014年

4
您可以为Linux使用便携式应用程序:无需安装,无需root。在appimage.org上找到它。甚至Linus Torvalds也喜欢它。这很奇怪,因为莱纳斯从不喜欢任何东西。
ipse lute 2016年

我建议尝试fakechroot
罗伯特·波拉克

的组合dpk -x,并mv为我工作。或者,如果甚至dpk无法使用,ar并且管道/合并tar对我来说都在非常受限的系统上
起作用

Answers:


107

Apt不直接支持它,但是有很多方法可以做到。

一种是用于schroot创建非根chroot。这是一个有点复杂的过程,但是随着许多开发人员设置chroot环境来编译代码,您应该可以找到社区帮助。

我知道的第二种方法是从.deb软件包安装。您可能可以从网站上下载该文件,也可以从Ubuntu仓库中下载该文件。

apt-get download package

替换package为包装名称

有了deb文件后,dpkg直接从命令行调用。以下示例将package.deb安装到您的主目录中。

dpkg -i package.deb --force-not-root --root=$HOME 

像这样使用dpkg的缺点是错误消息很可能是含糊不清的。dpkg不会自动解决依赖关系或创建所需的目录结构。

最后,您可以使用apt-get source命令获取软件包的源并将其配置为本地安装。通常这看起来像:

apt-get source package
cd package
./configure --prefix=$HOME
make
make install

这种方法的缺点是,您需要一种可用于该方法的开发环境才能工作,并且可能会发现自己编译了数十个软件包以解决所有依赖性。

编辑:

由于dpkg -i不起作用(请参见评论),我建议采用以下替代方法:

dpkg -x package.deb dir

这会将.deb软件包解压缩到dir。然后,您可以导出二进制文件所在的PATH。只要安装了二进制文件的所有依赖项,它都应正常运行。


1
如果您具有root用户访问权限,但又不想在全球范围内安装特定的软件包,则可以使用sudo apt-get build-dep package来安装构建软件包所需的所有内容(使用获取源代码后apt-get source)。
弗拉基米尔·潘捷列夫2013年

19
该答案写于2010年。自那时以来,此方法的执行方式是否有任何变化?
becko 2014年

36
即使--force-没有根,我碰到“dpkg:错误:请求的操作需要超级用户特权”
克莱门特

10
亲朋好友--force-not-root --root=$HOME或其变体将不起作用。Debian二进制软件包不适合在主目录下安装。或者,换一种说法。“以下示例将package.deb安装到您的主目录中。” 不,不会。
Faheem Mitha

1
不幸的是,这行不通。我尝试过--force-not-root --root=/your/custom/path
越南

16

我假设您要安装jedit。首先,您必须找到软件包并下载。我只是从某个镜像中获取deb文件,然后打开一个控制台/终端:

  1. mkdir /tmp/jedit && cd /tmp/jedit-在其中创建一个新目录tmp并对其进行更改。
  2. wget http://mirrors.kernel.org/ubuntu/pool/universe/j/jedit/jedit_4.3.1.dfsg-0ubuntu1_all.deb -下载包
  3. ar x jedit_4.3.1.dfsg-0ubuntu1_all.deb或者,易于键入ar x *.deb-提取文件内容
  4. tar xvzf data.tar.gz-文件data.tar.gz包含执行软件所需的所有内容
  5. usr/bin/jedit 打开编辑器
  6. 完成:-)

您可以将文件移动到主目录中的某个位置,然后从那里执行它们。


11
请注意,安装前和安装后脚本不会运行。您还需要自己解决所有依赖关系或路径。但是在默认安装下,这对于许多桌面应用程序而言已足够。
jbowtie

您也可以不搜索就下载该软件包,只需执行apt-get下载(请参见其他答案)
lib

我相信您的链接已断开。
Winnemucca

9

我写了一个叫做JuJu的程序,它基本上允许在$ HOME / .juju目录中有一个很小的linux发行版(仅包含程序包管理器)。

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

例如,在安装JuJu之后安装jedit:

$>juju -f
(juju)$> pacman -S jedit
(juju)> jedit

这样可以在Ubuntu上正常运行,对吗?
赛斯

是的,如果ubuntu的Linux内核版本大于或等于2.6.32,它将起作用。
user967489 2014年

2
起初我以为你在说这个。第二个大写的j会有所不同。
kon psych 2015年

1
问题是我们是否可以安装Ubuntu软件包。使用junest,我们将只能安装ArchLinux软件包,而不能安装Ubuntu软件包。例如,如果没有相同的软件包可用于ArchLinux,那么这将无济于事。就是说,谢谢朱斯特。
基兰
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.