From 5231e06dec35c787e398da697cf685bf41000b0e Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sun, 14 May 2017 14:19:52 +0100 Subject: [PATCH] cmd: Add a -state option to hyperkit runner (and enable vsock) The state directory is used to store: - the disk image, if not specified via '-disk' - the ISO for metadata, if '-data' is used - the Unix domain socket for virtio sockets - the PID of the hyperkit process - a JSON file with the hyperkit configuration This patch also enables the virtio socket device for the VM. While at it, also fix .gitignore to ignore kernel images again. Signed-off-by: Rolf Neugebauer --- .gitignore | 3 ++- Makefile | 2 +- src/cmd/linuxkit/run_hyperkit.go | 17 +++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 4346282c1..981e11477 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ Dockerfile.media *.vhdx *.efi *.qcow2 -*-kernel$ +*-kernel *-cmdline +*-state artifacts/* diff --git a/Makefile b/Makefile index 85232dfec..f57e08deb 100644 --- a/Makefile +++ b/Makefile @@ -74,4 +74,4 @@ ci-pr: .PHONY: clean clean: - rm -rf bin *.log *-kernel *-cmdline *.img *.iso *.gz *.qcow2 *.vhd *.vmx *.vmdk *.tar + rm -rf bin *.log *-kernel *-cmdline *-state *.img *.iso *.gz *.qcow2 *.vhd *.vmx *.vmdk *.tar diff --git a/src/cmd/linuxkit/run_hyperkit.go b/src/cmd/linuxkit/run_hyperkit.go index 17ae46d90..9592fb416 100644 --- a/src/cmd/linuxkit/run_hyperkit.go +++ b/src/cmd/linuxkit/run_hyperkit.go @@ -31,6 +31,7 @@ func runHyperKit(args []string) { disk := hyperkitCmd.String("disk", "", "Path to disk image to used") data := hyperkitCmd.String("data", "", "Metadata to pass to VM (either a path to a file or a string)") ipStr := hyperkitCmd.String("ip", "", "IP address for the VM") + state := hyperkitCmd.String("state", "", "Path to directory to keep VM state in") if err := hyperkitCmd.Parse(args); err != nil { log.Fatal("Unable to parse args") @@ -43,6 +44,13 @@ func runHyperKit(args []string) { } prefix := remArgs[0] + if *state == "" { + *state = prefix + "-state" + } + if err := os.MkdirAll(*state, 0755); err != nil { + log.Fatalf("Could not create state directory: %v", err) + } + isoPath := "" if *data != "" { var d []byte @@ -54,9 +62,9 @@ func runHyperKit(args []string) { log.Fatalf("Cannot read user data: %v", err) } } - isoPath = prefix + "-data.iso" + isoPath = filepath.Join(*state, "data.iso") if err := WriteMetadataISO(isoPath, d); err != nil { - log.Fatalf("Cannot write user data ISO: %s", err) + log.Fatalf("Cannot write user data ISO: %v", err) } } @@ -84,10 +92,10 @@ func runHyperKit(args []string) { } if *diskSz != 0 && *disk == "" { - *disk = prefix + "-disk.img" + *disk = filepath.Join(*state, "disk.img") } - h, err := hyperkit.New(*hyperkitPath, "auto", "") + h, err := hyperkit.New(*hyperkitPath, "auto", *state) if err != nil { log.Fatalln("Error creating hyperkit: ", err) } @@ -98,6 +106,7 @@ func runHyperKit(args []string) { h.UUID = vmUUID h.DiskImage = *disk h.ISOImage = isoPath + h.VSock = true h.CPUs = *cpus h.Memory = *mem h.DiskSize = *diskSz