diff options
Diffstat (limited to 'pkgs/build-support/docker/default.nix')
-rw-r--r-- | pkgs/build-support/docker/default.nix | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index e10ff269950..3fcae13e20d 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -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 the auto-optimise-store nix option is turned on. + # Since 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." ''; |