如何使用 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 伺服器上。
這是一個使用“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
是的,那是小版本。您應該已經看到了完整 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/httpd
repo 目錄複製到其他伺服器後,在那裡設置 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
希望沒有失去的依賴項!