web-dev-qa-db-ja.com

yumを使用して、オフラインで使用するために必要なすべてのRPMを取得する方法

「yum install $ PACKAGE」を使用できるネット接続のサーバーが1台あります。
必要なすべてのRPMファイルが$ DIRECTORYにダウンロードされるように、yum cache-rpms $PACKAGE $DIRECTORYなどのいくつかのyumコマンドが必要です。これには、インストールする順序を示すファイル(Install.sh)も含まれます。これらのRPMは、ネット接続のない他の多くのサーバー上にあります。
Install.shは、ネットワークを使用せず、yum install $PACKAGEのみを使用することを除いて、$DIRECTORYと同じ動作をするシェルスクリプトである場合もあります。

可能?

YumとRPMが利用できる一般的なソリューションを探していますが、具体性のために、それはCENTOS 6.7サーバーのセット上にあります。

32
Prem

ダウンロードしてインストールするパッケージとして「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の名前は「6」ではなく「7」になります。

_# 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で_httpd-tools_(そのライブラリのプロバイダー)がディレクトリに明確に存在する場合に、libssl.so.10(libssl.so.10)(64bit)のようなものが_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
_

うまくいけば依存関係が欠けていません!

41
Steve Bonds

何度か必要だったので、@ Steve Bondsの回答を自動化しました。両方のマシンにインストールするパッケージとしてPKGを必ず定義してください(免責事項:CentOS 7の場合)。CentOS6の場合は--releaseverおよびCentOS-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
5
shosaco

yum-utilsパッケージに含まれているyumdownloaderを要求しているようです。これについてはすでにいくつかの質問と回答があります。 すでにインストールされている場合でも、yumdownloaderを使用してすべての依存関係をダウンロードしますか? または Yumを使用してパッケージURLを見つけるにはどうすればよいですか?

yumdownloaderはパッケージをダウンロードしますが、ファイルは生成されませんInstall.shは、yum自体で順序を決定できるため、次のようにしてターゲットボックスにパッケージをインストールできます。
yum install ./*rpmは、ダウンロードしたパッケージのフォルダーにあります(基本インストールと比較してすべての依存関係を含める必要があります-repotrackに関する上記の最初のリンクを参照してください)

4
doktor5000