summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Miller <ray@1729.org.uk>2025-05-24 17:55:09 +0100
committerLudovic Courtès <ludo@gnu.org>2025-06-03 15:09:54 +0200
commitb48b2bcf421b0a630e9b07378854e52618e8e773 (patch)
tree7d4b7d6d053391f434d2ccf27a018cfd51e33779
parentef3b963a549e60eba6adf22a5b2cc6e62d61d9b6 (diff)
pack: Include store parent directories in the Docker layer.
Fixes <https://issues.guix.gnu.org/78210>. This patch adds the /gnu and /gnu/store directories to the Docker layer created by ‘guix pack -f docker …’, which enables the Docker image to be used to create an AWS Lambda function. Without the patch, creating the AWS Lambda function fails with this error: "MissingParentDirectory: Parent directory does not exist for file: gnu/store/…-info-dir/" * guix/scripts/pack.scm (docker-image)[build]: Add store directory to the docker layer. * guix/docker.scm (build-docker-image): Change order of arguments to ‘tar’ so parent directories are added before their contents. Change-Id: I2b103c59981e828c965564ccc5d2415b00a7e52e Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/docker.scm5
-rw-r--r--guix/scripts/pack.scm5
2 files changed, 6 insertions, 4 deletions
diff --git a/guix/docker.scm b/guix/docker.scm
index 60ce13cbde..bb6d896a63 100644
--- a/guix/docker.scm
+++ b/guix/docker.scm
@@ -365,10 +365,11 @@ added to image as a layer."
(apply invoke "tar" "-cf" "../layer.tar"
`(,@transformation-options
,@(tar-base-options)
- ,@(if max-layers '() paths)
+ ;; Add parent directories before their contents.
,@(scandir "."
(lambda (file)
- (not (member file '("." ".."))))))))
+ (not (member file '("." "..")))))
+ ,@(if max-layers '() paths))))
(delete-file-recursively "extra")))
;; It is possible for "/" to show up in the archive, especially when
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 7ab2c0d447..857cb46af3 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -580,9 +580,10 @@ layers."
(,source -> ,target))))))
(define directives
- ;; Create a /tmp directory, as some programs expect it, and
- ;; create SYMLINKS.
+ ;; Create the /tmp and %store-prefix directories, as some
+ ;; programs expect them, and create SYMLINKS.
`((directory "/tmp" ,(getuid) ,(getgid) #o1777)
+ (directory #$(%store-prefix) ,(getuid) ,(getgid) #o755)
,@(append-map symlink->directives '#$symlinks)))
(define (form-entry-point prefix entry-point entry-point-argument)