オフライン環境でのrpmインストール

Linux

業務都合などで、インターネットにつながらないマシンにソフトウェアを導入したい場合。

特にLinuxであれば、yumやaptコマンドで入れればよいですが、なかなかできない場合もあります。

そのような場合にrpmをどのようにインストールするかをご紹介します。

具体的には以下のような方法があります。

・rpmコマンドで依存関係を解決しながらインストール
・インターネットにつながるマシンからdownloadonlyでrpmをまるっとダウンロード
・インストールメディアをレポジトリにしてyumでインストール

インターネットにつながるマシンが別で用意できる場合はそこからdownloadonlyでダウンロードしてしまい、それを目的のマシンに持っていく方法が一番楽です。

しかし、そのような環境も用意できない場合、インターネット上でrpmを手動でダウンロードし、自分で依存関係を解決してインストールしていく方法をとります。

またはそのマシンにメディアをマウント可能であり、目的のソフトウェアがOSのインストーラーの中に含まれていれば、メディアをyumリポジトリに指定し、インストールしてしまう方法があります。

それぞれ解説していきます。今回は例としてbindをインストールします。

バージョンはbind-9.11.4-9.P2.el7.x86_64です

①rpmコマンドで依存関係を解決しながらインストール

rpmコマンドでまずこのrpmをインストールしてみます。

rpm -ivh --test bind-9.11.4-9.P2.el7.x86_64.rpm 

オプションとして-iがインストール、-vが処理中のパッケージを表示するオプション、-hは進捗状況を表示するオプションです。

また実際にインストールする前に–testとオプションを指定すると、実際にはインストールやアップデートを行わず、コマンドのテストを行います。

実際bindだけインストールしようとすると以下のようにエラーが出ます。

警告: 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コマンドでインストールしていきます。

③インストールメディアをレポジトリにしてyumでインストール

OSのメディアがある場合はこの方法が一番楽です。

OSにメディアをセットし、マウントします。/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コマンドを使うだけです。

[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を使うとエラーとなります)

コメント

タイトルとURLをコピーしました