* [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument.
@ 2021-11-30 19:13 Attila Lendvai
2021-12-02 14:24 ` Mathieu Othacehe
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Attila Lendvai @ 2021-11-30 19:13 UTC (permalink / raw)
To: 52204; +Cc: Attila Lendvai
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.
---
gnu/system/vm.scm | 2 ++
guix/scripts/system.scm | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 1e2d8b47c2..0a95302584 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -754,6 +754,8 @@ (define kernel-arguments
(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 7faa92fd7d..1675fccf50 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -689,6 +689,7 @@ (define file-systems
(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 @@ (define* (system-derivation-for-action image action
((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 @@ (define* (perform-action action image
dry-run? derivations-only?
use-substitutes? target
full-boot?
+ (graphic? #t)
container-shared-network?
(mappings '())
(gc-root #f))
@@ -825,6 +828,7 @@ (define bootcfg
(mlet* %store-monad
((sys (system-derivation-for-action image action
#:full-boot? full-boot?
+ #:graphic? graphic?
#:container-shared-network? container-shared-network?
#:mappings mappings))
@@ -1012,6 +1016,8 @@ (define (show-help)
register it as a garbage collector root"))
(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_ "
@@ -1081,6 +1087,9 @@ (define %options
(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 @@ (define (graph-backend)
#:validate-reconfigure
(assoc-ref opts 'validate-reconfigure)
#:full-boot? (assoc-ref opts 'full-boot?)
+ #:graphic? (if (assoc-ref opts 'no-graphic?) #f #t)
#:container-shared-network?
(assoc-ref opts 'container-shared-network?)
#:mappings (filter-map (match-lambda
--
2.33.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument.
2021-11-30 19:13 [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument Attila Lendvai
@ 2021-12-02 14:24 ` Mathieu Othacehe
2021-12-02 19:09 ` [bug#52204] [PATCH 2/2] doc: Document guix system --no-graphic Attila Lendvai
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Mathieu Othacehe @ 2021-12-02 14:24 UTC (permalink / raw)
To: Attila Lendvai; +Cc: 52204
Hello,
> * 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.
This looks fine. Could you send an updated patch with the associated
documentation update?
Thanks,
Mathieu
^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#52204] [PATCH 2/2] doc: Document guix system --no-graphic.
2021-11-30 19:13 [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument Attila Lendvai
2021-12-02 14:24 ` Mathieu Othacehe
@ 2021-12-02 19:09 ` Attila Lendvai
2021-12-02 19:18 ` [bug#52204] [PATCH v2] guix system vm: Add --no-graphic CLI argument Attila Lendvai
2021-12-03 12:22 ` [bug#52204] [PATCH v3] " Attila Lendvai
3 siblings, 0 replies; 7+ messages in thread
From: Attila Lendvai @ 2021-12-02 19:09 UTC (permalink / raw)
To: 52204; +Cc: Attila Lendvai
* 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. Adde a paragraph to describe
--no-graphic.
---
doc/guix.texi | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 2a166e3a89..ca670f8971 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -34500,8 +34500,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
@@ -34520,6 +34520,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
+@end example
+
The VM shares its store with the host system.
Additional file systems can be shared between the host and the VM using
@@ -34543,8 +34549,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
--
2.33.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#52204] [PATCH v2] guix system vm: Add --no-graphic CLI argument.
2021-11-30 19:13 [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument Attila Lendvai
2021-12-02 14:24 ` Mathieu Othacehe
2021-12-02 19:09 ` [bug#52204] [PATCH 2/2] doc: Document guix system --no-graphic Attila Lendvai
@ 2021-12-02 19:18 ` Attila Lendvai
2021-12-03 10:38 ` [bug#52204] [PATCH] " Mathieu Othacehe
2021-12-03 12:22 ` [bug#52204] [PATCH v3] " Attila Lendvai
3 siblings, 1 reply; 7+ messages in thread
From: Attila Lendvai @ 2021-12-02 19:18 UTC (permalink / raw)
To: 52204; +Cc: Attila Lendvai
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. Adde a paragraph to describe
--no-graphic.
---
after consuling on #guix, i'm resending the two commits (the doc and
the code) as one, because that is preferred.
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 2a166e3a89..ca670f8971 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -34500,8 +34500,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
@@ -34520,6 +34520,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
+@end example
+
The VM shares its store with the host system.
Additional file systems can be shared between the host and the VM using
@@ -34543,8 +34549,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 1e2d8b47c2..0a95302584 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -754,6 +754,8 @@ (define kernel-arguments
(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 7faa92fd7d..1675fccf50 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -689,6 +689,7 @@ (define file-systems
(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 @@ (define* (system-derivation-for-action image action
((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 @@ (define* (perform-action action image
dry-run? derivations-only?
use-substitutes? target
full-boot?
+ (graphic? #t)
container-shared-network?
(mappings '())
(gc-root #f))
@@ -825,6 +828,7 @@ (define bootcfg
(mlet* %store-monad
((sys (system-derivation-for-action image action
#:full-boot? full-boot?
+ #:graphic? graphic?
#:container-shared-network? container-shared-network?
#:mappings mappings))
@@ -1012,6 +1016,8 @@ (define (show-help)
register it as a garbage collector root"))
(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_ "
@@ -1081,6 +1087,9 @@ (define %options
(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 @@ (define (graph-backend)
#:validate-reconfigure
(assoc-ref opts 'validate-reconfigure)
#:full-boot? (assoc-ref opts 'full-boot?)
+ #:graphic? (if (assoc-ref opts 'no-graphic?) #f #t)
#:container-shared-network?
(assoc-ref opts 'container-shared-network?)
#:mappings (filter-map (match-lambda
--
2.33.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument.
2021-12-02 19:18 ` [bug#52204] [PATCH v2] guix system vm: Add --no-graphic CLI argument Attila Lendvai
@ 2021-12-03 10:38 ` Mathieu Othacehe
0 siblings, 0 replies; 7+ messages in thread
From: Mathieu Othacehe @ 2021-12-03 10:38 UTC (permalink / raw)
To: Attila Lendvai; +Cc: 52204
Hello,
> after consuling on #guix, i'm resending the two commits (the doc and
> the code) as one, because that is preferred.
Thanks for the v2. I think we should also remove the "-vga std" argument
that is added by "common-qemu-options" but ignored because "-nographic"
is read first in QEMU command line.
Mathieu
^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#52204] [PATCH v3] guix system vm: Add --no-graphic CLI argument.
2021-11-30 19:13 [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument Attila Lendvai
` (2 preceding siblings ...)
2021-12-02 19:18 ` [bug#52204] [PATCH v2] guix system vm: Add --no-graphic CLI argument Attila Lendvai
@ 2021-12-03 12:22 ` Attila Lendvai
2021-12-03 13:34 ` bug#52204: [PATCH] " Mathieu Othacehe
3 siblings, 1 reply; 7+ messages in thread
From: Attila Lendvai @ 2021-12-03 12:22 UTC (permalink / raw)
To: 52204; +Cc: Attila Lendvai
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.
(common-qemu-options): Remove '-vga stg'; it is the default since QEMU 2.2.
* 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. Adde a paragraph to describe
--no-graphic.
---
v3: also remove the '-vga std' from the qemu command line; it's been the
default since forever.
doc/guix.texi | 23 +++++++++++++++++++----
gnu/system/vm.scm | 3 ++-
guix/scripts/system.scm | 10 ++++++++++
3 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 2a166e3a89..ca670f8971 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -34500,8 +34500,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
@@ -34520,6 +34520,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
+@end example
+
The VM shares its store with the host system.
Additional file systems can be shared between the host and the VM using
@@ -34543,8 +34549,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 1e2d8b47c2..f1541cf30c 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -712,7 +712,6 @@ (define (virtfs-option fs)
"-device" "virtio-rng-pci,rng=guixsd-vm-rng"
#$@(map virtfs-option shared-fs)
- "-vga std"
(format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on"
#$image)))
@@ -754,6 +753,8 @@ (define kernel-arguments
(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 7faa92fd7d..1675fccf50 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -689,6 +689,7 @@ (define file-systems
(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 @@ (define* (system-derivation-for-action image action
((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 @@ (define* (perform-action action image
dry-run? derivations-only?
use-substitutes? target
full-boot?
+ (graphic? #t)
container-shared-network?
(mappings '())
(gc-root #f))
@@ -825,6 +828,7 @@ (define bootcfg
(mlet* %store-monad
((sys (system-derivation-for-action image action
#:full-boot? full-boot?
+ #:graphic? graphic?
#:container-shared-network? container-shared-network?
#:mappings mappings))
@@ -1012,6 +1016,8 @@ (define (show-help)
register it as a garbage collector root"))
(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_ "
@@ -1081,6 +1087,9 @@ (define %options
(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 @@ (define (graph-backend)
#:validate-reconfigure
(assoc-ref opts 'validate-reconfigure)
#:full-boot? (assoc-ref opts 'full-boot?)
+ #:graphic? (if (assoc-ref opts 'no-graphic?) #f #t)
#:container-shared-network?
(assoc-ref opts 'container-shared-network?)
#:mappings (filter-map (match-lambda
--
2.33.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* bug#52204: [PATCH] guix system vm: Add --no-graphic CLI argument.
2021-12-03 12:22 ` [bug#52204] [PATCH v3] " Attila Lendvai
@ 2021-12-03 13:34 ` Mathieu Othacehe
0 siblings, 0 replies; 7+ messages in thread
From: Mathieu Othacehe @ 2021-12-03 13:34 UTC (permalink / raw)
To: Attila Lendvai; +Cc: 52204-done
Hello,
I pushed the v2, and a separate commit removing the "-vga std" argument.
Thanks,
Mathieu
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-12-03 13:42 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-30 19:13 [bug#52204] [PATCH] guix system vm: Add --no-graphic CLI argument Attila Lendvai
2021-12-02 14:24 ` Mathieu Othacehe
2021-12-02 19:09 ` [bug#52204] [PATCH 2/2] doc: Document guix system --no-graphic Attila Lendvai
2021-12-02 19:18 ` [bug#52204] [PATCH v2] guix system vm: Add --no-graphic CLI argument Attila Lendvai
2021-12-03 10:38 ` [bug#52204] [PATCH] " Mathieu Othacehe
2021-12-03 12:22 ` [bug#52204] [PATCH v3] " Attila Lendvai
2021-12-03 13:34 ` bug#52204: [PATCH] " Mathieu Othacehe
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.