aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-04-26 11:39:53 +0200
committerLudovic Courtès <ludo@gnu.org>2019-04-26 14:19:36 +0200
commit538b99f31fb3eb41f90d6eb0e658e26e72123553 (patch)
tree180bc2fefb62dffd47e0d87ed6c6df0280fc6149
parent504a0fc636ec591e65b4a229a37e522e425d8a0c (diff)
downloadpatches-538b99f31fb3eb41f90d6eb0e658e26e72123553.tar
patches-538b99f31fb3eb41f90d6eb0e658e26e72123553.tar.gz
system: Provide a new VM image configuration.
* gnu/system/examples/vm-image.tmpl: Rewrite. * doc/guix.texi (Running Guix in a VM): Adjust accordingly.
-rw-r--r--doc/guix.texi26
-rw-r--r--gnu/system/examples/vm-image.tmpl99
2 files changed, 81 insertions, 44 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 2d5ec867ea..480fce3933 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -24576,13 +24576,23 @@ example graph.
@section Running Guix in a Virtual Machine
@cindex virtual machine
-To run Guix in a virtual machine (VM), one can either use the
-pre-built Guix VM image distributed at
+To run Guix in a virtual machine (VM), one can use the pre-built Guix VM image
+distributed at
@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-vm-image-@value{VERSION}.@var{system}.xz}
-, or build their own virtual machine image using @command{guix system
-vm-image} (@pxref{Invoking guix system}). The returned image is in
-qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
-efficiently use.
+This image is a compressed image in QCOW format. You will first need to
+decompress with @command{xz -d}, and then you can pass it to an emulator such
+as QEMU (see below for details).
+
+This image boots the Xfce graphical environment and it contains some
+commonly-used tools. You can install more software in the image by running
+@command{guix package} in a terminal (@pxref{Invoking guix package}). You can
+also reconfigure the system based on its initial configuration file available
+as @file{/etc/config.scm} (@pxref{Using the Configuration System}).
+
+Instead of using this pre-built image, one can also build their own virtual
+machine image using @command{guix system vm-image} (@pxref{Invoking guix
+system}). The returned image is in qcow2 format, which the
+@uref{http://qemu.org/, QEMU emulator} can efficiently use.
@cindex QEMU
If you built your own image, you must copy it out of the store
@@ -24595,7 +24605,7 @@ vm-image} on x86_64 hardware:
@example
$ qemu-system-x86_64 \
-net user -net nic,model=virtio \
- -enable-kvm -m 256 /tmp/qemu-image
+ -enable-kvm -m 512 /tmp/qemu-image
@end example
Here is what each of these options means:
@@ -24621,7 +24631,7 @@ If your system has hardware virtualization extensions, enabling the
virtual machine support (KVM) of the Linux kernel will make things run
faster.
-@item -m 256
+@item -m 512
RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
which may be insufficient for some operations.
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
index 6dc67b0901..d451c42bd8 100644
--- a/gnu/system/examples/vm-image.tmpl
+++ b/gnu/system/examples/vm-image.tmpl
@@ -1,58 +1,85 @@
-;;; This is an operating system configuration template for a "bare-bones" setup,
-;;; suitable for booting in a virtualized environment, including virtual private
-;;; servers (VPS).
+;; This is an operating system configuration for a VM image.
+;; Modify it as you see fit and instantiate the changes by running:
+;;
+;; guix system reconfigure /etc/config.scm
+;;
-(use-modules (gnu))
-(use-package-modules bootloaders disk nvi)
+(use-modules (gnu) (srfi srfi-1))
+(use-service-modules xorg desktop)
+(use-package-modules bootloaders nvi wget xorg)
(define vm-image-motd (plain-file "motd" "
-This is the GNU system. Welcome!
+\x1b[1;37mThis is the GNU system. Welcome!\x1b[0m
-This instance of Guix System is a bare-bones template for virtualized environments.
+This instance of Guix is a template for virtualized environments.
+You can reconfigure the whole system by adjusting /etc/config.scm
+and running:
-You will probably want to do these things first if you booted in a virtual
-private server (VPS):
+ guix system reconfigure /etc/config.scm
+
+\x1b[1;33mConsider setting a password for the 'root' and 'guest' \
+accounts.\x1b[0m
+"))
+
+(define this-file
+ (local-file "./vm-image.tmpl" "config.scm"))
-* Set a password for 'root'.
-* Set up networking.
-* Expand the root partition to fill the space available by 0) deleting and
-recreating the partition with fdisk, 1) reloading the partition table with
-partprobe, and then 2) resizing the filesystem with resize2fs.\n"))
(operating-system
(host-name "gnu")
(timezone "Etc/UTC")
(locale "en_US.utf8")
+ (keyboard-layout (keyboard-layout "us" "altgr-intl"))
(firmware '())
- ;; Assuming /dev/sdX is the target hard disk, and "my-root" is
- ;; the label of the target root file system.
+ ;; Below we assume /dev/vda is the VM's hard disk.
+ ;; Adjust as needed.
(bootloader (bootloader-configuration
(bootloader grub-bootloader)
- (target "/dev/sda")
+ (target "/dev/vda")
(terminal-outputs '(console))))
(file-systems (cons (file-system
- (device (file-system-label "my-root"))
(mount-point "/")
+ (device "/dev/vda1")
(type "ext4"))
%base-file-systems))
- ;; This is where user accounts are specified. The "root"
- ;; account is implicit, and is initially created with the
- ;; empty password.
- (users %base-user-accounts)
-
- ;; Globally-installed packages.
- (packages (append (list nvi fdisk
- ;; mostly so xrefs to its manual work
- grub
- ;; partprobe
- parted)
- %base-packages))
-
- (services (modify-services %base-services
- (login-service-type config =>
- (login-configuration
- (inherit config)
- (motd vm-image-motd))))))
+ (users (cons (user-account
+ (name "guest")
+ (comment "GNU Guix Live")
+ (password "") ;no password
+ (group "users")
+ (supplementary-groups '("wheel" "netdev"
+ "audio" "video")))
+ %base-user-accounts))
+
+ (packages (append (list nvi wget) %base-packages))
+
+ (services
+ (append (list (service xfce-desktop-service-type)
+
+ ;; Copy this file to /etc/config.scm in the OS.
+ (simple-service 'config-file etc-service-type
+ `(("config.scm" ,this-file)))
+
+ ;; Choose SLiM, which is lighter than the default GDM.
+ (service slim-service-type
+ (slim-configuration
+ (auto-login? #t)
+ (default-user "guest")
+ (xorg-configuration
+ (xorg-configuration
+ (keyboard-layout keyboard-layout))))))
+
+ ;; Remove GDM.
+ (remove (lambda (service)
+ (eq? gdm-service-type (service-kind service)))
+ (modify-services %desktop-services
+ (login-service-type config =>
+ (login-configuration
+ (inherit config)
+ (motd vm-image-motd)))))))
+
+ ;; Allow resolution of '.local' host names with mDNS.
+ (name-service-switch %mdns-host-lookup-nss))