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

use*_*840 18 linux centos rpm yum package-managers

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

我尝试从源代码构建,使用cmake,configure,make,make install等,但是,它最终依次拥有如此多的依赖项.

还是有更好的选择吗?

lox*_*axs 17

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

查找包装名称

使用yum search

下载

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

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common
Run Code Online (Sandbox Code Playgroud)

选择前缀位置

它可能是~~/centos~/y。如果您的家庭由于位于网络文件系统上而速度较慢,则可以将其放入/var/tmp/...

mkdir ~/centos
Run Code Online (Sandbox Code Playgroud)

解压缩所有.rpm软件包

将所有.rpm软件包解压缩到您选择的前缀位置。

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
Run Code Online (Sandbox Code Playgroud)
  • rpm2cpio 在stdout上将.rpm文件输出为.cpio存档。
  • cpio 从stdin读取
  • -i 意味着提取(到当前目录)
  • -d 意味着创建丢失的目录

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

配置环境

您将需要配置环境变量PATHLD_LIBRARY_PATH并使已安装的软件包正常工作。这是来自我的相应样本~/.profile

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

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$L:$HOME/centos/usr/lib:$HOME/centos/usr/lib64"
Run Code Online (Sandbox Code Playgroud)

注意:SSH到服务器时,将获得一个登录shell。因此.bashrc,默认情况下您的来源不是。Bash而是运行您的登录启动文件。这个文件在列表中的第一个现有的文件:.bash_profile.bash_login.profile(参见启动文件bash的文档)。如果出于某种晦涩的原因,您想在自己的环境中.bashrc而不是登录或启动文件中配置环境,则必须从后者中获取前者。


现在,如果您想以这种方式安装许多软件包,则可能需要自动化该过程。如果是这样,请查看此存储库

  • 我的系统上有 yum,但没有 yumdownloader。我只在 Redhat 文档中找到了 yum 下载的替代方法:`yum install --downloadonly --downloaddir=./rpm`,但是当我运行它时,它仍然说需要 root 权限。 (6认同)

lox*_*axs 6

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


我已经尝试了很长时间才能使软件包管理器在CentOS上正常工作,但是没有成功。我能做的最好的事情是在另一个具有root访问权限的CentOS上的正确位置上安装一个Gentoo前缀,然后.tar.xz将整个安装过程打包到目标服务器(这是为Gentoo前缀获取适当gcc的唯一方法)。我可以emerge在目标服务器上(构建并安装)软件包,但一直遇到本地和权限问题。


我最近使用conda在用户安装了一些有趣的软件包。这是从命令行安装的方法:

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh
Run Code Online (Sandbox Code Playgroud)

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

还将提示/var/tmp/lo/da/bin您在.bashrc中的PATH中添加例如说,但是,当您SSH进入服务器时,您将获得一个登录shell,因此.bashrc默认情况下不提供您的登录shell 。因此,你需要用你的.bash_profile/ .bash_login/ .profile(见启动文件bash的文件),以增加该行或将您的来源.bashrc

这样,您就可以安装很多软件包,尽管可能不是您想要的所有软件包。在大多数情况下,如果它不在默认频道中,它将在中conda-forge。您可以在以下位置检查现有软件包https://anaconda.org/search?q=

  • 海湾合作委员会 conda install gcc
  • zlib conda install zlib
  • 使 conda install make
  • cmake conda install cmake
  • 吉特 conda install git
  • conda install -c conda-forge fish
  • sh conda install -c ActivisionGameScience zsh
  • 多路复用器 conda install -c conda-forge tmux
    • 这个tmux有一个错误,它使用了ncurse库的名称。您可以通过转到da/lib文件夹并进行符号链接来解决此问题ln -sT libtinfow.so.6.1 libtinfo.so.6

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

Linuxbrew

我以为有了它,安装homebrew(linuxbrew)会很容易,但是它们的源代码很杂乱,并且使用硬编码的绝对路径访问ruby解释器,但失败了,因为它不是最新版本,依此类推,依此类推,我给了起来

尼克斯

Nix仍然要求您使用/ nix文件夹。他们也对其进行了硬编码,并且很难在安装过程中每次下载都正确地对其进行加密(更不用说更新了)。

Gentoo前缀

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

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

PkgSrc

我现在要尝试pkgsrc。-如果在CentOS 6上或如果7.x版本遇到(G)LibC版本问题,请使用(旧)版本的64位EL6.x。-没有运气,pkgsrc硬代码/usr/pkg/sbin/usr/pkg/bin。因此,除非设置了fakechroot环境,否则它不能用作用户。但是我从来没有做过,我期望可用性问题。


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