Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 318941 - Portage OSError: [Errno 40] Too many levels of symbolic links:
Summary: Portage OSError: [Errno 40] Too many levels of symbolic links:
Status: CONFIRMED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core - Interface (emerge) (show other bugs)
Hardware: AMD64 Linux
: High normal (vote)
Assignee: Portage team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-05-08 03:29 UTC by Guilhaume Bordiau
Modified: 2022-10-20 02:43 UTC (History)
1 user (show)

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


Attachments
build.log (build.log,6.16 KB, text/plain)
2014-07-06 23:09 UTC, Chí-Thanh Christopher Nguyễn
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Guilhaume Bordiau 2010-05-08 03:29:14 UTC
When installing dev-db/mysql-5.0.90-r2, I get this error :

">>> Completed installing mysql-5.0.90-r2 into /var/tmp/portage/dev-db/mysql-5.0.90-r2/image/
[...]
>>> Installing (1 of 1) dev-db/mysql-5.0.90-r2
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 1410, in emerge_main
    myopts, myaction, myfiles, spinner)
  File "/usr/lib64/portage/pym/_emerge/actions.py", line 434, in action_build
    retval = mergetask.merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 914, in merge
    rval = self._merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1222, in _merge
    self._main_loop()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1362, 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 198, 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/EbuildPhase.py", line 94, in _post_phase_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/TaskSequence.py", line 44, in _task_exit_handler
    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/EbuildBuild.py", line 174, in _build_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 1201, 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 1391, 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 276, 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/dbapi/vartree.py", line 3331, in merge
    mydbapi=mydbapi, prev_mtimes=prev_mtimes)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 3212, in merge
    mydbapi=mydbapi, prev_mtimes=prev_mtimes)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 3221, in _merge
    cleanup=cleanup, mydbapi=mydbapi, prev_mtimes=prev_mtimes)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 2355, in treewalk
    retval = self._security_check(others_in_slot)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 2169, in _security_check
    s = os.lstat(path)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 228, in __call__
    rval = self._func(*wrapped_args, **wrapped_kwargs)
OSError: [Errno 40] Too many levels of symbolic links: '/var/lib/mysql/.keep_dev-db_mysql-0'

I reinstalled portage a few times, but same error.
Portage Installed version: 2.1.8.3
Python Installed version:  2.6.4-r1
Comment 1 Zac Medico gentoo-dev 2010-05-08 05:04:20 UTC
This is a strange error, maybe due to filesystem corruption related to '/var/lib/mysql/.keep_dev-db_mysql-0'. Is that file or any of it's parent directories a symlink? Please post the output for these commands:

  ls -ld /var
  ls -ld /var/lib
  ls -ld /var/lib/mysql
  ls -ld /var/lib/mysql/.keep_dev-db_mysql-0
Comment 2 Guilhaume Bordiau 2010-05-08 12:05:59 UTC
Thank you Zac, you're right I had forgotten the symlink I made here:

# ls -ld /var/lib/mysql
lrwxrwxrwx 1 root root 5 Mar  7 08:32 /var/lib/mysql -> mysql
# ls -l /var/lib/mysql/
ls: cannot access /var/lib/mysql/: Too many levels of symbolic links

It's an old symlink I don't use anymore. My mysql datadir is somewhere else.

So all should be fine. Thanks again!
Comment 3 Fabian Groffen gentoo-dev 2010-05-08 12:46:07 UTC
probably not backtracing would still be nice
Comment 4 Zac Medico gentoo-dev 2010-05-08 19:03:36 UTC
It seems like it might be difficult to handle Errno 40 since it could be triggered in many different places. It might not be worth the effort to try to avoid a traceback.
Comment 5 Fabian Groffen gentoo-dev 2010-05-08 20:29:19 UTC
It's not possible in Python to catch any error and print some nice Portage-originated error header with the message and or additional information where it occurred?  Maybe dumping the backtrace in some file for post analysis?  Always looks more polished than a raw backtrace.  But I agree, it's only cosmetics.
Comment 6 Zac Medico gentoo-dev 2010-05-08 21:44:30 UTC
Yeah, I guess we could add a blanket Errno 40 exception handler for all the merge code and have it display an eerror message like "you need to check this path and its parents for circular symbolic links" before bails out from the merge. It could then continue on with other merges if you have --keep-going enabled.
Comment 7 Chí-Thanh Christopher Nguyễn gentoo-dev 2014-07-06 23:09:33 UTC
Created attachment 380336 [details]
build.log

I encountered this problem after timezone-data failed to emerge in bug 487192. I was left with the symlinks

posix -> .gentoo-upgrade
and
.gentoo-upgrade -> .gentoo-upgrade

in /usr/share/zoneinfo/ which caused all subsequent attempts to install timezone-data to fail with "[Errno 40] Too many levels of symbolic links: '/usr/share/zoneinfo/posix/Asia/Thimbu'"