Skip to content

_sandboxbwrap.py: Post-bwrap cleanup shouldn't attempt to remove preexisting folders

Problem: According to comments here and here, Bubblewrap-sandbox shouldn't try to remove some special folders (dev,tmp,proc) if they already exist before run_bwrap(). In other words, it only should remove (as cleanup) if those folders get created during bubblewraping. But, the if condition here seems to be doing the opposite and one can get errors like this:

[00:00:05][febd1eb1][build:rhel6-base/rhel6-build-base.bst] BUG     Build

    An unhandled exception occured:

    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/dist-packages/buildstream/_scheduler/job.py", line 320, in _child_action
        result = self._action_cb(element)
      File "/usr/local/lib/python3.6/dist-packages/buildstream/_scheduler/buildqueue.py", line 34, in process
        element._assemble()
      File "/usr/local/lib/python3.6/dist-packages/buildstream/element.py", line 1396, in _assemble
        collect = self.assemble(sandbox)
      File "/usr/local/lib/python3.6/dist-packages/buildstream/buildelement.py", line 186, in assemble
        self.__run_command(sandbox, cmd, command_name)
      File "/usr/local/lib/python3.6/dist-packages/buildstream/buildelement.py", line 242, in __run_command
        SandboxFlags.ROOT_READ_ONLY)
      File "/usr/local/lib/python3.6/dist-packages/buildstream/sandbox/_sandboxbwrap.py", line 231, in run
        os.rmdir(base_directory)
    OSError: [Errno 39] Directory not empty: '/root/.cache/buildstream/build/rhel6-base-rhel6-build-base-4gxmx90l/root/dev'

In our case, this happened while running bst build on an kind: manual element that depends on an import element (a base image with non-empty /dev/ folder).

Solution: According to clarification on IRC, the negation in the if clause should be removed and having an integration test to verify the behaviour should be added.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information