guix system vm: Add --no-graphic CLI argument.
It configures QEMU to use the tty it was started in for IO (as opposed to opening a separate graphical window). This enables copy-pasting and scrollback. Exit QEMU with C-a x. * gnu/system/vm.scm (system-qemu-image/shared-store-script): Also add the '-nographic' QEMU argument when called with #:graphic? #false. * guix/scripts/system.scm (system-derivation-for-action): Propagate the #:graphic? keyword arg. (perform-action): Add and propagate the #:graphic? keyword arg. (show-help): Add --no-graphic CLI arg. (%options): Process the new --no-graphic CLI arg. (process-action): Feed in the CLI arg through the #:graphic? keyword arg. * doc/guix.texi (Invoking guix system): Add example to combine guix system and invoking the vm start script into one command. Split the description of the various options into separate paragraphs. Add a paragraph to describe --no-graphic. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>master
parent
5a18cf3604
commit
b42bfbdfe5
|
@ -34506,8 +34506,8 @@ passed.
|
||||||
@cindex virtual machine
|
@cindex virtual machine
|
||||||
@cindex VM
|
@cindex VM
|
||||||
@anchor{guix system vm}
|
@anchor{guix system vm}
|
||||||
Build a virtual machine that contains the operating system declared in
|
Build a virtual machine (VM) that contains the operating system declared
|
||||||
@var{file}, and return a script to run that virtual machine (VM).
|
in @var{file}, and return a script to run that VM.
|
||||||
|
|
||||||
@quotation Note
|
@quotation Note
|
||||||
The @code{vm} action and others below
|
The @code{vm} action and others below
|
||||||
|
@ -34526,6 +34526,12 @@ emulated machine:
|
||||||
$ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -nic user,model=virtio-net-pci
|
$ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -nic user,model=virtio-net-pci
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
It's possible to combine the two steps into one:
|
||||||
|
|
||||||
|
@example
|
||||||
|
$ $(guix system vm my-config.scm) -m 1024 -smp 2 -nic user,model=virtio-net-pci
|
||||||
|
@end example
|
||||||
|
|
||||||
The VM shares its store with the host system.
|
The VM shares its store with the host system.
|
||||||
|
|
||||||
Additional file systems can be shared between the host and the VM using
|
Additional file systems can be shared between the host and the VM using
|
||||||
|
@ -34549,8 +34555,17 @@ store of the host can then be mounted.
|
||||||
The @option{--full-boot} option forces a complete boot sequence, starting
|
The @option{--full-boot} option forces a complete boot sequence, starting
|
||||||
with the bootloader. This requires more disk space since a root image
|
with the bootloader. This requires more disk space since a root image
|
||||||
containing at least the kernel, initrd, and bootloader data files must
|
containing at least the kernel, initrd, and bootloader data files must
|
||||||
be created. The @option{--image-size} option can be used to specify the
|
be created.
|
||||||
size of the image.
|
|
||||||
|
The @option{--image-size} option can be used to specify the size of the
|
||||||
|
image.
|
||||||
|
|
||||||
|
The @option{--no-graphic} option will instruct @command{guix system} to
|
||||||
|
spawn a headless VM that will use the invoking tty for IO. Among other
|
||||||
|
things, this enables copy-pasting, and scrollback. Use the @kbd{ctrl-a}
|
||||||
|
prefix to issue QEMU commands; e.g. @kbd{ctrl-a h} prints a help,
|
||||||
|
@kbd{ctrl-a x} quits the VM, and @kbd{ctrl-a c} switches between the
|
||||||
|
QEMU monitor and the VM.
|
||||||
|
|
||||||
@cindex System images, creation in various formats
|
@cindex System images, creation in various formats
|
||||||
@cindex Creating system images in various formats
|
@cindex Creating system images in various formats
|
||||||
|
|
|
@ -754,6 +754,8 @@ it is mostly useful when FULL-BOOT? is true."
|
||||||
(define qemu-exec
|
(define qemu-exec
|
||||||
#~(list #+(file-append qemu "/bin/"
|
#~(list #+(file-append qemu "/bin/"
|
||||||
(qemu-command (or target system)))
|
(qemu-command (or target system)))
|
||||||
|
;; Tells qemu to use the terminal it was started in for IO.
|
||||||
|
#$@(if graphic? '() #~("-nographic"))
|
||||||
#$@(if full-boot?
|
#$@(if full-boot?
|
||||||
#~()
|
#~()
|
||||||
#~("-kernel" #$(operating-system-kernel-file os)
|
#~("-kernel" #$(operating-system-kernel-file os)
|
||||||
|
|
|
@ -689,6 +689,7 @@ checking this by themselves in their 'check' procedure."
|
||||||
(define* (system-derivation-for-action image action
|
(define* (system-derivation-for-action image action
|
||||||
#:key
|
#:key
|
||||||
full-boot?
|
full-boot?
|
||||||
|
(graphic? #t)
|
||||||
container-shared-network?
|
container-shared-network?
|
||||||
mappings)
|
mappings)
|
||||||
"Return as a monadic value the derivation for IMAGE according to ACTION."
|
"Return as a monadic value the derivation for IMAGE according to ACTION."
|
||||||
|
@ -706,6 +707,7 @@ checking this by themselves in their 'check' procedure."
|
||||||
((vm)
|
((vm)
|
||||||
(system-qemu-image/shared-store-script os
|
(system-qemu-image/shared-store-script os
|
||||||
#:full-boot? full-boot?
|
#:full-boot? full-boot?
|
||||||
|
#:graphic? graphic?
|
||||||
#:disk-image-size
|
#:disk-image-size
|
||||||
(if full-boot?
|
(if full-boot?
|
||||||
image-size
|
image-size
|
||||||
|
@ -772,6 +774,7 @@ and TARGET arguments."
|
||||||
dry-run? derivations-only?
|
dry-run? derivations-only?
|
||||||
use-substitutes? target
|
use-substitutes? target
|
||||||
full-boot?
|
full-boot?
|
||||||
|
(graphic? #t)
|
||||||
container-shared-network?
|
container-shared-network?
|
||||||
(mappings '())
|
(mappings '())
|
||||||
(gc-root #f))
|
(gc-root #f))
|
||||||
|
@ -825,6 +828,7 @@ static checks."
|
||||||
(mlet* %store-monad
|
(mlet* %store-monad
|
||||||
((sys (system-derivation-for-action image action
|
((sys (system-derivation-for-action image action
|
||||||
#:full-boot? full-boot?
|
#:full-boot? full-boot?
|
||||||
|
#:graphic? graphic?
|
||||||
#:container-shared-network? container-shared-network?
|
#:container-shared-network? container-shared-network?
|
||||||
#:mappings mappings))
|
#:mappings mappings))
|
||||||
|
|
||||||
|
@ -1012,6 +1016,8 @@ Some ACTIONS support additional ARGS.\n"))
|
||||||
register it as a garbage collector root"))
|
register it as a garbage collector root"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
--full-boot for 'vm', make a full boot sequence"))
|
--full-boot for 'vm', make a full boot sequence"))
|
||||||
|
(display (G_ "
|
||||||
|
--no-graphic for 'vm', use the tty that we are started in for IO"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
--skip-checks skip file system and initrd module safety checks"))
|
--skip-checks skip file system and initrd module safety checks"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
|
@ -1081,6 +1087,9 @@ Some ACTIONS support additional ARGS.\n"))
|
||||||
(option '("full-boot") #f #f
|
(option '("full-boot") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'full-boot? #t result)))
|
(alist-cons 'full-boot? #t result)))
|
||||||
|
(option '("no-graphic") #f #f
|
||||||
|
(lambda (opt name arg result)
|
||||||
|
(alist-cons 'no-graphic? #t result)))
|
||||||
(option '("save-provenance") #f #f
|
(option '("save-provenance") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'save-provenance? #t result)))
|
(alist-cons 'save-provenance? #t result)))
|
||||||
|
@ -1266,6 +1275,7 @@ resulting from command-line parsing."
|
||||||
#:validate-reconfigure
|
#:validate-reconfigure
|
||||||
(assoc-ref opts 'validate-reconfigure)
|
(assoc-ref opts 'validate-reconfigure)
|
||||||
#:full-boot? (assoc-ref opts 'full-boot?)
|
#:full-boot? (assoc-ref opts 'full-boot?)
|
||||||
|
#:graphic? (not (assoc-ref opts 'no-graphic?))
|
||||||
#:container-shared-network?
|
#:container-shared-network?
|
||||||
(assoc-ref opts 'container-shared-network?)
|
(assoc-ref opts 'container-shared-network?)
|
||||||
#:mappings (filter-map (match-lambda
|
#:mappings (filter-map (match-lambda
|
||||||
|
|
Reference in New Issue