From 934d818bf1f1a9f1c5f9517c791f143aeeb6fefa Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Wed, 9 Aug 2017 11:17:42 +0100 Subject: [PATCH 1/2] cmd: Restructure iPXE script code for packet backend Break it into multiple instructions. The single line was super hard to parse. Signed-off-by: Rolf Neugebauer --- src/cmd/linuxkit/run_packet.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cmd/linuxkit/run_packet.go b/src/cmd/linuxkit/run_packet.go index 1b41c928f..3116ff3c7 100644 --- a/src/cmd/linuxkit/run_packet.go +++ b/src/cmd/linuxkit/run_packet.go @@ -88,13 +88,24 @@ func runPacket(args []string) { name := getStringValue(packetNameVar, *nameFlag, prefix) osType := "custom_ipxe" billing := "hourly" + + // Build the iPXE script // TODO(rn): Extract the kernel commandline from the file generated by moby build - userData := fmt.Sprintf("#!ipxe\n\ndhcp\nset base-url %s\nset kernel-params ip=dhcp nomodeset ro serial console=ttyS1,115200\nkernel ${base-url}/%s-kernel ${kernel-params}\ninitrd ${base-url}/%s-initrd.img\nboot", url, name, name) + userData := "#!ipxe\n\n" + userData += "dhcp\n" + userData += fmt.Sprintf("set base-url %s\n", url) + userData += "set kernel-params ip=dhcp nomodeset ro serial console=ttyS1,115200\n" + userData += fmt.Sprintf("kernel ${base-url}/%s-kernel ${kernel-params}\n", name) + userData += fmt.Sprintf("initrd ${base-url}/%s-initrd.img\n", name) + userData += "boot" log.Debugf("Using userData of:\n%s\n", userData) + + // Make sure the URL works initrdURL := fmt.Sprintf("%s/%s-initrd.img", url, name) kernelURL := fmt.Sprintf("%s/%s-kernel", url, name) validateHTTPURL(kernelURL) validateHTTPURL(initrdURL) + client := packngo.NewClient("", apiKey, nil) tags := []string{} req := packngo.DeviceCreateRequest{ From a885eb3304bf3126890b96d0c07a713d2dbdfed6 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Wed, 9 Aug 2017 12:20:22 +0100 Subject: [PATCH 2/2] cmd: Append the kernel command line args when booting on Packet The iPXE needs the hard coded value of 'kernel-params' but we should append the kernel command line from the YAML in case it sets other parameters. Signed-off-by: Rolf Neugebauer --- src/cmd/linuxkit/run_packet.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/cmd/linuxkit/run_packet.go b/src/cmd/linuxkit/run_packet.go index 3116ff3c7..3aa0eff45 100644 --- a/src/cmd/linuxkit/run_packet.go +++ b/src/cmd/linuxkit/run_packet.go @@ -5,6 +5,7 @@ import ( "encoding/json" "flag" "fmt" + "io/ioutil" "net" "net/http" "os" @@ -89,12 +90,22 @@ func runPacket(args []string) { osType := "custom_ipxe" billing := "hourly" + // Read kernel command line + var cmdline string + if c, err := ioutil.ReadFile(prefix + "-cmdline"); err != nil { + log.Fatalf("Cannot open cmdline file: %v", err) + } else { + cmdline = string(c) + } + // Build the iPXE script - // TODO(rn): Extract the kernel commandline from the file generated by moby build + // Note, we *append* the -cmdline. iXPE booting will + // need the first set of "kernel-params" and we don't want to + // require these to be added to every YAML file. userData := "#!ipxe\n\n" userData += "dhcp\n" userData += fmt.Sprintf("set base-url %s\n", url) - userData += "set kernel-params ip=dhcp nomodeset ro serial console=ttyS1,115200\n" + userData += fmt.Sprintf("set kernel-params ip=dhcp nomodeset ro serial console=ttyS1,115200 %s\n", cmdline) userData += fmt.Sprintf("kernel ${base-url}/%s-kernel ${kernel-params}\n", name) userData += fmt.Sprintf("initrd ${base-url}/%s-initrd.img\n", name) userData += "boot"