如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?

新手上路,请多包涵

是否可以在 Linux(特别是 CentOS)中使用 RPM 或 YUM 或任何其他包管理器来安装已下载的包或从 repo 安装到自定义位置而无需管理员/root 访问权限?

我尝试从源代码构建,使用 cmake、configure、make、make install 等,但是,它最终一个接一个地拥有如此多的依赖项。

或者有没有更好的选择?

原文由 user3330840 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

可以使用 yum 和 rpm 在发行版的存储库中安装任何软件包。这是食谱:

查找包名

使用 yum search

下载

使用 yumdownloader 下载软件包及其所有依赖项(默认情况下在 CentOS 上可用)。您需要传递它 --resolve 以获得依赖关系解析。 yumdownloader 下载到当前目录,除非您指定 --destdir

 mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

选择前缀位置

它可能是 ~~/centos~/y 。如果你家因为在网络文件系统上而速度慢,你可以把它放在 /var/tmp/... 中。

 mkdir ~/centos

提取所有 .rpm 包

将所有 .rpm 包提取到您选择的前缀位置。

 cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id

  • rpm2cpio 将 .rpm 文件作为 .cpio 存档输出到标准输出。
  • cpio 从标准输入读取
  • -i 表示解压(到当前目录)
  • -d 表示创建缺失目录

您可以选择使用 -v :详细

配置环境

您需要配置环境变量 PATHLD_LIBRARY_PATH 以使安装的软件包正常工作。这是我的 ~/.bashrc 中的相应示例:

 export PATH="$HOME/centos/usr/sbin:$HOME/centos/usr/bin:$HOME/centos/bin:$PATH"

export MANPATH="$HOME/centos/usr/share/man:$MANPATH"

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$HOME/centos/usr/lib:$HOME/centos/usr/lib64:$L"


编辑注释(感谢@AmitNaidu 指出我的错误):

根据 关于启动文件的 bash 文档,当通过 ssh 连接到服务器时,只有 .bashrc 来源:

由远程 shell 守护进程调用

Bash 尝试确定它何时在其标准输入连接到网络连接的情况下运行,就像由远程 shell 守护程序(通常是 rshd)或安全 shell 守护程序 sshd 执行时一样。如果 Bash 确定它正在以这种方式运行,它会从 ~/.bashrc 读取并执行命令,前提是该文件存在并且可读。


现在,如果您想以这种方式安装大量软件包,您可能希望自动化该过程。如果是这样,请查看 此存储库


额外说明:如果您尝试安装任何 gcc, zlib, make, cmake, git, fish, zsh or tmux ,您应该真正考虑使用 conda,请参阅 我的其他答案

原文由 loxaxs 发布,翻译遵循 CC BY-SA 4.0 许可协议

TL;DR 使用 Miniconda,conda-forge 很棒。

 curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

或者,或者:

 curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh > Miniconda.sh
bash Miniconda.sh -b -p ~/conda
# -b is used to specify that this is done "in batch", so skip the EULA prompt
# -p lets you specify where you want conda installed

常用包:

  • gcc conda install gcc
  • zlib conda install zlib
  • 使 conda install make
  • cmake conda install cmake
  • 混帐 conda install git
  • conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • 这个 tmux 有一个错误,它使用的 ncurse 库的名称。您可以通过转到您的 da/lib 文件夹和符号链接 ln -sT libtinfow.so.6.1 libtinfo.so.6 来解决它

其余的,您可以尝试 https://anaconda.org/search?q=


我已经尝试了很长时间让包管理器在 CentOS/RedHat 上运行良好,但没有成功。我能做的最好的事情是在另一个具有 root 访问权限的 CentOS 上的正确位置安装一个 Gentoo 前缀,然后将整个安装的 .tar.xz scp 到目标服务器(这是为 Gentoo 获得正确 gcc 的唯一方法字首)。我可以在目标服务器上 emerge (构建和安装)软件包,但一直遇到本地人和权限问题。


我最近使用 conda 实现了一些有趣的软件包的用户安装。以下是如何从命令行安装它:

 curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

如果像我一样,您的主文件夹托管在远程驱动器(网络文件系统)上,您可能不想将其安装在主文件夹中,因此您可能想使用类似 mkdir /var/tmp/lo 然后指定在安装过程中安装文件夹,如 /var/tmp/lo/da

然后,您将能够安装相当多的软件包,尽管可能不是所有您想要的。大多数时候,如果它不在默认频道中,它将在 conda-forge 中。您可以在 https://anaconda.org/search?q= 检查现有包


我在 conda 之后尝试使用的其他包管理器:

Linuxbrew

我认为这样安装自制软件(linuxbrew)会很容易,但是它们的源代码很乱,并且使用硬编码的绝对路径到 ruby 解释器,它失败了,因为它不是最后一个版本等等等等,我给了向上。

尼克斯

Nix 仍然要求您使用 /nix 文件夹。他们也对其进行了硬编码,并且很难从安装期间必须执行的每次下载中正确地对其进行 sed(更不用说更新了)。

Gentoo 前缀

我希望 Gentoo Prefix 更容易直接安装,因为我们可以在目标服务器上使用 gcc。 – 好的,我试过了,但在安装过程中遇到了权限错误(2018-09-28):

 portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)

PkgSrc

我现在要试试 pkgsrc 。 -- 如果在 CentOS 6 上或在 7.x 版本中遇到 (G)LibC 版本问题,请使用(较旧的)版本 64 位 EL 6.x。 – 不走运,pkgsrc 硬编码 /usr/pkg/sbin/usr/pkg/bin 。所以它不能作为用户使用,除非可能设置一个 fakechroot 环境。但我从来没有这样做过,我预计会出现可用性问题。


如果您成功安装任何其他包管理器,请发表评论/回答。

原文由 loxaxs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