我有一个 CentOS 6 系统,出于安全原因,它被隔离了。它可能从未连接到互联网,即使它连接了,也已经很长时间没有更新了。
我想将所有 .rpm 软件包放在一个驱动器上,这样就可以离线安装它们而无需查询互联网。但是,我在测试虚拟机上遇到的问题是,yum
即使指定了本地路径,虚拟机仍会一直挂起并尝试从在线存储库进行更新。
另外,有没有办法轻松地抓取包裹并所有依赖项对于该包使用yum-utils
/ yumdownloader
?目前,它仍然缺少一些依赖项(例如,当我拉取 gcc-c++ rpm 时,它会抓取cpp
但gcc
不会拉取cloog-ppl
,mpfr
或ppl
)
我已经尝试过像这样的解决方案,但我不能假设已经存在依赖关系树,或者它yum
是最新的。
在新安装的 docker 镜像中,我第一次尝试运行 yum(禁用互联网)时,得到了
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
答案1
如果你担心已安装版本与最新稳定版本之间的兼容性,你可能需要确定你的 centos 版本/etc/redhat-release
并使用来自http://vault.centos.org/,但请记住它们不包含任何安全更新或错误修复。
要下载软件包 - 使用官方的 redhat 说明:https://access.redhat.com/solutions/10154
yum install yum-plugin-downloadonly
yum install --downloadonly --downloaddir=<directory> <package>
或者
yum install yum-utils
yumdownloader --resolve
您还可以使用以下答案中的技术在要下载 rpm 的虚拟机上复制 yum 历史记录:https://unix.stackexchange.com/a/83115
最简单的方法,并且已经长期有效:
yum-debug-dump => gives file. yum-debug-restore <file-from-debug-dump>
...其工作原理与 get/set 选择 dpkg 命令 AIUI 非常相似。另请注意,如果您正在重播历史记录,则可以使用:
yum history addon-info last saved_tx => gives file yum load-tx <file-from-addon-info>
...而不必自己解析。
编辑:
要从目录安装所有 rpm,cd
请进入该目录并简单地使用,
rpm -ivh *.rpm
如果您想安装它们,或者rpm -Uvh *.rpm
如果某些下载的文件比已经存在的文件更新,并且您可以更新它们。
答案2
编辑:不,没有什么事情是这么容易的。在新的堆栈上仍然出现此错误:
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
如果我让 yum 访问互联网足够长的时间来完成自我配置,则以下操作有效:
首先,我能够通过调用以下代码来下载所有依赖包:
yum install -y --downloadonly --downloaddir=$pkgdir <package>
和
yum reinstall -y --downloadonly --downloaddir=$pkgdir <package>
强制任何已安装的软件包提取其.rpm
依赖项。然后,一旦我获得了软件包的 tarball,我就会将其放在新系统上。
首先,我运行sed -i 's/enabled=1/enabled=0/' '/etc/yum/pluginconf.d/fastestmirror.conf'
禁用 fastmirror 插件。
然后,我可以通过 cd 进入包含软件包的目录来安装我需要的所有软件包,然后小心地调用
yum install --disablerepo=\* packag*
按照依赖项要求的顺序。所以看起来有点像
yum install --disablerepo=\* epel*
yum install --disablerepo=\* ius*
yum install --disablerepo=\* libstd*
yum install --disablerepo=\* mpfr*
yum install --disablerepo=\* cpp*
yum install --disablerepo=\* libgcc*
yum install --disablerepo=\* libgomp*
yum install --disablerepo=\* libg*
yum install --disablerepo=\* ppl*
yum install --disablerepo=\* cloog*
yum install --disablerepo=\* gcc*
yum install --disablerepo=\* atlas*
yum install --disablerepo=\* python*
瞧!我能够在完全隔离的系统上运行 python3.5。