services: Use (guix build syscalls) instead of util-linux.

* gnu/services/dmd.scm (dmd-configuration-file): Add derivations for
  the (guix build syscalls) module, and add that to the load path of
  dmd.conf.
* gnu/services/base.scm (root-file-system-service): Rewrite using the
  'sync' and 'mount' procedures.
This commit is contained in:
Ludovic Courtès 2014-05-10 22:58:22 +02:00
parent 29fa45f45d
commit 23ed63a12d
2 changed files with 38 additions and 29 deletions

View file

@ -22,8 +22,7 @@ (define-module (gnu services base)
#:use-module (gnu system linux) ; 'pam-service', etc.
#:use-module (gnu packages admin)
#:use-module ((gnu packages base)
#:select (glibc-final %final-inputs))
#:use-module (gnu packages linux)
#:select (glibc-final))
#:use-module (gnu packages package-management)
#:use-module (guix gexp)
#:use-module (guix monads)
@ -52,9 +51,6 @@ (define (root-file-system-service)
This service must be the root of the service dependency graph so that its
'stop' action is invoked when dmd is the only process left."
(define coreutils
(car (assoc-ref %final-inputs "coreutils")))
(with-monad %store-monad
(return
(service
@ -63,7 +59,7 @@ (define coreutils
(start #~(const #t))
(stop #~(lambda _
;; Return #f if successfully stopped.
(system* (string-append #$coreutils "/bin/sync"))
(sync)
(call-with-blocked-asyncs
(lambda ()
@ -82,12 +78,13 @@ (define coreutils
;; Close /dev/console.
(for-each close-fdes '(0 1 2))
;; At this points, there are no open files left, so the
;; At this point, there are no open files left, so the
;; root file system can be re-mounted read-only.
(not (zero?
(system* (string-append #$util-linux "/bin/mount")
"-n" "-o" "remount,ro"
"-t" "dummy" "dummy" "/"))))))))
(mount #f "/" #f
(logior MS_REMOUNT MS_RDONLY)
#:update-mtab? #f)
#f)))))
(respawn? #f)))))
(define* (user-processes-service #:key (grace-delay 2))

View file

@ -32,27 +32,39 @@ (define-module (gnu services dmd)
(define (dmd-configuration-file services)
"Return the dmd configuration file for SERVICES."
(define config
#~(begin
(use-modules (ice-9 ftw))
(define modules
;; Extra modules visible to dmd.conf.
'((guix build syscalls)))
(register-services
#$@(map (lambda (service)
#~(make <service>
#:docstring '#$(service-documentation service)
#:provides '#$(service-provision service)
#:requires '#$(service-requirement service)
#:respawn? '#$(service-respawn? service)
#:start #$(service-start service)
#:stop #$(service-stop service)))
services))
(mlet %store-monad ((modules (imported-modules modules))
(compiled (compiled-modules modules)))
(define config
#~(begin
(eval-when (expand load eval)
(set! %load-path (cons #$modules %load-path))
(set! %load-compiled-path
(cons #$compiled %load-compiled-path)))
;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
(setenv "PATH" "/run/current-system/bin")
(use-modules (ice-9 ftw)
(guix build syscalls))
(format #t "starting services...~%")
(for-each start '#$(append-map service-provision services))))
(register-services
#$@(map (lambda (service)
#~(make <service>
#:docstring '#$(service-documentation service)
#:provides '#$(service-provision service)
#:requires '#$(service-requirement service)
#:respawn? '#$(service-respawn? service)
#:start #$(service-start service)
#:stop #$(service-stop service)))
services))
(gexp->file "dmd.conf" config))
;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
(setenv "PATH" "/run/current-system/bin")
(format #t "starting services...~%")
(for-each start '#$(append-map service-provision services))))
(gexp->file "dmd.conf" config)))
;;; dmd.scm ends here