Skip to content
Snippets Groups Projects
Commit ed09bb11 authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

services: udev: Improve synchronization when starting.

* gnu/services/base.scm (udev-service)[start]: Add 'wait-for-udevd', and
  call it before running 'udevadm trigger'.  Pass --action=add to
  'udevadm trigger'.  Call 'udevadm settle' after 'udevadm trigger'.
parent 971436c6
No related branches found
No related tags found
No related merge requests found
...@@ -409,6 +409,20 @@ (define* (udev-service #:key (udev udev)) ...@@ -409,6 +409,20 @@ (define* (udev-service #:key (udev udev))
(define udevd (define udevd
(string-append #$udev "/libexec/udev/udevd")) (string-append #$udev "/libexec/udev/udevd"))
(define (wait-for-udevd)
;; Wait until someone's listening on udevd's control
;; socket.
(let ((sock (socket AF_UNIX SOCK_SEQPACKET 0)))
(let try ()
(catch 'system-error
(lambda ()
(connect sock PF_UNIX "/run/udev/control")
(close-port sock))
(lambda args
(format #t "waiting for udevd...~%")
(usleep 500000)
(try))))))
;; Allow udev to find the modules. ;; Allow udev to find the modules.
(setenv "LINUX_MODULE_DIRECTORY" (setenv "LINUX_MODULE_DIRECTORY"
"/run/booted-system/kernel/lib/modules") "/run/booted-system/kernel/lib/modules")
...@@ -418,12 +432,18 @@ (define udevd ...@@ -418,12 +432,18 @@ (define udevd
((0) ((0)
(exec-command (list udevd))) (exec-command (list udevd)))
(else (else
;; Wait until udevd is up and running. This
;; appears to be needed so that the events
;; triggered below are actually handled.
(wait-for-udevd)
;; Trigger device node creation.
(system* (string-append #$udev "/bin/udevadm")
"trigger" "--action=add")
;; Wait for things to settle down. ;; Wait for things to settle down.
(system* (string-append #$udev "/bin/udevadm") (system* (string-append #$udev "/bin/udevadm")
"settle") "settle")
;; Create a bunch of devices.
(system* (string-append #$udev "/bin/udevadm")
"trigger")
pid))))) pid)))))
(stop #~(make-kill-destructor)))))) (stop #~(make-kill-destructor))))))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment