如何在没有sudo特权的情况下在本地安装程序?


73

假设我以用户身份通过​​ssh访问某些Ubuntu服务器,并且为了方便起见,我需要安装一些非系统工具(mc,rtorrent,mcedit)。我不想打扰这些小程序的管理员。

有没有一种方法可以安装它们(使它们运行)而不使用类似的东西sudo apt-get install



另请参阅应将本地可执行文件放置在哪里?进行相关讨论。
乔治M


另请参阅跟踪程序
Gilles

Answers:


33
  1. 编译并安装到~/bin(并编辑.bashrc以设置PATH为包括它)。库可以类似地编译并安装到~/libLD_LIBRARY_PATH指向它),开发标头可以安装在eg中~/includes

  2. 根据您要安装的程序的具体细节以及它们所依赖的库,您可以下载.deb文件,并使用' dpkg-deb -x'将其提取到主目录下。然后,您将有很多“有趣”设置的PATHLD_LIBRARY_PATH以及其他variables。您要安装的程序或应用程序越复杂,您将获得的乐趣越多:)

    当然,您将无法以setuid这种方式安装二进制文件-它们将被安装,但是(由于您无权将它们root或设置为setuid二进制),它们将只是您拥有的普通二进制文件。

    同样地,预计要运行的某个守护程序和系统服务UID或有更改uid,或希望文件是在能力/etc相当~/etc等不太可能,如果在所有,运行良好。

  3. 大多数系统管理员会考虑mc,并mcedit是“大多是无害的”,无害的程序。

    但是,很少有人会考虑安装Torrent客户端是无害的,尤其是如果他们必须支付带宽费用或最终要承担法律责任时。对于最终用户在未经许可的情况下安装此类软件,大多数系统管理员可能不会完全满意。他们可能会说“确定,继续前进,将自己踢倒”,或者他们可能不会...但是您应该询问任何可能对机器所有者/管理员造成问题的问题。


我听说设置LD_LIBRARY_PATH是个恶作剧。这在这里也适用吗,还是我误解了?
Will Vousden

1
设置LD_LIBRARY_PATH的所有问题均适用。是的,它是或可能是邪恶的骇客。有时,邪恶的骇客对于实现特定目标是必要的……打破“规则”时的关键是要充分了解它们,以了解它们是为拯救您而设计的,以及在这种情况下您为什么需要打破它们,以及存在或可能存在的风险。
cas

我只需要安装一个独立程序(zoom),所以首先我尝试了第二个选项(dpkg-deb -x到本地目录)。像魅力一样工作。我不必做任何LD_LIBRARY_PATH改动。即使必须这样做,我也将在同一命令行中执行此操作,以免影响全局设置(例如$ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher)。
安东尼

仅当要安装的一个或多个软件包提供任何共享库时,才需要设置LD_LIBRARY_PATH。如果只是可执行文件,数据,文档和配置文件等,则可以使用系统库。
cas

50

您需要从源代码编译它们。应该只是一个问题

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

二进制文件将位于中~/myapps/bin。因此,添加export PATH="$HOME/myapps/bin:$PATH"到您的.bashrc文件并使用重新加载.bashrc文件source ~/.bashrc。当然,这假定gcc已安装在系统上。


6
那依赖关系呢?有没有一种方法可以自动处理它们,而不必为它们每个运行相同的代码?
yura 2012年

1
@yura不,你必须自己做。
Ulrich Dangel

如果您没有权限执行此操作怎么办?在没有sudo / root用户访问权限的情况下,通常具有编译软件的权限吗?
Freedo

5

您可以使用JuNest,它在用户目录中创建一个小的Linux容器,您可以在其中安装任何软件包。


0

我遇到了同样的问题,假设您有一台具有相同操作系统和体系结构的linux服务器,这就是我如何快速修复它。

  1. 在您控制的系统上安装软件

  2. 找到可执行的示例which python并将其复制到~/

  3. 使用以下命令复制库:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

将可执行文件和库转移到您仅具有本地特权的其他系统,然后运行以下命令:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

这将创建一个文件夹~/lib来存储库,将其添加到您的路径,并告诉LD在此处查看库,因此只需在其中添加可执行文件和库,现在就可以像在其他地方一样运行它了

这可能很hacky,但是它非常可移植,快速,而且我还没有找到无法以这种方式运行的功能,当然,该软件无法尝试执行需要root用户访问权限的操作,例如绑定到较低的端口比1024等


-1

我和你有同样的问题。我还没有尝试过,但是似乎Linuxbrew在这个问题上可以派上用场。

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.