[lxc-devel] [distrobuilder/master] Code cleanup

monstermunchkin on Github lxc-bot at linuxcontainers.org
Wed Feb 19 11:36:22 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 310 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200219/d78449c9/attachment-0001.bin>
-------------- next part --------------
From 5120ea1ae041659916746f9897085bda2f2cfd4e Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 19 Feb 2020 11:46:35 +0100
Subject: [PATCH 1/3] *: Use errors.Wrap() when possible

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 distrobuilder/chroot.go     |  4 ++--
 distrobuilder/main.go       | 18 +++++++++---------
 distrobuilder/main_lxc.go   |  6 +++---
 distrobuilder/main_lxd.go   |  4 ++--
 generators/cloud-init.go    |  3 ++-
 generators/hostname.go      |  6 +++---
 generators/template.go      |  3 ++-
 generators/upstart_tty.go   |  6 +++---
 image/lxc.go                | 15 ++++++++-------
 managers/pacman.go          |  6 +++---
 shared/chroot.go            | 16 +++++++++-------
 shared/definition.go        |  4 ++--
 sources/centos-http.go      |  4 ++--
 sources/opensuse-http.go    | 12 ++++++------
 sources/openwrt-http.go     |  6 +++---
 sources/oraclelinux-http.go |  5 +++--
 sources/plamolinux-http.go  |  5 +++--
 sources/sabayon.go          |  3 ++-
 sources/ubuntu-http.go      |  8 ++++----
 19 files changed, 71 insertions(+), 63 deletions(-)

diff --git a/distrobuilder/chroot.go b/distrobuilder/chroot.go
index a38368b2..6c23f7f6 100644
--- a/distrobuilder/chroot.go
+++ b/distrobuilder/chroot.go
@@ -44,7 +44,7 @@ func manageRepositories(def *shared.Definition, manager *managers.Manager, image
 
 		err = manager.RepoHandler(repo)
 		if err != nil {
-			return fmt.Errorf("Error for repository %s: %s", repo.Name, err)
+			return errors.Wrapf(err, "Error for repository %s", repo.Name)
 		}
 	}
 
@@ -69,7 +69,7 @@ func managePackages(def *shared.Definition, manager *managers.Manager, imageTarg
 		for _, action := range def.GetRunnableActions("post-update", imageTarget) {
 			err = shared.RunScript(action.Action)
 			if err != nil {
-				return fmt.Errorf("Failed to run post-update: %s", err)
+				return errors.Wrap(err, "Failed to run post-update")
 			}
 		}
 	}
