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


30

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

可能?

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


私はいくつかの解決策を考えることができます-あなたのためにうまくいくのですか?(1)単一パッケージのアプローチ。ダウンロードは少なくなりますが、より多くの手作業が必要です。または...(2)リポジトリ全体のアプローチ。これはたくさんダウンロードしますが、より自動化して行うことができます。
スティーブボンド

@SteveBonds、(1)「単一パッケージ」が欲しいのは、(2)「全体のレポ」がダウンロードに時間がかかり、スペースを消費しすぎるためです。
Prem

スペースウォークを見ましたか?
fpmurphy

回答:


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の名前は「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で、(ライブラリのプロバイダー)がディレクトリに明確に存在するときlibssl.so.10(libssl.so.10)(64bit)から欠落しているようなものを報告する理由を理解していません。それでも、明らかに欠落しているものがあれば、これは上記と同じ方法を使用して戻って追加する良い機会です。httpd-toolsopenssl-libs-1.0.1e-51.el7_2.2.x86_64.rpmyum 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
2つのOS間の互換性は十分に良好ですが、RedHatをサポートするには、同様のプロセスを使用してRedHatのサーバーからRedHatソフトウェアをダウンロードする必要があります。
スティーブボンド

1
はい、あなたが正しい。しかし、この場合は、変更できないネットワークルールがある緊密な環境でした。一部の人が言うように:「顧客は常に正しい」
-Piyin

1
Centos 7で非常にうまく機能します、ありがとう!
カルロスベガ

4

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

yumdownloaderパッケージはダウンロードされますが、Install.shyum自体で順序を決定できるため、ファイルは生成されません。したがって
yum install ./*rpm、ダウンロードしたパッケージのフォルダー内のターゲットボックスにパッケージをインストールできます(基本インストール-上の最初のリンクを参照repotrack


+1、私が欲しいもののように聞こえます!それが私が望むものと一致する場合、私は実験して更新します!
Prem

4

何回か必要だったので、@ Steve Bondsの回答を自動化しました。念の定義でくださいするPKG両方のマシンにインストールするパッケージとして(免責事項:CentOSの6のためにCentOSの7のため、変更--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

1
-y最後のコマンドに追加して、バックグラウンドで実行するときにパッケージのインストールを確認することができます。
トニトルネード

説明から自動化されたプロセスに移行できたことは素晴らしいことです。よくやった!
スティーブボンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.