From 23555494fe439faa2e269cbf7b3b2934afe63d72 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Fri, 27 Jul 2018 18:39:08 +0100 Subject: [PATCH] cmd/pkg: Fix symlink handling in pkg build context When building the build context, symlink need special treatment as the link name needs to be added when building the tar.FileInfoHeader. This code does that. We may also need to add a special case for hard links as the moby/moby package 'archive' does, but this should for now fixes #3142 Signed-off-by: Rolf Neugebauer --- src/cmd/linuxkit/pkglib/build.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cmd/linuxkit/pkglib/build.go b/src/cmd/linuxkit/pkglib/build.go index 9a8567efc..9cb952781 100644 --- a/src/cmd/linuxkit/pkglib/build.go +++ b/src/cmd/linuxkit/pkglib/build.go @@ -222,7 +222,16 @@ func (c *buildCtx) Copy(w io.WriteCloser) error { return fmt.Errorf("ctx: Walk error on %s: %v", p, err) } - h, err := tar.FileInfoHeader(i, "") + var link string + if i.Mode()&os.ModeSymlink != 0 { + var err error + link, err = os.Readlink(p) + if err != nil { + return fmt.Errorf("ctx: Failed to read symlink %s: %v", p, err) + } + } + + h, err := tar.FileInfoHeader(i, link) if err != nil { return fmt.Errorf("ctx: Converting FileInfo for %s: %v", p, err) }