rpm を手動でインストール

LINEで送る
Pocket

パッケージ管理ツールがどのような操作を自動で行ってくれているのか1つずずパッケージをインストールして順を追って解決していきましょう。
 

# rpm -ivh bind-9.9.4-51.el7_4.1.x86_64.rpm 
エラー: 依存性の欠如:
	bind-libs = 32:9.9.4-51.el7_4.1 は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	libbind9.so.90()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	libdns.so.100()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	libisc.so.95()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	libisccc.so.90()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	libisccfg.so.90()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています
	liblwres.so.90()(64bit) は bind-32:9.9.4-51.el7_4.1.x86_64 に必要とされています

今 DNS サーバである bind パッケージのインストールを試みています。このメッセージは bind をインストールする為には、bind-libs パッケージとダイナミックリンクライブラリ libbind9.so.90 libdns.so.100 … が必要である事を表しています。

注意事項
「ダイナミックリンクライブラリ」(Dynamic Link Library,DLL)動的リンクを使ったライブラリで複数のプログラムから共通に利用できるように種々の機能をプログラムとは分離して実装したものを言います。Windows では、拡張子が「.dll」、Linux では、/usr/lib/libライブラリ名.so.番号 のファイルとして
提供されることが多い。

では、まず bind-libs とはなんだろうか?この場合、bind-libs は、パッケージ名なのでftp サイト等から bind-libs という文字列をキーにファイルを探してみます。

# lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages
cd 成功、cwd=/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages
lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages> ls bind-libs-9*
-rw-rw-r--    1 ftp      ftp       1034180 Aug 24 11:57 bind-libs-9.9.4-51.el7.i686.rpm
-rw-rw-r--    1 ftp      ftp       1051116 Aug 24 11:57 bind-libs-9.9.4-51.el7.x86_64.rpm
-rw-rw-r--    1 ftp      ftp       1034336 Dec 02 23:34 bind-libs-9.9.4-51.el7_4.1.i686.rpm
-rw-rw-r--    1 ftp      ftp       1051224 Dec 02 23:34 bind-libs-9.9.4-51.el7_4.1.x86_64.rpm
lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages> mget bind-libs-9.9.4-51.el7_4.1.x86_64.rpm
lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages> exit
# rpm -ivh bind-9.9.4-51.el7_4.1.x86_64.rpm bind-libs-9.9.4-51.el7_4.1.x86_64.rpm
エラー: 依存性の欠如:
	bind-license = 32:9.9.4-51.el7_4.1 は bind-libs-32:9.9.4-51.el7_4.1.x86_64 に必要とされています

ftp サイトに同じバージョンの bind-libs-9.9.4-51.el7_4.1.x86_64.rpm というパッケージがあったのでこれを使用してみましょう。

しかし次は、bind-libs をインストールするのに bind-license が必要と言われました。その他のライブラリの依存関係が解決されたのは、bind-libs にライブラリが入っていたからのようです。

# rpm -qpl bind-libs-9.9.4-51.el7_4.1.x86_64.rpm
/usr/lib64/libbind9.so.90
/usr/lib64/libbind9.so.90.0.8
/usr/lib64/libdns.so.100
/usr/lib64/libdns.so.100.1.1
/usr/lib64/libisc.so.95
/usr/lib64/libisc.so.95.2.1
/usr/lib64/libisccc.so.90
/usr/lib64/libisccc.so.90.0.4
/usr/lib64/libisccfg.so.90
/usr/lib64/libisccfg.so.90.0.7
/usr/lib64/liblwres.so.90
/usr/lib64/liblwres.so.90.0.5

足りない、bind-license を再度ダウンロードしてインストールするとインストールする事が出来ました。

# lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages
cd 成功、cwd=/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages
lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages> mget bind-license-9.9.4-51.el7_4.1.noarch.rpm
lftp ftp.kddlabs.co.jp:/pub/Linux/distributions/CentOS/7/updates/x86_64/Packages> exit
[root@localhost ~]# rpm -ivh bind-9.9.4-51.el7_4.1.x86_64.rpm bind-libs-9.9.4-51.el7_4.1.x86_64.rpm bind-license-9.9.4-51.el7_4.1.noarch.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:bind-license-32:9.9.4-51.el7_4.1 ################################# [ 33%]
   2:bind-libs-32:9.9.4-51.el7_4.1    ################################# [ 67%]
   3:bind-32:9.9.4-51.el7_4.1         ################################# [100%]

前置きが長くなってしまいましたが、rpm を手動でインストールするのはいかに骨の折れる作業であるかという事が分かって頂けたかと思います。しかしこれらの難解な作業を簡素化してくれるのがパッケージ管理ツールです。パッケージ管理ツールの「ソフトウェアの追加/削除」Ubuntu Software(ソフトウェア)を使えば bind を選択するだけ、yum であれば、yum install bind, apt であれば apt install bind9 と実行するだけで、たちどころに bindをインストールする際に必要とするパッケージを検出しインストールしてくれるのです。

