testutil/qemu.go (25 lines of code) (raw):

package testutil import ( "context" "dagger.io/dagger" "github.com/Azure/moby-packaging/pkg/apt" "github.com/Azure/moby-packaging/targets" ) func NewQemuImg(ctx context.Context, client *dagger.Client) *dagger.Container { ctr := client.Container().From(targets.JammyRef) return apt.Install( ctr, client.CacheVolume(targets.JammyAptCacheKey), client.CacheVolume(targets.JammyAptLibCacheKey), "qemu", "qemu-system", "qemu-utils", "openssh-client", "iptables", "linux-image-5.15.*-kvm", "linux-modules-5.15.*-kvm") } // QcowFromDir creates a qcow2 image from a dagger directory. func QcowFromDir(ctx context.Context, dir *dagger.Directory, qemuCtr *dagger.Container) *dagger.File { return qemuCtr. WithMountedDirectory("/tmp/rootfs", dir). WithExec([]string{"/bin/sh", "-c", ` truncate -s 10G /tmp/rootfs.img mkfs.ext4 -d /tmp/rootfs /tmp/rootfs.img qemu-img convert /tmp/rootfs.img -O qcow2 /tmp/rootfs.qcow2 rm -f /tmp/rootfs.img `}).File("/tmp/rootfs.qcow2") }