在没有 root 访问权限的服务器上安装用户空间程序

在没有 root 访问权限的服务器上安装用户空间程序

我想在我的工作开发服务器上安装一些程序,因为它缺少我日常工作所需的一些程序。我没有 root 访问权限。

我到目前为止所做的就是用 option 编译我需要的软件--prefix=/path/to/local/root。然后我创建了一个如下所示的脚本:

#!/bin/sh
export LOCAL_PATH="/path/to/local/root"
export LD_LIBRARY_PATH="$LOCAL_PATH/lib:$LOCAL_PATH/lib64:$LOCAL_PATH/lib64:$LD_LIBRARY_PATH"

binary=$(basename $0)
$LOCAL_PATH/bin/$binary "$@"

然后,如果我使用正确的名称创建指向该程序的符号链接,它将运行本地版本。但是,我有一些问题:

  • 安装文件夹可能会不时移动。我最近发生了这样的事,我必须重新安装所有东西
  • 有些程序使用libtoolLD_LIBRARY_PATH当它在其中找到库时会忽略/usr/lib(在我的例子中已经过时了)
  • 这些程序很难维护或更新

对于前两个问题,似乎创建一个chroot就可以解决问题。fakechroot在这种情况下会有帮助吗?我的脚本还能用吗?

另外,最后一个问题让我考虑切换到包管理器。我正在考虑 portage(来自 Gentoo,我在家使用它),但也许有一些更适合我的需要。有什么建议吗?也许是一个轻量级的 Linux 发行版?

最后,我需要将/local/lib和符号链接/local/lib64在一起吗?

答案1

我不确定它是否适用于你的情况 - 但我使用接枝

它基本上允许我在我想要的任何位置(例如)拥有已安装软件包的树,$HOME/packages并在我想要的任何层次结构中安装到其文件的符号链接(例如,在我有根访问权限的情况下$HOME/local/usr/local如果我有根访问权限)。实际上,它可以帮助您维护许多自定义编译的包(就像您一样进行编译,但这样--prefix= /path/to/packages/foo-1.2.3它们最终会出现在一个公共位置) - 您甚至可以拥有同一包的多个版本。您不会造成通常的混乱,因为您可以随时选择要激活的版本:

$ cd $HOME/packages
$ ls 
mpv-git
texinfo-4.13
texinfo-git

$ graft -i texinfo-4.13
$ # symlinks now installed in my $HOME/local/bin, $HOME/local/lib, etc
$ # and since $HOME/local/bin is in my PATH, I now have texinfo-4.13
$
$ graft -d texinfo-4.13
$ # removed texinfo 4.13 symlinks - let's install bleeding edge version
$
$ graft -i texinfo-git

/usr/local这也可以用来维护即使你是 root 也会发生的混乱。

使用符号链接进行包管理的想法在一些 Linux 发行版中再次现代化 - 但我认为graft可以适应大多数用例。可惜只有少数人知道……

答案2

自制是一个软件安装实用程序,在 MacOS 上使用了很长时间,但近年来也扩展到了 Linux。它一直支持将软件安装到公共服务器目录中(需要root权限),或进入用户指定的目录(不需要root权限)。用户指定的目录通常位于用户的主目录下,但并非必须如此。

Homebrew 没有像 MacOS 那样为 Linux 提供那么多软件包,但数量也不少。凭借其软件位置和升级软件包管理的功能,它可能对您有用。

Homebrew 主页是: https://brew.sh/
安装选项描述如下: https://docs.brew.sh/安装
Linux 特定的文档在这里: https://docs.brew.sh/Homebrew-on-Linux

相关内容