From 4162cfb834b055aef51f2e805efa52db696bd58b Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 12 Jun 2017 11:53:57 +0100 Subject: [PATCH 1/8] kubernetes: update to latest init and add the getty container. Signed-off-by: Ian Campbell --- projects/kubernetes/kube-master.yml | 6 +++++- projects/kubernetes/kube-node.yml | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/kubernetes/kube-master.yml b/projects/kubernetes/kube-master.yml index aede63aa7..407ff8375 100644 --- a/projects/kubernetes/kube-master.yml +++ b/projects/kubernetes/kube-master.yml @@ -2,7 +2,7 @@ kernel: image: "linuxkit/kernel:4.9.x" cmdline: "console=ttyS0 console=tty0 page_poison=1" init: - - linuxkit/init:1b8a7e394d2ec2f1fdb4d67645829d1b5bdca037 + - linuxkit/init:2599bcd5013ce5962aa155ee8929c26160de13bd - linuxkit/runc:3a4e6cbf15470f62501b019b55e1caac5ee7689f - linuxkit/containerd:b50181bc6e0084e5fcd6b6ad3cf433c4f66cae5a - linuxkit/ca-certificates:75cf419fb58770884c3464eb687ec8dfc704169d @@ -25,6 +25,10 @@ onboot: - /dev:/dev - /var:/var:rshared,rbind services: + - name: getty + image: "linuxkit/getty:148946d72d1c96df3ea91cb8ee4f9583cd3cc5c2" + env: + - INSECURE=true - name: rngd image: "linuxkit/rngd:1fa4de44c961bb5075647181891a3e7e7ba51c31" - name: dhcpcd diff --git a/projects/kubernetes/kube-node.yml b/projects/kubernetes/kube-node.yml index b477db914..b83c8331d 100644 --- a/projects/kubernetes/kube-node.yml +++ b/projects/kubernetes/kube-node.yml @@ -2,7 +2,7 @@ kernel: image: "linuxkit/kernel:4.9.x" cmdline: "console=ttyS0 console=tty0 page_poison=1" init: - - linuxkit/init:1b8a7e394d2ec2f1fdb4d67645829d1b5bdca037 + - linuxkit/init:2599bcd5013ce5962aa155ee8929c26160de13bd - linuxkit/runc:3a4e6cbf15470f62501b019b55e1caac5ee7689f - linuxkit/containerd:b50181bc6e0084e5fcd6b6ad3cf433c4f66cae5a - linuxkit/ca-certificates:75cf419fb58770884c3464eb687ec8dfc704169d @@ -25,6 +25,10 @@ onboot: - /dev:/dev - /var:/var:rshared,rbind services: + - name: getty + image: "linuxkit/getty:148946d72d1c96df3ea91cb8ee4f9583cd3cc5c2" + env: + - INSECURE=true - name: rngd image: "linuxkit/rngd:1fa4de44c961bb5075647181891a3e7e7ba51c31" - name: dhcpcd From ec2b56da5ac964f4ced5c82665d7f1226ce7b144 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 12 Jun 2017 12:57:12 +0100 Subject: [PATCH 2/8] kubernetes: Combine boot-{master,node}.sh into a single script Easier to get a global view on what is happening. Signed-off-by: Ian Campbell --- projects/kubernetes/README.md | 10 +++++----- projects/kubernetes/boot-master.sh | 5 ----- projects/kubernetes/boot-node.sh | 8 -------- projects/kubernetes/boot.sh | 22 ++++++++++++++++++++++ 4 files changed, 27 insertions(+), 18 deletions(-) delete mode 100755 projects/kubernetes/boot-master.sh delete mode 100755 projects/kubernetes/boot-node.sh create mode 100755 projects/kubernetes/boot.sh diff --git a/projects/kubernetes/README.md b/projects/kubernetes/README.md index 0b8835b42..1d5c57b21 100644 --- a/projects/kubernetes/README.md +++ b/projects/kubernetes/README.md @@ -13,7 +13,7 @@ make build-vm-images Boot Kubernetes master OS image using `hyperkit` on macOS: ``` -./boot-master.sh +./boot.sh ``` Get IP address of the master: @@ -36,12 +36,12 @@ and try `kubectl get nodes` from within the master. To boot a node use: ``` -./boot-node.sh [ ...] +./boot.sh [ ...] ``` More specifically, to start 3 nodes use 3 separate shells and run this: ``` -shell1> ./boot-node.sh 1 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 -shell2> ./boot-node.sh 2 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 -shell3> ./boot-node.sh 3 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 +shell1> ./boot.sh 1 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 +shell2> ./boot.sh 2 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 +shell3> ./boot.sh 3 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 ``` diff --git a/projects/kubernetes/boot-master.sh b/projects/kubernetes/boot-master.sh deleted file mode 100755 index 067c87fce..000000000 --- a/projects/kubernetes/boot-master.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -eu -disk="kube-master-disk.img" -set -x -rm -f "${disk}" -../../bin/linuxkit run -cpus 2 -mem 4096 -disk "${disk}",size=4G kube-master diff --git a/projects/kubernetes/boot-node.sh b/projects/kubernetes/boot-node.sh deleted file mode 100755 index 80f2cc7ac..000000000 --- a/projects/kubernetes/boot-node.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -eu -[ "${#@}" -gt 1 ] || (echo "Usage: ${0} " ; exit 1) -name="node-${1}" -shift -disk="kube-${name}-disk.img" -set -x -rm -f "${disk}" -../../bin/linuxkit run -cpus 2 -mem 4096 -disk "${disk}",size=4G -data "${*}" kube-node diff --git a/projects/kubernetes/boot.sh b/projects/kubernetes/boot.sh new file mode 100755 index 000000000..f76f9b3de --- /dev/null +++ b/projects/kubernetes/boot.sh @@ -0,0 +1,22 @@ +#!/bin/bash -eu +if [ $# -eq 0 ] ; then + img="kube-master" + disk="kube-master-disk.img" + data="" +elif [ $# -gt 1 ] ; then + img="kube-node" + name="node-${1}" + shift + disk="kube-${name}-disk.img" + data="${*}" +else + echo "Usage:" + echo " - Boot master:" + echo " ${0}" + echo " - Boot node:" + echo " ${0} " + exit 1 +fi +set -x +rm -f "${disk}" +../../bin/linuxkit run -cpus 2 -mem 4096 -disk "${disk}",size=4G -data "${data}" "${img}" From d4f601f6fba3067c5a1ff8b9f15f0bc00b8ac456 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 12 Jun 2017 12:58:33 +0100 Subject: [PATCH 3/8] kubernetes: give each instance a specific state directory In particular avoid all nodes sharing the same default directory. Signed-off-by: Ian Campbell --- projects/kubernetes/boot.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/kubernetes/boot.sh b/projects/kubernetes/boot.sh index f76f9b3de..344924b3a 100755 --- a/projects/kubernetes/boot.sh +++ b/projects/kubernetes/boot.sh @@ -3,12 +3,14 @@ if [ $# -eq 0 ] ; then img="kube-master" disk="kube-master-disk.img" data="" + state="kube-master-state" elif [ $# -gt 1 ] ; then img="kube-node" name="node-${1}" shift disk="kube-${name}-disk.img" data="${*}" + state="kube-${name}-state" else echo "Usage:" echo " - Boot master:" @@ -19,4 +21,5 @@ else fi set -x rm -f "${disk}" -../../bin/linuxkit run -cpus 2 -mem 4096 -disk "${disk}",size=4G -data "${data}" "${img}" +rm -rf "${state}" +../../bin/linuxkit run -cpus 2 -mem 4096 -state "${state}" -disk "${disk}",size=4G -data "${data}" "${img}" From c47b2c770c461713fb5fdbc44787d6fbe803f56f Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Jun 2017 10:28:12 +0100 Subject: [PATCH 4/8] kubernetes: Create disk in state dir Signed-off-by: Ian Campbell --- projects/kubernetes/boot.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/projects/kubernetes/boot.sh b/projects/kubernetes/boot.sh index 344924b3a..c11643a6b 100755 --- a/projects/kubernetes/boot.sh +++ b/projects/kubernetes/boot.sh @@ -1,14 +1,12 @@ #!/bin/bash -eu if [ $# -eq 0 ] ; then img="kube-master" - disk="kube-master-disk.img" data="" state="kube-master-state" elif [ $# -gt 1 ] ; then img="kube-node" name="node-${1}" shift - disk="kube-${name}-disk.img" data="${*}" state="kube-${name}-state" else @@ -20,6 +18,5 @@ else exit 1 fi set -x -rm -f "${disk}" rm -rf "${state}" -../../bin/linuxkit run -cpus 2 -mem 4096 -state "${state}" -disk "${disk}",size=4G -data "${data}" "${img}" +../../bin/linuxkit run -cpus 2 -mem 4096 -state "${state}" -disk size=4G -data "${data}" "${img}" From a09090e6cd3c67ae835d2a96f55ca2d3c18af368 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Jun 2017 10:45:43 +0100 Subject: [PATCH 5/8] Add state dir support to Qemu runner. Modelled on the Hyperkit runner, for now only used for the disk. This is one step closer to having project/kubernetes/boot.sh work on Linux. Signed-off-by: Ian Campbell --- src/cmd/linuxkit/run_qemu.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cmd/linuxkit/run_qemu.go b/src/cmd/linuxkit/run_qemu.go index 7a1e6c03c..8bb7f4acb 100644 --- a/src/cmd/linuxkit/run_qemu.go +++ b/src/cmd/linuxkit/run_qemu.go @@ -55,6 +55,9 @@ func runQemu(args []string) { isoBoot := flags.Bool("iso", false, "Boot image is an ISO") kernelBoot := flags.Bool("kernel", false, "Boot image is kernel+initrd+cmdline 'path'-kernel/-initrd/-cmdline") + // State flags + state := flags.String("state", "", "Path to directory to keep VM state in") + // Paths and settings for disks var disks Disks flags.Var(&disks, "disk", "Disk config, may be repeated. [file=]path[,size=1G][,format=qcow2]") @@ -110,6 +113,13 @@ func runQemu(args []string) { } } + if *state == "" { + *state = prefix + "-state" + } + if err := os.MkdirAll(*state, 0755); err != nil { + log.Fatalf("Could not create state directory: %v", err) + } + for i, d := range disks { id := "" if i != 0 { @@ -119,7 +129,7 @@ func runQemu(args []string) { d.Format = "qcow2" } if d.Size != 0 && d.Path == "" { - d.Path = prefix + "-disk" + id + ".img" + d.Path = filepath.Join(*state, "disk"+id+".img") } if d.Path == "" { log.Fatalf("disk specified with no size or name") From 13a94c7a3c2a5777e9bc48764f2f67e9109f999d Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Jun 2017 11:00:20 +0100 Subject: [PATCH 6/8] Add metadata support to Qemu runner. Based on the hyperkit runner's code. project/kubernetes/boot.sh now works, although lack of network connectivity between individual VMs remains an issue. Also manually validated containerized operation with: rm -rf kube-node-0-state && ../../bin/linuxkit run qemu --containerized -cpus 2 -mem 4096 -state kube-node-0-state -disk size=4G -data "foo bar" kube-node Signed-off-by: Ian Campbell --- src/cmd/linuxkit/run_qemu.go | 56 +++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/cmd/linuxkit/run_qemu.go b/src/cmd/linuxkit/run_qemu.go index 8bb7f4acb..22102afe2 100644 --- a/src/cmd/linuxkit/run_qemu.go +++ b/src/cmd/linuxkit/run_qemu.go @@ -20,11 +20,12 @@ const QemuImg = "linuxkit/qemu:c9691f5c50dd191e62b77eaa2f3dfd05ed2ed77c" // QemuConfig contains the config for Qemu type QemuConfig struct { Path string - ISO bool + ISOBoot bool UEFI bool Kernel bool GUI bool Disks Disks + MetadataPath string FWPath string Arch string CPUs string @@ -61,6 +62,7 @@ func runQemu(args []string) { // Paths and settings for disks var disks Disks flags.Var(&disks, "disk", "Disk config, may be repeated. [file=]path[,size=1G][,format=qcow2]") + data := flags.String("data", "", "Metadata to pass to VM (either a path to a file or a string)") // Paths and settings for UEFI firware fw := flags.String("fw", "/usr/share/ovmf/bios.bin", "Path to OVMF firmware for UEFI boot") @@ -120,6 +122,23 @@ func runQemu(args []string) { log.Fatalf("Could not create state directory: %v", err) } + isoPath := "" + if *data != "" { + var d []byte + if _, err := os.Stat(*data); os.IsNotExist(err) { + d = []byte(*data) + } else { + d, err = ioutil.ReadFile(*data) + if err != nil { + log.Fatalf("Cannot read user data: %v", err) + } + } + isoPath = filepath.Join(*state, "data.iso") + if err := WriteMetadataISO(isoPath, d); err != nil { + log.Fatalf("Cannot write user data ISO: %v", err) + } + } + for i, d := range disks { id := "" if i != 0 { @@ -144,13 +163,18 @@ func runQemu(args []string) { disks = append(d, disks...) } + if *isoBoot && isoPath != "" { + log.Fatalf("metadata and ISO boot currently cannot coexist") + } + config := QemuConfig{ Path: path, - ISO: *isoBoot, + ISOBoot: *isoBoot, UEFI: *uefiBoot, Kernel: *kernelBoot, GUI: *enableGUI, Disks: disks, + MetadataPath: isoPath, FWPath: *fw, Arch: *arch, CPUs: *cpus, @@ -224,20 +248,22 @@ func runQemuContainer(config QemuConfig) error { } var binds []string - if filepath.IsAbs(config.Path) { - binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", filepath.Dir(config.Path))) - } else { - binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", cwd)) - } - - // also try to bind mount disk paths so the command works - for _, d := range config.Disks { - if filepath.IsAbs(d.Path) { - binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", filepath.Dir(d.Path))) + addBind := func(p string) { + if filepath.IsAbs(p) { + binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", filepath.Dir(p))) } else { binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", cwd)) } } + addBind(config.Path) + + if config.MetadataPath != "" { + addBind(config.MetadataPath) + } + // also try to bind mount disk paths so the command works + for _, d := range config.Disks { + addBind(d.Path) + } var args []string config, args = buildQemuCmdline(config) @@ -324,7 +350,7 @@ func buildQemuCmdline(config QemuConfig) (QemuConfig, []string) { for i, d := range config.Disks { index := i // hdc is CDROM in qemu - if i >= 2 && config.ISO { + if i >= 2 && config.ISOBoot { index++ } if d.Format != "" { @@ -334,9 +360,11 @@ func buildQemuCmdline(config QemuConfig) (QemuConfig, []string) { } } - if config.ISO { + if config.ISOBoot { qemuArgs = append(qemuArgs, "-cdrom", config.Path) qemuArgs = append(qemuArgs, "-boot", "d") + } else if config.MetadataPath != "" { + qemuArgs = append(qemuArgs, "-cdrom", config.MetadataPath) } if config.UEFI { From 58d61d084621a905bccc501d40ce266d6adddf4c Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Jun 2017 17:13:15 +0100 Subject: [PATCH 7/8] tests: traverse directories before removing them during cleanup Without `-depth` find will first `rm -rf foo` and then try to recurse into `foo` resulting in `No such file or directory`. With this the various `|| true` suffixes should no longer be required. Lastly, in test/cases/040_packages/013_mkimage/test.sh cleanup any `disk.qcow2*` detritus as well as the image itself. Signed-off-by: Ian Campbell --- test/cases/000_build/000_outputs/test.sh | 2 +- test/cases/020_kernel/000_config_4.4.x/test.sh | 2 +- test/cases/020_kernel/001_config_4.9.x/test.sh | 2 +- test/cases/020_kernel/003_config_4.11.x/test.sh | 2 +- test/cases/020_kernel/010_kmod_4.9.x/test.sh | 2 +- test/cases/040_packages/002_binfmt/test.sh | 2 +- test/cases/040_packages/003_ca-certificates/test.sh | 2 +- test/cases/040_packages/004_dhcpcd/test.sh | 2 +- test/cases/040_packages/013_mkimage/test.sh | 7 ++++--- test/cases/040_packages/019_sysctl/test.sh | 2 +- 10 files changed, 13 insertions(+), 12 deletions(-) diff --git a/test/cases/000_build/000_outputs/test.sh b/test/cases/000_build/000_outputs/test.sh index aab7ae5d5..3c7058520 100644 --- a/test/cases/000_build/000_outputs/test.sh +++ b/test/cases/000_build/000_outputs/test.sh @@ -12,7 +12,7 @@ NAME=check clean_up() { # remove any images - find . -iname "${NAME}*" -exec rm {} \; + find . -depth -iname "${NAME}*" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/020_kernel/000_config_4.4.x/test.sh b/test/cases/020_kernel/000_config_4.4.x/test.sh index 2ecd67ed8..4200bd918 100644 --- a/test/cases/020_kernel/000_config_4.4.x/test.sh +++ b/test/cases/020_kernel/000_config_4.4.x/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/020_kernel/001_config_4.9.x/test.sh b/test/cases/020_kernel/001_config_4.9.x/test.sh index 2ecd67ed8..4200bd918 100644 --- a/test/cases/020_kernel/001_config_4.9.x/test.sh +++ b/test/cases/020_kernel/001_config_4.9.x/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/020_kernel/003_config_4.11.x/test.sh b/test/cases/020_kernel/003_config_4.11.x/test.sh index 2ecd67ed8..4200bd918 100644 --- a/test/cases/020_kernel/003_config_4.11.x/test.sh +++ b/test/cases/020_kernel/003_config_4.11.x/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-kernel-config*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/020_kernel/010_kmod_4.9.x/test.sh b/test/cases/020_kernel/010_kmod_4.9.x/test.sh index 9a08df964..8a1e8034d 100644 --- a/test/cases/020_kernel/010_kmod_4.9.x/test.sh +++ b/test/cases/020_kernel/010_kmod_4.9.x/test.sh @@ -13,7 +13,7 @@ IMAGE_NAME="kmod-test" clean_up() { docker rmi ${IMAGE_NAME} || true - find . -iname "kmod*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "kmod*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/040_packages/002_binfmt/test.sh b/test/cases/040_packages/002_binfmt/test.sh index 7cd5cc0e0..7403afe26 100644 --- a/test/cases/040_packages/002_binfmt/test.sh +++ b/test/cases/040_packages/002_binfmt/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-binfmt*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-binfmt*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/040_packages/003_ca-certificates/test.sh b/test/cases/040_packages/003_ca-certificates/test.sh index 6ba5bebf7..9e2c98164 100644 --- a/test/cases/040_packages/003_ca-certificates/test.sh +++ b/test/cases/040_packages/003_ca-certificates/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-ca-certificates*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-ca-certificates*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/040_packages/004_dhcpcd/test.sh b/test/cases/040_packages/004_dhcpcd/test.sh index ac1d42816..9290fd141 100644 --- a/test/cases/040_packages/004_dhcpcd/test.sh +++ b/test/cases/040_packages/004_dhcpcd/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-dhcpcd*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-dhcpcd*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT diff --git a/test/cases/040_packages/013_mkimage/test.sh b/test/cases/040_packages/013_mkimage/test.sh index 80939d923..0e1c8d6c7 100644 --- a/test/cases/040_packages/013_mkimage/test.sh +++ b/test/cases/040_packages/013_mkimage/test.sh @@ -10,9 +10,10 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "run*" -not -iname "*.yml" -exec rm -rf {} \; - find . -iname "mkimage*" -not -iname "*.yml" -exec rm -rf {} \; - rm -f disk.qcow2 tarball.img + find . -depth -iname "run*" -not -iname "*.yml" -exec rm -rf {} \; + find . -depth -iname "mkimage*" -not -iname "*.yml" -exec rm -rf {} \; + find . -depth -iname "disk.qcow2*" -not -iname "*.yml" -exec rm -rf {} \; + rm -f tarball.img } trap clean_up EXIT diff --git a/test/cases/040_packages/019_sysctl/test.sh b/test/cases/040_packages/019_sysctl/test.sh index 47e652a9c..99358c4b5 100644 --- a/test/cases/040_packages/019_sysctl/test.sh +++ b/test/cases/040_packages/019_sysctl/test.sh @@ -10,7 +10,7 @@ set -e . "${RT_PROJECT_ROOT}/_lib/lib.sh" clean_up() { - find . -iname "test-sysctl*" -not -iname "*.yml" -exec rm -rf {} \; || true + find . -depth -iname "test-sysctl*" -not -iname "*.yml" -exec rm -rf {} \; } trap clean_up EXIT From e2eb17ef6c3539279581ab9cd1717f55b03adc6b Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Jun 2017 17:21:52 +0100 Subject: [PATCH 8/8] Only create qemu runner state dir if it is going to be used. Signed-off-by: Ian Campbell --- src/cmd/linuxkit/run_qemu.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cmd/linuxkit/run_qemu.go b/src/cmd/linuxkit/run_qemu.go index 22102afe2..40b8c6dea 100644 --- a/src/cmd/linuxkit/run_qemu.go +++ b/src/cmd/linuxkit/run_qemu.go @@ -118,8 +118,12 @@ func runQemu(args []string) { if *state == "" { *state = prefix + "-state" } - if err := os.MkdirAll(*state, 0755); err != nil { - log.Fatalf("Could not create state directory: %v", err) + var mkstate func() + mkstate = func() { + if err := os.MkdirAll(*state, 0755); err != nil { + log.Fatalf("Could not create state directory: %v", err) + } + mkstate = func() {} } isoPath := "" @@ -133,6 +137,7 @@ func runQemu(args []string) { log.Fatalf("Cannot read user data: %v", err) } } + mkstate() isoPath = filepath.Join(*state, "data.iso") if err := WriteMetadataISO(isoPath, d); err != nil { log.Fatalf("Cannot write user data ISO: %v", err) @@ -148,6 +153,7 @@ func runQemu(args []string) { d.Format = "qcow2" } if d.Size != 0 && d.Path == "" { + mkstate() d.Path = filepath.Join(*state, "disk"+id+".img") } if d.Path == "" {