[lxc-devel] [distrobuilder/master] Support Arch Linux ARM
monstermunchkin on Github
lxc-bot at linuxcontainers.org
Wed Feb 13 13:31:43 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 329 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190213/1269f60d/attachment.bin>
-------------- next part --------------
From 071d0b92125f7f28e89e96699e3b1e4c1da41d64 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at 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.hipp at 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.hipp at 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.hipp at 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.hipp at 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.hipp at 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
}
More information about the lxc-devel
mailing list