aboutsummaryrefslogtreecommitdiff
path: root/tests/guix-pack-relocatable.sh
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-07-28 12:28:39 +0200
committerLudovic Courtès <ludo@gnu.org>2020-07-28 14:41:05 +0200
commitc088aa2988ef82289c87ebfd6d07d8f1464dd8f0 (patch)
tree48433d9611da3311e6499b5b2ed72973cd5e65d8 /tests/guix-pack-relocatable.sh
parentc6c0d5a22c2ee3d7164dab0129b2e4852a4ae76c (diff)
downloadguix-c088aa2988ef82289c87ebfd6d07d8f1464dd8f0.tar
guix-c088aa2988ef82289c87ebfd6d07d8f1464dd8f0.tar.gz
pack: "fakechroot" engine always creates its store.
Previously it would silently fail to create the /gnu/store symlink when the host has a read-only /gnu as is the case in these tests. * gnu/packages/aux-files/run-in-namespace.c (exec_with_loader): Unlink the ancestor of ORIGINAL_STORE under NEW_ROOT. Check the return value of 'symlink' when creating NEW_STORE. * tests/guix-pack-relocatable.sh: Check the contents of the store as seen by the wrapped executable, with all three engines, and with both "/gnu" and "/gnu/store" erased.
Diffstat (limited to 'tests/guix-pack-relocatable.sh')
-rw-r--r--tests/guix-pack-relocatable.sh27
1 files changed, 25 insertions, 2 deletions
diff --git a/tests/guix-pack-relocatable.sh b/tests/guix-pack-relocatable.sh
index 1ba3889036..b8d36a02c6 100644
--- a/tests/guix-pack-relocatable.sh
+++ b/tests/guix-pack-relocatable.sh
@@ -90,7 +90,7 @@ case "`uname -m`" in
# Try '-RR' and PRoot.
tarball="`guix pack -RR -S /Bin=bin sed`"
tar tvf "$tarball" | grep /bin/proot
- (cd "$test_directory"; tar xvf "$tarball")
+ (cd "$test_directory"; tar xf "$tarball")
run_without_store GUIX_EXECUTION_ENGINE="proot" \
"$test_directory/Bin/sed" --version > "$test_directory/output"
grep 'GNU sed' "$test_directory/output"
@@ -101,6 +101,29 @@ case "`uname -m`" in
grep 'GNU sed' "$test_directory/output"
chmod -Rf +w "$test_directory"; rm -rf "$test_directory"/*
+
+ if unshare -r true
+ then
+ # Check whether the store contains everything it should. Check
+ # once when erasing $STORE_PARENT ("/gnu") and once when erasing
+ # $NIX_STORE_DIR ("/gnu/store").
+ tarball="`guix pack -RR -S /bin=bin bash-minimal`"
+ (cd "$test_directory"; tar xf "$tarball")
+
+ STORE_PARENT="`dirname $NIX_STORE_DIR`"
+ export STORE_PARENT
+
+ for engine in userns proot fakechroot
+ do
+ for i in $(guix gc -R $(guix build bash-minimal | grep -v -e '-doc$'))
+ do
+ unshare -mrf sh -c "mount -t tmpfs none \"$NIX_STORE_DIR\"; GUIX_EXECUTION_ENGINE=$engine $test_directory/bin/sh -c 'echo $NIX_STORE_DIR/*'" | grep $(basename $i)
+ unshare -mrf sh -c "mount -t tmpfs none \"$STORE_PARENT\"; GUIX_EXECUTION_ENGINE=$engine $test_directory/bin/sh -c 'echo $NIX_STORE_DIR/*'" | grep $(basename $i)
+ done
+ done
+
+ chmod -Rf +w "$test_directory"; rm -rf "$test_directory"/*
+ fi
;;
*)
echo "skipping PRoot and Fakechroot tests" >&2
@@ -109,7 +132,7 @@ esac
# Ensure '-R' works with outputs other than "out".
tarball="`guix pack -R -S /share=share groff:doc`"
-(cd "$test_directory"; tar xvf "$tarball")
+(cd "$test_directory"; tar xf "$tarball")
test -d "$test_directory/share/doc/groff/html"
# Ensure '-R' applies to propagated inputs. Failing to do that, it would fail