如何在完全隔离的机器上安装 RPM?

如何在完全隔离的机器上安装 RPM?

因此,我只有一台机器,上面只安装了 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?

相关内容