[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