diff --git a/src/cmd/linuxkit/moby/build.go b/src/cmd/linuxkit/moby/build.go index 484aa89d3..93d83336c 100644 --- a/src/cmd/linuxkit/moby/build.go +++ b/src/cmd/linuxkit/moby/build.go @@ -51,10 +51,11 @@ var additions = map[string]addFun{ "docker": func(tw *tar.Writer) error { log.Infof(" Adding Dockerfile") hdr := &tar.Header{ - Name: "Dockerfile", - Mode: 0644, - Size: int64(len(dockerfile)), - Format: tar.FormatPAX, + Name: "Dockerfile", + Mode: 0644, + Size: int64(len(dockerfile)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err @@ -368,6 +369,7 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { Name: "boot", Mode: 0755, Typeflag: tar.TypeDir, + ModTime: defaultModTime, Format: tar.FormatPAX, } if err := tw.WriteHeader(whdr); err != nil { @@ -376,10 +378,11 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { } // add the cmdline in /boot/cmdline whdr := &tar.Header{ - Name: "boot/cmdline", - Mode: 0644, - Size: int64(len(k.cmdline)), - Format: tar.FormatPAX, + Name: "boot/cmdline", + Mode: 0644, + Size: int64(len(k.cmdline)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(whdr); err != nil { return err @@ -391,10 +394,11 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { } // Stash the kernel header and prime the buffer for the kernel k.hdr = &tar.Header{ - Name: "boot/kernel", - Mode: hdr.Mode, - Size: hdr.Size, - Format: tar.FormatPAX, + Name: "boot/kernel", + Mode: hdr.Mode, + Size: hdr.Size, + ModTime: defaultModTime, + Format: tar.FormatPAX, } k.buffer = new(bytes.Buffer) case k.tar: @@ -410,6 +414,7 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { Name: "boot", Mode: 0755, Typeflag: tar.TypeDir, + ModTime: defaultModTime, Format: tar.FormatPAX, } if err := tw.WriteHeader(whdr); err != nil { @@ -417,10 +422,11 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { } } whdr := &tar.Header{ - Name: "boot/ucode.cpio", - Mode: hdr.Mode, - Size: hdr.Size, - Format: tar.FormatPAX, + Name: "boot/ucode.cpio", + Mode: hdr.Mode, + Size: hdr.Size, + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(whdr); err != nil { return err @@ -653,6 +659,7 @@ func filesystem(m Moby, tw *tar.Writer, idMap map[string]uint32) error { Name: root, Typeflag: tar.TypeDir, Mode: dirMode, + ModTime: defaultModTime, Uid: int(uid), Gid: int(gid), Format: tar.FormatPAX, @@ -666,11 +673,12 @@ func filesystem(m Moby, tw *tar.Writer, idMap map[string]uint32) error { } addedFiles[f.Path] = true hdr := &tar.Header{ - Name: f.Path, - Mode: mode, - Uid: int(uid), - Gid: int(gid), - Format: tar.FormatPAX, + Name: f.Path, + Mode: mode, + ModTime: defaultModTime, + Uid: int(uid), + Gid: int(gid), + Format: tar.FormatPAX, } if f.Directory { if f.Contents != nil { diff --git a/src/cmd/linuxkit/moby/image.go b/src/cmd/linuxkit/moby/image.go index ef16416a1..7d7207278 100644 --- a/src/cmd/linuxkit/moby/image.go +++ b/src/cmd/linuxkit/moby/image.go @@ -71,6 +71,7 @@ func tarPrefix(path string, tw tarWriter) error { hdr := &tar.Header{ Name: mkdir, Mode: 0755, + ModTime: defaultModTime, Typeflag: tar.TypeDir, Format: tar.FormatPAX, } @@ -154,6 +155,7 @@ func ImageTar(ref *reference.Spec, prefix string, tw tarWriter, trust bool, pull contents := replace[hdr.Name] hdr.Size = int64(len(contents)) hdr.Name = prefix + hdr.Name + hdr.ModTime = defaultModTime log.Debugf("image tar: %s %s add %s", ref, prefix, hdr.Name) if err := tw.WriteHeader(hdr); err != nil { return err @@ -169,6 +171,7 @@ func ImageTar(ref *reference.Spec, prefix string, tw tarWriter, trust bool, pull hdr.Size = 0 hdr.Typeflag = tar.TypeSymlink hdr.Linkname = resolv + hdr.ModTime = defaultModTime log.Debugf("image tar: %s %s add resolv symlink /etc/resolv.conf -> %s", ref, prefix, resolv) if err := tw.WriteHeader(hdr); err != nil { return err @@ -221,10 +224,11 @@ func ImageBundle(prefix string, ref *reference.Spec, config []byte, runtime Runt } hdr := &tar.Header{ - Name: path.Join(prefix, "config.json"), - Mode: 0644, - Size: int64(len(config)), - Format: tar.FormatPAX, + Name: path.Join(prefix, "config.json"), + Mode: 0644, + Size: int64(len(config)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err @@ -242,6 +246,7 @@ func ImageBundle(prefix string, ref *reference.Spec, config []byte, runtime Runt Name: tmp, Mode: 0755, Typeflag: tar.TypeDir, + ModTime: defaultModTime, Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { @@ -252,6 +257,7 @@ func ImageBundle(prefix string, ref *reference.Spec, config []byte, runtime Runt Name: path.Join(prefix, "rootfs"), Mode: 0755, Typeflag: tar.TypeDir, + ModTime: defaultModTime, Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { @@ -271,6 +277,7 @@ func ImageBundle(prefix string, ref *reference.Spec, config []byte, runtime Runt Name: path.Join(prefix, "rootfs"), Mode: 0755, Typeflag: tar.TypeDir, + ModTime: defaultModTime, Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { @@ -294,10 +301,11 @@ func ImageBundle(prefix string, ref *reference.Spec, config []byte, runtime Runt } hdr = &tar.Header{ - Name: path.Join(prefix, "runtime.json"), - Mode: 0644, - Size: int64(len(runtimeConfig)), - Format: tar.FormatPAX, + Name: path.Join(prefix, "runtime.json"), + Mode: 0644, + Size: int64(len(runtimeConfig)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err diff --git a/src/cmd/linuxkit/moby/output.go b/src/cmd/linuxkit/moby/output.go index 4b51e3ab1..dc8f90e01 100644 --- a/src/cmd/linuxkit/moby/output.go +++ b/src/cmd/linuxkit/moby/output.go @@ -281,10 +281,11 @@ func tarInitrdKernel(kernel, initrd []byte, cmdline string) (*bytes.Buffer, erro buf := new(bytes.Buffer) tw := tar.NewWriter(buf) hdr := &tar.Header{ - Name: "kernel", - Mode: 0600, - Size: int64(len(kernel)), - Format: tar.FormatPAX, + Name: "kernel", + Mode: 0600, + Size: int64(len(kernel)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } err := tw.WriteHeader(hdr) if err != nil { @@ -295,10 +296,11 @@ func tarInitrdKernel(kernel, initrd []byte, cmdline string) (*bytes.Buffer, erro return buf, err } hdr = &tar.Header{ - Name: "initrd.img", - Mode: 0600, - Size: int64(len(initrd)), - Format: tar.FormatPAX, + Name: "initrd.img", + Mode: 0600, + Size: int64(len(initrd)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } err = tw.WriteHeader(hdr) if err != nil { @@ -309,10 +311,11 @@ func tarInitrdKernel(kernel, initrd []byte, cmdline string) (*bytes.Buffer, erro return buf, err } hdr = &tar.Header{ - Name: "cmdline", - Mode: 0600, - Size: int64(len(cmdline)), - Format: tar.FormatPAX, + Name: "cmdline", + Mode: 0600, + Size: int64(len(cmdline)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } err = tw.WriteHeader(hdr) if err != nil { @@ -410,10 +413,11 @@ func outputKernelInitrdTarball(base string, kernel []byte, initrd []byte, cmdlin tw := tar.NewWriter(f) if len(kernel) != 0 { hdr := &tar.Header{ - Name: "kernel", - Mode: 0644, - Size: int64(len(kernel)), - Format: tar.FormatPAX, + Name: "kernel", + Mode: 0644, + Size: int64(len(kernel)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err @@ -424,10 +428,11 @@ func outputKernelInitrdTarball(base string, kernel []byte, initrd []byte, cmdlin } if len(initrd) != 0 { hdr := &tar.Header{ - Name: "initrd.img", - Mode: 0644, - Size: int64(len(initrd)), - Format: tar.FormatPAX, + Name: "initrd.img", + Mode: 0644, + Size: int64(len(initrd)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err @@ -438,10 +443,11 @@ func outputKernelInitrdTarball(base string, kernel []byte, initrd []byte, cmdlin } if len(cmdline) != 0 { hdr := &tar.Header{ - Name: "cmdline", - Mode: 0644, - Size: int64(len(cmdline)), - Format: tar.FormatPAX, + Name: "cmdline", + Mode: 0644, + Size: int64(len(cmdline)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err @@ -452,10 +458,11 @@ func outputKernelInitrdTarball(base string, kernel []byte, initrd []byte, cmdlin } if len(ucode) != 0 { hdr := &tar.Header{ - Name: "ucode.cpio", - Mode: 0644, - Size: int64(len(ucode)), - Format: tar.FormatPAX, + Name: "ucode.cpio", + Mode: 0644, + Size: int64(len(ucode)), + ModTime: defaultModTime, + Format: tar.FormatPAX, } if err := tw.WriteHeader(hdr); err != nil { return err diff --git a/src/cmd/linuxkit/moby/util.go b/src/cmd/linuxkit/moby/util.go index 56afefb88..8765f87f6 100644 --- a/src/cmd/linuxkit/moby/util.go +++ b/src/cmd/linuxkit/moby/util.go @@ -2,11 +2,14 @@ package moby import ( "path/filepath" + "time" ) var ( // MobyDir is the location of the cache directory, defaults to ~/.moby MobyDir string + // Default ModTime for files created during build. Roughly the time LinuxKit got open sourced. + defaultModTime = time.Date(2017, time.April, 18, 16, 30, 0, 0, time.UTC) ) func defaultMobyConfigDir() string {