業務都合などで、インターネットにつながらないマシンにソフトウェアを導入したい場合。
特にLinuxであれば、yumやaptコマンドで入れればよいですが、なかなかできない場合もあります。
そのような場合にrpmをどのようにインストールするかをご紹介します。
方法は3種類
具体的には以下のような方法があります。
・rpmコマンドで依存関係を解決しながらインストール
・インターネットにつながるマシンからdownloadonlyでrpmをまるっとダウンロード
・インストールメディアをレポジトリにしてyumでインストール
インターネットにつながるマシンが別で用意できる場合はそこからdownloadonlyでダウンロードしてしまい、それを目的のマシンに持っていく方法が一番楽です。
しかし、そのような環境も用意できない場合、インターネット上でrpmを手動でダウンロードし、自分で依存関係を解決してインストールしていく方法をとります。
またはそのマシンにメディアをマウント可能であり、目的のソフトウェアがOSのインストーラーの中に含まれていれば、メディアをyumリポジトリに指定し、インストールしてしまう方法があります。
それぞれ解説していきます。今回は例としてbindをインストールします。
バージョンはbind-9.11.4-9.P2.el7.x86_64
です。
rpmコマンドで依存関係を解決しながらインストール
rpmコマンドで、まずこのrpmをインストールしてみます。
オプションとして-iがインストール、-vが処理中のパッケージを表示するオプション、-hは進捗状況を表示するオプションです。
また実際にインストールする前に--test
とオプションを指定すると、実際にはインストールやアップデートを行わず、コマンドのテストを行います。
実際bindだけrpmコマンドでインストールしようとすると、以下のようにエラーが出ます。
警告: bind-9.11.4-9.P2.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY エラー: 依存性の欠如: bind-libs(x86-64) = 32:9.11.4-9.P2.el7 は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています bind-libs-lite(x86-64) = 32:9.11.4-9.P2.el7 は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています libbind9.so.160()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています libdns.so.1102()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています libisc.so.169()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています libisccc.so.160()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています libisccfg.so.160()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています liblwres.so.160()(64bit) は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています policycoreutils-python は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています python-ply は bind-32:9.11.4-9.P2.el7.x86_64 に必要とされています
XXXはYYYに必要とされています というのがパッケージの依存関係です。bindをインストールするためにbind-libs-liteやpolicycoreutils-pythonなどが必要だということです。
これらをインターネット上からダウンロードし、rpm -ivhコマンドで一緒に指定します。
まずは--test
でインストールを試してみます。
実行結果はこちら↓
[root@localhost rpm]# rpm -ivh --test bind-9.11.4-9.P2.el7.x86_64.rpm bind-libs-9.11.4-9.P2.el7.x86_64.rpm bind--libs-lite-9.11.4-9.P2.el7.x86_64.rpm bind-license-9.11.4-9.P2.el7.noarch.rpm policycoreutils-python-2.5-33.el7.x86_64.rpm python-ply-3.4-11.el7.noarch.rpm 警告: bind-9.11.4-9.P2.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY エラー: 依存性の欠如: audit-libs-python >= 2.1.3-4 は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています checkpolicy は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libapol.so.4()(64bit) は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libapol.so.4(VERS_4.0)(64bit) は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libcgroup は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libqpol.so.1()(64bit) は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libqpol.so.1(VERS_1.2)(64bit) は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libqpol.so.1(VERS_1.4)(64bit) は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています libsemanage-python >= 2.5-14 は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています policycoreutils = 2.5-33.el7 は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています python-IPy は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています setools-libs >= 3.3.8-4 は policycoreutils-python-2.5-33.el7.x86_64 に必要とされています
ふたたび依存関係が表示されるので、インターネット上からダウンロードして・・・と繰り返します。
依存関係に関するエラーを解決する方法
繰り返していく中で、以下のようなエラーが出ることがあります。
ファイル /usr/lib64/libsepol.so.1 (パッケージ libsepol-2.5-10.el7.x86_64 から) は、パッケージ libsepol-2.5-6.el7.x86_64 からのファイルと競合しています。
これはlibsepol-2.5-10.el7.x86_64というパッケージは、すでに別のバージョンがインストールされているということです。
なので、このようなパッケージは-Uvhオプションを使ってアップデートする必要があります。
今現在すでにインストールされているパッケージはrpm -qaで表示できます。
パッケージ名で検索すると例えば以下のように表示されます。
[root@localhost rpm]# rpm -qa | grep libmsemanage libsemanage-2.5-14.el7.x86_64
インターネットにつながるマシンからdownloadonlyでrpmをまるっとダウンロード
1つ1つ依存関係が表示されるたびにパッケージを検索してダウンロードするのはなかなか骨が折れる作業です。
インターネットに接続できるマシンを本番用とは別に用意できるのであれば、オプションを指定することによって一発でダウンロードすることができます。
実行結果はこちら↓
[root@localhost work]# yum install bind --downloadonly --downloaddir=$(pwd) 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ bind.x86_64 32:9.11.4-9.P2.el7 を インストール --> 依存性の処理をしています: bind-libs-lite(x86-64) = 32:9.11.4-9.P2.el7 のパッケージ: 32:bind-9.11.4-9.P2.el7.x86_64 ~~~~~~~~~~中略~~~~~~~~~~ --------------------------------------------------------------------------------------------------------------- 合計 4.6 MB/s | 9.3 MB 00:00:02 exiting because "Download Only" specified
このコマンドでカレントディレクトリに依存関係解決済みのrpmがまるっとダウンロードできるので、あとはダウンロードしたファイルを本番用のサーバーに移動して、 rpmコマンドで依存関係を解決しながらインストール と同様にrpmコマンドでインストールすればOK。
インストールメディアをリポジトリにしてyumでインストール
OSのメディアがある場合はこの方法が一番楽です。
OSにメディアをセットし、マウントします。(ISOマウントでも可能)/mntにCDをマウントするときは以下のコマンドで行います。
[root@localhost work]# mount /dev/cdrom /mnt/ mount: /dev/sr0 is write-protected, mounting read-only
マウント出来たら、メディアのリポジトリを有効にします。CentOSの場合は/etc/yum.repo.d/CentOS-Media.repo でした。Red Hat Enterprise Linuxの場合は、/etc/yum.repos.d/rhel-dvd.repo です。
下から2行目のenable=0をenable=1にします。
[root@localhost work]# cat /etc/yum.repos.d/CentOS-Media.repo # CentOS-Media.repo # # This repo can be used with mounted DVD media, verify the mount point for # CentOS-7. You can use this repo and yum to install items directly off the # DVD ISO that we release. # # To use this repo, put in your DVD and use it with the other repos too: # yum --enablerepo=c7-media [command] # # or for ONLY the media repo, do this: # # yum --disablerepo=\* --enablerepo=c7-media [command] [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
↓変更後
[root@localhost work]# cat /etc/yum.repos.d/CentOS-Media.repo # CentOS-Media.repo # # This repo can be used with mounted DVD media, verify the mount point for # CentOS-7. You can use this repo and yum to install items directly off the # DVD ISO that we release. # # To use this repo, put in your DVD and use it with the other repos too: # yum --enablerepo=c7-media [command] # # or for ONLY the media repo, do this: # # yum --disablerepo=\* --enablerepo=c7-media [command] [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
後はそのままyumコマンドを使うだけです。※リポジトリ情報をクリーンにするために、一度yum clean allしておきましょう。
実行結果はこちら↓
[root@localhost work]# yum clean all 読み込んだプラグイン:fastestmirror リポジトリーを清掃しています: local-myrepository Cleaning up everything Cleaning up list of fastest mirrors [root@localhost work]# yum -y install bind
この方法が一番簡単です。
メディアからのインストールが終わったらレポジトリの設定をenable=0に戻しておきましょう。(メディアがマウントされていないときにyumを使うとエラーとなります)
まとめ
今回は3つの方法でrpmパッケージをオフライン環境でインストールする方法をご紹介しました。
個人的にはOSメディアがあるならまずそれをリポジトリとして指定してインストールする方法を選択し、メディアが準備できそうにないなら、インターネットに繋がる環境でダウンロードします。yumコマンドを使わずにrpmコマンドで一つ一つ依存関係を解決するのはかなり骨が折れるので、最終手段です。。。
コメント