The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/130
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === This resolves #129.
From 071d0b92125f7f28e89e96699e3b1e4c1da41d64 Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Wed, 13 Feb 2019 13:05:35 +0100 Subject: [PATCH 1/3] shared: Add Arch Linux mapping Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- shared/definition.go | 1 + shared/osarch.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/shared/definition.go b/shared/definition.go index 16f020e..367f13b 100644 --- a/shared/definition.go +++ b/shared/definition.go @@ -273,6 +273,7 @@ func (d *Definition) Validate() error { validMappings := []string{ "alpinelinux", + "archlinux", "centos", "debian", "gentoo", diff --git a/shared/osarch.go b/shared/osarch.go index 505c6e2..a3830ff 100644 --- a/shared/osarch.go +++ b/shared/osarch.go @@ -11,6 +11,12 @@ var alpineLinuxArchitectureNames = map[int]string{ osarch.ARCH_32BIT_ARMV7_LITTLE_ENDIAN: "armhf", } +var archLinuxArchitectureNames = map[int]string{ + osarch.ARCH_64BIT_INTEL_X86: "x86_64", + osarch.ARCH_32BIT_ARMV7_LITTLE_ENDIAN: "armv7", + osarch.ARCH_64BIT_ARMV8_LITTLE_ENDIAN: "aarch64", +} + var centosArchitectureNames = map[int]string{ osarch.ARCH_32BIT_INTEL_X86: "i386", } @@ -37,6 +43,7 @@ var gentooArchitectureNames = map[int]string{ var distroArchitecture = map[string]map[int]string{ "alpinelinux": alpineLinuxArchitectureNames, + "archlinux": archLinuxArchitectureNames, "centos": centosArchitectureNames, "debian": debianArchitectureNames, "gentoo": gentooArchitectureNames, From 1618bc5f62110b9ddd5a709c5181578d3438c4e4 Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Wed, 13 Feb 2019 13:08:14 +0100 Subject: [PATCH 2/3] sources: Support Arch Linux ARM Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- sources/archlinux-http.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/sources/archlinux-http.go b/sources/archlinux-http.go index f12ece2..86b38f2 100644 --- a/sources/archlinux-http.go +++ b/sources/archlinux-http.go @@ -27,7 +27,9 @@ func NewArchLinuxHTTP() *ArchLinuxHTTP { func (s *ArchLinuxHTTP) Run(definition shared.Definition, rootfsDir string) error { release := definition.Image.Release - if release == "" { + // Releases are only available for the x86_64 architecture. ARM only has + // a "latest" tarball. + if definition.Image.ArchitectureMapped == "x86_64" && release == "" { var err error // Get latest release @@ -37,10 +39,19 @@ func (s *ArchLinuxHTTP) Run(definition shared.Definition, rootfsDir string) erro } } - fname := fmt.Sprintf("archlinux-bootstrap-%s-%s.tar.gz", - release, definition.Image.ArchitectureMapped) - tarball := fmt.Sprintf("%s/%s/%s", definition.Source.URL, - release, fname) + var fname string + var tarball string + + if definition.Image.ArchitectureMapped == "x86_64" { + fname = fmt.Sprintf("archlinux-bootstrap-%s-%s.tar.gz", + release, definition.Image.ArchitectureMapped) + tarball = fmt.Sprintf("%s/%s/%s", definition.Source.URL, + release, fname) + } else { + fname = fmt.Sprintf("ArchLinuxARM-%s-latest.tar.gz", + definition.Image.ArchitectureMapped) + tarball = fmt.Sprintf("%s/os/%s", definition.Source.URL, fname) + } url, err := url.Parse(tarball) if err != nil { @@ -80,7 +91,7 @@ func (s *ArchLinuxHTTP) Run(definition shared.Definition, rootfsDir string) erro return err } - // Move everything inside 'root.x86_64' (which was is the tarball) to its + // Move everything inside 'root.<architecture>' (which was is the tarball) to its // parent directory files, err := filepath.Glob(fmt.Sprintf("%s/*", filepath.Join(rootfsDir, "root."+definition.Image.ArchitectureMapped))) From d9aa951b845231199feea48b61f1bc76c4ac0d9d Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Wed, 13 Feb 2019 14:29:09 +0100 Subject: [PATCH 3/3] pacman: Support Arch Linux ARM Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- managers/pacman.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/managers/pacman.go b/managers/pacman.go index f7cb17a..2b67c7d 100644 --- a/managers/pacman.go +++ b/managers/pacman.go @@ -4,6 +4,9 @@ import ( "fmt" "os" "path/filepath" + "runtime" + + lxd "github.com/lxc/lxd/shared" "github.com/lxc/distrobuilder/shared" ) @@ -65,7 +68,15 @@ func pacmanSetupTrustedKeys() error { return fmt.Errorf("Error initializing with pacman-key: %s", err) } - err = shared.RunCommand("pacman-key", "--populate", "archlinux") + var keyring string + + if lxd.StringInSlice(runtime.GOARCH, []string{"arm", "arm64"}) { + keyring = "archlinuxarm" + } else { + keyring = "archlinux" + } + + err = shared.RunCommand("pacman-key", "--populate", keyring) if err != nil { return fmt.Errorf("Error populating with pacman-key: %s", err) } @@ -80,7 +91,15 @@ func pacmanSetMirrorlist() error { } defer f.Close() - _, err = f.WriteString("Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch") + var mirror string + + if lxd.StringInSlice(runtime.GOARCH, []string{"arm", "arm64"}) { + mirror = "Server = http://mirror.archlinuxarm.org/$arch/$repo" + } else { + mirror = "Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch" + } + + _, err = f.WriteString(mirror) if err != nil { return err }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel