因此,我只有一台机器,上面只安装了 CentOS Minimal,没有其他任何东西。它是完全独立的。这意味着:
- 它永远不能连接到另一台服务器或笔记本电脑
- 我唯一能连接的东西是 USB 磁盘。
我的目标:
- 在其上运行
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 文件。我把该文件夹放在 USB 上,并将其插入我的隔离 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
在我的 Mac 上通过 docker 运行该文件夹,将该文件夹变成存储库(因为我在隔离的机器上没有这个createrepo
,无法在其上安装任何东西)。但它给了我完全相同的错误。
那么我有什么选择呢?在我看来,由于依赖地狱,我必须真正镜像整个 CentOS 存储库。如果我想要 EPEL 的软件包,我也必须镜像那个。仅仅为了在隔离的机器上安装 docker,就需要传输和存储大量 GB 的数据。
对此有什么可行的解决方案吗?
附加问题:如果我在隔离的机器上运行 RHEL 而不是 CentOS 会怎么样?
答案1
最好的办法是在该 USB 磁盘上维护一个更完整的镜像。您可以使用reposync
它将远程存储库镜像到您的存储中。定期运行它以使其保持最新。然后,使用它createrepo
来创建/更新您的存储库元数据。最后,在隔离主机上,为该 USB 磁盘的挂载点配置一个 yum 存储库。
[usb]
name=Airgaps Are Fun
baseurl=file:///mnt/usbdisk
enabled=1
gpgcheck=1
gpgkey=file:///mnt/usbdisk/gpgkey
在分解时,任何其他事情都会成为一场噩梦。
答案2
我认为您可以运行rpm -q -R -p <package.rpm>
(可能有 yum 等效程序)来查看软件包所需的依赖项。您可以将该输出传送到调用以下载这些依赖项。显然,您需要在启用网络的计算机上执行此操作,但您可以将生成的文件移动到断开连接的计算机上并反复安装它们。我想对它们进行排序可能会有问题,但您会拥有所有必需的项目,如果您多次运行安装,最终您将获得所有内容。
您提到了 docker 和 CentOS,因此不确定您是否已经看到过这个问题:在独立的(无互联网) Centos 7 盒子上安装 Docker?