~ruther/guix-local

1dac85663858c8323a0d2483fb675aa5820d4d0e — Ludovic Courtès 11 years ago 0a90af1
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.
4 files changed, 59 insertions(+), 16 deletions(-)

M doc/guix.texi
M gnu-system.am
M gnu/system/install.scm
A gnu/system/os-config.tmpl
M doc/guix.texi => doc/guix.texi +3 -16
@@ 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

M gnu-system.am => gnu-system.am +1 -0
@@ 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				\

M gnu/system/install.scm => gnu/system/install.scm +24 -0
@@ 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")

A gnu/system/os-config.tmpl => gnu/system/os-config.tmpl +31 -0
@@ 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")))))