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

Reply via email to