# yum install bind
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ bind.x86_64 32:9.9.4-51.el7_4.1 を インストール
--> 依存性の処理をしています: bind-libs = 32:9.9.4-51.el7_4.1 のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: liblwres.so.90()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: libisccfg.so.90()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: libisccc.so.90()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: libisc.so.95()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: libdns.so.100()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> 依存性の処理をしています: libbind9.so.90()(64bit) のパッケージ: 32:bind-9.9.4-51.el7_4.1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ bind-libs.x86_64 32:9.9.4-51.el7_4.1 を インストール
--> 依存性の処理をしています: bind-license = 32:9.9.4-51.el7_4.1 のパッケージ: 32:bind-libs-9.9.4-51.el7_4.1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ bind-license.noarch 32:9.9.4-50.el7 を 更新
--> 依存性の処理をしています: bind-license = 32:9.9.4-50.el7 のパッケージ: 32:bind-libs-lite-9.9.4-50.el7.x86_64
---> パッケージ bind-license.noarch 32:9.9.4-51.el7_4.1 を アップデート
--> トランザクションの確認を実行しています。
---> パッケージ bind-libs-lite.x86_64 32:9.9.4-50.el7 を 更新
---> パッケージ bind-libs-lite.x86_64 32:9.9.4-51.el7_4.1 を アップデート
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================================================================================================================================
 Package                                         アーキテクチャー                        バージョン                                              リポジトリー                              容量
================================================================================================================================================================================================
インストール中:
 bind                                            x86_64                                  32:9.9.4-51.el7_4.1                                     updates                                  1.8 M
依存性関連でのインストールをします:
 bind-libs                                       x86_64                                  32:9.9.4-51.el7_4.1                                     updates                                  1.0 M
依存性関連での更新をします:
 bind-libs-lite                                  x86_64                                  32:9.9.4-51.el7_4.1                                     updates                                  733 k
 bind-license                                    noarch                                  32:9.9.4-51.el7_4.1                                     updates                                   84 k

トランザクションの要約
================================================================================================================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)
更新                       ( 2 個の依存関係のパッケージ)

総ダウンロード容量: 3.6 M
Is this ok [y/d/N]: 

なぜ apt や yum は、依存関係を解決し必要なパッケージだけインストールしてくれるのでしょうか?これは rpm が置かれている ftp サーバの repodata というディレクトリに全パッケージの依存関係に関するの情報が圧縮され置かれているからです。

lftp ftp.nara.wide.ad.jp:/pub/Linux/centos/7/updates/x86_64/repodata> ls
-rw-rw-r--   1 ftp-mirror ftp-adm   2221773 Nov  3 19:25 0f55049a677f9a54a61e178424c1173133e30563f68f6cc9a92490698147e3e9-filelists.sqlite.bz2
-rw-rw-r--   1 ftp-mirror ftp-adm   3735014 Nov  3 19:25 1982b6b2ab3d63c55807ad48abf18b63fc4535d8b5cd4604d13b3e0e296c79ab-primary.sqlite.bz2
-rw-rw-r--   1 ftp-mirror ftp-adm   2324240 Nov  3 19:19 30dec0c4333d5f1177221b4fdff36f4cb48c792dfad85f74028556aec4f71d68-filelists.xml.gz
-rw-rw-r--   1 ftp-mirror ftp-adm   1988466 Nov  3 19:19 3d50d86b57d4a2d1bc61dbbf7e70c79d6c40e3bbcc7ffa07c9cc73e840564888-primary.xml.gz
-rw-rw-r--   1 ftp-mirror ftp-adm    354438 Nov  3 19:25 7ca3e2f5f75e7591fdc05fd25d702ca99d89e5f99e15227cb477b16b0843f7ab-other.sqlite.bz2
-rw-rw-r--   1 ftp-mirror ftp-adm    413276 Nov  3 19:25 87e605cc98c0a3f6e51f27e52170d1f9c730d8e26b77474cbb64c564c4ee9119-prestodelta.xml.gz
-rw-rw-r--   1 ftp-mirror ftp-adm    203757 Nov  3 19:19 e6f346e7300c86efd3ba27e36b936ffe1b7e233435351ac3899118fcb6cddf65-other.xml.gz
-rw-rw-r--   1 ftp-mirror ftp-adm      3460 Nov  3 19:25 repomd.xml
-rw-rw-r--   1 ftp-mirror ftp-adm       811 Nov  3 19:25 repomd.xml.asc

yum は、そのデータをローカルディスクにコピーし、そのデータを元に依存関係を解決しているのです。なおこの ftp に置かれている、rpm と repodata を総称してリポジトリと呼びます。

yum が repodata ディレクトリからダウンロードしたデータ。

# cd /var/cache/yum/x86_64/7/
[root@localhost 7]# find
.
./base
./base/gen
./base/gen/primary_db.sqlite
./base/packages
./base/mirrorlist.txt
./base/repomd.xml
./base/cachecookie
./base/9346184be1deb727caf4b1ecf4a7949155da5da74af9b92c172687b290a773df-c7-x86_64-comps.xml.gz
./base/0c34273ad0292747ee5e15c047d3e51c67ca59861a446972db45d71abacc7ad7-primary.sqlite.bz2
./extras
./extras/gen
./extras/gen/primary_db.sqlite
./extras/packages
./extras/mirrorlist.txt
./extras/repomd.xml
./extras/cachecookie
./extras/7ead5010d42a09d8c9230a973faadd2a64030fc051d320a8750d1778bee3838b-primary.sqlite.bz2
./updates
./updates/gen
./updates/gen/primary_db.sqlite
./updates/packages
./updates/mirrorlist.txt
./updates/repomd.xml
./updates/cachecookie
./updates/42fd4e52ab3b2fda9be280ad901e1597b070cf0c4062ba6581d6b457e5e9e2c1-primary.sqlite.bz2
./timedhosts
./timedhosts.txt
./.gpgkeyschecked.yum

注意事項
パッケージ管理ツールは、内部で yum, apt をコールしておりパッケージの依存関係を解決方法は yum,apt と同じロジックを利用しています。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

アマゾン

LINEで送る
Pocket

記事が面白かった。為になったと思ったら。下記リンクより商品を購入頂くと筆者は喜び記事を更新致します。


LINEで送る
Pocket

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください