是否可以在Linux中使用RPM或YUM或任何其他软件包管理器(特别是CentOS)来安装已下载的软件包或从repo到没有admin / root访问权限的自定义位置?
我尝试从源代码构建,使用cmake,configure,make,make install等,但是,它最终依次拥有如此多的依赖项 .
还是有更好的选择吗?
是的 . 如果软件包装在repos中 . 并且管理员安装了PackageKit-command-not-found包 .
见:https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound
可以使用yum和rpm在分发的存储库中安装任何包 . 这是食谱:
(使用 yum search 查找要安装的软件包的名称)
yum search
使用 yumdownloader (默认情况下可在CentOS上使用)下载软件包及其所有依赖项 . yumdownloader 下载到当前目录,除非您指定 --destdir .
yumdownloader
--destdir
使用 rpm2cpio 将所有.rpm包转换为.cpio存档(默认情况下也可在CentOS上使用) . 语法是 rpm2cpio x.rpm > x.cpio
rpm2cpio
rpm2cpio x.rpm > x.cpio
将所有.cpio存档解压缩到您选择的前缀位置 . (可能是 ~ , ~/centos 或 ~/y . 如果你的家很慢,因为它在网络文件系统上,你可以使用 /var/tmp/y . )语法: cpio -id < x.cpio ( -i 表示解压缩. -d 表示创建缺少的目录 . 你可以选择使用 -v :详细 . )
~
~/centos
~/y
/var/tmp/y
cpio -id < x.cpio
-i
-d
-v
您需要为已安装的软件包配置环境变量 PATH 和 LD_LIBRARY_PATH 才能正常工作 . 以下是我 ~/.profile 的相应示例:
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 而不是您的登录启动文件中配置您的环境,则必须从后者获取前者 .
.bashrc
.bash_profile
.bash_login
.profile
现在,如果您想以这种方式安装许多软件包,您可能希望自动化该过程 . 如果是这样,请看this repository .
TL; DR使用Miniconda,conda-forge非常棒 .
我已经尝试了很长时间让一个包管理器在CentOS上运行良好但没有成功 . 我能做的最好的事情是在具有root访问权限的另一个CentOS上的正确位置安装Gentoo前缀,然后将整个安装的 .tar.xz scp到目标服务器(只有这样才能获得Gentoo前缀的正确gcc) . 我可以在目标服务器上使用 emerge (构建和安装)软件包,但仍然遇到本地和权限问题 .
.tar.xz
emerge
我最近使用conda实现了一些有趣的软件包的用户安装 . 以下是如何从命令行安装它:
curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh
如果像我一样,您的主文件夹托管在远程驱动器(网络文件系统)上,您可能不希望将其安装在您的主文件夹中,因此您可能希望使用类似 mkdir /var/tmp/lo 的内容,然后在 /var/tmp/lo/da 期间指定安装文件夹 . 安装 .
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 .
/var/tmp/lo/da/bin
然后你可以安装相当多的软件包,但可能不是你想要的所有软件包 . 大多数情况下,如果它不在默认通道中,它将在 conda-forge 中 . 您可以在 https://anaconda.org/search?q= 查看现有包裹
conda-forge
https://anaconda.org/search?q=
gcc conda install gcc
conda install gcc
zlib conda install zlib
conda install zlib
make conda install make
conda install make
cmake conda install cmake
conda install cmake
git conda install git
conda install git
fish conda install -c conda-forge fish
conda install -c conda-forge fish
zsh conda install -c ActivisionGameScience zsh
conda install -c ActivisionGameScience zsh
tmux conda install -c conda-forge tmux
conda install -c conda-forge tmux
这个tmux有一个它使用的ncurse库名称的错误 . 您可以通过转到 da/lib 文件夹和符号链接 ln -sT libtinfow.so.6.1 libtinfo.so.6 来解决它
da/lib
ln -sT libtinfow.so.6.1 libtinfo.so.6
我在conda之后尝试使用的其他包管理器:
我认为,安装homebrew(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 . 所以它可以't be used as user, unless maybe setting up a fakechroot environment. But I' ve从来没有这样做,我期待可用性问题 .
/usr/pkg/sbin
/usr/pkg/bin
如果您成功安装了任何其他软件包管理器,请发表评论/回答 .
这个由金发女郎发出的答案听起来就像你在寻找的那样 .
https://unix.stackexchange.com/a/61295
它仍然不是一个漂亮的过程,但似乎比从源代码构建更容易 .
否则,您可能希望查看非root包管理器作为yum的替代方法 .
4 回答
是的 . 如果软件包装在repos中 . 并且管理员安装了PackageKit-command-not-found包 .
见:https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound
可以使用yum和rpm在分发的存储库中安装任何包 . 这是食谱:
(使用
yum search
查找要安装的软件包的名称)使用
yumdownloader
(默认情况下可在CentOS上使用)下载软件包及其所有依赖项 .yumdownloader
下载到当前目录,除非您指定--destdir
.使用
rpm2cpio
将所有.rpm包转换为.cpio存档(默认情况下也可在CentOS上使用) . 语法是rpm2cpio x.rpm > x.cpio
将所有.cpio存档解压缩到您选择的前缀位置 . (可能是
~
,~/centos
或~/y
. 如果你的家很慢,因为它在网络文件系统上,你可以使用/var/tmp/y
. )语法:cpio -id < x.cpio
(-i
表示解压缩.-d
表示创建缺少的目录 . 你可以选择使用-v
:详细 . )您需要为已安装的软件包配置环境变量
PATH
和LD_LIBRARY_PATH
才能正常工作 . 以下是我~/.profile
的相应示例:注意:当您进入服务器时,您将获得一个登录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实现了一些有趣的软件包的用户安装 . 以下是如何从命令行安装它:
如果像我一样,您的主文件夹托管在远程驱动器(网络文件系统)上,您可能不希望将其安装在您的主文件夹中,因此您可能希望使用类似
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=
查看现有包裹gcc
conda install gcc
zlib
conda install zlib
make
conda install make
cmake
conda install cmake
git
conda install git
fish
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文件夹 . 他们也对它进行了硬编码,并且在安装过程中每次下载时都很难正确地进行编码(更不用说更新了) .
Gentoo前缀
我希望Gentoo Prefix更容易直接安装,因为我们可以在目标服务器上使用gcc . - 好的,我尝试过但在安装过程中遇到了权限错误(2018-09-28):
PkgSrc
我现在要试试pkgsrc . - 如果在CentOS 6上使用(较旧的)版本64位EL 6.x,或者遇到与7.x版本一起遇到(G)LibC版本问题 . - 没有运气,pkgsrc硬代码
/usr/pkg/sbin
和/usr/pkg/bin
. 所以它可以't be used as user, unless maybe setting up a fakechroot environment. But I' ve从来没有这样做,我期待可用性问题 .如果您成功安装了任何其他软件包管理器,请发表评论/回答 .
这个由金发女郎发出的答案听起来就像你在寻找的那样 .
https://unix.stackexchange.com/a/61295
它仍然不是一个漂亮的过程,但似乎比从源代码构建更容易 .
否则,您可能希望查看非root包管理器作为yum的替代方法 .