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

我试着从源代码构建,使用cmake、configure、make、make-install等,但是,它最终一个接一个地具有如此多的依赖性.

还是有更好的 Select ?

推荐答案

可以使用yum和rpm在发行版的存储库中安装任何软件包.以下是菜谱:

查找包名

使用yum search.

下载

使用yumdownloader下载软件包及其所有依赖项(默认情况下CentOS上提供).您需要通过--resolve才能获得依赖项解析.yumdownloader下载到当前目录,除非指定--destdir.

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

Select 一个前缀位置

可能是~~/centos~/y.如果你的家是慢的,因为它是在一个网络文件系统,你可以把它放在/var/tmp/....

mkdir ~/centos

全部提取.rpm软件包

全部提取.rpm软件包到您 Select 的前缀位置.

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpio个输出.rpm文件作为一个文件.标准数据上的cpio档案.
  • cpio从stdin读取
  • -i表示提取(到当前目录)
  • -d表示创建丢失的目录

您可以 Select 使用-v:verbose

配置环境

您需要配置环境变量PATHLD_LIBRARY_PATH,以使安装的软件包正常工作.以下是~/.bashrc年款的相应示例:

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 documentation about startup files,当通过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.

Linux相关问答推荐

OpenCV编译错误&未定义的引用&Quot;

在Groff mm中定义页眉不会更改第一页中的页眉

pci_user_write_config_word在哪里实现?

AWK 命令根据另一列中相同的值获取列中的不同值

如何使用 ftrace 过滤查看函数上方的调用堆栈?

如何在bash中用另一个整数变量增加一个整数变量?

如何使用正则表达式在 LINux 中查找具有不同结尾的多个文件?

bind(): "无法分配请求的地址"

Azure Nvidia 中的 apt-update 给出公钥错误

使用 awk 从文件中检索一组特定的字符串

PHP factor 30 从 Linux 到 Windows 的性能差异

从 shell 将多个 .sql 转储文件导入 mysql 数据库

如何在 Linux 中命名线程?

Linux下的签名可执行文件

如何在 Linux 中查看日志(log)文件并在查看时应用自定义过滤器?

如何自动化 HTML 到 PDF 的转换?

如何使用 Linux 命令找到我的 shell 版本?

使用 Bash 查找和复制文件

如何在 UNIX 中将字符串转换为整数

在linux中根据内容拆分文件