年別アーカイブ: 2012年

RPMのDBの調整

Amazon Linuxのインスタンスを使ってCentOS 5のAMIを作成する方法は以前示した通り。 できあがったAMIは問題なく起動できるのだが、RPMのDBが読めなくて困った。

# rpm -qa
rpmdb: /var/lib/rpm/Packages: unsupported hash version: 9
error: cannot open Packages index using db3 - Invalid argument (22)
error: cannot open Packages database in /var/lib/rpm

これではRPMをインストールできないので、使い物にならない。

調べてみると、似たようなことで困っている人がいた。 どうやらBarkeley DBのバージョンが異なることが原因らしい。

詳細はこちらを参照してもらうとして、 キモの部分を抜粋するとこの部分。このケースではdb 4.6からdb 4.2へ変換している。

for i in $(ls -1); do
    if [ "`file ${i} | grep 9`" != "" ]; then
        db_dump ${i} >${i}.db46
        db42_load ${i}.db42 < ${i}.db46
        mv -f ${i} ${i}.org
        mv -f ${i}.db42 ${i}
    fi
done

調べてみると、Amazon Linuxはdb 4.7でCentOS 5はdb 4.3のようだ。 このあたりの調整をしてみる。

AMI作成用のインスタンスを立ち上げて、/ebs-rootにCentOS 5のイメージをマウントしておく。

このインスタンスでバージョンを落としたdbをインストールしておく。 今回はdb43-utilsを入れる。Scientific Linux 6ではcompat-db43というように、ディストリビューションによってパッケージ名が異なるようだ。

一気に入れ替える。

# cd /ebs-root/var/lib/rpm
# for i in `ls`; do db_dump $i | db43_load $i.db43; mv -f $i.db43 $i; done

どうなったか確認しておく。

# file *
Basenames:      Berkeley DB (Hash, version 8, native byte-order)
Conflictname:   Berkeley DB (Hash, version 8, native byte-order)
Dirnames:       Berkeley DB (Btree, version 9, native byte-order)
Filedigests:    Berkeley DB (Hash, version 8, native byte-order)
Group:          Berkeley DB (Hash, version 8, native byte-order)
Installtid:     Berkeley DB (Btree, version 9, native byte-order)
Name:           Berkeley DB (Hash, version 8, native byte-order)
Obsoletename:   Berkeley DB (Hash, version 8, native byte-order)
Packages:       Berkeley DB (Hash, version 8, native byte-order)
Providename:    Berkeley DB (Hash, version 8, native byte-order)
Provideversion: Berkeley DB (Btree, version 9, native byte-order)
Pubkeys:        Berkeley DB (Hash, version 8, native byte-order)
Requirename:    Berkeley DB (Hash, version 8, native byte-order)
Requireversion: Berkeley DB (Btree, version 9, native byte-order)
Sha1header:     Berkeley DB (Hash, version 8, native byte-order)
Sigmd5:         Berkeley DB (Hash, version 8, native byte-order)
Triggername:    Berkeley DB (Hash, version 8, native byte-order)

Hashはもともとversion 9だったものがversion 8になっている。 Btreeはversion 9のままでもCentOS 5で利用できる。

これでAMIを作成しなおして起動すると、今度はRPMのインストールができるようになっているはず。