是否可以在Linux中使用RPM或YUM或任何其他软件包管理器(特别是CentOS)来安装已下载的软件包或从repo到没有admin / root访问权限的自定义位置?
我尝试从源代码构建,使用cmake,configure,make,make install等,但是,它最终依次拥有如此多的依赖项。
还是有更好的选择吗?
可以使用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文件输出为stdout上的.cpio存档。cpio
从stdin读取它-i
表示提取(到当前目录)-d
表示创建缺少目录你可以选择使用-v
:verbose
您需要配置环境变量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"
注意:当您进入服务器时,您将获得一个登录shell。所以你的.bashrc
默认不是来源的。 Bash运行您的登录启动文件。此文件是列表中的第一个现有文件:.bash_profile
,.bash_login
和.profile
(请参阅bash documentation about startup files)。如果由于某些不明原因,您希望在.bashrc
而不是登录或启动文件中配置环境,则必须从后者获取前者。
现在,如果您想以这种方式安装许多软件包,您可能希望自动化该过程。如果是这样,看看this repository。
TL; DR使用Miniconda,conda-forge非常棒。
我已经尝试了很长时间让一个包管理器在CentOS上运行良好但没有成功。我能做的最好的事情是在另一个具有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
安装。
您还会被提示添加,例如/var/tmp/lo/da/bin
到您的.bashrc中的PATH,但当您进入服务器时,您会获得一个登录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
这个tmux有一个bug,它使用的是ncurse库的名称。您可以通过转到da/lib
文件夹和符号化ln -sT libtinfow.so.6.1 libtinfo.so.6
来解决它我在conda之后尝试使用的其他包管理器:
我认为,安装自制软件(linuxbrew)很容易,但是它们的来源很麻烦并且使用硬编码的绝对路径到ruby解释器,这会因为它不是最后一个版本而失败,等等等我给了起来。
Nix仍然要求您使用/ nix文件夹。他们也对它进行了硬编码,并且在安装过程中每次下载时都很难正确地进行编码(更不用说更新了)。
我希望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。 - 如果在CentOS 6上使用(较旧的)64位EL 6.x版本,或者遇到与7.x版本相遇的(G)LibC版本问题。 - 没有运气,pkgsrc硬编码/usr/pkg/sbin
和/usr/pkg/bin
。因此它不能用作用户,除非可能设置一个假的机器人环境。但我从来没有这样做,我期待可用性问题。
如果您成功安装了任何其他软件包管理器,请发表评论/回答。
金发姑娘的回答听起来就像你在寻找的那样。
https://unix.stackexchange.com/a/61295
它仍然不是一个漂亮的过程,但似乎比从源代码构建更容易。
否则,您可能希望查看非root包管理器作为yum的替代方法。
是的。如果软件包装在repos中。并且管理员安装了PackageKit-command-not-found包。
见:https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound