diff options
-rw-r--r-- | pkgs/build-support/docker/default.nix | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index f531f1349c68..b8eda3d09673 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -249,6 +249,10 @@ rec { baseJson, # Files to add to the layer. contents ? null, + # When copying the contents into the image, preserve symlinks to + # directories (see `rsync -K`). Otherwise, transform those symlinks + # into directories. + keepContentsDirlinks ? false, # Additional commands to run on the layer before it is tar'd up. extraCommands ? "", uid ? 0, gid ? 0 }: @@ -262,7 +266,7 @@ rec { echo "Adding contents..." for item in $contents; do echo "Adding $item" - rsync -ak --chown=0:0 $item/ layer/ + rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/ done else echo "No contents to add to layer." @@ -303,6 +307,10 @@ rec { runAsRoot, # Files to add to the layer. If null, an empty layer will be created. contents ? null, + # When copying the contents into the image, preserve symlinks to + # directories (see `rsync -K`). Otherwise, transform those symlinks + # into directories. + keepContentsDirlinks ? false, # JSON containing configuration and metadata for this layer. baseJson, # Existing image onto which to append the new layer. @@ -327,7 +335,7 @@ rec { echo "Adding contents..." for item in ${toString contents}; do echo "Adding $item..." - rsync -ak --chown=0:0 $item/ layer/ + rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/ done chmod ug+w layer @@ -391,6 +399,10 @@ rec { fromImageTag ? null, # Files to put on the image (a nix store path or list of paths). contents ? null, + # When copying the contents into the image, preserve symlinks to + # directories (see `rsync -K`). Otherwise, transform those symlinks + # into directories. + keepContentsDirlinks ? false, # Docker config; e.g. what command to run on the container. config ? null, # Optional bash script to run on the files prior to fixturizing the layer. @@ -417,11 +429,12 @@ rec { if runAsRoot == null then mkPureLayer { name = baseName; - inherit baseJson contents extraCommands uid gid; + inherit baseJson contents keepContentsDirlinks extraCommands uid gid; } else mkRootLayer { name = baseName; inherit baseJson fromImage fromImageName fromImageTag - contents runAsRoot diskSize extraCommands; + contents keepContentsDirlinks runAsRoot diskSize + extraCommands; }; result = runCommand "docker-image-${baseName}.tar.gz" { buildInputs = [ jshon pigz coreutils findutils jq ]; |