如何使用yum获取脱机使用所需的所有RPM?


30

我有一台具有网络连接的服务器,可以在其中使用“ 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)单包方法。这样下载较少,但是需要更多的手动工作。或者...(2)整个回购方法。这下载很多,但可以实现更高的自动化程度。
史蒂夫·邦兹

@SteveBonds,我想要(1)“单个软件包”,因为(2)“整个仓库”将花费一些时间来下载并占用太多空间。
2016年

你看过太空漫步吗?
fpmurphy '16

Answers:


40

这是一个使用“ httpd”作为软件包进行下载和安装的特定示例。此过程已在CentOS6和CentOS7上进行了测试。

安装所需的东西,并放置放置已下载的RPM的位置:

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

下载RPM。这将使用此处建议installroot技巧来强制完全下载所有依赖项,因为在该空根目录中未安装任何内容。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-tools何时openssl-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

希望不会丢失任何依赖!


3
我尝试按照您的指南在CentOS 7上构建该文件夹并将其安装在Red Hat 7上,所有这些都没有错误
-Piyin

1
虽然两个操作系统之间的兼容性足够好,以至于可以正常工作,但是为了确保对RedHat的支持,您应该使用类似的过程从RedHat的服务器下载RedHat软件。
史蒂夫·邦兹

1
你是对的。但是在这种情况下,这是一个封闭的环境,我无法更改网络规则。就像有人说的那样:“客户永远是对的”
Piyin

1
在Centos 7中工作得很好,谢谢!
卡洛斯·维加

4

似乎您要询问yumdownloader包装中包含的内容yum-utils。对此已经存在一些问题和答案,请参见例如,即使已经安装了yumdownloader下载所有依赖项?如何找到Yum的软件包URL?

yumdownloader将下载软件包,尽管它不会生成文件,Install.sh因为顺序可以由yum自己确定,因此您可以将软件包安装在目标框中,方法
yum install ./*rpm是将文件夹与下载的软件包一起放在文件夹中(与安装基-见上面关于第一连杆repotrack


+1,听起来像我想要的!如果符合我的要求,我将进行试验和更新!
2016年

4

我需要几次,所以我使@Steve Bonds自动化。只需确定将其定义PKG为要在两台机器上都安装的软件包(免责声明:对于CentOS7。对于CentOS 6,请更改--releaseverand CentOS-7spot。

在线机器

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

1
您可能希望添加-y到最后一个命令,以在后台运行时确认软件包的安装。
ToniTornado

您将其从描述转换为自动化过程真是太好了。干得好!
史蒂夫·邦兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.