[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