diff --git a/distrobuilder/main.go b/distrobuilder/main.go
index ff8131ee..2d4c542d 100644
--- a/distrobuilder/main.go
+++ b/distrobuilder/main.go
@@ -54,7 +54,6 @@ import "C"
 import (
 	"bufio"
 	"bytes"
-	"errors"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -64,6 +63,7 @@ import (
 	"strings"
 	"time"
 
+	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
 	"gopkg.in/yaml.v2"
 
@@ -241,20 +241,20 @@ func (c *cmdGlobal) preRunBuild(cmd *cobra.Command, args []string) error {
 	for i, key := range c.definition.Source.Keys {
 		c.definition.Source.Keys[i], err = shared.RenderTemplate(key, c.definition)
 		if err != nil {
-			return fmt.Errorf("Failed to render source keys: %s", err)
+			return errors.Wrap(err, "Failed to render source keys")
 		}
 	}
 
 	// Download the root filesystem
 	err = downloader.Run(*c.definition, c.sourceDir)
 	if err != nil {
-		return fmt.Errorf("Error while downloading source: %s", err)
+		return errors.Wrap(err, "Error while downloading source")
 	}
 
 	// Setup the mounts and chroot into the rootfs
 	exitChroot, err := shared.SetupChroot(c.sourceDir, c.definition.Environment, nil)
 	if err != nil {
-		return fmt.Errorf("Failed to setup chroot: %s", err)
+		return errors.Wrap(err, "Failed to setup chroot")
 	}
 	// Unmount everything and exit the chroot
 	defer exitChroot()
@@ -293,28 +293,28 @@ func (c *cmdGlobal) preRunBuild(cmd *cobra.Command, args []string) error {
 
 	err = manageRepositories(c.definition, manager, imageTargets)
 	if err != nil {
-		return fmt.Errorf("Failed to manage repositories: %s", err)
+		return errors.Wrap(err, "Failed to manage repositories")
 	}
 
 	// Run post unpack hook
 	for _, hook := range c.definition.GetRunnableActions("post-unpack", imageTargets) {
 		err := shared.RunScript(hook.Action)
 		if err != nil {
-			return fmt.Errorf("Failed to run post-unpack: %s", err)
+			return errors.Wrap(err, "Failed to run post-unpack")
 		}
 	}
 
 	// Install/remove/update packages
 	err = managePackages(c.definition, manager, imageTargets)
 	if err != nil {
-		return fmt.Errorf("Failed to manage packages: %s", err)
+		return errors.Wrap(err, "Failed to manage packages")
 	}
 
 	// Run post packages hook
 	for _, hook := range c.definition.GetRunnableActions("post-packages", imageTargets) {
 		err := shared.RunScript(hook.Action)
 		if err != nil {
-			return fmt.Errorf("Failed to run post-packages: %s", err)
+			return errors.Wrap(err, "Failed to run post-packages")
 		}
 	}
 
@@ -397,7 +397,7 @@ func getDefinition(fname string, options []string) (*shared.Definition, error) {
 
 		err := def.SetValue(parts[0], parts[1])
 		if err != nil {
-			return nil, fmt.Errorf("Failed to set option %s: %s", o, err)
+			return nil, errors.Wrapf(err, "Failed to set option %s", o)
 		}
 	}
 
diff --git a/distrobuilder/main_lxc.go b/distrobuilder/main_lxc.go
index 3f0204e9..766136c0 100644
--- a/distrobuilder/main_lxc.go
+++ b/distrobuilder/main_lxc.go
@@ -144,7 +144,7 @@ func (c *cmdLXC) run(cmd *cobra.Command, args []string, overlayDir string) error
 		err := shared.RunScript(action.Action)
 		if err != nil {
 			exitChroot()
-			return fmt.Errorf("Failed to run post-files: %s", err)
+			return errors.Wrap(err, "Failed to run post-files")
 		}
 	}
 
@@ -152,13 +152,13 @@ func (c *cmdLXC) run(cmd *cobra.Command, args []string, overlayDir string) error
 
 	err = img.Build()
 	if err != nil {
-		return fmt.Errorf("Failed to create LXC image: %s", err)
+		return errors.Wrap(err, "Failed to create LXC image")
 	}
 
 	// Clean up the chroot by restoring the orginal files.
 	err = generators.RestoreFiles(c.global.flagCacheDir, overlayDir)
 	if err != nil {
-		return fmt.Errorf("Failed to restore cached files: %s", err)
+		return errors.Wrap(err, "Failed to restore cached files")
 	}
 
 	return nil
diff --git a/distrobuilder/main_lxd.go b/distrobuilder/main_lxd.go
index 38efc123..119aa4e1 100644
--- a/distrobuilder/main_lxd.go
+++ b/distrobuilder/main_lxd.go
@@ -293,7 +293,7 @@ func (c *cmdLXD) run(cmd *cobra.Command, args []string, overlayDir string) error
 		err := shared.RunScript(action.Action)
 		if err != nil {
 			exitChroot()
-			return fmt.Errorf("Failed to run post-files: %s", err)
+			return errors.Wrap(err, "Failed to run post-files")
 		}
 	}
 
@@ -301,7 +301,7 @@ func (c *cmdLXD) run(cmd *cobra.Command, args []string, overlayDir string) error
 
 	err = img.Build(c.flagType == "unified", c.flagCompression, c.flagVM)
 	if err != nil {
-		return fmt.Errorf("Failed to create LXD image: %s", err)
+		return errors.Wrap(err, "Failed to create LXD image")
 	}
 
 	return nil
diff --git a/generators/cloud-init.go b/generators/cloud-init.go
index 5b2507b9..29a3f9b3 100644
--- a/generators/cloud-init.go
+++ b/generators/cloud-init.go
@@ -9,6 +9,7 @@ import (
 
 	lxd "github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/api"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/image"
 	"github.com/lxc/distrobuilder/shared"
@@ -161,7 +162,7 @@ config:
 
 	_, err = file.WriteString(content)
 	if err != nil {
-		return fmt.Errorf("Failed to write to content to %s template: %s", defFile.Name, err)
+		return errors.Wrapf(err, "Failed to write to content to %s template", defFile.Name)
 	}
 
 	if len(defFile.Template.Properties) > 0 {
diff --git a/generators/hostname.go b/generators/hostname.go
index 1539d25e..d8f8ccf6 100644
--- a/generators/hostname.go
+++ b/generators/hostname.go
@@ -1,12 +1,12 @@
 package generators
 
 import (
-	"fmt"
 	"os"
 	"path/filepath"
 
 	lxd "github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/api"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/image"
 	"github.com/lxc/distrobuilder/shared"
@@ -40,7 +40,7 @@ func (g HostnameGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCImag
 	// Write LXC specific string to the hostname file
 	_, err = file.WriteString("LXC_NAME\n")
 	if err != nil {
-		return fmt.Errorf("Failed to write to hostname file: %s", err)
+		return errors.Wrap(err, "Failed to write to hostname file")
 	}
 
 	// Add hostname path to LXC's templates file
@@ -71,7 +71,7 @@ func (g HostnameGenerator) RunLXD(cacheDir, sourceDir string, img *image.LXDImag
 
 	_, err = file.WriteString("{{ container.name }}\n")
 	if err != nil {
-		return fmt.Errorf("Failed to write to hostname file: %s", err)
+		return errors.Wrap(err, "Failed to write to hostname file")
 	}
 
 	// Add to LXD templates
diff --git a/generators/template.go b/generators/template.go
index 4c1f5aa8..82a593a3 100644
--- a/generators/template.go
+++ b/generators/template.go
@@ -7,6 +7,7 @@ import (
 	"strings"
 
 	"github.com/lxc/lxd/shared/api"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/image"
 	"github.com/lxc/distrobuilder/shared"
@@ -47,7 +48,7 @@ func (g TemplateGenerator) RunLXD(cacheDir, sourceDir string, img *image.LXDImag
 
 	_, err = file.WriteString(defFile.Content)
 	if err != nil {
-		return fmt.Errorf("Failed to write to content to %s template: %s", defFile.Name, err)
+		return errors.Wrapf(err, "Failed to write to content to %s template", defFile.Name)
 	}
 
 	// Add to LXD templates
diff --git a/generators/upstart_tty.go b/generators/upstart_tty.go
index a861ff81..afb2e32a 100644
--- a/generators/upstart_tty.go
+++ b/generators/upstart_tty.go
@@ -1,12 +1,12 @@
 package generators
 
 import (
-	"fmt"
 	"os"
 	"path/filepath"
 
 	lxd "github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/api"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/image"
 	"github.com/lxc/distrobuilder/shared"
@@ -74,7 +74,7 @@ func (g UpstartTTYGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCIm
 	// Write LXC specific string to the hostname file
 	_, err = file.WriteString(upstartTTYJob)
 	if err != nil {
-		return fmt.Errorf("Failed to write to upstart job file: %s", err)
+		return errors.Wrap(err, "Failed to write to upstart job file")
 	}
 
 	// Add hostname path to LXC's templates file
@@ -105,7 +105,7 @@ func (g UpstartTTYGenerator) RunLXD(cacheDir, sourceDir string, img *image.LXDIm
 
 	_, err = file.WriteString(upstartTTYJob)
 	if err != nil {
-		return fmt.Errorf("Failed to write to upstart job file: %s", err)
+		return errors.Wrap(err, "Failed to write to upstart job file")
 	}
 
 	// Add to LXD templates
diff --git a/image/lxc.go b/image/lxc.go
index a3f0bb41..15198eb8 100644
--- a/image/lxc.go
+++ b/image/lxc.go
@@ -8,6 +8,7 @@ import (
 	"time"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/shared"
 )
@@ -53,7 +54,7 @@ func (l *LXCImage) AddTemplate(path string) error {
 
 	_, err = file.WriteString(fmt.Sprintf("%v\n", path))
 	if err != nil {
-		return fmt.Errorf("Failed to write to template file: %s", err)
+		return errors.Wrap(err, "Failed to write to template file")
 	}
 
 	return nil
@@ -128,14 +129,14 @@ func (l *LXCImage) createMetadata() error {
 	err := l.writeMetadata(filepath.Join(metaDir, "create-message"),
 		l.definition.Targets.LXC.CreateMessage, false)
 	if err != nil {
-		return fmt.Errorf("Error writing 'create-message': %s", err)
+		return errors.Wrap(err, "Error writing 'create-message'")
 	}
 
 	err = l.writeMetadata(filepath.Join(metaDir, "expiry"),
 		fmt.Sprint(shared.GetExpiryDate(time.Now(), l.definition.Image.Expiry).Unix()),
 		false)
 	if err != nil {
-		return fmt.Errorf("Error writing 'expiry': %s", err)
+		return errors.Wrap(err, "Error writing 'expiry'")
 	}
 
 	var excludesUser string
@@ -155,13 +156,13 @@ func (l *LXCImage) createMetadata() error {
 				return nil
 			})
 		if err != nil {
-			return fmt.Errorf("Error while walking /dev: %s", err)
+			return errors.Wrap(err, "Error while walking /dev")
 		}
 	}
 
 	err = l.writeMetadata(filepath.Join(metaDir, "excludes-user"), excludesUser, false)
 	if err != nil {
-		return fmt.Errorf("Error writing 'excludes-user': %s", err)
+		return errors.Wrap(err, "Error writing 'excludes-user'")
 	}
 
 	return nil
@@ -187,7 +188,7 @@ func (l *LXCImage) packMetadata() error {
 	err = shared.Pack(filepath.Join(l.targetDir, "meta.tar"), "xz",
 		filepath.Join(l.cacheDir, "metadata"), files...)
 	if err != nil {
-		return fmt.Errorf("Failed to create metadata: %s", err)
+		return errors.Wrap(err, "Failed to create metadata")
 	}
 
 	return nil
@@ -236,7 +237,7 @@ func (l *LXCImage) writeConfig(compatLevel uint, filename, content string) error
 	}
 	err := l.writeMetadata(filename, content, true)
 	if err != nil {
-		return fmt.Errorf("Error writing '%s': %s", filepath.Base(filename), err)
+		return errors.Wrapf(err, "Error writing '%s'", filepath.Base(filename))
 	}
 
 	return nil
diff --git a/managers/pacman.go b/managers/pacman.go
index 62473865..d4e947b9 100644
--- a/managers/pacman.go
+++ b/managers/pacman.go
@@ -1,12 +1,12 @@
 package managers
 
 import (
-	"fmt"
 	"os"
 	"path/filepath"
 	"runtime"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/shared"
 )
@@ -71,7 +71,7 @@ func pacmanSetupTrustedKeys() error {
 
 	err = shared.RunCommand("pacman-key", "--init")
 	if err != nil {
-		return fmt.Errorf("Error initializing with pacman-key: %s", err)
+		return errors.Wrap(err, "Error initializing with pacman-key")
 	}
 
 	var keyring string
@@ -84,7 +84,7 @@ func pacmanSetupTrustedKeys() error {
 
 	err = shared.RunCommand("pacman-key", "--populate", keyring)
 	if err != nil {
-		return fmt.Errorf("Error populating with pacman-key: %s", err)
+		return errors.Wrap(err, "Error populating with pacman-key")
 	}
 
 	return nil
diff --git a/shared/chroot.go b/shared/chroot.go
index 1c652b33..e7fc020e 100644
--- a/shared/chroot.go
+++ b/shared/chroot.go
@@ -10,6 +10,8 @@ import (
 	"syscall"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
+	"golang.org/x/sys/unix"
 )
 
 // ChrootMount defines mount args.
@@ -52,7 +54,7 @@ func setupMounts(rootfs string, mounts []ChrootMount) error {
 		// Mount to the temporary path
 		err := syscall.Mount(mount.Source, tmpTarget, mount.FSType, mount.Flags, mount.Data)
 		if err != nil {
-			return fmt.Errorf("Failed to mount '%s': %s", mount.Source, err)
+			return errors.Wrapf(err, "Failed to mount '%s'", mount.Source)
 		}
 	}
 
@@ -109,7 +111,7 @@ func moveMounts(mounts []ChrootMount) error {
 		// Move the mount to its destination
 		err = syscall.Mount(tmpSource, target, "", syscall.MS_MOVE, "")
 		if err != nil {
-			return fmt.Errorf("Failed to mount '%s': %s", mount.Source, err)
+			return errors.Wrapf(err, "Failed to mount '%s'", mount.Source)
 		}
 	}
 
@@ -156,7 +158,7 @@ func SetupChroot(rootfs string, envs DefinitionEnv, m []ChrootMount) (func() err
 	// Mount the rootfs
 	err := syscall.Mount(rootfs, rootfs, "", syscall.MS_BIND, "")
 	if err != nil {
-		return nil, fmt.Errorf("Failed to mount '%s': %s", rootfs, err)
+		return nil, errors.Wrapf(err, "Failed to mount '%s'", rootfs)
 	}
 
 	// Setup all other needed mounts
@@ -187,17 +189,17 @@ func SetupChroot(rootfs string, envs DefinitionEnv, m []ChrootMount) (func() err
 		err = setupMounts(rootfs, mounts)
 	}
 	if err != nil {
-		return nil, fmt.Errorf("Failed to mount filesystems: %v", err)
+		return nil, errors.Wrap(err, "Failed to mount filesystems")
 	}
 
 	// Chroot into the container's rootfs
-	err = syscall.Chroot(rootfs)
+	err = unix.Chroot(rootfs)
 	if err != nil {
 		root.Close()
 		return nil, err
 	}
 
-	err = syscall.Chdir("/")
+	err = unix.Chdir("/")
 	if err != nil {
 		return nil, err
 	}
@@ -299,7 +301,7 @@ exit 101
 		killChrootProcesses(rootfs)
 
 		// And now unmount the entire tree
-		syscall.Unmount(rootfs, syscall.MNT_DETACH)
+		unix.Unmount(rootfs, syscall.MNT_DETACH)
 
 		devPath := filepath.Join(rootfs, "dev")
 
diff --git a/shared/definition.go b/shared/definition.go
index 6f651e81..a61e4d3a 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -1,7 +1,6 @@
 package shared
 
 import (
-	"errors"
 	"fmt"
 	"reflect"
 	"strconv"
@@ -10,6 +9,7 @@ import (
 
 	"github.com/lxc/lxd/shared"
 	lxdarch "github.com/lxc/lxd/shared/osarch"
+	"github.com/pkg/errors"
 )
 
 // ImageTarget represents the image target.
@@ -521,7 +521,7 @@ func (d *Definition) getMappedArchitecture() (string, error) {
 		var err error
 		arch, err = GetArch(d.Mappings.ArchitectureMap, d.Image.Architecture)
 		if err != nil {
-			return "", fmt.Errorf("Failed to translate the architecture name: %s", err)
+			return "", errors.Wrap(err, "Failed to translate the architecture name")
 		}
 	} else if len(d.Mappings.Architectures) > 0 {
 		// Translate the architecture using a user specified mapping
diff --git a/sources/centos-http.go b/sources/centos-http.go
index 98882170..a2cb3d20 100644
--- a/sources/centos-http.go
+++ b/sources/centos-http.go
@@ -3,7 +3,6 @@ package sources
 import (
 	"bytes"
 	"crypto/sha256"
-	"errors"
 	"fmt"
 	"io/ioutil"
 	"net/http"
@@ -16,6 +15,7 @@ import (
 	"strings"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 	"golang.org/x/sys/unix"
 
 	"github.com/lxc/distrobuilder/shared"
@@ -111,7 +111,7 @@ func (s *CentOSHTTP) Run(definition shared.Definition, rootfsDir string) error {
 
 	_, err = shared.DownloadHash(definition.Image, baseURL+s.fname, checksumFile, sha256.New())
 	if err != nil {
-		return fmt.Errorf("Error downloading CentOS image: %s", err)
+		return errors.Wrap(err, "Error downloading CentOS image")
 	}
 
 	if strings.HasSuffix(s.fname, ".raw.xz") || strings.HasSuffix(s.fname, ".raw") {
diff --git a/sources/opensuse-http.go b/sources/opensuse-http.go
index 9d7b224e..aacf6a3c 100644
--- a/sources/opensuse-http.go
+++ b/sources/opensuse-http.go
@@ -2,7 +2,6 @@ package sources
 
 import (
 	"crypto/sha256"
-	"errors"
 	"fmt"
 	"io"
 	"net/http"
@@ -15,6 +14,7 @@ import (
 	"strings"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 	"gopkg.in/antchfx/htmlquery.v1"
 
 	"github.com/lxc/distrobuilder/shared"
@@ -49,7 +49,7 @@ func (s *OpenSUSEHTTP) Run(definition shared.Definition, rootfsDir string) error
 
 	resp, err := http.Head(tarballPath)
 	if err != nil {
-		return fmt.Errorf("Couldn't resolve URL: %v", err)
+		return errors.Wrap(err, "Couldn't resolve URL")
 	}
 
 	baseURL, fname = path.Split(resp.Request.URL.String())
@@ -61,7 +61,7 @@ func (s *OpenSUSEHTTP) Run(definition shared.Definition, rootfsDir string) error
 
 	fpath, err := shared.DownloadHash(definition.Image, url.String(), "", nil)
 	if err != nil {
-		return fmt.Errorf("Error downloading openSUSE image: %s", err)
+		return errors.Wrap(err, "Error downloading openSUSE image")
 	}
 
 	if definition.Source.SkipVerification {
@@ -86,21 +86,21 @@ func (s *OpenSUSEHTTP) Run(definition shared.Definition, rootfsDir string) error
 	checksum, err := shared.GetSignedContent(filepath.Join(fpath, checksumFile),
 		definition.Source.Keys, definition.Source.Keyserver)
 	if err != nil {
-		return fmt.Errorf("Failed to read signed file: %v", err)
+		return errors.Wrap(err, "Failed to read signed file")
 	}
 
 	imagePath := filepath.Join(fpath, fname)
 
 	image, err := os.Open(imagePath)
 	if err != nil {
-		return fmt.Errorf("Failed to verify image: %v", err)
+		return errors.Wrap(err, "Failed to verify image")
 	}
 
 	hash := sha256.New()
 	_, err = io.Copy(hash, image)
 	if err != nil {
 		image.Close()
-		return fmt.Errorf("Failed to verify image: %v", err)
+		return errors.Wrap(err, "Failed to verify image")
 	}
 
 	image.Close()
diff --git a/sources/openwrt-http.go b/sources/openwrt-http.go
index 3619863d..cd7d1482 100644
--- a/sources/openwrt-http.go
+++ b/sources/openwrt-http.go
@@ -3,7 +3,6 @@ package sources
 import (
 	"bufio"
 	"crypto/sha256"
-	"errors"
 	"fmt"
 	"io/ioutil"
 	"net/http"
@@ -14,6 +13,7 @@ import (
 	"strings"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/shared"
 )
@@ -134,12 +134,12 @@ func (s *OpenWrtHTTP) Run(definition shared.Definition, rootfsDir string) error
 
 	err = lxd.Unpack(filepath.Join(fpath, "master.tar.gz"), filepath.Join(os.TempDir(), "distrobuilder", "fixes"), false, false, nil)
 	if err != nil {
-		return fmt.Errorf("Failed to unpack scripts: %v", err)
+		return errors.Wrap(err, "Failed to unpack scripts")
 	}
 
 	err = lxd.Unpack(filepath.Join(fpath, sdk), tempSDKDir, false, false, nil)
 	if err != nil {
-		return fmt.Errorf("Failed to unpack SDK: %v", err)
+		return errors.Wrap(err, "Failed to unpack SDK")
 	}
 
 	currentDir, err := os.Getwd()
diff --git a/sources/oraclelinux-http.go b/sources/oraclelinux-http.go
index 6d21904b..21f99a1e 100644
--- a/sources/oraclelinux-http.go
+++ b/sources/oraclelinux-http.go
@@ -10,6 +10,7 @@ import (
 	"strings"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 	"golang.org/x/sys/unix"
 	"gopkg.in/antchfx/htmlquery.v1"
 
@@ -42,7 +43,7 @@ func (s *OracleLinuxHTTP) Run(definition shared.Definition, rootfsDir string) er
 	fpath, err := shared.DownloadHash(definition.Image, fmt.Sprintf("%s/%s/%s/%s", baseURL, latestUpdate, s.architecture, fname),
 		"", nil)
 	if err != nil {
-		return fmt.Errorf("Error downloading Oracle Linux image: %s", err)
+		return errors.Wrap(err, "Error downloading Oracle Linux image")
 	}
 
 	return s.unpackISO(latestUpdate[1:], filepath.Join(fpath, fname), rootfsDir)
@@ -171,7 +172,7 @@ func (s *OracleLinuxHTTP) unpackISO(latestUpdate, filePath, rootfsDir string) er
 	// Setup the mounts and chroot into the rootfs
 	exitChroot, err := shared.SetupChroot(tempRootDir, shared.DefinitionEnv{}, nil)
 	if err != nil {
-		return fmt.Errorf("Failed to setup chroot: %s", err)
+		return errors.Wrap(err, "Failed to setup chroot")
 	}
 
 	err = shared.RunScript(fmt.Sprintf(`
diff --git a/sources/plamolinux-http.go b/sources/plamolinux-http.go
index 3b72a191..183ffb0a 100644
--- a/sources/plamolinux-http.go
+++ b/sources/plamolinux-http.go
@@ -9,6 +9,7 @@ import (
 	"strings"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 	"gopkg.in/antchfx/htmlquery.v1"
 
 	"github.com/lxc/distrobuilder/shared"
@@ -29,7 +30,7 @@ func (s *PlamoLinuxHTTP) Run(definition shared.Definition, rootfsDir string) err
 
 	release, err := strconv.Atoi(releaseStr)
 	if err != nil {
-		return fmt.Errorf("Failed to determine release: %v", err)
+		return errors.Wrap(err, "Failed to determine release")
 	}
 
 	u, err := url.Parse(definition.Source.URL)
@@ -55,7 +56,7 @@ func (s *PlamoLinuxHTTP) Run(definition shared.Definition, rootfsDir string) err
 
 		pkgDir, err = s.downloadFiles(definition.Image, u.String(), ignoredPkgs)
 		if err != nil {
-			return fmt.Errorf("Failed to download packages: %v", err)
+			return errors.Wrap(err, "Failed to download packages")
 		}
 	}
 
diff --git a/sources/sabayon.go b/sources/sabayon.go
index 5393163c..0e0cbd61 100644
--- a/sources/sabayon.go
+++ b/sources/sabayon.go
@@ -9,6 +9,7 @@ import (
 	"path/filepath"
 
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 
 	"github.com/lxc/distrobuilder/shared"
 )
@@ -31,7 +32,7 @@ func (s *SabayonHTTP) Run(definition shared.Definition, rootfsDir string) error
 
 	resp, err := http.Head(tarballPath)
 	if err != nil {
-		return fmt.Errorf("Couldn't resolve URL: %v", err)
+		return errors.Wrap(err, "Couldn't resolve URL")
 	}
 
 	baseURL, fname = path.Split(resp.Request.URL.String())
diff --git a/sources/ubuntu-http.go b/sources/ubuntu-http.go
index c7ca68c1..10243893 100644
--- a/sources/ubuntu-http.go
+++ b/sources/ubuntu-http.go
@@ -2,7 +2,6 @@ package sources
 
 import (
 	"crypto/sha256"
-	"errors"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -16,6 +15,7 @@ import (
 
 	"github.com/gobuffalo/packr/v2"
 	lxd "github.com/lxc/lxd/shared"
+	"github.com/pkg/errors"
 	"golang.org/x/sys/unix"
 
 	"github.com/lxc/distrobuilder/shared"
@@ -142,7 +142,7 @@ func (s *UbuntuHTTP) runCoreVariant(definition shared.Definition, rootfsDir stri
 
 	_, err = shared.DownloadHash(definition.Image, coreImage, "", sha256.New())
 	if err != nil {
-		return fmt.Errorf("Error downloading base Ubuntu image: %s", err)
+		return errors.Wrap(err, "Error downloading base Ubuntu image")
 	}
 
 	err = s.unpack(filepath.Join(s.fpath, "rootfs.tar.xz"), baseImageDir)
@@ -347,7 +347,7 @@ func (s *UbuntuHTTP) downloadImage(definition shared.Definition) error {
 
 	s.fpath, err = shared.DownloadHash(definition.Image, baseURL+s.fname, checksumFile, sha256.New())
 	if err != nil {
-		return fmt.Errorf("Error downloading Ubuntu image: %s", err)
+		return errors.Wrap(err, "Error downloading Ubuntu image")
 	}
 
 	return nil
@@ -359,7 +359,7 @@ func (s UbuntuHTTP) unpack(filePath, rootDir string) error {
 
 	err := lxd.Unpack(filePath, rootDir, false, false, nil)
 	if err != nil {
-		return fmt.Errorf("Failed to unpack tarball: %s", err)
+		return errors.Wrap(err, "Failed to unpack tarball")
 	}
 
 	return nil

From e9c46bea6e121b9a7665571cc8fe5919a96f59bb Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 19 Feb 2020 12:02:03 +0100
Subject: [PATCH 2/3] generators: Remove StoreFile and RestoreFiles

This removes the functions StoreFile and RestoreFiles. They are not
needed anymore since distrobuilder now uses overlayfs.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 distrobuilder/main_lxc.go     |  6 ---
 generators/cloud-init.go      | 16 ++----
 generators/cloud-init_test.go | 21 --------
 generators/generators.go      | 92 -----------------------------------
 generators/generators_test.go | 43 ----------------
 generators/hostname.go        |  6 ---
 generators/hostname_test.go   |  6 ---
 generators/hosts.go           |  6 ---
 generators/hosts_test.go      |  8 ---
 generators/upstart_tty.go     |  6 ---
 10 files changed, 3 insertions(+), 207 deletions(-)

diff --git a/distrobuilder/main_lxc.go b/distrobuilder/main_lxc.go
index 766136c0..2ca3b98f 100644
--- a/distrobuilder/main_lxc.go
+++ b/distrobuilder/main_lxc.go
@@ -155,11 +155,5 @@ func (c *cmdLXC) run(cmd *cobra.Command, args []string, overlayDir string) error
 		return errors.Wrap(err, "Failed to create LXC image")
 	}
 
-	// Clean up the chroot by restoring the orginal files.
-	err = generators.RestoreFiles(c.global.flagCacheDir, overlayDir)
-	if err != nil {
-		return errors.Wrap(err, "Failed to restore cached files")
-	}
-
 	return nil
 }
diff --git a/generators/cloud-init.go b/generators/cloud-init.go
index 29a3f9b3..46c7468d 100644
--- a/generators/cloud-init.go
+++ b/generators/cloud-init.go
@@ -32,7 +32,7 @@ func (g CloudInitGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCIma
 			}
 
 			if lxd.StringInSlice(info.Name(), []string{"cloud-init-local", "cloud-config", "cloud-init", "cloud-final"}) {
-				err := StoreFile(cacheDir, sourceDir, strings.TrimPrefix(path, sourceDir))
+				err := os.Remove(path)
 				if err != nil {
 					return err
 				}
@@ -62,7 +62,7 @@ func (g CloudInitGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCIma
 			}
 
 			if re.MatchString(info.Name()) {
-				err := StoreFile(cacheDir, sourceDir, strings.TrimPrefix(path, sourceDir))
+				err := os.Remove(path)
 				if err != nil {
 					return err
 				}
@@ -74,20 +74,10 @@ func (g CloudInitGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCIma
 
 	// With systemd:
 	if !lxd.PathExists(filepath.Join(sourceDir, "/etc/cloud")) {
-		err := StoreFile(cacheDir, sourceDir, "/etc/cloud")
+		err := os.MkdirAll(filepath.Join(sourceDir, "/etc/cloud"), 0755)
 		if err != nil {
 			return err
 		}
-
-		err = os.MkdirAll(filepath.Join(sourceDir, "/etc/cloud"), 0755)
-		if err != nil {
-			return err
-		}
-	}
-
-	err := StoreFile(cacheDir, sourceDir, "/etc/cloud/cloud-init.disabled")
-	if err != nil {
-		return err
 	}
 
 	// Create file /etc/cloud/cloud-init.disabled
diff --git a/generators/cloud-init_test.go b/generators/cloud-init_test.go
index bf1efca8..06ce41a6 100644
--- a/generators/cloud-init_test.go
+++ b/generators/cloud-init_test.go
@@ -71,27 +71,6 @@ func TestCloudInitGeneratorRunLXC(t *testing.T) {
 	}
 
 	require.FileExists(t, filepath.Join(rootfsDir, "etc", "cloud", "cloud-init.disabled"))
-
-	err = RestoreFiles(cacheDir, rootfsDir)
-	require.NoError(t, err)
-
-	// Check whether the files have been restored
-	for _, f := range []string{"cloud-init-local", "cloud-config", "cloud-init", "cloud-final"} {
-		fullPath := filepath.Join(rootfsDir, "etc", "runlevels", f)
-		require.FileExists(t, fullPath)
-	}
-
-	for i := 0; i <= 6; i++ {
-		dir := filepath.Join(rootfsDir, "etc", "rc.d", fmt.Sprintf("rc%d.d", i))
-
-		for _, f := range []string{"cloud-init-local", "cloud-config", "cloud-init", "cloud-final"} {
-			fullPath := filepath.Join(dir, fmt.Sprintf("S99%s", f))
-			require.FileExists(t, fullPath)
-		}
-	}
-
-	fullPath := filepath.Join(rootfsDir, "etc", "cloud", "cloud-init.disabled")
-	require.Falsef(t, lxd.PathExists(fullPath), "File '%s' exists but shouldn't", fullPath)
 }
 
 func TestCloudInitGeneratorRunLXD(t *testing.T) {
diff --git a/generators/generators.go b/generators/generators.go
index 288afce1..db34e76c 100644
--- a/generators/generators.go
+++ b/generators/generators.go
@@ -2,12 +2,6 @@ package generators
 
 import (
 	"errors"
-	"os"
-	p "path"
-	"path/filepath"
-	"strings"
-
-	lxd "github.com/lxc/lxd/shared"
 
 	"github.com/lxc/distrobuilder/image"
 	"github.com/lxc/distrobuilder/shared"
@@ -48,89 +42,3 @@ func Get(generator string) Generator {
 
 	return nil
 }
-
-var storedFiles = map[string]os.FileInfo{}
-
-// StoreFile caches a file which can be restored with the RestoreFiles function.
-func StoreFile(cacheDir, sourceDir, path string) error {
-	fullPath := filepath.Join(sourceDir, path)
-
-	_, ok := storedFiles[fullPath]
-	if ok {
-		// This file or directory has already been recorded
-		return nil
-	}
-
-	// Record newly created files
-	if !lxd.PathExists(fullPath) {
-		storedFiles[fullPath] = nil
-		return nil
-	}
-
-	// create temporary directory containing old files
-	err := os.MkdirAll(filepath.Join(cacheDir, "tmp", p.Dir(path)), 0755)
-	if err != nil {
-		return err
-	}
-
-	info, err := os.Lstat(fullPath)
-	if err != nil {
-		return err
-	}
-
-	storedFiles[fullPath] = info
-
-	err = os.Rename(fullPath, filepath.Join(cacheDir, "tmp", path))
-	if err == nil {
-		return nil
-	}
-
-	// Try copying the file since renaming it failed
-	if info.IsDir() {
-		err = lxd.DirCopy(fullPath, filepath.Join(cacheDir, "tmp", path))
-	} else {
-		err = lxd.FileCopy(fullPath, filepath.Join(cacheDir, "tmp", path))
-	}
-	if err != nil {
-		return err
-	}
-
-	return os.RemoveAll(fullPath)
-}
-
-// RestoreFiles restores original files which were cached by StoreFile.
-func RestoreFiles(cacheDir, sourceDir string) error {
-	var err error
-
-	for origPath, fi := range storedFiles {
-		// Deal with newly created files
-		if fi == nil {
-			err := os.RemoveAll(origPath)
-			if err != nil {
-				return err
-			}
-
-			continue
-		}
-
-		err = os.Rename(filepath.Join(cacheDir, "tmp", strings.TrimPrefix(origPath, sourceDir)), origPath)
-		if err == nil {
-			continue
-		}
-
-		// Try copying the file or directory since renaming it failed
-		if fi.IsDir() {
-			err = lxd.DirCopy(filepath.Join(cacheDir, "tmp", strings.TrimPrefix(origPath, sourceDir)), origPath)
-		} else {
-			err = lxd.FileCopy(filepath.Join(cacheDir, "tmp", strings.TrimPrefix(origPath, sourceDir)), origPath)
-		}
-		if err != nil {
-			return err
-		}
-	}
-
-	// Reset the list of stored files
-	storedFiles = map[string]os.FileInfo{}
-
-	return nil
-}
diff --git a/generators/generators_test.go b/generators/generators_test.go
index c312fb92..3c39d7b9 100644
--- a/generators/generators_test.go
+++ b/generators/generators_test.go
@@ -31,49 +31,6 @@ func TestGet(t *testing.T) {
 	require.Nil(t, generator)
 }
 
-func TestRestoreFiles(t *testing.T) {
-	cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
-	rootfsDir := filepath.Join(cacheDir, "rootfs")
-
-	setup(t, cacheDir)
-	defer teardown(cacheDir)
-
-	// Create test directory
-	err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "testdir1"), 0755)
-	require.NoError(t, err)
-
-	// Create original test file
-	createTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
-		"original file")
-
-	// Chmod cache directory which should lead to StoreFile failing
-	err = os.Chmod(cacheDir, 0600)
-	require.NoError(t, err)
-
-	err = StoreFile(cacheDir, rootfsDir, filepath.Join("/testdir1", "testfile1"))
-	require.Error(t, err)
-
-	// Restore permissions
-	err = os.Chmod(cacheDir, 0755)
-	require.NoError(t, err)
-
-	err = StoreFile(cacheDir, rootfsDir, filepath.Join("/testdir1", "testfile1"))
-	require.NoError(t, err)
-
-	validateTestFile(t, filepath.Join(cacheDir, "tmp", "testdir1", "testfile1"),
-		"original file")
-
-	// Change content of original file
-	createTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
-		"modified file")
-
-	err = RestoreFiles(cacheDir, rootfsDir)
-	require.NoError(t, err)
-
-	validateTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
-		"original file")
-}
-
 func createTestFile(t *testing.T, path, content string) {
 	file, err := os.Create(path)
 	require.NoError(t, err)
diff --git a/generators/hostname.go b/generators/hostname.go
index d8f8ccf6..136609c6 100644
--- a/generators/hostname.go
+++ b/generators/hostname.go
@@ -24,12 +24,6 @@ func (g HostnameGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCImag
 		return nil
 	}
 
-	// Store original file
-	err := StoreFile(cacheDir, sourceDir, defFile.Path)
-	if err != nil {
-		return err
-	}
-
 	// Create new hostname file
 	file, err := os.Create(filepath.Join(sourceDir, defFile.Path))
 	if err != nil {
diff --git a/generators/hostname_test.go b/generators/hostname_test.go
index ebc00e58..cb598843 100644
--- a/generators/hostname_test.go
+++ b/generators/hostname_test.go
@@ -39,13 +39,7 @@ func TestHostnameGeneratorRunLXC(t *testing.T) {
 		shared.DefinitionFile{Path: "/etc/hostname"})
 	require.NoError(t, err)
 
-	validateTestFile(t, filepath.Join(cacheDir, "tmp", "etc", "hostname"), "hostname")
 	validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hostname"), "LXC_NAME\n")
-
-	err = RestoreFiles(cacheDir, rootfsDir)
-	require.NoError(t, err)
-
-	validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hostname"), "hostname")
 }
 
 func TestHostnameGeneratorRunLXD(t *testing.T) {
diff --git a/generators/hosts.go b/generators/hosts.go
index 8465d96f..b4ac000d 100644
--- a/generators/hosts.go
+++ b/generators/hosts.go
@@ -30,12 +30,6 @@ func (g HostsGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCImage,
 		return err
 	}
 
-	// Store original file
-	err = StoreFile(cacheDir, sourceDir, defFile.Path)
-	if err != nil {
-		return err
-	}
-
 	// Replace hostname with placeholder
 	content = []byte(strings.Replace(string(content), "distrobuilder", "LXC_NAME", -1))
 
diff --git a/generators/hosts_test.go b/generators/hosts_test.go
index e0409b70..cabb1ca2 100644
--- a/generators/hosts_test.go
+++ b/generators/hosts_test.go
@@ -40,16 +40,8 @@ func TestHostsGeneratorRunLXC(t *testing.T) {
 		shared.DefinitionFile{Path: "/etc/hosts"})
 	require.NoError(t, err)
 
-	validateTestFile(t, filepath.Join(cacheDir, "tmp", "etc", "hosts"),
-		"127.0.0.1\tlocalhost\n127.0.0.1\tdistrobuilder\n")
 	validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
 		"127.0.0.1\tlocalhost\n127.0.0.1\tLXC_NAME\n")
-
-	err = RestoreFiles(cacheDir, rootfsDir)
-	require.NoError(t, err)
-
-	validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
-		"127.0.0.1\tlocalhost\n127.0.0.1\tdistrobuilder\n")
 }
 
 func TestHostsGeneratorRunLXD(t *testing.T) {
diff --git a/generators/upstart_tty.go b/generators/upstart_tty.go
index afb2e32a..ea04e55e 100644
--- a/generators/upstart_tty.go
+++ b/generators/upstart_tty.go
@@ -58,12 +58,6 @@ func (g UpstartTTYGenerator) RunLXC(cacheDir, sourceDir string, img *image.LXCIm
 		return nil
 	}
 
-	// Store original file
-	err := StoreFile(cacheDir, sourceDir, defFile.Path)
-	if err != nil {
-		return err
-	}
-
 	// Create new hostname file
 	file, err := os.Create(filepath.Join(sourceDir, defFile.Path))
 	if err != nil {

From c3fd936a74860dd174362476d0d25ecc75aa2049 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 19 Feb 2020 12:04:36 +0100
Subject: [PATCH 3/3] *: Replace syscall package with unix

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 image/lxc_test.go |  6 +++---
 shared/chroot.go  | 19 +++++++++----------
 2 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/image/lxc_test.go b/image/lxc_test.go
index ad8885cd..e544c0d7 100644
--- a/image/lxc_test.go
+++ b/image/lxc_test.go
@@ -8,10 +8,10 @@ import (
 	"os"
 	"path/filepath"
 	"strings"
-	"syscall"
 	"testing"
 
 	"github.com/stretchr/testify/require"
+	"golang.org/x/sys/unix"
 
 	"github.com/lxc/distrobuilder/shared"
 )
@@ -196,8 +196,8 @@ func TestLXCCreateMetadataBasic(t *testing.T) {
 			func(l LXCImage) *LXCImage {
 				// Create /dev and device file.
 				os.MkdirAll(filepath.Join(lxcCacheDir(), "rootfs", "dev"), 0755)
-				syscall.Mknod(filepath.Join(lxcCacheDir(), "rootfs", "dev", "null"),
-					syscall.S_IFCHR, 0)
+				unix.Mknod(filepath.Join(lxcCacheDir(), "rootfs", "dev", "null"),
+					unix.S_IFCHR, 0)
 				return &l
 			},
 		},
diff --git a/shared/chroot.go b/shared/chroot.go
index e7fc020e..c176f51b 100644
--- a/shared/chroot.go
+++ b/shared/chroot.go
@@ -7,7 +7,6 @@ import (
 	"path/filepath"
 	"regexp"
 	"strconv"
-	"syscall"
 
 	lxd "github.com/lxc/lxd/shared"
 	"github.com/pkg/errors"
@@ -52,7 +51,7 @@ func setupMounts(rootfs string, mounts []ChrootMount) error {
 		}
 
 		// Mount to the temporary path
-		err := syscall.Mount(mount.Source, tmpTarget, mount.FSType, mount.Flags, mount.Data)
+		err := unix.Mount(mount.Source, tmpTarget, mount.FSType, mount.Flags, mount.Data)
 		if err != nil {
 			return errors.Wrapf(err, "Failed to mount '%s'", mount.Source)
 		}
@@ -109,7 +108,7 @@ func moveMounts(mounts []ChrootMount) error {
 		}
 
 		// Move the mount to its destination
-		err = syscall.Mount(tmpSource, target, "", syscall.MS_MOVE, "")
+		err = unix.Mount(tmpSource, target, "", unix.MS_MOVE, "")
 		if err != nil {
 			return errors.Wrapf(err, "Failed to mount '%s'", mount.Source)
 		}
@@ -145,7 +144,7 @@ func killChrootProcesses(rootfs string) error {
 			link, _ := os.Readlink(filepath.Join(rootfs, "proc", dir, "root"))
 			if link == rootfs {
 				pid, _ := strconv.Atoi(dir)
-				syscall.Kill(pid, syscall.SIGKILL)
+				unix.Kill(pid, unix.SIGKILL)
 			}
 		}
 	}
@@ -156,7 +155,7 @@ func killChrootProcesses(rootfs string) error {
 // SetupChroot sets up mount and files, a reverter and then chroots for you
 func SetupChroot(rootfs string, envs DefinitionEnv, m []ChrootMount) (func() error, error) {
 	// Mount the rootfs
-	err := syscall.Mount(rootfs, rootfs, "", syscall.MS_BIND, "")
+	err := unix.Mount(rootfs, rootfs, "", unix.MS_BIND, "")
 	if err != nil {
 		return nil, errors.Wrapf(err, "Failed to mount '%s'", rootfs)
 	}
@@ -165,10 +164,10 @@ func SetupChroot(rootfs string, envs DefinitionEnv, m []ChrootMount) (func() err
 	mounts := []ChrootMount{
 		{"none", "/proc", "proc", 0, "", true},
 		{"none", "/sys", "sysfs", 0, "", true},
-		{"/dev", "/dev", "", syscall.MS_BIND, "", true},
+		{"/dev", "/dev", "", unix.MS_BIND, "", true},
 		{"none", "/run", "tmpfs", 0, "", true},
 		{"none", "/tmp", "tmpfs", 0, "", true},
-		{"/etc/resolv.conf", "/etc/resolv.conf", "", syscall.MS_BIND, "", false},
+		{"/etc/resolv.conf", "/etc/resolv.conf", "", unix.MS_BIND, "", false},
 	}
 
 	// Keep a reference to the host rootfs and cwd
@@ -286,12 +285,12 @@ exit 101
 			return err
 		}
 
-		err = syscall.Chroot(".")
+		err = unix.Chroot(".")
 		if err != nil {
 			return err
 		}
 
-		err = syscall.Chdir(cwd)
+		err = unix.Chdir(cwd)
 		if err != nil {
 			return err
 		}
@@ -301,7 +300,7 @@ exit 101
 		killChrootProcesses(rootfs)
 
 		// And now unmount the entire tree
-		unix.Unmount(rootfs, syscall.MNT_DETACH)
+		unix.Unmount(rootfs, unix.MNT_DETACH)
 
 		devPath := filepath.Join(rootfs, "dev")
 


More information about the lxc-devel mailing list