是否可以在Linux中使用RPM或YUM或任何其他软件包管理器(特别是CentOS)来安装已下载的软件包或从repo安装到没有admin / root访问权限的自定义位置?
我尝试使用cmake,configure,make,make install等从源代码构建,但是,它最终依次拥有如此多的依赖项。
还是有更好的选择吗?
答案 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软件包提取到您选择的前缀位置。
cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
rpm2cpio
将.rpm文件输出为标准输出上的.cpio存档。cpio
从stdin读取-i
表示提取(到当前目录)-d
表示创建丢失的目录您可以选择使用-v
:冗长
您将需要配置环境变量PATH
和LD_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=
conda install gcc
conda install zlib
conda install make
conda install cmake
conda install git
conda install -c conda-forge fish
conda install -c ActivisionGameScience zsh
conda install -c conda-forge tmux
da/lib
文件夹并符号链接ln -sT libtinfow.so.6.1 libtinfo.so.6
在conda之后我尝试使用的其他软件包管理器:
我认为,这样做很容易安装homebrew(linuxbrew),但是它们的来源很混乱,并且使用了硬编码的ruby解释器绝对路径,但失败了,因为它不是最新版本,依此类推等等。我放弃了。
Nix仍然要求您使用/ nix文件夹。他们也对其进行了硬编码,并且很难在安装过程中每次下载都正确地对其进行加密(更不用说更新了)。
由于我们可以在目标服务器上使用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。 -如果在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