▼ 2009/04/25(土) yumのupdateが出来なくなった件
CentOS 5.3を使っているんですが、気づいたらyumでupdateが出来なくなってましたよ。ちなみにこんな感じのエラーが出てしまってる。
ceback (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 229, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 145, in main
(result, resultmsgs) = base.buildTransaction()
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 647, in buildTransaction
(rescode, restring) = self.resolveDeps()
File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 704, in resolveDeps
for po, dep in self._checkFileRequires():
File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 939, in _checkFileRequires
if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
File "/usr/lib/python2.4/site-packages/yum/transactioninfo.py", line 414, in getNewProvides
for pkg, hits in self.pkgSack.getProvides(name, flag, version).iteritems():
File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 300, in getPbuildTransaction()
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 647, in buildTransaction
(rescode, restring) = self.resolveDeps()
File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 704, in resolveDeps
for po, dep in self._checkFileRequires():
File "/usr/lib/pn getProvides
return self._search("provides", name, flags, version)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
return func(*args, **kwargs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 837, in _search
for pkg in self.searchFiles(name, strict=True):
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
return func(*args, **kwargs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 568, in searchFiles
self._sql_pkgKey2po(rep, cur, pkgs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 470, in _sql_pkgKey2po
pkg = self._packageByKey(repo, ob['pkgKey'])
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 413, in _packageByKey
po = self.pc(repo, cur.fetchone())
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 68, in __init__
self._read_db_obj(db_obj)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 94, in _read_db_obj
setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable object
データベースの再構築を行ったところ、正常に動いてくれるようになったのでメモ。以下のコマンドを実行して再構築を行った。
$ sudo yum clean all $ sudo rpm --rebuilddb
しかし、CentOS 5.3ってPythonのバージョンが2.4なのね・・・全然使ってないから気づかなかった。
$ cat /etc/redhat-release CentOS release 5.3 (Final) $ python -V Python 2.4.3
- TB-URL http://chibilog.name/0370/tb/

1: Ryuquo 2009年04月25日(土) 深夜2時45分
この投稿見て一番為になったのが、redhat-releaseの存在っていう
ダメさを発揮している私です。
ちなみに上記エラー出たときは、yumが壊れた→入れ直そうと削除して
rpmから入れ直しちゃいました。
何か面白いメモ(記事)があるからこのブログは好きですw
2: chibi 2009年04月26日(日) 午前5時33分
好きと言ってもらえると嬉しい限りです!何か色んな日記がごっちゃごっちゃになってる気はしますが・・・
/etc/redhat-releaseは意外と覚えておいて損の無いファイルだと思いますよ。
アプリケーションによってはインストール時にこのファイルの中を見て、処理を続行するか中断するか判定することがあります。
例えば、4.*系には対応しているけど、5.*系には対応して無いアプリケーションでは、このファイルの中が5.3などとなっていたら、インストールを中断してしまいます。
そこで、5.3となっているところを4.6とかに書き換えて強引にインストールしちゃったりとかの方法が取れることがあります。
もちろん本当に対応してなくてこーゆー処理を入れてる場合もあるとは思うので、強引にやっていいのかどうかの判断は難しいですが。
このファイルの中の書き換えの良い例としては、Oracle 10gを入れる時にこれで回避できたと思います。
3: Ryuquo 2009年04月27日(月) 午前9時08分
なるほど、/etc/redhat-releaseって書き換えもできるのですね。
動くかは自己責任としても、どうしても入れてみたいソフトはあると
思うので覚えておきたいと思います。
ありがとうございます。
4: chibi 2009年04月27日(月) 午後7時13分
なかなか、そんなものをインストールする機会って無いと言えば無いんですけどね・・・
ただ、この問題に直面した時は、どっかのサイトの変な人がそういえばあんなこと言ってたなって思い出してくれればと思いますw