Uploaded image for project: 'Funtoo Linux'
  1. Funtoo Linux
  2. FL-10053

fchroot: Add robust protections around auto-cleanup of bind mounts

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Normal Normal
    • None
    • None

      During a recent experiment using fchroot to compile the latest Firefox as part of the Funtoo Raspiberry Pi 4 initiatives, I created a foobar situation accidentally, here is it:

      • I was compiling Firefox in a cortex-a72 fchroot in one terminal tab
      • I opened another cortex-a72 fchroot for the same setup to check on the compilation status
      • Then I accidentally exited out of the second chroot

      The the long running merge failed with a portage exception as the bind mounts in the fchroot were automatically cleaned up by the second fchroot upon exit, which is expected behavior:

      unknownException in callback AsynchronousTask._exit_listener_cb(<bound method...0x5503d838b0>>)
      handle: <Handle AsynchronousTask._exit_listener_cb(<bound method...0x5503d838b0>>)>
      Traceback (most recent call last):
        File "/usr/lib/python3.9/asyncio/events.py", line 80, in _run
          self._context.run(self._callback, *self._args)
        File "/usr/lib/python3.9/site-packages/_emerge/AsynchronousTask.py", line 201, in _exit_listener_cb
          listener(self)
        File "/usr/lib/python3.9/site-packages/_emerge/EbuildPhase.py", line 227, in _ebuild_exit
          self._ebuild_exit_unlocked(ebuild_process)
        File "/usr/lib/python3.9/site-packages/_emerge/EbuildPhase.py", line 271, in _ebuild_exit_unlocked
          self._die_hooks()
        File "/usr/lib/python3.9/site-packages/_emerge/EbuildPhase.py", line 379, in _die_hooks
          self._start_task(die_hooks, self._die_hooks_exit)
        File "/usr/lib/python3.9/site-packages/_emerge/CompositeTask.py", line 113, in _start_task
          task.start()
        File "/usr/lib/python3.9/site-packages/_emerge/AsynchronousTask.py", line 30, in start
          self._start()
        File "/usr/lib/python3.9/site-packages/_emerge/MiscFunctionsProcess.py", line 29, in _start
          AbstractEbuildProcess._start(self)
        File "/usr/lib/python3.9/site-packages/_emerge/AbstractEbuildProcess.py", line 169, in _start
          self._start_post_builddir_lock(start_ipc_daemon=start_ipc_daemon)
        File "/usr/lib/python3.9/site-packages/_emerge/AbstractEbuildProcess.py", line 195, in _start_post_builddir_lock
          null_fd = os.open('/dev/null', os.O_RDONLY)
        File "/usr/lib/python3.9/site-packages/portage/__init__.py", line 231, in __call__
          rval = self._func(*wrapped_args, **wrapped_kwargs)
      FileNotFoundError: [Errno 2] No such file or directory: b'/dev/null'
      Terminated
      
      real    144m42.607s

      As requested by drobbins this improvement issue will track improving the above fchroot scenario by adding some type of robustness around the auto-cleanup of bind mounts.

            Unassigned Unassigned
            siris siris
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: