3
4
Fork 0
mirror of git://git.savannah.gnu.org/guix.git synced 2023-12-14 03:33:07 +01:00

system: Provide a new VM image configuration.

* gnu/system/examples/vm-image.tmpl: Rewrite.
* doc/guix.texi (Running Guix in a VM): Adjust accordingly.
This commit is contained in:
Ludovic Courtès 2019-04-26 11:39:53 +02:00
parent 504a0fc636
commit 538b99f31f
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 79 additions and 42 deletions

View file

@ -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.

View file

@ -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))