どうも、渋澤です。
以前Top Awardの様子を執筆させて頂きました。
今回は技術編となります。
早速ですが、お客様の本番環境でインターネットに直接繋がる環境は珍しいと思います。
そんなとき、rpmコマンドによるパッケージのインストールで依存関係に悩んだことありませんか?
「〇〇はXXに必要とされています」というエラーメッセージが表示されてインストールできない、指定されたパッケージのインストール際にも同様のメッセージが表示されることもあります。
さらに困るのは以下のような場合です。
パッケージA⇒パッケージB⇒パッケージC
|
⇒パッケージD⇒パッケージE
|
⇒パッケージF...
そこで今回は、rpmパッケージをyumコマンドでインストールができるように、
サーバ内に閉じたローカル環境にリポジトリを作成する方法の一例を紹介します。
ちなみにご存知の方も多いと思いますが、yumとrpmの違いの1つは以下の点にあります。
rpm:依存関係のあるパッケージを自動ではインストールしてくれない
yum:依存関係のあるパッケージを自動でインストールしてくれる
※rpmとyumは別ものではなく、yumは内部でrpmを呼び出しています。
yumはrpmよりもさらに高度な機能を提供してくれます。
つまり、このリポジトリを作成することで、
「リポジトリ内に存在するパッケージであれば、
yumコマンドが依存関係のあるパッケージを自動でインストールしてくれる」
メリットがあります。
ISOイメージからローカルyumリポジトリを作成する
では、さっそくリポジトリをつくってみましょう!①ISOイメージのマウント(今回はRHEL6.5で検証しました)
# mount /dev/cdrom /media
②ISOイメージのコピー先を作成(ディレクトリの作成は任意)
# mkdir -p /var/yum/RHEL6.5
③ISOイメージをコピー(ISOファイルの中身を全部コピー)
# cd /var/yum/RHEL6.5
# cp -Rp /media/* .
④リポジトリ定義ファイルを作成(拡張子より前は任意)
# vi /etc/yum.repos.d/dvd.repo
[Server]
name=RHEL6 Base
baseurl=file:///var/yum/RHEL6.5
enabled=1
(補足)
name :リポジトリ名。yum repolist 等で表示される。
baseurl :リポジトリへのパスを記述。
ローカルの場合は「file://」のあとに参照させたいパスを記載。
enabled :1は有効。0は無効。
⑤yumのキャッシュを削除
# yum clean all
ここまででローカルyumリポジトリの作成は完了です。
では、yumコマンドで早速パッケージをインストールしてみましょう。
⑥インストール
# yum install net-snmp
oaded plugins: refresh-packagekit, rhnplugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package net-snmp.x86_64 1:5.5-27.el6 set to be updated
--> Processing Dependency: net-snmp-libs = 1:5.5-27.el6 for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libnetsnmp.so.20()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libnetsnmpagent.so.20()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libnetsnmptrapd.so.20()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libnetsnmpmibs.so.20()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libnetsnmphelpers.so.20()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Processing Dependency: libsensors.so.4()(64bit) for package:
1:net-snmp-5.5-27.el6.x86_64
--> Running transaction check
---> Package lm_sensors-libs.x86_64 0:3.1.1-10.el6 set to be updated
---> Package net-snmp-libs.x86_64 1:5.5-27.el6 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
======================================================
Package Arch Version
Repository Size
======================================================
Installing:
net-snmp x86_64 1:5.5-27.el6
Server 297 k
Installing for dependencies:
lm_sensors-libs x86_64 3.1.1-10.el6
Server 37 k
net-snmp-libs x86_64 1:5.5-27.el6
Server 1.5 M
Transaction Summary
======================================================
Install 3 Package(s)
Upgrade 0 Package(s)
Total download size: 1.9 M
Installed size: 6.3 M
Is this ok [y/N]: y
Downloading Packages:
------------------------------------------------------------
Total 29 MB/s | 1.9
MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : lm_sensors-libs-3.1.1-10.el6.x86_64
1/3
Installing : 1:net-snmp-libs-5.5-27.el6.x86_64
2/3
Installing : 1:net-snmp-5.5-27.el6.x86_64
3/3
Installed: ※今回インストールしたパッケージ
net-snmp.x86_64 1:5.5-27.el6
Dependency Installed: ※依存関係のあるパッケージ
lm_sensors-libs.x86_64 0:3.1.1-10.el6 net-snmp-libs.x86_64
1:5.5-27.el6
Complete!
最後に
今回の方法は、・インターネット環境がないときにrpmコマンドで依存関係に悩んだとき
のほか、以下のようなときにも有効です。
・インストール後にパッケージの追加依頼があった場合
・セキュリティアップデートでEratta適用する場合
(ダウンロードしたパッケージをリポジトリのディレクトリに配置することで、同様にyumコマンドでの
インストールが可能)
ぜひ、試してみてください。