如何在Linux(CentOS)中安装软件包,而无需root用户自动处理依赖关系?

d4so4syb  于 2022-11-08  发布在  Linux
关注(0)|答案(5)|浏览(360)

是否可以使用RPM或YUM或Linux中的任何其他软件包管理器(特别是CentOS)将已下载的软件包或从repo安装到自定义位置,而无需管理员/root访问权限?
我试着从源代码构建,使用cmake,configure,make,make install等,但是,它最终有这么多的依赖项一个接一个。
或者有没有更好的选择?

67up9zun

67up9zun1#

可以使用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归档文件输出到stdout。
  • cpio从标准输入读取
  • -i表示提取(到当前目录)
  • -d表示创建缺少的目录

您可以选择使用-v:冗长的

配置环境

您需要配置环境变量PATHLD_LIBRARY_PATH,以便安装的软件包能够正常工作。

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中的命令,如果该文件存在并且可读的话。
如果你想用这种方式安装很多软件包,你可能想自动化这个过程,如果是这样的话,看看this repository
额外注意:如果你试图安装任何gcc, zlib, make, cmake, git, fish, zsh or tmux,你真的应该考虑使用conda,请参阅my other answer

0h4hbjxa

0h4hbjxa2#

使用Miniconda,康达锻造是惊人的。

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 make
  • 可创建conda install cmake
  • git指令conda install git
  • conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • 多路复用器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上工作得很好,但是没有成功。我能做的最好的事情是在另一个具有根访问权限的CentOS上的正确位置安装一个Gentoo前缀,然后scp整个安装的.tar.xz到目标服务器(获得Gentoo前缀的正确GCC的唯一方法)。我可以在目标服务器上安装X1 M12 N1 X(构建和安装)包,但不断遇到本地和权限问题。
我最近用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之后我尝试过的其他软件包管理器:
Linux版本
我以为安装homebrew(linuxbrew)会很容易,但是他们的源代码很混乱,使用硬编码的ruby解释器的绝对路径,这失败了,因为它不是最后一个版本,等等,我放弃了。

否定

Nix仍然要求你使用/nix文件夹。他们也是硬编码的,在安装过程中很难从每次下载中正确地使用它(更不用说更新了)。

中文字首

我希望Gentoo前缀更容易直接安装,因为我们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。--如果在CentOS 6上或者遇到(G)LibC版本问题,请使用(旧的)64位EL 6.x版本。--运气不好,pkgsrc硬编码/usr/pkg/sbin/usr/pkg/bin。所以它不能作为用户使用,除非可能设置一个fakechroot环境。但我从来没有这样做过,我预计会出现可用性问题。
如果您成功安装了任何其他软件包管理器,请给出注解/回答。

xzlaal3s

xzlaal3s3#

下载软件包,并使用--resolve标志指明要包括依赖项。
yumdownloader --resolve openslide-tools
迭代所有下载的rpm文件。
for i in *.rpm; do rpm2cpio $i | cpio -idv; done
输出将存储在当前工作目录$PWD/usr/*

zf2sa74q

zf2sa74q4#

goldilocks的这个答案听起来就像你正在寻找的。
https://unix.stackexchange.com/a/61295
这仍然不是一个漂亮的过程,但似乎比从源代码构建更容易。
否则,您可能希望将非根包管理器作为yum的替代方案。

z9ju0rcb

z9ju0rcb5#

是的。如果软件是打包在repos。和管理员安装PackageKit命令-未找到包。
请参阅:https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound

相关问题