Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 230579 - empty preserved_libs_registry file crashes portage
Summary: empty preserved_libs_registry file crashes portage
Status: RESOLVED FIXED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core (show other bugs)
Hardware: All Linux
: High critical (vote)
Assignee: Portage team
URL:
Whiteboard:
Keywords: InVCS
Depends on:
Blocks: 210077
  Show dependency tree
 
Reported: 2008-07-02 22:59 UTC by Someone Else Who Won't Be Here
Modified: 2008-07-23 07:59 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
handle EOFError (eoferror.patch,589 bytes, patch)
2008-07-03 21:57 UTC, Zac Medico
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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.