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