dockerTools.buildLayeredImage: fix building layered images in parallel
when tar'ing store paths into layered archives when building layered images, don't use the absolute nix store path so that tar won't complain if something new is added to the nix store when building the final docker image, ignore any file changes tar detects in the layers. they are all immutable and the only thing that might change is the number of hard links due to store optimization
This commit is contained in:
@@ -325,7 +325,6 @@ rec {
|
||||
| jshon -d config \
|
||||
| jshon -s "1970-01-01T00:00:01Z" -i created > generic.json
|
||||
|
||||
|
||||
# WARNING!
|
||||
# The following code is fiddly w.r.t. ensuring every layer is
|
||||
# created, and that no paths are missed. If you change the
|
||||
@@ -625,7 +624,22 @@ rec {
|
||||
-i "$imageName" > image/repositories
|
||||
|
||||
echo "Cooking the image..."
|
||||
tar -C image --dereference --hard-dereference --sort=name --mtime="@$SOURCE_DATE_EPOCH" --owner=0 --group=0 --mode=a-w --xform s:'^./':: -c . | pigz -nT > $out
|
||||
# tar exits with an exit code of 1 if files changed while it was
|
||||
# reading them. it considers a change in the number of hard links
|
||||
# to be a "change", which can cause this to fail if images are being
|
||||
# built concurrently and auto-optimise-store is turned on. since
|
||||
# know the contents of these files will not change, we can reasonably
|
||||
# ignore this exit code
|
||||
set +e
|
||||
tar -C image --dereference --hard-dereference --sort=name \
|
||||
--mtime="@$SOURCE_DATE_EPOCH" --owner=0 --group=0 \
|
||||
--mode=a-w --xform s:'^./':: --use-compress-program='pigz -nT' \
|
||||
--warning=no-file-changed -cf $out .
|
||||
RET=$?
|
||||
if [ $RET -ne 0 ] && [ $RET -ne 1 ]; then
|
||||
exit $RET
|
||||
fi
|
||||
set -e
|
||||
|
||||
echo "Finished."
|
||||
'';
|
||||
|
||||
Reference in New Issue
Block a user