[lxc-devel] [distrobuilder/master] CentOS fixes

monstermunchkin on Github lxc-bot at linuxcontainers.org
Mon Sep 23 19:32:52 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 360 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190923/7b817b2e/attachment.bin>
-------------- next part --------------
From a15de2177851980861ce32594e2dcbec9f764212 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Mon, 23 Sep 2019 21:25:47 +0200
Subject: [PATCH 1/2] sources: Figure out partion offset from fdisk

This removes the hard-coded offset and instead gets it from fdisk.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 sources/centos-http.go | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/sources/centos-http.go b/sources/centos-http.go
index dc3afd6..7812420 100644
--- a/sources/centos-http.go
+++ b/sources/centos-http.go
@@ -1,6 +1,7 @@
 package sources
 
 import (
+	"bytes"
 	"crypto/sha256"
 	"errors"
 	"fmt"
@@ -118,8 +119,24 @@ func (s CentOSHTTP) unpackRaw(filePath, rootfsDir string) error {
 
 	rawFilePath := strings.TrimSuffix(filePath, ".xz")
 
+	// Figure out the offset
+	var buf bytes.Buffer
+
+	err := lxd.RunCommandWithFds(nil, &buf, "fdisk", "-l", "-o", "Start", rawFilePath)
+	if err != nil {
+		return err
+	}
+
+	output := strings.Split(buf.String(), "\n")
+	offsetStr := strings.TrimSpace(output[len(output)-2])
+
+	offset, err := strconv.Atoi(offsetStr)
+	if err != nil {
+		return err
+	}
+
 	// Mount the partition read-only since we don't want to accidently modify it.
-	err := shared.RunCommand("mount", "-o", "ro,loop,offset=1048576",
+	err = shared.RunCommand("mount", "-o", fmt.Sprintf("ro,loop,offset=%d", offset*512),
 		rawFilePath, roRootDir)
 	if err != nil {
 		return err

From f4b0e54e09929db5d51944a0365dc3a19a811cde Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Mon, 23 Sep 2019 21:30:11 +0200
Subject: [PATCH 2/2] shared,sources: Fix CentOS raw image handling

This fixes the path of the downloaded raw image. It will an existing
image if present instead of downloading it again.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 shared/net.go          | 4 +---
 shared/util.go         | 8 ++++++++
 sources/centos-http.go | 9 ++++++---
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/shared/net.go b/shared/net.go
index f167d8d..aa16210 100644
--- a/shared/net.go
+++ b/shared/net.go
@@ -24,9 +24,7 @@ func DownloadHash(def DefinitionImage, file, checksum string, hashFunc hash.Hash
 		hash   string
 		err    error
 	)
-	targetDir := filepath.Join(os.TempDir(), fmt.Sprintf("%s-%s-%s", def.Distribution, def.Release, def.ArchitectureMapped))
-	targetDir = strings.Replace(targetDir, " ", "", -1)
-	targetDir = strings.ToLower(targetDir)
+	targetDir := GetTargetDir(def)
 
 	err = os.MkdirAll(targetDir, 0755)
 	if err != nil {
diff --git a/shared/util.go b/shared/util.go
index 6a49d6f..32f5ab7 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -356,3 +356,11 @@ func SetEnvVariables(env Environment) Environment {
 
 	return oldEnv
 }
+
+func GetTargetDir(def DefinitionImage) string {
+	targetDir := filepath.Join(os.TempDir(), fmt.Sprintf("%s-%s-%s", def.Distribution, def.Release, def.ArchitectureMapped))
+	targetDir = strings.Replace(targetDir, " ", "", -1)
+	targetDir = strings.ToLower(targetDir)
+
+	return targetDir
+}
diff --git a/sources/centos-http.go b/sources/centos-http.go
index 7812420..0bde872 100644
--- a/sources/centos-http.go
+++ b/sources/centos-http.go
@@ -12,6 +12,7 @@ import (
 	"path"
 	"path/filepath"
 	"regexp"
+	"strconv"
 	"strings"
 	"syscall"
 
@@ -44,13 +45,15 @@ func (s *CentOSHTTP) Run(definition shared.Definition, rootfsDir string) error {
 		return fmt.Errorf("Couldn't get name of iso")
 	}
 
+	fpath := shared.GetTargetDir(definition.Image)
+
 	// Skip download if raw image exists and has already been decompressed.
 	if strings.HasSuffix(s.fname, ".raw.xz") {
-		imagePath := filepath.Join(os.TempDir(), filepath.Base(strings.TrimSuffix(s.fname, ".xz")))
+		imagePath := filepath.Join(fpath, filepath.Base(strings.TrimSuffix(s.fname, ".xz")))
 
 		stat, err := os.Stat(imagePath)
 		if err == nil && stat.Size() > 0 {
-			return s.unpackRaw(filepath.Join(os.TempDir(), strings.TrimSuffix(s.fname, ".xz")),
+			return s.unpackRaw(filepath.Join(fpath, strings.TrimSuffix(s.fname, ".xz")),
 				rootfsDir)
 		}
 	}
@@ -90,7 +93,7 @@ func (s *CentOSHTTP) Run(definition shared.Definition, rootfsDir string) error {
 		}
 	}
 
-	fpath, err := shared.DownloadHash(definition.Image, baseURL+s.fname, checksumFile, sha256.New())
+	_, err = shared.DownloadHash(definition.Image, baseURL+s.fname, checksumFile, sha256.New())
 	if err != nil {
 		return fmt.Errorf("Error downloading CentOS image: %s", err)
 	}


More information about the lxc-devel mailing list