Subject: Re: bug#33362: System tests stuck in "shepherd[1]: waiting for udevd..."

From: Danny Milosavljevic <[email-masked]>
Date: Fri, 30 Nov 2018 00:19:08 +0100

Hmm, I wonder whether it might make sense to add "--debug" to udevd in gnu/services/base.scm in order to track down this problem.

The loop looks rather harmless and only checks whether the actual udev socket is available - which it must be for udevd to work.

It does the following right now:

         (start #~(lambda ()
                    (define udevd
                      ;; 'udevd' from eudev.
                      #$(file-append udev "/sbin/udevd")) ; TODO: Add ' "--debug"' here

                    (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))))))
[...]
                    (let ((pid (fork+exec-command (list udevd))))
                      ;; Wait until udevd is up and running.  This appears to
                      ;; be needed so that the events triggered below are
                      ;; actually handled.
                      (wait-for-udevd)