如何使用 yum 获取离线使用所需的所有 RPM?

如何使用 yum 获取离线使用所需的所有 RPM?

我有一台具有网络连接的服务器,我可以在其中使用“yum install $PACKAGE”。
我想要一些 yum 命令,这样yum cache-rpms $PACKAGE $DIRECTORY所有必需的 RPM 文件都将下载到 $DIRECTORY,其中还将有一个文件 ( Install.sh) 说明在许多其他没有网络连接的服务器上安装这些 RPM 的顺序。
Install.sh甚至可能是一个 shell 脚本,它与 具有相同的行为yum install $PACKAGE,只不过它不会使用网络,而只会使用$DIRECTORY.

可能的?

我正在寻找一个通用的解决方案,其中 yum 和 RPM 可用,但具体而言:它位于一组 CENTOS 6.7 服务器上。

答案1

下面是一个使用“httpd”作为下载和安装包的具体示例。此过程在 CentOS6 和 CentOS7 上进行了测试。

安装您需要的东西并腾出一个地方来放置下载的 RPM:

# yum install yum-plugin-downloadonly yum-utils createrepo
# mkdir /var/tmp/httpd
# mkdir /var/tmp/httpd-installroot

下载 RPM。这使用了这里建议安装root技巧强制完全下载所有依赖项,因为该空根目录中未安装任何内容。 Yum 将在其中创建一些元数据,但我们将把它们全部扔掉。请注意,对于 CentOS7,releasever该值为“7”。

# yum install --downloadonly --installroot=/var/tmp/httpd-installroot --releasever=6 --downloaddir=/var/tmp/httpd httpd

对,就那个曾是小版本。您应该已经看到完整存储库下载的大小!

生成将新的 RPM 堆转换为 YUM 存储库所需的元数据,并清理我们不再需要的内容:

# createrepo --database /var/tmp/httpd
# rm -rf /var/tmp/httpd-installroot

将下载目录配置为存储库。请注意,对于 CentOS7,gpgkey 将被命名为“7”而不是“6”:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

要检查缺少的依赖项:

# repoclosure --repoid=offline-httpd

我还没有弄清楚为什么在 CentOS7 上这个报告会libssl.so.10(libssl.so.10)(64bit)丢失(该库的提供者)明确存在于目录中的信息httpd-toolsopenssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm不过,如果您发现明显缺少某些内容,这可能是返回并使用上述相同yum install --downloadonly方法添加它的好机会。

离线时或将/var/tmp/httpd存储库目录复制到其他服务器后,在那里设置存储库:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum --disablerepo=\* --enablerepo=offline-httpd install httpd

希望没有丢失依赖项!

答案2

我多次需要它,所以我自动回答了@Steve Bonds。请务必将其定义PKG为要在两台计算机上安装的软件包(免责声明:对于 CentOS 7。对于 CentOS 6,请更改--releaseverCentOS-7位置。

在线机

PKG=... # NAME OF THE PACKAGE TO INSTALL ON OFFLINE MACHINE
yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG
createrepo --database /tmp/$PKG
rm -rf /tmp/$PKG-installroot
rsync -arv /tmp/$PKG/ [IP of the machine]:/tmp/$PKG

在离线机器上:

PKG=... # NAME OF THE PACKAGE
echo "[offline-$PKG]
name=CentOS-\$releasever - $PKG
baseurl=file:///tmp/$PKG/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" >  /etc/yum.repos.d/offline-$PKG.repo

# install package offline:
yum --disablerepo=\* --enablerepo=offline-$PKG install --nogpgcheck $PKG

答案3

看来您是在询问yumdownloader包裹中包含哪些内容yum-utils。已经有一些关于此的问题和答案,请参见例如即使已经安装,也要使用 yumdownloader 下载所有依赖项吗?或者如何使用 Yum 查找软件包 URL?

yumdownloader将下载软件包,尽管它不会生成文件,Install.sh因为顺序可以由 yum 本身确定,因此您可以通过
yum install ./*rpm包含下载的软件包的文件夹将软件包安装到目标机器上(与基础安装 - 请参阅上面的第一个链接repotrack

相关内容