◆久々にRHEL系サーバでyumを使ったらエラー
とあるRHEL系サーバでyumを使ってみると、見慣れないエラーが唐突にはき出されたので、その時の対処をまとめました。結論から書きますと、Red Hat Linux 時代からある対処法で全然オッケーでした。
まず、エラー内容はこんな感じ。
# yum search httpd Loaded plugins: rhnplugin rpmdb: Lock table is out of available locker entries rpmdb: Unknown locker ID: 1477 error: db4 error(22) from dbenv->close: 無効な引数です error: cannot open Packages index using db3 - メモリを確保できません (12) error: cannot open Packages database in /var/lib/rpm Traceback (most recent call last): File "/usr/bin/yum", line 29, in ? yummain.user_main(sys.argv[1:], exit_code=True) File "/usr/share/yum-cli/yummain.py", line 309, in user_main errcode = main(args) File "/usr/share/yum-cli/yummain.py", line 157, in main base.getOptionsConfig(args) File "/usr/share/yum-cli/cli.py", line 187, in getOptionsConfig self.conf File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 665, in <lambda> conf = property(fget=lambda self: self._getConfig(), File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 240, in _getConfig self._conf = config.readMainConfig(startupconf) File "/usr/lib/python2.4/site-packages/yum/config.py", line 804, in readMainConfig yumvars['releasever'] = _getsysver(startupconf.installroot, startupconf.distroverpkg) File "/usr/lib/python2.4/site-packages/yum/config.py", line 877, in _getsysver idx = ts.dbMatch('provides', distroverpkg) TypeError: rpmdb open failed
はぁ「rpmdb open failed」というエラーが出ています(;´Д`) しかも、「メモリを確保出来ません」という無慈悲なエラーが出ているので、何かシステムが不安定じゃないかとも思ったり、かなり焦りました。
原因として、よくあるのが、ディスク容量100%だったり、rpmdbそのものが破損という事もあるのですが…見たところ以上はありません。というか、見かけ上、かなり普通なのですが。。
対処法としては、昔の作業を思い出して、/var/lib/rpm の中のファイルをサクッと削除することで対処できました。
/var/lib/rpm の中には
-rw-r--r-- 1 root root 450560 12月 4 17:52 __db.003 -rw-r--r-- 1 root root 1318912 12月 4 17:52 __db.002 -rw-r--r-- 1 root root 24576 12月 4 17:52 __db.001
こんな3つの __db.001, 002, 003 というファイルがあります。これらを容赦無く削除することで、大丈夫でした。
# rm __db.00* rm: remove 通常ファイル `__db.001'? y rm: remove 通常ファイル `__db.002'? y rm: remove 通常ファイル `__db.003'? y
※もし何かあると心配…という場合は、別名で保存しておくなり、/tmp 以下に一時退避しておけば安心です。
以上、備忘録でした。