Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 230579

Summary: empty preserved_libs_registry file crashes portage
Product: Portage Development Reporter: Someone Else Who Won't Be Here <ted>
Component: CoreAssignee: Portage team <dev-portage>
Status: RESOLVED FIXED    
Severity: critical Keywords: InVCS
Priority: High    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 210077    
Attachments: handle EOFError

Description Someone Else Who Won't Be Here 2008-07-02 22:59:42 UTC
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.
Comment 1 Zac Medico gentoo-dev 2008-07-03 21:57:20 UTC
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
Comment 2 Zac Medico gentoo-dev 2008-07-23 07:59:35 UTC
This is fixed in 2.2_rc2.