所以我有一台机器上安装了 CentOS Minimal,仅此而已。它是完全隔离的。这意味着以下内容:
- 它永远无法连接到另一台服务器或笔记本电脑
- 我唯一能连接到它的是一个 U 盘。
我的目标:
- 在其上运行
yum install docker
,以便它可以运行容器。
所以我在谷歌上搜索了如何下载一批 RPM 及其依赖项,然后将它们安装在离线系统上。
所以我在我的 macOS 笔记本电脑上做了这个:
$ docker run -v $PWD/pkg:/pkg centos:7
# mkdir /tmp/empty
# yum install -y \
--installroot /tmp/empty \
--releasever 7 \
--downloadonly \
--downloaddir /pkg \
docker
现在我在一个文件夹中有很多 RPM 文件。我把那个文件夹放在 U 盘上,然后把它粘到我隔离的 CentOS 机器上。然后我运行:
$ yum install /tmp/pkg/*
...
Error: Package: rpm-python-4.11.3-32.el7.x86_64 (installed)
Requires: rpm = 4.11.3-32.el7
Removing: rpm-4.11.3-32.el7.x86_64 (installed)
rpm = 4.11.3-32.el7
Updated By: rpm-4.11.3-35.el7.x86_64 (/rpm-4.11.3-35.el7.x86_64)
rpm = 4.11.3-35.el7
我还尝试createrepo
通过 docker 在我的 Mac 上运行该文件夹,将其放入存储库中(因为我createrepo
在隔离的机器上没有,也无法在其上安装任何东西)。但它给了我完全相同的错误。
那么我在这里有什么选择呢?在我看来,由于依赖地狱,我实际上必须镜像整个 CentOS 存储库。如果我想要一个来自 EPEL 的包裹,我也必须镜像那个。仅仅为了在隔离的机器上安装 docker 就需要传输和存储大量 GB。
有什么可行的解决方案吗?
额外问题:如果我在隔离的机器上运行 RHEL 而不是 CentOS 会怎样?
您最好的选择是在该 USB 磁盘上维护一个更完整的镜像。您可以使用
reposync
将远程存储库镜像到您的存储。定期运行它以使其保持最新。然后,用于createrepo
创建/更新您的存储库元数据。最后,在隔离主机上,为该 USB 磁盘的挂载点配置一个 yum 存储库。分解时,其他任何事情都将是一场噩梦。
我认为您可以运行
rpm -q -R -p <package.rpm>
(可能有 yum 等效项)来查看包所需的依赖项。您可以将该输出通过管道传递给下载这些依赖项的调用。显然,您需要在启用网络的机器上执行此操作,但您可以将生成的文件移动到断开连接的机器并迭代安装它们。我想订购它们可能是个问题,但你会拥有所有必需的物品,如果你只是多次运行安装,你最终会得到一切。您提到了 docker 和 CentOS,所以不确定您是否已经看过这个问题:Installing Docker on an isolated (no internet) Centos 7 box?