install: Add a configuration template to the image.

* gnu/system/os-config.tmpl: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it
* gnu/system/install.scm (configuration-template-service): New
  procedure.
  (installation-services): Call it.
* doc/guix.texi (System Installation): Mention
  configuration-template.scm, and @include gnu/system/os-config.tmpl.
This commit is contained in:
Ludovic Courtès 2014-07-24 22:45:24 +02:00
parent 0a90af1531
commit 1dac856638
4 changed files with 59 additions and 16 deletions

View file

@ -2850,24 +2850,11 @@ It is better to store that file on the target root file system, say, as
@file{/mnt/etc/config.scm}.
A minimal operating system configuration, with just the bare minimum and
only a root account would look like this:
only a root account would look like this (on the installation system,
this example is available as @file{/etc/configuration-template.scm}):
@example
(use-modules (gnu))
(operating-system
(host-name "foo")
(timezone "Europe/Paris")
(locale "en_US.UTF-8")
;; Assuming /dev/sdX is the target hard disk, and /dev/sdX1 the
;; target root file system.
(bootloader (grub-configuration (device "/dev/sdX")))
(file-systems (cons (file-system
(device "/dev/sdX1")
(mount-point "/")
(type "ext4"))
%base-file-systems)))
@include gnu/system/os-config.tmpl
@end example
@noindent

View file

@ -268,6 +268,7 @@ GNU_SYSTEM_MODULES = \
gnu/system/file-systems.scm \
gnu/system/grub.scm \
gnu/system/install.scm \
gnu/system/os-config.tmpl \
gnu/system/linux.scm \
gnu/system/linux-initrd.scm \
gnu/system/shadow.scm \

View file

@ -115,6 +115,27 @@ (define (cow-store-service)
(delete-file-recursively
(string-append target #$%backing-directory))))))))
(define (configuration-template-service)
"Return a dummy service whose purpose is to install an operating system
configuration template file in the installation system."
(define local-template
"/etc/configuration-template.scm")
(define template
(search-path %load-path "gnu/system/os-config.tmpl"))
(mlet %store-monad ((template (interned-file template)))
(return (service
(requirement '(root-file-system))
(provision '(os-config-template))
(documentation
"This dummy service installs an OS configuration template.")
(start #~(const #t))
(stop #~(const #f))
(activate
#~(unless (file-exists? #$local-template)
(copy-file #$template #$local-template)))))))
(define (installation-services)
"Return the list services for the installation image."
(let ((motd (text-file "motd" "
@ -144,6 +165,9 @@ (define (normal-tty tty)
#:auto-login "guest"
#:login-program (log-to-info))
;; Documentation add-on.
(configuration-template-service)
;; A bunch of 'root' ttys.
(normal-tty "tty3")
(normal-tty "tty4")

31
gnu/system/os-config.tmpl Normal file
View file

@ -0,0 +1,31 @@
;; This is an operating system configuration template.
(use-modules (gnu))
(operating-system
(host-name "antelope")
(timezone "Europe/Paris")
(locale "en_US.UTF-8")
;; Assuming /dev/sdX is the target hard disk, and "root" is
;; the label of the target root file system.
(bootloader (grub-configuration (device "/dev/sdX")))
(file-systems (cons (file-system
(device "root")
(title 'label)
(mount-point "/")
(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 (list (user-account
(name "alice")
(comment "Bob's sister")
(group "users")
;; Adding the account to the "wheel" group
;; makes it a sudoer.
(supplementary-groups '("wheel"))
(home-directory "/home/alice")))))