~ruther/guix-local

45c5b47b96a238c764c2d32966267f7f897bcc3d — Ludovic Courtès 11 years ago ccc2678
activation: Copy the account skeletons when creating the 'root' account.

* gnu/build/activation.scm (%skeleton-directory): New variable.
  (dot-or-dot-dot?, copy-account-skeletons): New procedure.
  (add-user): Use 'copy-account-skeletons'.
  (activate-etc): Use 'dot-or-dot-dot?'.
1 files changed, 21 insertions(+), 3 deletions(-)

M gnu/build/activation.scm
M gnu/build/activation.scm => gnu/build/activation.scm +21 -3
@@ 50,6 50,25 @@
                ,name)))
    (zero? (apply system* "groupadd" args))))

(define %skeleton-directory
  ;; Directory containing skeleton files for new accounts.
  ;; Note: keep the trailing '/' so that 'scandir' enters it.
  "/etc/skel/")

(define (dot-or-dot-dot? file)
  (member file '("." "..")))

(define* (copy-account-skeletons home
                                 #:optional (directory %skeleton-directory))
  "Copy the account skeletons from DIRECTORY to HOME."
  (let ((files (scandir directory (negate dot-or-dot-dot?)
                        string<?)))
    (mkdir-p home)
    (for-each (lambda (file)
                (copy-file (string-append directory "/" file)
                           (string-append home "/" file)))
              files)))

(define* (add-user name group
                   #:key uid comment home shell password system?
                   (supplementary-groups '())


@@ 70,6 89,7 @@ properties.  Return #t on success."
          (cut format <> "~a:x:~a:~a:~a:~a:~a~%"
               name "0" "0" comment home shell))
        (chmod "/etc/shadow" #o600)
        (copy-account-skeletons (or home "/root"))
        #t)

      ;; Use 'useradd' from the Shadow package.


@@ 198,9 218,7 @@ numeric gid or #f."
                ;; XXX: Dirty hack to meet sudo's expectations.
                (when (string=? (basename target) "sudoers")
                  (chmod target #o440))))
            (scandir etc
                     (lambda (file)
                       (not (member file '("." ".."))))
            (scandir etc (negate dot-or-dot-dot?)

                     ;; The default is 'string-locale<?', but we don't have
                     ;; it when run from the initrd's statically-linked