fix: Address layer / image extraction issues in user namespaces #2699
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of the Pull Request (PR):
Note - there are no e2e tests for the nested containers / nested namespaces situations that are fixed by the commits in this PR. However, our e2e tests do confirm the changes don't cause regressions in non-nested cases.
The e2e framework doesn't offer a great way of executing singularity nested, and I've opened an issue (#2700) to address this to verify functionality more generally than a messy one-off for this PR would handle.
fix: use rootless umoci inside user namespace
If we are running from within a user namespace, then use rootless OCI layer extrraction with umoci.
This permits the extraction to complete when singularity is run under
unshare -r
.fix: honor --userns in unsquashfs wrapping
If singularity is executed with
--userns/-u
then it should also use a user namespace where it executesunsquashfs
in a wrapped manner.Previously the
unsquashfs
wrapping was without--userns/-u
in a setuid installation. This caused extraction to fail from within a non-root-mapped user namespace (e.g.unshare -c
).This fixes or addresses the following GitHub issues:
Before submitting a PR, make sure you have done the following:
make check
and tested this PR locally with amake test
, andmake testall
if possible (see CONTRIBUTING.md).