summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-07-24 22:45:24 +0200
committerLudovic Courtès <ludo@gnu.org>2014-07-24 23:02:27 +0200
commit1dac85663858c8323a0d2483fb675aa5820d4d0e (patch)
treef9455f18fe09495f5af9c34b89187140a4869134
parent0a90af153199b03deced53da7ef7f50f0e561f80 (diff)
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.
-rw-r--r--doc/guix.texi19
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/system/install.scm24
-rw-r--r--gnu/system/os-config.tmpl31
4 files changed, 59 insertions, 16 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index c504a5d0ba..69bae80834 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -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
diff --git a/gnu-system.am b/gnu-system.am
index c3e1b98c03..6e1e8afec0 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -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 \
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index d3539b3f84..567934e4c1 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -115,6 +115,27 @@ the given target.")
(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 @@ You have been warned. Thanks for being so brave.
#: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")
diff --git a/gnu/system/os-config.tmpl b/gnu/system/os-config.tmpl
new file mode 100644
index 0000000000..ad58606f67
--- /dev/null
+++ b/gnu/system/os-config.tmpl
@@ -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")))))