guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: guix system vm: Add --no-graphic CLI argument.


From: guix-commits
Subject: branch master updated: guix system vm: Add --no-graphic CLI argument.
Date: Fri, 03 Dec 2021 08:18:38 -0500

This is an automated email from the git hooks/post-receive script.

mothacehe pushed a commit to branch master
in repository guix.

The following commit(s) were added to refs/heads/master by this push:
     new b42bfbd  guix system vm: Add --no-graphic CLI argument.
b42bfbd is described below

commit b42bfbdfe55eea56234a91c33ef12b9fe198766d
Author: Attila Lendvai <attila@lendvai.name>
AuthorDate: Thu Dec 2 20:18:56 2021 +0100

    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>
---
 doc/guix.texi           | 23 +++++++++++++++++++----
 gnu/system/vm.scm       |  2 ++
 guix/scripts/system.scm | 10 ++++++++++
 3 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index a675631..9914829 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -34506,8 +34506,8 @@ passed.
 @cindex virtual machine
 @cindex VM
 @anchor{guix system vm}
-Build a virtual machine that contains the operating system declared in
-@var{file}, and return a script to run that virtual machine (VM).
+Build a virtual machine (VM) that contains the operating system declared
+in @var{file}, and return a script to run that VM.
 
 @quotation Note
 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
 @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.
 
 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
 with the bootloader.  This requires more disk space since a root image
 containing at least the kernel, initrd, and bootloader data files must
-be created.  The @option{--image-size} option can be used to specify the
-size of the image.
+be created.
+
+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 Creating system images in various formats
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 1e2d8b4..0a95302 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -754,6 +754,8 @@ it is mostly useful when FULL-BOOT?  is true."
     (define qemu-exec
       #~(list #+(file-append qemu "/bin/"
                              (qemu-command (or target system)))
+              ;; Tells qemu to use the terminal it was started in for IO.
+              #$@(if graphic? '() #~("-nographic"))
               #$@(if full-boot?
                      #~()
                      #~("-kernel" #$(operating-system-kernel-file os)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 7faa92f..1db788a 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -689,6 +689,7 @@ checking this by themselves in their 'check' procedure."
 (define* (system-derivation-for-action image action
                                        #:key
                                        full-boot?
+                                       (graphic? #t)
                                        container-shared-network?
                                        mappings)
   "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)
        (system-qemu-image/shared-store-script os
                                               #:full-boot? full-boot?
+                                              #:graphic? graphic?
                                               #:disk-image-size
                                               (if full-boot?
                                                   image-size
@@ -772,6 +774,7 @@ and TARGET arguments."
                          dry-run? derivations-only?
                          use-substitutes? target
                          full-boot?
+                         (graphic? #t)
                          container-shared-network?
                          (mappings '())
                          (gc-root #f))
@@ -825,6 +828,7 @@ static checks."
   (mlet* %store-monad
       ((sys       (system-derivation-for-action image action
                                                 #:full-boot? full-boot?
+                                                #:graphic? graphic?
                                                 #:container-shared-network? 
container-shared-network?
                                                 #:mappings mappings))
 
@@ -1013,6 +1017,8 @@ Some ACTIONS support additional ARGS.\n"))
   (display (G_ "
       --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_ "
       --skip-checks      skip file system and initrd module safety checks"))
   (display (G_ "
       --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""))
@@ -1081,6 +1087,9 @@ Some ACTIONS support additional ARGS.\n"))
          (option '("full-boot") #f #f
                  (lambda (opt name arg 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
                  (lambda (opt name arg result)
                    (alist-cons 'save-provenance? #t result)))
@@ -1266,6 +1275,7 @@ resulting from command-line parsing."
                                #:validate-reconfigure
                                (assoc-ref opts 'validate-reconfigure)
                                #:full-boot? (assoc-ref opts 'full-boot?)
+                               #:graphic? (not (assoc-ref opts 'no-graphic?))
                                #:container-shared-network?
                                (assoc-ref opts 'container-shared-network?)
                                #:mappings (filter-map (match-lambda



reply via email to

[Prev in Thread] Current Thread [Next in Thread]