Fix tests using user namespaces on kernels that don't have it

Disable various tests if the kernel doesn't support unprivileged user
namespaces (e.g. Arch Linux disables them) or disable them via a sysctl
(Debian, Ubuntu).

Fixes #1521
Fixes #1625
This commit is contained in:
Tuomas Tynkkynen 2018-01-13 15:18:35 +02:00
parent 74f75c8558
commit 59086e459c
4 changed files with 33 additions and 16 deletions

View file

@ -2,7 +2,7 @@ source common.sh
clearStore clearStore
if [[ $(uname) != Linux ]]; then exit; fi if ! canUseSandbox; then exit; fi
if [[ ! $SHELL =~ /nix/store ]]; then exit; fi if [[ ! $SHELL =~ /nix/store ]]; then exit; fi
chmod -R u+w $TEST_ROOT/store0 || true chmod -R u+w $TEST_ROOT/store0 || true

View file

@ -87,6 +87,24 @@ killDaemon() {
trap "" EXIT trap "" EXIT
} }
canUseSandbox() {
if [[ $(uname) != Linux ]]; then return 1; fi
if [ ! -L /proc/self/ns/user ]; then
echo "Kernel doesn't support user namespaces, skipping this test..."
return 1
fi
if [ -e /proc/sys/kernel/unprivileged_userns_clone ]; then
if [ "$(cat /proc/sys/kernel/unprivileged_userns_clone)" != 1 ]; then
echo "Unprivileged user namespaces disabled by sysctl, skipping this test..."
return 1
fi
fi
return 0
}
fail() { fail() {
echo "$1" echo "$1"
exit 1 exit 1

View file

@ -2,7 +2,7 @@ source common.sh
clearStore clearStore
if [[ $(uname) != Linux ]]; then exit; fi if ! canUseSandbox; then exit; fi
# Note: we need to bind-mount $SHELL into the chroot. Currently we # Note: we need to bind-mount $SHELL into the chroot. Currently we
# only support the case where $SHELL is in the Nix store, because # only support the case where $SHELL is in the Nix store, because

View file

@ -6,7 +6,7 @@ clearCache
nix run -f run.nix hello -c hello | grep 'Hello World' nix run -f run.nix hello -c hello | grep 'Hello World'
nix run -f run.nix hello -c hello NixOS | grep 'Hello NixOS' nix run -f run.nix hello -c hello NixOS | grep 'Hello NixOS'
if [[ $(uname) = Linux ]]; then if ! canUseSandbox; then exit; fi
chmod -R u+w $TEST_ROOT/store0 || true chmod -R u+w $TEST_ROOT/store0 || true
rm -rf $TEST_ROOT/store0 rm -rf $TEST_ROOT/store0
@ -26,4 +26,3 @@ if [[ $(uname) = Linux ]]; then
[[ $path/bin/hello = $path2 ]] [[ $path/bin/hello = $path2 ]]
[[ -e $TEST_ROOT/store0/nix/store/$(basename $path)/bin/hello ]] [[ -e $TEST_ROOT/store0/nix/store/$(basename $path)/bin/hello ]]
fi