This is basically a note for other users who, like me, did not have to update all ros packages, yet: If roscore or any other ros component crashes during a package cache update with a message similar to the one below, you need to update all packages which have a package.xml in /usr/share/ros_packages/$package_name, but not in /usr/share/$package_name. $ roscore WARNING: unable to configure logging. No log files will be generated Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://hostname:45731/ ros_comm version 1.13.0 SUMMARY ======== PARAMETERS * /rosdistro: Gentoo * /rosversion: 1.13.0 NODES auto-starting new master process[master]: started with pid [1956] Traceback (most recent call last): File "/usr/lib/python-exec/python2.7/rosmaster", line 35, in <module> rosmaster.rosmaster_main() File "/usr/lib64/python2.7/site-packages/rosmaster/main.py", line 80, in rosmaster_main configure_logging() File "/usr/lib64/python2.7/site-packages/rosmaster/main.py", line 58, in configure_logging _log_filename = rosgraph.roslogging.configure_logging('rosmaster', logging.DEBUG, filename=filename) File "/usr/lib64/python2.7/site-packages/rosgraph/roslogging.py", line 107, in configure_logging rosgraph_d = rospkg.RosPack().get_path('rosgraph') File "/usr/lib64/python2.7/site-packages/rospkg/rospack.py", line 202, in get_path self._update_location_cache() File "/usr/lib64/python2.7/site-packages/rospkg/rospack.py", line 185, in _update_location_cache list_by_path(self._manifest_name, path, cache) File "/usr/lib64/python2.7/site-packages/rospkg/rospack.py", line 68, in list_by_path root = ElementTree(None, os.path.join(d, PACKAGE_FILE)) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "<string>", line 26, in parse IOError: [Errno 2] No such file or directory: '/usr/share/filters/package.xml'
Here is how you can update all of those packages: sudo emerge -1a $( python2 -c "import os; print '\n'.join([package for package in [d.split('/')[-1] for d, _, files in os.walk('/usr/share/ros_packages', topdown=True, followlinks=True) if 'package.xml' in files] if not os.path.exists('/usr/share/' + package + '/package.xml')])")