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

时间:2016-04-15 15:23:27

标签: linux centos rpm yum package-managers

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

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

还是有更好的选择吗?

5 个答案:

答案 0 :(得分:8)

可以使用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从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"

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


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

答案 1 :(得分:3)

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

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

系统还会提示您将/var/tmp/lo/da/bin添加到.bashrc中的PATH中,但是当您SSH到服务器中时,会得到一个登录shell,因此.bashrc不是默认来源。因此,您需要使用.bash_profile / .bash_login / .profile(请参阅bash documentation about startup files)来添加该行或获取您的.bashrc

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

中检查现有的软件包
  • gcc conda install gcc
  • zlib conda install zlib
  • 制作conda install make
  • cmake conda install cmake
  • git 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

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

Linuxbrew

我认为,这样做很容易安装homebrew(linuxbrew),但是它们的来源很混乱,并且使用了硬编码的ruby解释器绝对路径,但失败了,因为它不是最新版本,依此类推等等。我放弃了。

Nix

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

Gentoo前缀

由于我们可以在目标服务器上使用gcc,因此我希望Gentoo前缀可以更容易直接安装。 -好的,我尝试安装但遇到权限错误(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位EL6.x。 -运气不好,pkgsrc硬代码为/usr/pkg/sbin/usr/pkg/bin。因此,除非设置了fakechroot环境,否则它不能用作用户。但是我从来没有做过,我期望可用性问题。


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

答案 2 :(得分:1)

下载软件包,并使用 --resolve 标志指示包含依赖项。

yumdownloader --resolve openslide-tools

遍历所有下载的 rpm 文件。

for i in *.rpm; do rpm2cpio $i | cpio -idv; done

输出将存储在您当前的工作目录 $PWD/usr/*

答案 3 :(得分:0)

这个由金发女郎发出的答案听起来就像你在寻找的那样。

https://unix.stackexchange.com/a/61295

它仍然不是一个漂亮的过程,但似乎比从源代码构建更容易。

否则,您可能希望查看非root包管理器作为yum的替代方法。

答案 4 :(得分:0)

是的。如果软件包装在repos中。和管理员安装 PackageKit-command-not-found包。

请参阅: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound