From 13d913db380a0998a54d831f5d718b5e35736101 Mon Sep 17 00:00:00 2001 From: Adphi Date: Sun, 24 Apr 2022 16:48:21 +0200 Subject: [PATCH] d2vm: remove kpartx dependency, use parted instead of fdisk Signed-off-by: Adphi --- Dockerfile | 4 +--- builder.go | 27 ++++++--------------------- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 26d3e0a..82a2c08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,13 +16,11 @@ FROM ubuntu RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ util-linux \ - kpartx \ + parted \ e2fsprogs \ - xfsprogs \ mount \ tar \ extlinux \ - uuid-runtime \ qemu-utils COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ diff --git a/builder.go b/builder.go index e326e59..3850025 100644 --- a/builder.go +++ b/builder.go @@ -15,7 +15,6 @@ package d2vm import ( - "bytes" "context" "fmt" "os" @@ -68,8 +67,6 @@ ff02::3 ip6-allhosts ) var ( - fdiskCmds = []string{"n", "p", "1", "", "", "a", "w"} - formats = []string{"qcow2", "qed", "raw", "vdi", "vhd", "vmdk"} mbrPaths = []string{ @@ -225,18 +222,9 @@ func (b *builder) makeImg(ctx context.Context) error { if err := block(b.diskRaw, b.size); err != nil { return err } - c := exec.CommandContext(ctx, "fdisk", b.diskRaw) - var i bytes.Buffer - for _, v := range fdiskCmds { - if _, err := i.Write([]byte(v + "\n")); err != nil { - return err - } - } - var e bytes.Buffer - c.Stdin = &i - c.Stderr = &e - if err := c.Run(); err != nil { - return fmt.Errorf("%w: %s", err, e.String()) + + if err := exec.Run(ctx, "parted", "-s", b.diskRaw, "mklabel", "msdos", "mkpart", "primary", "1Mib", "100%", "set", "1", "boot", "on"); err != nil { + return err } return nil } @@ -248,10 +236,10 @@ func (b *builder) mountImg(ctx context.Context) error { return err } b.loDevice = strings.TrimSuffix(o, "\n") - if err := exec.Run(ctx, "kpartx", "-a", b.loDevice); err != nil { + if err := exec.Run(ctx, "partprobe", b.loDevice); err != nil { return err } - b.loPart = fmt.Sprintf("/dev/mapper/%sp1", filepath.Base(b.loDevice)) + b.loPart = fmt.Sprintf("%sp1", b.loDevice) logrus.Infof("creating raw image file system") if err := exec.Run(ctx, "mkfs.ext4", b.loPart); err != nil { return err @@ -268,9 +256,6 @@ func (b *builder) unmountImg(ctx context.Context) error { if err := exec.Run(ctx, "umount", b.mntPoint); err != nil { merr = multierr.Append(merr, err) } - if err := exec.Run(ctx, "kpartx", "-d", b.loDevice); err != nil { - merr = multierr.Append(merr, err) - } if err := exec.Run(ctx, "losetup", "-d", b.loDevice); err != nil { merr = multierr.Append(merr, err) } @@ -396,7 +381,7 @@ func block(path string, size int64) error { func checkDependencies() error { var merr error - for _, v := range []string{"mount", "blkid", "tar", "kpartx", "losetup", "qemu-img", "extlinux", "dd", "mkfs", "fdisk"} { + for _, v := range []string{"mount", "blkid", "tar", "losetup", "parted", "partprobe", "qemu-img", "extlinux", "dd", "mkfs"} { if _, err := exec2.LookPath(v); err != nil { merr = multierr.Append(merr, err) }