* question about pty,agetty for an intermediate virtual server image
@ 2017-03-31 12:59 ng0
2017-03-31 23:43 ` Leo Famulari
0 siblings, 1 reply; 19+ messages in thread
From: ng0 @ 2017-03-31 12:59 UTC (permalink / raw)
To: guix-devel
Hi,
before I go ahead and create an intermediate image - I'd like to explore
the option of getting IN-Berlin closer into the creation of the 'deploy'
process of Guix which is being worked on - I need to find out how the
redirection to "/sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt102"
can be honored.
As far as I understand, we use mingetty which according to the mingetty
manpages is not suited for tasks agetty can do.
IN-Berlin runs a Consoleserver which redirects ssh logins to it via
"virsh console $vserver" to the /sbin/agetty (on debian vservers) on
your server. The KVM configuration can be seen below.
How can I achieve this (the agetty part) with GuixSD?
----- Forwarded message from Andreas Herrmann -----
Date: Fri, 31 Mar 2017 14:26:25 +0200
From: Andreas Herrmann
To: ng0, Kontakt fuer neue Teilnehmer
Subject: Re: [info] server image format?
Hallo,
On 31.03.2017 13:39, ng0 wrote:
> Ich glaube als vorrübergehende, individuelle Lösung würde das
> funktionieren. Das "aber" folgt weiter unten.
> Da stellt sich mir jetzt nur die Frage zu dem Konsolenserver. Muss ich
> da irgendwas besonderes beachten damit ich nicht versehentlich ein Image
> generiere was gar nicht mehr ansprechbar ist? Könnt ihr mir da die Daten
> geben welche ich beachten muss, oder hängt das nur von normalen,
> unspezifizierten virtuellen konsolen ab? Da haben wir standardmäßig die
> services 'term-tty1' bis 'term-tty6' welches soweit ich weiss über mingetty
> kommt (https://www.gnu.org/software/guix/manual/guix.html#index-mingetty_002dconfiguration).
>
> man mingetty sagt allerdings:
> mingetty is a minimal getty for use on virtual consoles. Unlike
> agetty(8), mingetty is not suitable for serial lines. I recommend using
> mgetty(8) for this purpose.
>
Der "Konsolenserver" ist ein direkte Umleitung auf ein
"/sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt102"
auf deinem VServer via
virsh console $vserver
Die VServer haben in dazu KVM folgendes konfiguriert:
<console type='pty'>
<target type='serial' port='0'/>
</console>
Gruß, Andreas
----- End forwarded message -----
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: question about pty,agetty for an intermediate virtual server image 2017-03-31 12:59 question about pty,agetty for an intermediate virtual server image ng0 @ 2017-03-31 23:43 ` Leo Famulari 2017-04-01 7:27 ` ng0 0 siblings, 1 reply; 19+ messages in thread From: Leo Famulari @ 2017-03-31 23:43 UTC (permalink / raw) To: guix-devel [-- Attachment #1: Type: text/plain, Size: 1861 bytes --] On Fri, Mar 31, 2017 at 12:59:56PM +0000, ng0 wrote: > before I go ahead and create an intermediate image - I'd like to explore > the option of getting IN-Berlin closer into the creation of the 'deploy' > process of Guix which is being worked on - I need to find out how the > redirection to "/sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt102" > can be honored. > As far as I understand, we use mingetty which according to the mingetty > manpages is not suited for tasks agetty can do. > > IN-Berlin runs a Consoleserver which redirects ssh logins to it via > "virsh console $vserver" to the /sbin/agetty (on debian vservers) on > your server. The KVM configuration can be seen below. > > How can I achieve this (the agetty part) with GuixSD? You can use the agetty-service, like this (kernel-arguments ;; Adjust these arguments as desired. '("console=ttyS0,115200n8 gfxpayload=text earlyprintk=serial,tty,115200")) (services (cons (agetty-service (agetty-configuration (tty "ttys0") (term "vt102") (keep-baud? #t) (baud-rate "115200,38400,9600))) %base-services)) And you will probably want a non-graphical GRUB menu as well (this should be parameterized eventually...): diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index b18b8be6d..d94b1a266 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -197,7 +197,7 @@ system string---e.g., \"x86_64-linux\"." insmod efi_uga fi - terminal_output gfxterm + terminal_output console " "")) Finally, you can test it in QEMU by appending '-serial pty' to the QEMU invocation. When it starts, QEMU will tell you which pty it's using, and you can connect to it with something like `screen`. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: question about pty,agetty for an intermediate virtual server image 2017-03-31 23:43 ` Leo Famulari @ 2017-04-01 7:27 ` ng0 2017-04-01 18:33 ` Leo Famulari 2017-04-01 20:29 ` Leo Famulari 0 siblings, 2 replies; 19+ messages in thread From: ng0 @ 2017-04-01 7:27 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel Leo Famulari transcribed 2.8K bytes: > On Fri, Mar 31, 2017 at 12:59:56PM +0000, ng0 wrote: > > before I go ahead and create an intermediate image - I'd like to explore > > the option of getting IN-Berlin closer into the creation of the 'deploy' > > process of Guix which is being worked on - I need to find out how the > > redirection to "/sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt102" > > can be honored. > > As far as I understand, we use mingetty which according to the mingetty > > manpages is not suited for tasks agetty can do. > > > > IN-Berlin runs a Consoleserver which redirects ssh logins to it via > > "virsh console $vserver" to the /sbin/agetty (on debian vservers) on > > your server. The KVM configuration can be seen below. > > > > How can I achieve this (the agetty part) with GuixSD? > > You can use the agetty-service, like this > > (kernel-arguments > ;; Adjust these arguments as desired. > '("console=ttyS0,115200n8 gfxpayload=text earlyprintk=serial,tty,115200")) > > (services > (cons (agetty-service (agetty-configuration > (tty "ttys0") > (term "vt102") > (keep-baud? #t) > (baud-rate "115200,38400,9600))) > %base-services)) > > And you will probably want a non-graphical GRUB menu as well (this > should be parameterized eventually...): Yeah, that would be useful as it is not uncommon for servers. > diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm > index b18b8be6d..d94b1a266 100644 > --- a/gnu/system/grub.scm > +++ b/gnu/system/grub.scm > @@ -197,7 +197,7 @@ system string---e.g., \"x86_64-linux\"." > insmod efi_uga > fi > > - terminal_output gfxterm > + terminal_output console > " > "")) > > Finally, you can test it in QEMU by appending '-serial pty' to the > QEMU invocation. When it starts, QEMU will tell you which pty it's > using, and you can connect to it with something like `screen`. Thanks! I'll give it a try and get back to you when I run into problems. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: question about pty,agetty for an intermediate virtual server image 2017-04-01 7:27 ` ng0 @ 2017-04-01 18:33 ` Leo Famulari 2017-04-01 20:29 ` Leo Famulari 1 sibling, 0 replies; 19+ messages in thread From: Leo Famulari @ 2017-04-01 18:33 UTC (permalink / raw) To: guix-devel [-- Attachment #1: Type: text/plain, Size: 642 bytes --] On Sat, Apr 01, 2017 at 07:27:40AM +0000, ng0 wrote: > Leo Famulari transcribed 2.8K bytes: > > And you will probably want a non-graphical GRUB menu as well (this > > should be parameterized eventually...): > > Yeah, that would be useful as it is not uncommon for servers. I'm working on it today... > > Finally, you can test it in QEMU by appending '-serial pty' to the > > QEMU invocation. When it starts, QEMU will tell you which pty it's > > using, and you can connect to it with something like `screen`. > > Thanks! I'll give it a try and get back to you when I run into problems. Hopefully it's "if", not "when" ;) [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: question about pty,agetty for an intermediate virtual server image 2017-04-01 7:27 ` ng0 2017-04-01 18:33 ` Leo Famulari @ 2017-04-01 20:29 ` Leo Famulari 2017-04-02 16:31 ` question about pty, agetty " myglc2 1 sibling, 1 reply; 19+ messages in thread From: Leo Famulari @ 2017-04-01 20:29 UTC (permalink / raw) To: guix-devel [-- Attachment #1: Type: text/plain, Size: 352 bytes --] On Sat, Apr 01, 2017 at 07:27:40AM +0000, ng0 wrote: > Leo Famulari transcribed 2.8K bytes: > > And you will probably want a non-graphical GRUB menu as well (this > > should be parameterized eventually...): > > Yeah, that would be useful as it is not uncommon for servers. Here's a patch that works in my tests: https://bugs.gnu.org/26334 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: question about pty, agetty for an intermediate virtual server image 2017-04-01 20:29 ` Leo Famulari @ 2017-04-02 16:31 ` myglc2 2017-04-02 21:06 ` Non-graphical GRUB configuration Leo Famulari 0 siblings, 1 reply; 19+ messages in thread From: myglc2 @ 2017-04-02 16:31 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/01/2017 at 16:29 Leo Famulari writes: > On Sat, Apr 01, 2017 at 07:27:40AM +0000, ng0 wrote: >> Leo Famulari transcribed 2.8K bytes: >> > And you will probably want a non-graphical GRUB menu as well (this >> > should be parameterized eventually...): >> >> Yeah, that would be useful as it is not uncommon for servers. > > Here's a patch that works in my tests: > > https://bugs.gnu.org/26334 Hi Leo, I gather you are focused on KVM deployment, so this may be off- topic. But FWIW, the patch that I use to run GRUB menus both locally on the console and over IPMI SOL (serial over LAN) on an headless ASRock server (MT-c224 w/ ASPEED 2300 BMC controller) is attached below. The important point is that 'terminal_output console' displays grub menus on _both_ the local console and via serial ... but ... grub does not receive the serial inputs ... unless ... 'terminal_input serial console' is also specified. I don't recall the exact rationale for 'serial --unit=0 --speed=115200', but I am pretty sure it was needed. I can check on that if you like. So... it would sure be "nice" if you could expand your patch to also support this use case. Best, George diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index 4f9bde6a6..8199f6f0b 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -199,7 +199,8 @@ system string---e.g., \"x86_64-linux\"." insmod vga fi - terminal_output gfxterm + serial --unit=0 --speed=115200 + terminal_input serial console; terminal_output console " "")) ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Non-graphical GRUB configuration 2017-04-02 16:31 ` question about pty, agetty " myglc2 @ 2017-04-02 21:06 ` Leo Famulari 2017-04-02 22:13 ` Leo Famulari ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Leo Famulari @ 2017-04-02 21:06 UTC (permalink / raw) To: myglc2; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 2876 bytes --] On Sun, Apr 02, 2017 at 12:31:19PM -0400, myglc2 wrote: > I gather you are focused on KVM deployment, so this may be off- > topic. But FWIW, the patch that I use to run GRUB menus both locally on > the console and over IPMI SOL (serial over LAN) on an headless ASRock > server (MT-c224 w/ ASPEED 2300 BMC controller) is attached below. I think we can make it work on KVM and bare metal in the same commit :) > The important point is that 'terminal_output console' displays grub > menus on _both_ the local console and via serial ... but ... grub does > not receive the serial inputs ... unless ... 'terminal_input serial > console' is also specified. Okay, but your diff only selects the "console" terminal_output. Is that because the native console is accessed over the serial line? Or should it be 'terminal_output console serial'? > diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm > index 4f9bde6a6..8199f6f0b 100644 > --- a/gnu/system/grub.scm > +++ b/gnu/system/grub.scm > @@ -199,7 +199,8 @@ system string---e.g., \"x86_64-linux\"." > insmod vga > fi > > - terminal_output gfxterm > + serial --unit=0 --speed=115200 > + terminal_input serial console; terminal_output console > " > "")) > Based on the GRUB manual [0], how about this plan? We'd add these fields to (grub-configuration): terminal-outputs: One or more symbols: console, serial, gfxterm, ofconsole, vga_text. Default gfxterm. terminal-inputs: One or more symbols: console, serial, ofconsole, at_keyboard,usb_keyboard. Default unset. serial-unit: An integer from {0,1,2,3}, default 0 serial-port: ??? I don't know which values are accepted serial-speed: GRUB default is 9600. Should this be an arbitrary integer, or should we offer a list of values? serial-word: An integer from {5,6,7,8}, default 8 serial-stop: An integer from {1,2}, default 1 serial-parity: A symbol from {no, odd, even}, default no They would correspond to the GRUB configuration keys GRUB_TERMINAL_OUTPUT, GRUB_TERMINAL_INPUT, and GRUB_SERIAL_COMMAND, respectively. [0] If 'terminal-inputs' or 'serial-*' are unset, we do what we do now: nothing. If 'terminal-outputs' is unset, we also do the same thing we now, which is set it to gfxterm. If any of them are set, we'd insert the corresponding text into the generated grub.cfg. If terminal-outputs does not include the symbol 'gfxterm', we'd disable the "setup_gfxterm" function. We can use the `grub-script-check` program to check the syntax of the generated grub.cfg. [0] https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html https://www.gnu.org/software/grub/manual/html_node/terminal_005foutput.html https://www.gnu.org/software/grub/manual/html_node/terminal_005finput.html https://www.gnu.org/software/grub/manual/html_node/serial.html [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-02 21:06 ` Non-graphical GRUB configuration Leo Famulari @ 2017-04-02 22:13 ` Leo Famulari 2017-04-03 0:31 ` myglc2 2017-04-03 0:16 ` myglc2 2017-04-05 11:59 ` Leo Famulari 2 siblings, 1 reply; 19+ messages in thread From: Leo Famulari @ 2017-04-02 22:13 UTC (permalink / raw) To: myglc2; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 339 bytes --] On Sun, Apr 02, 2017 at 05:06:20PM -0400, Leo Famulari wrote: > Based on the GRUB manual [0], how about this plan? > > We'd add these fields to (grub-configuration): [...] NixOS has the user provide a string: https://nixos.org/nixos/manual/options.html#opt-boot.loader.grub.extraConfig It is much simpler than my plan... [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-02 22:13 ` Leo Famulari @ 2017-04-03 0:31 ` myglc2 2017-04-03 8:39 ` Ludovic Courtès 0 siblings, 1 reply; 19+ messages in thread From: myglc2 @ 2017-04-03 0:31 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/02/2017 at 22:13 Leo Famulari writes: > On Sun, Apr 02, 2017 at 05:06:20PM -0400, Leo Famulari wrote: >> Based on the GRUB manual [0], how about this plan? >> >> We'd add these fields to (grub-configuration): > > [...] > > NixOS has the user provide a string: > > https://nixos.org/nixos/manual/options.html#opt-boot.loader.grub.extraConfig > > It is much simpler than my plan... I agree this is also workable. It actually is more flexible since it allows access to all grub config features. If you go this way, the guix doc should point the user to the relevant grub doc. Since one needs to install grub in order to read the grub doc in guix, it might be helpful for the guix doc to mention that as well. HTH - George ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-03 0:31 ` myglc2 @ 2017-04-03 8:39 ` Ludovic Courtès 0 siblings, 0 replies; 19+ messages in thread From: Ludovic Courtès @ 2017-04-03 8:39 UTC (permalink / raw) To: myglc2; +Cc: guix-devel myglc2 <myglc2@gmail.com> skribis: > On 04/02/2017 at 22:13 Leo Famulari writes: > >> On Sun, Apr 02, 2017 at 05:06:20PM -0400, Leo Famulari wrote: >>> Based on the GRUB manual [0], how about this plan? >>> >>> We'd add these fields to (grub-configuration): >> >> [...] >> >> NixOS has the user provide a string: >> >> https://nixos.org/nixos/manual/options.html#opt-boot.loader.grub.extraConfig >> >> It is much simpler than my plan... > > I agree this is also workable. It actually is more flexible since it > allows access to all grub config features. > > If you go this way, the guix doc should point the user to the relevant > grub doc. Since one needs to install grub in order to read the grub doc > in guix, it might be helpful for the guix doc to mention that as well. Agreed. I’m fine either way, but an escape hatch like this is always going to be useful so it can’t hurt. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-02 21:06 ` Non-graphical GRUB configuration Leo Famulari 2017-04-02 22:13 ` Leo Famulari @ 2017-04-03 0:16 ` myglc2 2017-04-05 11:59 ` Leo Famulari 2 siblings, 0 replies; 19+ messages in thread From: myglc2 @ 2017-04-03 0:16 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/02/2017 at 21:06 Leo Famulari writes: > On Sun, Apr 02, 2017 at 12:31:19PM -0400, myglc2 wrote: >> I gather you are focused on KVM deployment, so this may be off- >> topic. But FWIW, the patch that I use to run GRUB menus both locally on >> the console and over IPMI SOL (serial over LAN) on an headless ASRock >> server (MT-c224 w/ ASPEED 2300 BMC controller) is attached below. > > I think we can make it work on KVM and bare metal in the same commit :) > >> The important point is that 'terminal_output console' displays grub >> menus on _both_ the local console and via serial ... but ... grub does >> not receive the serial inputs ... unless ... 'terminal_input serial >> console' is also specified. > > Okay, but your diff only selects the "console" terminal_output. Is that > because the native console is accessed over the serial line? Or should > it be 'terminal_output console serial'? I grant you it seems odd, but with 'terminal_output console serial', the grub output on the serial line is "garbled" in the sense that each line is "doubled". Meanwhile, the appearance on the local console (on the attached VGA display) is fine. I don't know if this behavior is peculiar to this motherboard, or if this is typical. >> diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm >> index 4f9bde6a6..8199f6f0b 100644 >> --- a/gnu/system/grub.scm >> +++ b/gnu/system/grub.scm >> @@ -199,7 +199,8 @@ system string---e.g., \"x86_64-linux\"." >> insmod vga >> fi >> >> - terminal_output gfxterm >> + serial --unit=0 --speed=115200 >> + terminal_input serial console; terminal_output console >> " >> "")) >> > > Based on the GRUB manual [0], how about this plan? > > We'd add these fields to (grub-configuration): > > terminal-outputs: One or more symbols: console, serial, gfxterm, > ofconsole, vga_text. Default gfxterm. Yes > terminal-inputs: One or more symbols: console, serial, ofconsole, > at_keyboard,usb_keyboard. Default unset. Yes > serial-unit: An integer from {0,1,2,3}, default 0 yes > serial-port: ??? I don't know which values are accepted I don't think this is required. > serial-speed: GRUB default is 9600. Should this be an arbitrary > integer, or should we offer a list of values? An integer is probably OK. > serial-word: An integer from {5,6,7,8}, default 8 > serial-stop: An integer from {1,2}, default 1 > serial-parity: A symbol from {no, odd, even}, default no I think you can skip these. > They would correspond to the GRUB configuration keys > GRUB_TERMINAL_OUTPUT, GRUB_TERMINAL_INPUT, and GRUB_SERIAL_COMMAND, > respectively. [0] > > If 'terminal-inputs' or 'serial-*' are unset, we do what we do now: > nothing. If 'terminal-outputs' is unset, we also do the same thing we > now, which is set it to gfxterm. > > If any of them are set, we'd insert the corresponding text into the > generated grub.cfg. > > If terminal-outputs does not include the symbol 'gfxterm', we'd disable > the "setup_gfxterm" function. > > We can use the `grub-script-check` program to check the syntax of the > generated grub.cfg. > > [0] > https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html > https://www.gnu.org/software/grub/manual/html_node/terminal_005foutput.html > https://www.gnu.org/software/grub/manual/html_node/terminal_005finput.html > https://www.gnu.org/software/grub/manual/html_node/serial.html This seems very fine to me! Thanks - George ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-02 21:06 ` Non-graphical GRUB configuration Leo Famulari 2017-04-02 22:13 ` Leo Famulari 2017-04-03 0:16 ` myglc2 @ 2017-04-05 11:59 ` Leo Famulari 2017-04-05 15:14 ` myglc2 2017-04-17 13:44 ` myglc2 2 siblings, 2 replies; 19+ messages in thread From: Leo Famulari @ 2017-04-05 11:59 UTC (permalink / raw) To: myglc2; +Cc: guix-devel [-- Attachment #1.1: Type: text/plain, Size: 1240 bytes --] On Sun, Apr 02, 2017 at 05:06:20PM -0400, Leo Famulari wrote: > Based on the GRUB manual [0], how about this plan? > > We'd add these fields to (grub-configuration): > > terminal-outputs: One or more symbols: console, serial, gfxterm, > ofconsole, vga_text. Default gfxterm. > > terminal-inputs: One or more symbols: console, serial, ofconsole, > at_keyboard,usb_keyboard. Default unset. > > If 'terminal-inputs' or 'serial-*' are unset, we do what we do now: > nothing. If 'terminal-outputs' is unset, we also do the same thing we > now, which is set it to gfxterm. > > If any of them are set, we'd insert the corresponding text into the > generated grub.cfg. > > If terminal-outputs does not include the symbol 'gfxterm', we'd disable > the "setup_gfxterm" function. Here's a WIP patch that I'd like some advice about. It does insert the relevant text into grub.cfg, although I recommend testing it in a virtual machine for now. Questions: 1) In general, is this approach okay? 2) I think that (grub-setup-io) should be used in (grub-configuration-file) instead of (eye-candy). But, when I try calling it there, in the builder, it has no effect on grub.cfg. Any suggestions for debugging this? [-- Attachment #1.2: 0001-system-grub-Expose-GRUB-settings-for-interactive-int.patch --] [-- Type: text/plain, Size: 6733 bytes --] From c1d081d111fb4778b6a0625abbdd8cc540ae630f Mon Sep 17 00:00:00 2001 From: Leo Famulari <leo@famulari.name> Date: Sun, 2 Apr 2017 22:18:00 -0400 Subject: [PATCH] system: grub: Expose GRUB settings for interactive interfaces. WIP: Does not validate input and setup-io is used in the wrong place * gnu/system/grub.scm (<grub-configuration>): Add new fields terminal-outputs, terminal-inputs, serial-unit, and serial-speed. (grub-setup-io, setup-gfxterm): New procedures. * doc/guix.texi (GRUB Configuration): Document the new fields. --- doc/guix.texi | 17 ++++++++++++ gnu/system/grub.scm | 75 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 75 insertions(+), 17 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index aa779e38e..8107872bc 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -14920,6 +14920,23 @@ The @code{grub-theme} object describing the theme to use. @item @code{grub} (default: @code{grub}) The GRUB package to use. + +@item @code{terminal-outputs} (default: @code{'gfxterm}) +The output terminals used for the GRUB boot menu, as a list of symbols. + +@item @code{terminal-inputs} (default: @code{'()}) +The input terminals used for the GRUB boot menu, as a list of symbols. +The default is the native platform terminal as determined by GRUB at +run-time. + +@item @code{serial-unit} (default: @code{#f}) +The serial unit used by GRUB, as an integer from 0 to 3. The default +value is deferred to GRUB; currently GRUB choosese 0, which corresponds +to COM1. + +@item @code{serial-speed} (default: @code{#f}) +The speed of the serial interface, as an integer. The default value is +deferred to GRUB; currently GRUB chooses 9600bps. @end table @end deftp diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index 4f9bde6a6..8a516f05f 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -107,17 +107,25 @@ denoting a file name." (define-record-type* <grub-configuration> grub-configuration make-grub-configuration grub-configuration? - (grub grub-configuration-grub ; package - (default (@ (gnu packages bootloaders) grub))) - (device grub-configuration-device) ; string - (menu-entries grub-configuration-menu-entries ; list - (default '())) - (default-entry grub-configuration-default-entry ; integer - (default 0)) - (timeout grub-configuration-timeout ; integer - (default 5)) - (theme grub-configuration-theme ; <grub-theme> - (default %default-theme))) + (grub grub-configuration-grub ; package + (default (@ (gnu packages bootloaders) grub))) + (device grub-configuration-device) ; string + (menu-entries grub-configuration-menu-entries ; list + (default '())) + (default-entry grub-configuration-default-entry ; integer + (default 0)) + (timeout grub-configuration-timeout ; integer + (default 5)) + (theme grub-configuration-theme ; <grub-theme> + (default %default-theme)) + (terminal-outputs grub-configuration-terminal-outputs ; list of symbols + (default '(gfxterm))) + (terminal-inputs grub-configuration-terminal-inputs ; list of symbols + (default '())) + (serial-unit grub-configuration-serial-unit ; integer | #f + (default #f)) + (serial-speed grub-configuration-serial-speed ; integer | #f + (default #f))) (define-record-type* <menu-entry> menu-entry make-menu-entry @@ -198,11 +206,16 @@ system string---e.g., \"x86_64-linux\"." insmod vbe insmod vga fi - - terminal_output gfxterm " "")) + (define (setup-gfxterm config font-file) + (if (memq 'gfxterm (grub-configuration-terminal-outputs config)) + #~(format #f "if loadfont ~a; then + setup_gfxterm +fi~%" #$font-file) + "")) + (define (theme-colors type) (let* ((theme (grub-configuration-theme config)) (colors (type theme))) @@ -221,9 +234,8 @@ function setup_gfxterm {~a} # Set 'root' to the partition that contains /gnu/store. ~a -if loadfont ~a; then - setup_gfxterm -fi +~a +~a insmod png if background_image ~a; then @@ -235,7 +247,8 @@ else fi~%" #$setup-gfxterm-body #$(grub-root-search store-device font-file) - #$font-file + #$(grub-setup-io config) + #$(setup-gfxterm config font-file) #$(strip-mount-point store-mount-point image) #$(theme-colors grub-theme-color-normal) @@ -246,6 +259,34 @@ fi~%" ;;; Configuration file. ;;; +(define (grub-setup-io config) + "Return GRUB commands to configure the input / output interfaces. The result +is a string that can be inserted in grub.cfg. +TODO Check the bounds of unit, and compare outputs and inputs to a list of +valid interfaces taken from the GRUB manual." + (let* ((symbols->string (lambda (list) + (string-join (map symbol->string list) " "))) + (outputs (grub-configuration-terminal-outputs config)) + (inputs (grub-configuration-terminal-inputs config)) + (unit (grub-configuration-serial-unit config)) + (speed (grub-configuration-serial-speed config)) + (io (string-append + "terminal_output " (symbols->string outputs) "\n" + (if (null? inputs) + "" + (string-append "terminal_input " + (symbols->string inputs) "\n")) + (if (or unit speed) + (string-append "serial" + (if unit + (string-append " --unit=" + (number->string unit)) "") + (if speed + (string-append " --speed=" + (number->string speed)) "")) + "")))) + (format #f "~a" io))) + (define (grub-root-search device file) "Return the GRUB 'search' command to look for DEVICE, which contains FILE, a gexp. The result is a gexp that can be inserted in the grub.cfg-generation -- 2.12.2 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-05 11:59 ` Leo Famulari @ 2017-04-05 15:14 ` myglc2 2017-04-05 16:07 ` Leo Famulari 2017-04-17 13:44 ` myglc2 1 sibling, 1 reply; 19+ messages in thread From: myglc2 @ 2017-04-05 15:14 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/05/2017 at 11:59 Leo Famulari writes: > Questions: > > 1) In general, is this approach okay? Hi Leo, This LGTM, but I was unable to test it because my 'system build' hangs as reported in bug#26370. Running your commit produced a similar hang but I think it is not caused by your changes so I reported against the origin/master commit. I interpreted your doc to say I should use something like this ... (bootloader (grub-configuration (device "/dev/nvme0n1") (serial-speed 115200) (terminal-inputs '(serial console)) (terminal-outputs '(console)))) ... to produce something like this in my grub config ... serial --unit=0 --speed=115200 terminal_input serial console; terminal_output console Does that look right? If so, it may be nice to include an example like this in the doc. Once I get the system build working I will test further. TIA - George ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-05 15:14 ` myglc2 @ 2017-04-05 16:07 ` Leo Famulari 2017-04-05 20:43 ` myglc2 0 siblings, 1 reply; 19+ messages in thread From: Leo Famulari @ 2017-04-05 16:07 UTC (permalink / raw) To: myglc2; +Cc: guix-devel On Wed, Apr 05, 2017 at 11:14:06AM -0400, myglc2 wrote: > I interpreted your doc to say I should use something like this ... > > (bootloader (grub-configuration (device "/dev/nvme0n1") > (serial-speed 115200) > (terminal-inputs '(serial console)) > (terminal-outputs '(console)))) Right, except... > ... to produce something like this in my grub config ... > > serial --unit=0 --speed=115200 > terminal_input serial console; terminal_output console ... you won't get '--unit=0' unless you specify (serial-unit 0) in your GuixSD configuration. However, GRUB defaults to '0', according to its manual. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-05 16:07 ` Leo Famulari @ 2017-04-05 20:43 ` myglc2 2017-04-06 15:18 ` Leo Famulari 0 siblings, 1 reply; 19+ messages in thread From: myglc2 @ 2017-04-05 20:43 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/05/2017 at 12:07 Leo Famulari writes: > On Wed, Apr 05, 2017 at 11:14:06AM -0400, myglc2 wrote: >> I interpreted your doc to say I should use something like this ... >> >> (bootloader (grub-configuration (device "/dev/nvme0n1") >> (serial-speed 115200) >> (terminal-inputs '(serial console)) >> (terminal-outputs '(console)))) > > Right, except... > >> ... to produce something like this in my grub config ... >> >> serial --unit=0 --speed=115200 >> terminal_input serial console; terminal_output console > > ... you won't get '--unit=0' unless you specify (serial-unit 0) in your > GuixSD configuration. However, GRUB defaults to '0', according to its > manual. Yes I noticed. I was operating on the hope that less would be more ;-) After following Marius Bakke's advice to revert dfee7daedb760f1b1d7506829ca31633f4173356 "gnu: bc: Update to 1.07" I can confirm that this works on an ASRock MT-C224 motherboard over IPMI SOL. Please let me know if there is anything else you need me to test. - George ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-05 20:43 ` myglc2 @ 2017-04-06 15:18 ` Leo Famulari 2017-04-06 17:34 ` myglc2 0 siblings, 1 reply; 19+ messages in thread From: Leo Famulari @ 2017-04-06 15:18 UTC (permalink / raw) To: myglc2; +Cc: guix-devel On Wed, Apr 05, 2017 at 04:43:32PM -0400, myglc2 wrote: > > ... you won't get '--unit=0' unless you specify (serial-unit 0) in your > > GuixSD configuration. However, GRUB defaults to '0', according to its > > manual. > > Yes I noticed. I was operating on the hope that less would be more ;-) I decided against hard-coding the current GRUB defaults into this code. I'd rather take them from GRUB at run-time, and accept the upstream changes as they come. Plus, we won't have to update our code as often :) ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-06 15:18 ` Leo Famulari @ 2017-04-06 17:34 ` myglc2 0 siblings, 0 replies; 19+ messages in thread From: myglc2 @ 2017-04-06 17:34 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/06/2017 at 11:18 Leo Famulari writes: > On Wed, Apr 05, 2017 at 04:43:32PM -0400, myglc2 wrote: >> > ... you won't get '--unit=0' unless you specify (serial-unit 0) in your >> > GuixSD configuration. However, GRUB defaults to '0', according to its >> > manual. >> >> Yes I noticed. I was operating on the hope that less would be more ;-) > > I decided against hard-coding the current GRUB defaults into this code. > I'd rather take them from GRUB at run-time, and accept the upstream > changes as they come. Plus, we won't have to update our code as often :) Nice! ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-05 11:59 ` Leo Famulari 2017-04-05 15:14 ` myglc2 @ 2017-04-17 13:44 ` myglc2 2017-04-17 19:51 ` Leo Famulari 1 sibling, 1 reply; 19+ messages in thread From: myglc2 @ 2017-04-17 13:44 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On 04/05/2017 at 07:59 Leo Famulari writes: > On Sun, Apr 02, 2017 at 05:06:20PM -0400, Leo Famulari wrote: >> Based on the GRUB manual [0], how about this plan? >> >> We'd add these fields to (grub-configuration): >> >> terminal-outputs: One or more symbols: console, serial, gfxterm, >> ofconsole, vga_text. Default gfxterm. >> >> terminal-inputs: One or more symbols: console, serial, ofconsole, >> at_keyboard,usb_keyboard. Default unset. >> >> If 'terminal-inputs' or 'serial-*' are unset, we do what we do now: >> nothing. If 'terminal-outputs' is unset, we also do the same thing we >> now, which is set it to gfxterm. >> >> If any of them are set, we'd insert the corresponding text into the >> generated grub.cfg. >> >> If terminal-outputs does not include the symbol 'gfxterm', we'd disable >> the "setup_gfxterm" function. > > Here's a WIP patch that I'd like some advice about. It does insert the > relevant text into grub.cfg, although I recommend testing it in a > virtual machine for now. > > Questions: > > 1) In general, is this approach okay? > > 2) I think that (grub-setup-io) should be used in > (grub-configuration-file) instead of (eye-candy). But, when I try > calling it there, in the builder, it has no effect on grub.cfg. Any > suggestions for debugging this? Hey Leo, As reported earlier, this works for me. IMO it is good to go. If there is anything I can do to help, please let me know. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Non-graphical GRUB configuration 2017-04-17 13:44 ` myglc2 @ 2017-04-17 19:51 ` Leo Famulari 0 siblings, 0 replies; 19+ messages in thread From: Leo Famulari @ 2017-04-17 19:51 UTC (permalink / raw) To: myglc2; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 541 bytes --] On Mon, Apr 17, 2017 at 09:44:06AM -0400, myglc2 wrote: > Hey Leo, As reported earlier, this works for me. IMO it is good to > go. If there is anything I can do to help, please let me know. I'm glad to hear it! Because this change would make it possible to break your GuixSD system in new ways, I do want to add some input validation and grub.cfg syntax checking before I push it to the master branch. I'd like to finish it this week, but help is always welcome. If anyone plans to help, please reply here so we don't duplicate effort :) [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2017-04-17 19:51 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-03-31 12:59 question about pty,agetty for an intermediate virtual server image ng0 2017-03-31 23:43 ` Leo Famulari 2017-04-01 7:27 ` ng0 2017-04-01 18:33 ` Leo Famulari 2017-04-01 20:29 ` Leo Famulari 2017-04-02 16:31 ` question about pty, agetty " myglc2 2017-04-02 21:06 ` Non-graphical GRUB configuration Leo Famulari 2017-04-02 22:13 ` Leo Famulari 2017-04-03 0:31 ` myglc2 2017-04-03 8:39 ` Ludovic Courtès 2017-04-03 0:16 ` myglc2 2017-04-05 11:59 ` Leo Famulari 2017-04-05 15:14 ` myglc2 2017-04-05 16:07 ` Leo Famulari 2017-04-05 20:43 ` myglc2 2017-04-06 15:18 ` Leo Famulari 2017-04-06 17:34 ` myglc2 2017-04-17 13:44 ` myglc2 2017-04-17 19:51 ` Leo Famulari
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).