From 204facc3955cdd54874ff11b6c859b32183668c4 Mon Sep 17 00:00:00 2001 From: Sven Dowideit Date: Wed, 28 Jun 2017 13:15:58 +1000 Subject: [PATCH 1/2] Add Syslinux menu with debug and autologin options Signed-off-by: Sven Dowideit --- scripts/isolinux.cfg | 22 ++++++++++++++++++++-- scripts/isolinux_label.cfg | 16 ++++++++++++++++ scripts/package-installer | 1 + scripts/package-iso | 9 +++++---- scripts/rancher.png | Bin 0 -> 12734 bytes scripts/run | 24 ++++++++++++++---------- 6 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 scripts/rancher.png diff --git a/scripts/isolinux.cfg b/scripts/isolinux.cfg index 145d0159..a5904699 100644 --- a/scripts/isolinux.cfg +++ b/scripts/isolinux.cfg @@ -1,5 +1,6 @@ -TIMEOUT 20 #2s -PROMPT 1 +UI vesamenu.c32 +TIMEOUT 20 #2s +PROMPT 0 # doesn't appear to work here? INCLUDE ../global.cfg @@ -7,3 +8,20 @@ INCLUDE ../global.cfg # each INCLUDEd file has a `DEFAULT mylabel` in it, and the last one wins INCLUDE ../linux-previous.cfg INCLUDE ../linux-current.cfg + +# http://www.syslinux.org/wiki/index.php?title=Comboot/menu.c32 +LABEL Boot next BIOS option + MENU LABEL Boot next BIOS option + LOCALBOOT -1 + +MENU TITLE RancherOS +MENU BACKGROUND ../rancher.png + +MENU WIDTH 80 +MENU MARGIN 10 +MENU ROWS 12 +MENU TABMSGROW 18 +MENU CMDLINEROW 18 +MENU ENDROW 24 +MENU TIMEOUTROW 20 + diff --git a/scripts/isolinux_label.cfg b/scripts/isolinux_label.cfg index 1b72af06..40ac296f 100644 --- a/scripts/isolinux_label.cfg +++ b/scripts/isolinux_label.cfg @@ -3,7 +3,23 @@ DEFAULT rancheros-${LABEL} LABEL rancheros-${LABEL} SAY rancheros-${LABEL}: RancherOS ${VERSION} ${KERNEL_VERSION} + MENU LABEL RancherOS ${VERSION} ${KERNEL_VERSION} KERNEL ../vmlinuz-${KERNEL_VERSION} INITRD ../initrd-${VERSION} # see global.cfg for kernel boot parameters +LABEL rancheros-${LABEL}-autologin + SAY rancheros-${LABEL}-autologin: autologin RancherOS ${VERSION} ${KERNEL_VERSION} + MENU LABEL rancher.autologin + MENU INDENT 2 + COM32 cmd.c32 + APPEND rancheros-${LABEL} rancher.autologin=tty1 rancher.autologin=ttyS0 + +LABEL rancheros-${LABEL}-debug + SAY rancheros-${LABEL}-debug: debug RancherOS ${VERSION} ${KERNEL_VERSION} + MENU LABEL rancher.debug=true + MENU INDENT 2 + COM32 cmd.c32 + APPEND rancheros-${LABEL} rancher.debug=true + +MENU SEPARATOR diff --git a/scripts/package-installer b/scripts/package-installer index 9c43b3a0..b688c2ea 100755 --- a/scripts/package-installer +++ b/scripts/package-installer @@ -38,6 +38,7 @@ cat scripts/isolinux.cfg | envsubst > ${DIST}/boot/isolinux/isolinux.cfg cat scripts/isolinux_label.cfg | LABEL=${VERSION} envsubst > ${DIST}/boot/linux-current.cfg #cat scripts/isolinux_label.cfg | LABEL=debug APPEND="rancher.debug=true" envsubst > ${DIST}/boot/linux-previous.cfg cat scripts/global.cfg | LABEL=${VERSION} envsubst > ${DIST}/boot/global.cfg +cp scripts/rancher.png ${DIST}/boot/ mkdir -p ./scripts/installer/build/boot diff --git a/scripts/package-iso b/scripts/package-iso index 629ddc09..81af4381 100755 --- a/scripts/package-iso +++ b/scripts/package-iso @@ -34,11 +34,12 @@ cp ${ARTIFACTS}/vmlinuz-${KERNEL_VERSION} ${CD}/boot/ DIST=$(pwd)/dist cp -r ${DIST}/boot/* ${CD}/boot/ -cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux/ -cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux/ +cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux/ +cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux/ +cp /usr/lib/syslinux/modules/bios/*.c32 ${CD}/boot/isolinux/ # add the installer image to the iso for non-network / dev/test -cp ${ARTIFACTS}/installer.tar ${CD}/rancheros/ -cp ${ARTIFACTS}/Dockerfile.amd64 ${CD}/rancheros/ +cp ${ARTIFACTS}/installer.tar ${CD}/rancheros/ +cp ${ARTIFACTS}/Dockerfile.amd64 ${CD}/rancheros/ gzip ${CD}/rancheros/installer.tar cd ${CD} && xorriso \ -as mkisofs \ diff --git a/scripts/rancher.png b/scripts/rancher.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2f2eed1e2099b6906eb29167fa9fb7dc7a1db7 GIT binary patch literal 12734 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 Date: Wed, 28 Jun 2017 23:58:14 +1000 Subject: [PATCH 2/2] add some better menu touches, make upgrade also upgrade to the menu, and add a ros config syslinux cmd for editing the global.cfg Signed-off-by: Sven Dowideit --- cmd/control/config.go | 21 ++++++++ cmd/control/install.go | 53 ++++++++++++++++--- dfs/scratch.go | 12 +++-- .../adding-kernel-parameters/index.md | 7 ++- scripts/isolinux.cfg | 10 +++- scripts/isolinux_label.cfg | 8 ++- scripts/ros | 2 +- 7 files changed, 95 insertions(+), 18 deletions(-) diff --git a/cmd/control/config.go b/cmd/control/config.go index 7b7379a2..91d47f62 100644 --- a/cmd/control/config.go +++ b/cmd/control/config.go @@ -5,6 +5,7 @@ import ( "io" "io/ioutil" "os" + "os/exec" "sort" "strings" "text/template" @@ -76,6 +77,11 @@ func configSubcommands() []cli.Command { }, }, }, + { + Name: "syslinux", + Usage: "edit Syslinux boot global.cfg", + Action: editSyslinux, + }, { Name: "validate", Usage: "validate configuration from stdin", @@ -146,6 +152,21 @@ func env2map(env []string) map[string]string { return m } +func editSyslinux(c *cli.Context) error { + cmd := exec.Command("system-docker", "run", "--rm", "-it", + "-v", "/:/host", + "-w", "/host", + "--entrypoint=vi", + "rancher/os-console:"+config.Version, + "boot/global.cfg") + cmd.Stdout, cmd.Stderr, cmd.Stdin = os.Stdout, os.Stderr, os.Stdin + if err := cmd.Run(); err != nil { + return err + } + + return nil +} + func configSet(c *cli.Context) error { if c.NArg() < 2 { return nil diff --git a/cmd/control/install.go b/cmd/control/install.go index 188962ca..4af6695c 100755 --- a/cmd/control/install.go +++ b/cmd/control/install.go @@ -3,6 +3,7 @@ package control import ( "bufio" "bytes" + "crypto/md5" "fmt" "io" "io/ioutil" @@ -923,20 +924,45 @@ func installSyslinux(device, baseName, diskType string) error { return nil } +func different(existing, new string) bool { + // assume existing file exists + if _, err := os.Stat(new); os.IsNotExist(err) { + return true + } + data, err := ioutil.ReadFile(existing) + if err != nil { + return true + } + newData, err := ioutil.ReadFile(new) + if err != nil { + return true + } + md5sum := md5.Sum(data) + newmd5sum := md5.Sum(newData) + if md5sum != newmd5sum { + return true + } + return false +} + func installRancher(baseName, VERSION, DIST, kappend string) (string, error) { log.Debugf("installRancher") // detect if there already is a linux-current.cfg, if so, move it to linux-previous.cfg, currentCfg := filepath.Join(baseName, install.BootDir, "linux-current.cfg") if _, err := os.Stat(currentCfg); !os.IsNotExist(err) { - previousCfg := filepath.Join(baseName, install.BootDir, "linux-previous.cfg") - if _, err := os.Stat(previousCfg); !os.IsNotExist(err) { - if err := os.Remove(previousCfg); err != nil { - return currentCfg, err + existingCfg := filepath.Join(DIST, "linux-current.cfg") + // only remove previous if there is a change to the current + if different(currentCfg, existingCfg) { + previousCfg := filepath.Join(baseName, install.BootDir, "linux-previous.cfg") + if _, err := os.Stat(previousCfg); !os.IsNotExist(err) { + if err := os.Remove(previousCfg); err != nil { + return currentCfg, err + } } + os.Rename(currentCfg, previousCfg) + // TODO: now that we're parsing syslinux.cfg files, maybe we can delete old kernels and initrds } - os.Rename(currentCfg, previousCfg) - // TODO: now that we're parsing syslinux.cfg files, maybe we can delete old kernels and initrds } // The image/ISO have all the files in it - the syslinux cfg's and the kernel&initrd, so we can copy them all from there @@ -945,15 +971,26 @@ func installRancher(baseName, VERSION, DIST, kappend string) (string, error) { if file.IsDir() { continue } - if err := dfs.CopyFile(filepath.Join(DIST, file.Name()), filepath.Join(baseName, install.BootDir), file.Name()); err != nil { + // TODO: should overwrite anything other than the global.cfg + overwrite := true + if file.Name() == "global.cfg" { + overwrite = false + } + if err := dfs.CopyFileOverwrite(filepath.Join(DIST, file.Name()), filepath.Join(baseName, install.BootDir), file.Name(), overwrite); err != nil { log.Errorf("copy %s: %s", file.Name(), err) //return err } } + // the general INCLUDE syslinuxcfg - if err := dfs.CopyFile(filepath.Join(DIST, "isolinux", "isolinux.cfg"), filepath.Join(baseName, install.BootDir, "syslinux"), "syslinux.cfg"); err != nil { + isolinuxFile := filepath.Join(DIST, "isolinux", "isolinux.cfg") + syslinuxDir := filepath.Join(baseName, install.BootDir, "syslinux") + if err := dfs.CopyFileOverwrite(isolinuxFile, syslinuxDir, "syslinux.cfg", true); err != nil { log.Errorf("copy global syslinux.cfgS%s: %s", "syslinux.cfg", err) //return err + } else { + log.Debugf("installRancher copy global syslinux.cfgS OK") + } // The global.cfg INCLUDE - useful for over-riding the APPEND line diff --git a/dfs/scratch.go b/dfs/scratch.go index 560eca7d..cb89c2c3 100644 --- a/dfs/scratch.go +++ b/dfs/scratch.go @@ -264,15 +264,21 @@ func defaultFolders(folders ...string) error { } func CopyFile(src, folder, name string) error { + return CopyFileOverwrite(src, folder, name, false) +} + +func CopyFileOverwrite(src, folder, name string, overwrite bool) error { if _, err := os.Lstat(src); os.IsNotExist(err) { log.Debugf("Not copying %s, does not exists", src) return nil } dst := path.Join(folder, name) - if _, err := os.Lstat(dst); err == nil { - log.Debugf("Not copying %s => %s already exists", src, dst) - return nil + if !overwrite { + if _, err := os.Lstat(dst); err == nil { + log.Debugf("Not copying %s => %s already exists", src, dst) + return nil + } } if err := createDirs(folder); err != nil { diff --git a/docs/os/configuration/adding-kernel-parameters/index.md b/docs/os/configuration/adding-kernel-parameters/index.md index eb0179d2..35a3bcbd 100644 --- a/docs/os/configuration/adding-kernel-parameters/index.md +++ b/docs/os/configuration/adding-kernel-parameters/index.md @@ -10,14 +10,13 @@ There are two ways to edit the kernel parameters, in-place (editing the file and ### In-place editing -For in-place editing, you will need to run a container with an editor and a mount to access the `/boot/global.cfg` file containing the kernel parameters. +To edit the kernel boot parameters of an already installed RancherOS system, use the new `sudo ros config syslinux` editing command (uses `vi`). > To activate this setting, you will need to reboot. -```bash -$ sudo system-docker run --rm -it -v /:/host alpine vi /host/boot/global.cfg -``` +#### Graphical boot screen +RancherOS v1.1.0 added a syslinux boot menu, which on desktop systems can be switched to graphical mode by adding `UI vesamenu.c32` to a new line in `global.cfg` (use `sudo ros config syslinux` to edit the file). ### During installation diff --git a/scripts/isolinux.cfg b/scripts/isolinux.cfg index a5904699..627f72d0 100644 --- a/scripts/isolinux.cfg +++ b/scripts/isolinux.cfg @@ -1,4 +1,5 @@ -UI vesamenu.c32 +# Add `UI vesamenu.c32` to a new line in `global.cfg` to switch to GUI bootmenu (use `sudo ros config syslinux`) +UI menu.c32 TIMEOUT 20 #2s PROMPT 0 @@ -6,7 +7,14 @@ PROMPT 0 INCLUDE ../global.cfg # each INCLUDEd file has a `DEFAULT mylabel` in it, and the last one wins +LABEL rancheros-previous + MENU LABEL Previous RancherOS Version + MENU DISABLE INCLUDE ../linux-previous.cfg + +LABEL rancheros-current + MENU LABEL Current RancherOS Version + MENU DISABLE INCLUDE ../linux-current.cfg # http://www.syslinux.org/wiki/index.php?title=Comboot/menu.c32 diff --git a/scripts/isolinux_label.cfg b/scripts/isolinux_label.cfg index 40ac296f..c4d8ae63 100644 --- a/scripts/isolinux_label.cfg +++ b/scripts/isolinux_label.cfg @@ -1,5 +1,4 @@ -# TODO: should add ros-version to label and initrd DEFAULT rancheros-${LABEL} LABEL rancheros-${LABEL} SAY rancheros-${LABEL}: RancherOS ${VERSION} ${KERNEL_VERSION} @@ -22,4 +21,11 @@ LABEL rancheros-${LABEL}-debug COM32 cmd.c32 APPEND rancheros-${LABEL} rancher.debug=true +LABEL rancheros-${LABEL}-debug-autologin + SAY rancheros-${LABEL}-debug-autolgin: debug and autologin RancherOS ${VERSION} ${KERNEL_VERSION} + MENU LABEL rancher.debug and rancher.autologin + MENU INDENT 2 + COM32 cmd.c32 + APPEND rancheros-${LABEL} rancher.autologin=tty1 rancher.autologin=ttyS0 rancher.debug=true + MENU SEPARATOR diff --git a/scripts/ros b/scripts/ros index d6b30e23..086261cf 100755 --- a/scripts/ros +++ b/scripts/ros @@ -26,4 +26,4 @@ docker run --rm -it \ -v /usr/share/ca-certificates:/usr/share/ca-certificates \ -w /var/lib/rancher \ --entrypoint sh \ - rancher/os-base:v0.8.1 + rancher/os-base:v1.0.3