Yum

如何使用 yum 獲取所需的所有 RPM,以供離線使用?

  • December 17, 2018

我有一台具有網路連接的伺服器,我可以在其中使用“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 伺服器上。

這是一個使用“httpd”作為包下載和安裝的具體範例。這個過程在 CentOS6 和 CentOS7 上都進行了測試。

安裝你需要的東西並放置一個地方來放置下載的 RPM:

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

下載 RPM。這使用此處建議的 installroot 技巧來強製完全下載所有依賴項,因為該空根目錄中沒有安裝任何內容。Yum 將在那裡創建一些元數據,但我們將把它全部扔掉。請注意,對於 CentOS7releasever將是“7”。

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

是的,那小版本。您應該已經看到了完整 repo 下載的大小!

生成將我們的新 RPM 堆轉換為 YUM 儲存庫所需的元數據並清理我們不再需要的東西:

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

將下載目錄配置為 repo。請注意,對於 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/httpdrepo 目錄複製到其他伺服器後,在那裡設置 repo:

# 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

希望沒有失去的依賴項!

引用自:https://unix.stackexchange.com/questions/259640