Having an empty /var/lib/portage/preserved_libs_registry file makes portage completely un-useable. Not having the file at all is ok, but a blank one is not. Reproducible: Always Steps to Reproduce: 1. backup any existing /var/lib/portage/preserved_libs_registry 2. echo "" > /var/lib/portage/preserved_libs_registry 3. attmempt to use any emerge command Actual Results: # emerge --search this Traceback (most recent call last): File "/usr/bin/emerge", line 18, in <module> retval = _emerge.emerge_main() File "/usr/lib64/portage/pym/_emerge/__init__.py", line 9030, in emerge_main settings, trees, mtimedb = load_emerge_config() File "/usr/lib64/portage/pym/_emerge/__init__.py", line 8911, in load_emerge_config settings = root_trees["vartree"].settings File "/usr/lib64/portage/pym/portage/util.py", line 958, in __getitem__ return value_callable(*pargs, **kwargs) File "/usr/lib64/portage/pym/portage/util.py", line 942, in __call__ self._value = self._callable(*self._pargs, **self._kwargs) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 1063, in __init__ settings=settings, vartree=self) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 298, in __init__ os.path.join(self.root, PRIVATE_PATH, "preserved_libs_registry")) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 48, in __init__ self.load() File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 53, in load self._data = cPickle.load(open(self._filename, "r")) EOFError also daemon ~ # portageq portdir Traceback (most recent call last): File "/usr/bin/portageq", line 505, in <module> main() File "/usr/bin/portageq", line 475, in main reload(portage) File "/usr/lib64/portage/pym/portage/__init__.py", line 6959, in <module> init_legacy_globals() File "/usr/lib64/portage/pym/portage/__init__.py", line 6917, in init_legacy_globals settings = db["/"]["vartree"].settings File "/usr/lib64/portage/pym/portage/util.py", line 958, in __getitem__ return value_callable(*pargs, **kwargs) File "/usr/lib64/portage/pym/portage/util.py", line 942, in __call__ self._value = self._callable(*self._pargs, **self._kwargs) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 1063, in __init__ settings=settings, vartree=self) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 298, in __init__ os.path.join(self.root, PRIVATE_PATH, "preserved_libs_registry")) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 48, in __init__ self.load() File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 53, in load self._data = cPickle.load(open(self._filename, "r")) EOFError Expected Results: normal emerge functions This seems to have happened after using revdep-rebuild --library= to rebuild packages linked against preserved libraries. After several times, portage completely broke.
Created attachment 159457 [details, diff] handle EOFError If this patch is saved as /tmp/eoferror.patch then it can be applied as follows: patch /usr/lib/portage/pym/portage/dbapi/vartree.py /tmp/eoferror.patch
This is fixed in 2.2_rc2.