CentOS5でのyum update実行時に「TypeError: unsubscriptable object」となる場合の解決方法
CentOS5のコンソール画面で
yum update -y
と実行すると、
TypeError: unsubscriptable object
というエラーになり、yum updateが失敗することがある。
《例》
[root@nobuneko ~]# yum update -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* extras: www.ftp.ne.jp
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package gnome-python2-gtksourceview.x86_64 0:2.16.0-3.el5 set to be updated
〜《省略》〜
---> Package libsilc.x86_64 0:1.0.2-2.fc6 set to be updated
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 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 getProvides
return self._computeAggregateDictResult("getProvides", name, flags, version)
File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 470, in _computeAggregateDictResult
sackResult = apply(method, args)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 861, in 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 586, 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
上記例では、python(パイソン)のアップデートでうまくできずにyum updateに失敗し、
TypeError: unsubscriptable object
というエラーになったように見える。
このエラーが表示された時には、「やばいなぁ、どうしよう」と少しあせったが、以下のサイトのおかげで解決した(感謝)。
《参考サイト》
CentOS 5 の yum に失敗 (TypeError: unsubscriptable object)
http://www.nire.com/2009/05/centos-yum-unsubscriptable-object/
上記のサイトに
yum clean metadata
を実行すると良いことが書かれていたので、実行してみた。
[root@nobuneko ~]# yum clean metadata
Loaded plugins: fastestmirror
17 metadata files removed
10 sqlite files removed
0 metadata files removed
yum clean metadata実行後に再度、yum updateを実行すると、エラーになることなく、yum updateが完了した。
今後もCentOS5でのyum update実行時に「TypeError: unsubscriptable object」などのエラーでyum updateが失敗したら、yum clean metadataを実行したいと思った。