From 538b99f31fb3eb41f90d6eb0e658e26e72123553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 26 Apr 2019 11:39:53 +0200 Subject: [PATCH] system: Provide a new VM image configuration. * gnu/system/examples/vm-image.tmpl: Rewrite. * doc/guix.texi (Running Guix in a VM): Adjust accordingly. --- doc/guix.texi | 26 ++++++--- gnu/system/examples/vm-image.tmpl | 95 ++++++++++++++++++++----------- 2 files changed, 79 insertions(+), 42 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) + (users (cons (user-account + (name "guest") + (comment "GNU Guix Live") + (password "") ;no password + (group "users") + (supplementary-groups '("wheel" "netdev" + "audio" "video"))) + %base-user-accounts)) - ;; Globally-installed packages. - (packages (append (list nvi fdisk - ;; mostly so xrefs to its manual work - grub - ;; partprobe - parted) - %base-packages)) + (packages (append (list nvi wget) %base-packages)) - (services (modify-services %base-services - (login-service-type config => - (login-configuration - (inherit config) - (motd vm-image-motd)))))) + (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))