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:
parent
8b3c4348ab
commit
0167b61ef4
@ -286,17 +286,20 @@ EOF
|
|||||||
cp ${layer}/* temp/
|
cp ${layer}/* temp/
|
||||||
chmod ug+w temp/*
|
chmod ug+w temp/*
|
||||||
|
|
||||||
|
for dep in $(cat $layerClosure); do
|
||||||
|
find $dep -path "${layer}" -prune -o -print >> layerFiles
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -s layerFiles ]; then
|
||||||
# FIXME: might not be /nix/store
|
# FIXME: might not be /nix/store
|
||||||
echo '/nix' >> layerFiles
|
echo '/nix' >> layerFiles
|
||||||
echo '/nix/store' >> layerFiles
|
echo '/nix/store' >> layerFiles
|
||||||
for dep in $(cat $layerClosure); do
|
fi
|
||||||
find $dep >> layerFiles
|
|
||||||
done
|
|
||||||
|
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user