* Description When I attempt to emerge tuxonice-sources I encounter the following during the install phase: >>> Installing (2 of 493) sys-kernel/tuxonice-sources-2.6.31 Traceback (most recent call last): File "/usr/lib64/portage/pym/portage/__init__.py", line 7513, in movefile ret=os.rename(src,dest) File "/usr/lib64/portage/pym/portage/__init__.py", line 194, in __call__ rval = self._func(*wrapped_args, **wrapped_kwargs) OSError: [Errno 18] Invalid cross-device link During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/bin/emerge", line 42, in <module> retval = emerge_main() File "/usr/lib64/portage/pym/_emerge/main.py", line 1523, in emerge_main myopts, myaction, myfiles, spinner) File "/usr/lib64/portage/pym/_emerge/actions.py", line 410, in action_build retval = mergetask.merge() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 841, in merge rval = self._merge() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1149, in _merge self._main_loop() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1289, in _main_loop self._poll_loop() File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 134, in _poll_loop handler(f, event) File "/usr/lib64/portage/pym/_emerge/SpawnProcess.py", line 192, in _output_handler self._unregister_if_appropriate(event) File "/usr/lib64/portage/pym/_emerge/AbstractPollTask.py", line 27, in _unregister_if_appropriate self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 42, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 115, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/EbuildBuild.py", line 232, in _buildpkg_exit self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 42, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 115, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/CompositeTask.py", line 106, in _default_final_exit return self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 42, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 115, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1128, in _build_exit self._schedule() File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 43, in _schedule return self._schedule_tasks() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1318, in _schedule_tasks if q.schedule(): File "/usr/lib64/portage/pym/_emerge/SequentialTaskQueue.py", line 56, in schedule task.start() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 24, in start self._start() File "/usr/lib64/portage/pym/_emerge/PackageMerge.py", line 44, in _start self.returncode = self.merge.merge() File "/usr/lib64/portage/pym/_emerge/MergeListItem.py", line 148, in merge retval = self._install_task.install() File "/usr/lib64/portage/pym/_emerge/EbuildBuild.py", line 271, in install rval = merge.execute() File "/usr/lib64/portage/pym/_emerge/EbuildMerge.py", line 27, in execute blockers=self.find_blockers) File "/usr/lib64/portage/pym/portage/__init__.py", line 7604, in merge mydbapi=mydbapi, prev_mtimes=prev_mtimes) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4393, in merge mydbapi=mydbapi, prev_mtimes=prev_mtimes) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4404, in _merge cleanup=cleanup, mydbapi=mydbapi, prev_mtimes=prev_mtimes) File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 3824, in treewalk if self.mergeme(srcroot, destroot, outfile, secondhand, "", cfgfiledict, mymtime): File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4235, in mergeme join(offset, x), cfgfiledict, thismtime): File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4235, in mergeme join(offset, x), cfgfiledict, thismtime): File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4235, in mergeme join(offset, x), cfgfiledict, thismtime): File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4235, in mergeme join(offset, x), cfgfiledict, thismtime): File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4324, in mergeme encoding=_encodings['merge']) File "/usr/lib64/portage/pym/portage/__init__.py", line 7518, in movefile if e[0]!=errno.EXDEV: TypeError: 'OSError' object is not subscriptable * Background /usr/src is on a separate filesystem that is actually a bind mount to /usr/src * Workaround I do not know of any workaround at this time * Resolution I looked at the code only briefly, but it appears that the second exception is raised because "e" is an OSError-type object. AFAIK it has no integral subscripts and the errno is retrieved through the "errno" attribute, e.g.: (portage/__init__.py:7518) if e.errno!=errno.EXDEV: Changing the line to above seems to fix the problem.
Thanks, this is fixed in svn r14873.
This is fixed in 2.1.7.7 and 2.2_rc52.
Thanks. You guys are awesome!