services: shepherd: Add workaround for 0.5.0 in containers.

* gnu/services/shepherd.scm (%containerized-shepherd-service): New service.
* gnu/system.scm (essential-services): Use it when CONTAINER? is true.
master
Ludovic Courtès 2018-09-26 22:52:38 +02:00
parent 6f03b08089
commit a56c4eb8f4
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 17 additions and 1 deletions

View File

@ -59,6 +59,7 @@
%default-modules
shepherd-service-file
%containerized-shepherd-service
shepherd-service-lookup-procedure
shepherd-service-back-edges
@ -327,6 +328,21 @@ symbols provided/required by a service."
(lambda (service)
(vhash-foldq* cons '() service edges)))
(define %containerized-shepherd-service
;; XXX: This service works around a bug in the Shepherd 0.5.0: shepherd
;; calls reboot(2) (via 'disable-reboot-on-ctrl-alt-del') when it starts,
;; but in a container that fails with EINVAL. This was fixed in Shepherd
;; commit 92e806bac1abaeeaf5d60f0ab50d1ae85ba6a62f.
(simple-service 'containerized-shepherd
shepherd-root-service-type
(list (shepherd-service
(provision '(containerized-shepherd))
(start #~(lambda ()
(set! (@@ (shepherd)
disable-reboot-on-ctrl-alt-del)
(const #t))
#t))))))
(define (shepherd-service-upgrade live target)
"Return two values: the subset of LIVE (a list of <live-service>) that needs
to be unloaded, and the subset of TARGET (a list of <shepherd-service>) that

View File

@ -501,7 +501,7 @@ a container or that of a \"bare metal\" system."
;; Add the firmware service, unless we are building for a
;; container.
(if container?
'()
(list %containerized-shepherd-service)
(list %linux-bare-metal-service
(service firmware-service-type
(operating-system-firmware os))))))))