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.
This commit is contained in:
Brian McKenna 2016-04-15 21:46:42 +10:00
parent 8b3c4348ab
commit 0167b61ef4

View File

@ -286,17 +286,20 @@ EOF
cp ${layer}/* temp/ cp ${layer}/* temp/
chmod ug+w temp/* chmod ug+w temp/*
# FIXME: might not be /nix/store
echo '/nix' >> layerFiles
echo '/nix/store' >> layerFiles
for dep in $(cat $layerClosure); do for dep in $(cat $layerClosure); do
find $dep >> layerFiles find $dep -path "${layer}" -prune -o -print >> layerFiles
done done
if [ -s layerFiles ]; then
# FIXME: might not be /nix/store
echo '/nix' >> layerFiles
echo '/nix/store' >> layerFiles
fi
echo Adding layer echo Adding layer
tar -tf temp/layer.tar >> baseFiles tar -tf temp/layer.tar >> baseFiles
sed 's/^\.//' -i 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 tar -rpf temp/layer.tar --mtime=0 --no-recursion --files-from newFiles 2>/dev/null || true
echo Adding meta echo Adding meta