10avr. 2009
Emerge IOError: [Errno 21] Is a directory [sys-apps/portage]
10:45 - Par Mohamed YACOUBI - Gentoo
J'ai procédé à un upgrade apparemment sans problème de sys-apps/portage-2.1.4.5
vers sys-apps/portage-2.1.6.7
.
Finalement au bout de quelques jours j'ai eu besoin d'installer et de mettre à jour un paquet et c'est là que tout ce complique, la fameuse erreur IOError: [Errno 21] Is a directory
est apparu.
raga ~ # emerge -av tcpdump These are the packages that would be merged, in order: Calculating dependencies Traceback (most recent call last): File "/usr/bin/emerge", line 40, in <module> retval = _emerge.emerge_main() File "//usr/lib/portage/pym/_emerge/__init__.py", line 14670, in emerge_main myopts, myaction, myfiles, spinner) File "//usr/lib/portage/pym/_emerge/__init__.py", line 13587, in action_build mydepgraph = depgraph(settings, trees, myopts, myparams, spinner) File "//usr/lib/portage/pym/_emerge/__init__.py", line 4373, in __init__ pkg_cache=self._pkg_cache) File "//usr/lib/portage/pym/_emerge/__init__.py", line 1074, in __init__ real_dbapi.flush_cache() File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 368, in flush_cache self._owners.populate() # index any unindexed contents File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 748, in populate self._populate() File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 774, in _populate owners_cache.add(cpv) File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 698, in add contents = self._vardb._dblink(cpv).getcontents() File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 1162, in getcontents myc = open(contents_file,"r") IOError: [Errno 21] Is a directory
Cette erreur ne donnant rien de concret sur les moteurs de recherches, je me suis tourné vers le chan officiel Gentoo, un problème de compilation avec python a été évoqué, néanmoins je reste sceptique à cette hypothèse, en effet le portage recover en version 2.1.4.5 fonctionne parfaitement. Cependant en l'utilisant je reste limité à l'utilisation de paquet dans la branche EAPI=1.
Je me suis donc intéressé de plus près au fameux dossier /var/db/pkg
contenant toutes les informations sur les paquets installés nécessaires à portage. Après suppression de ce dossier (un backup a été effectué), emerge
a l'air de fonctionner néanmoins je ne valide pas l'installation du paquet.
En procédant par élimination (d'où l'intérêt du backup), je remonte jusqu'au dossier /var/db/pkg/sys-libs/timezone-data-2006a
, après suppression de ce dernier et une réinstallation de sys-libs/timezone-data-2009b
, tout fonctionne parfaitement.