首页 文章

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

提问于
浏览
4

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

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

还是有更好的选择吗?

4 回答

  • 0

    是的 . 如果软件包装在repos中 . 并且管理员安装了PackageKit-command-not-found包 .

    见:https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound

  • 2

    可以使用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 :详细 . )

    您需要为已安装的软件包配置环境变量 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"
    

    注意:当您进入服务器时,您将获得一个登录shell . 所以你的 .bashrc 默认不是来源的 . Bash运行您的登录启动文件 . 此文件是列表中的第一个现有文件: .bash_profile.bash_login.profile (请参阅bash documentation about startup files) . 如果由于某些不明原因,您希望在 .bashrc 而不是您的登录启动文件中配置您的环境,则必须从后者获取前者 .


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

  • 0

    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= 查看现有包裹

    • 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):

    portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)
    

    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从来没有这样做,我期待可用性问题 .


    如果您成功安装了任何其他软件包管理器,请发表评论/回答 .

  • 0

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

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

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

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

相关问题