summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorBrian McKenna <brian@brianmckenna.org>2016-04-15 21:46:42 +1000
committerBrian McKenna <brian@brianmckenna.org>2016-04-16 01:16:49 +1000
commit0167b61ef45c3cf8223d67893956144c65d811bf (patch)
tree52b5f8f9cca116515b92b8021b623fbe2c1335b0 /pkgs/build-support
parent8b3c4348abf6e5d64c989797f7cefc17ff3e3b44 (diff)
downloadnixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar.gz
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar.bz2
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar.lz
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar.xz
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.tar.zst
nixpkgs-0167b61ef45c3cf8223d67893956144c65d811bf.zip
dockerTools: only add "/nix" if it exists
The /nix path in 4d200538 of the layer tar didn't exist for some
packages, such as cacert. This is because cacert just creates an /etc
directory and doesn't depend on any other /nix paths. If we tried
putting this directory in the tar and using overlayfs with it, we'd get
"Invalid argument" when trying to remove the directory.

We now check whether the closure is non-empty before telling tar to
store the /nix directory.

Fixes #14710.
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/docker/default.nix13
1 files changed, 8 insertions, 5 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index f874354b15e..5ead82dee8b 100644
--- a/pkgs/build-support/docker/default.nix
+++ b/pkgs/build-support/docker/default.nix
@@ -286,17 +286,20 @@ EOF
         cp ${layer}/* temp/
         chmod ug+w temp/*
 
-        # FIXME: might not be /nix/store
-        echo '/nix' >> layerFiles
-        echo '/nix/store' >> layerFiles
         for dep in $(cat $layerClosure); do
-          find $dep >> layerFiles
+          find $dep -path "${layer}" -prune -o -print >> layerFiles
         done
 
+        if [ -s layerFiles ]; then
+          # FIXME: might not be /nix/store
+          echo '/nix' >> layerFiles
+          echo '/nix/store' >> layerFiles
+        fi
+
         echo Adding layer
         tar -tf temp/layer.tar >> baseFiles
         sed 's/^\.//' -i baseFiles
-        comm <(sort -n baseFiles|uniq) <(sort -n layerFiles|uniq|grep -v ${layer}) -1 -3 > newFiles
+        comm <(sort -u baseFiles) <(sort -u layerFiles) -1 -3 > newFiles
         tar -rpf temp/layer.tar --mtime=0 --no-recursion --files-from newFiles 2>/dev/null || true
 
         echo Adding meta