[lxc-devel] [distrobuilder/master] Handle architecture names properly

monstermunchkin on Github lxc-bot at linuxcontainers.org
Fri Feb 9 17:52:50 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 422 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180209/978ae626/attachment.bin>
-------------- next part --------------
From 2424094b17fcc9854629b0b5635930cfbd0b643f Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 7 Feb 2018 11:35:29 +0100
Subject: [PATCH 1/2] *: get correct arch

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 distrobuilder/main.go  |  2 +-
 shared/distro.go       | 18 +++++++++++++
 shared/distro_test.go  | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
 sources/alpine-http.go |  8 +-----
 sources/centos-http.go |  5 ----
 sources/ubuntu-http.go |  9 ++-----
 6 files changed, 95 insertions(+), 20 deletions(-)
 create mode 100644 shared/distro.go
 create mode 100644 shared/distro_test.go

diff --git a/distrobuilder/main.go b/distrobuilder/main.go
index c8187a4..c574b12 100644
--- a/distrobuilder/main.go
+++ b/distrobuilder/main.go
@@ -142,7 +142,7 @@ func run(c *cli.Context) error {
 	}
 
 	err = downloader.Run(def.Source.URL, def.Image.Release, def.Image.Variant,
-		def.Image.Arch, c.GlobalString("cache-dir"))
+		shared.GetArch(def.Image.Distribution, def.Image.Arch), c.GlobalString("cache-dir"))
 	if err != nil {
 		return fmt.Errorf("Error while downloading source: %s", err)
 	}
diff --git a/shared/distro.go b/shared/distro.go
new file mode 100644
index 0000000..398b64e
--- /dev/null
+++ b/shared/distro.go
@@ -0,0 +1,18 @@
+package shared
+
+// GetArch returns the correct architecture name used by the specified
+// distribution.
+func GetArch(distro, arch string) string {
+	switch distro {
+	case "alpinelinux", "archlinux", "centos":
+		if arch == "amd64" {
+			return "x86_64"
+		}
+	case "debian", "ubuntu":
+		if arch == "x86_64" {
+			return "amd64"
+		}
+	}
+
+	return arch
+}
diff --git a/shared/distro_test.go b/shared/distro_test.go
new file mode 100644
index 0000000..d0ee7af
--- /dev/null
+++ b/shared/distro_test.go
@@ -0,0 +1,73 @@
+package shared
+
+import (
+	"log"
+	"testing"
+)
+
+func TestGetArch(t *testing.T) {
+	tests := []struct {
+		distro   string
+		arch     string
+		expected string
+	}{
+		{
+			"alpinelinux",
+			"amd64",
+			"x86_64",
+		},
+		{
+			"alpinelinux",
+			"x86_64",
+			"x86_64",
+		},
+		{
+			"archlinux",
+			"amd64",
+			"x86_64",
+		},
+		{
+			"archlinux",
+			"x86_64",
+			"x86_64",
+		},
+		{
+			"centos",
+			"amd64",
+			"x86_64",
+		},
+		{
+			"centos",
+			"x86_64",
+			"x86_64",
+		},
+		{
+			"debian",
+			"amd64",
+			"amd64",
+		},
+		{
+			"debian",
+			"x86_64",
+			"amd64",
+		},
+		{
+			"ubuntu",
+			"amd64",
+			"amd64",
+		},
+		{
+			"ubuntu",
+			"x86_64",
+			"amd64",
+		},
+	}
+
+	for i, tt := range tests {
+		log.Printf("Running test #%d: %s %s", i, tt.distro, tt.arch)
+		arch := GetArch(tt.distro, tt.arch)
+		if arch != tt.expected {
+			t.Fatalf("Wrong arch: Expected '%s', got '%s'", tt.expected, arch)
+		}
+	}
+}
diff --git a/sources/alpine-http.go b/sources/alpine-http.go
index 487970c..f29c652 100644
--- a/sources/alpine-http.go
+++ b/sources/alpine-http.go
@@ -21,12 +21,6 @@ func NewAlpineLinuxHTTP() *AlpineLinuxHTTP {
 
 // Run runs debootstrap.
 func (s *AlpineLinuxHTTP) Run(URL, release, variant, arch, cacheDir string) error {
-	realArch := arch
-
-	if arch == "amd64" {
-		realArch = "x86_64"
-	}
-
 	fname := fmt.Sprintf("alpine-minirootfs-%s-%s.tar.gz", release, arch)
 
 	// Download
@@ -34,7 +28,7 @@ func (s *AlpineLinuxHTTP) Run(URL, release, variant, arch, cacheDir string) erro
 	strings.Join(parts[0:2], ".")
 	err := shared.Download(URL+path.Join("/",
 		fmt.Sprintf("v%s", strings.Join(strings.Split(release, ".")[0:2], ".")),
-		"releases", realArch, fname), "")
+		"releases", arch, fname), "")
 	if err != nil {
 		return err
 	}
diff --git a/sources/centos-http.go b/sources/centos-http.go
index 23c8aca..48a42bb 100644
--- a/sources/centos-http.go
+++ b/sources/centos-http.go
@@ -29,11 +29,6 @@ func NewCentOSHTTP() *CentOSHTTP {
 func (s *CentOSHTTP) Run(URL, release, variant, arch, cacheDir string) error {
 	s.cacheDir = cacheDir
 
-	realArch := arch
-	if realArch == "amd64" {
-		realArch = "x86_64"
-	}
-
 	s.fname = getRelease(URL, release, variant, arch)
 	if s.fname == "" {
 		return fmt.Errorf("Couldn't get name of iso")
diff --git a/sources/ubuntu-http.go b/sources/ubuntu-http.go
index 0111227..479882b 100644
--- a/sources/ubuntu-http.go
+++ b/sources/ubuntu-http.go
@@ -26,16 +26,11 @@ func NewUbuntuHTTP() *UbuntuHTTP {
 
 // Run downloads the tarball and unpacks it.
 func (s *UbuntuHTTP) Run(URL, release, variant, arch, cacheDir string) error {
-	realArch := arch
-	if realArch == "x86_64" {
-		realArch = "amd64"
-	}
-
 	if strings.ContainsAny(release, "0123456789") {
-		s.fname = fmt.Sprintf("ubuntu-base-%s-base-%s.tar.gz", release, realArch)
+		s.fname = fmt.Sprintf("ubuntu-base-%s-base-%s.tar.gz", release, arch)
 	} else {
 		// if release is non-numerical, find the latest release
-		s.fname = getLatestRelease(URL, release, realArch)
+		s.fname = getLatestRelease(URL, release, arch)
 		if s.fname == "" {
 			return fmt.Errorf("Couldn't find latest release")
 		}

From cb872c3637c4d147b74dafab155db28f3021aec1 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 7 Feb 2018 11:16:09 +0100
Subject: [PATCH 2/2] sources: fix debootstrap condition

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 sources/debootstrap.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sources/debootstrap.go b/sources/debootstrap.go
index 6a398dc..1439ce3 100644
--- a/sources/debootstrap.go
+++ b/sources/debootstrap.go
@@ -25,7 +25,7 @@ func (s *Debootstrap) Run(URL, release, variant, arch, cacheDir string) error {
 		args = append(args, "--variant", variant)
 	}
 
-	if arch != arch {
+	if arch != "" {
 		args = append(args, "--arch", arch)
 	}
 


More information about the lxc-devel mailing list