[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Dependencies between service extensions

From: conjaroy
Subject: Dependencies between service extensions
Date: Sun, 7 Jun 2020 11:43:27 -0400

Greetings help-guix,

I've been a casual user of Nix for a couple of years and have decided to
test the waters with Guix. While I'm looking forward to spending time with
Lisp after many years away, my biggest impression is that Guix seems to
have well-documented interfaces in cases where Nix relies more on loose

After reviewing the manual and some of the service definitions, I'd like a
better understanding of how to implement a common pattern. Let's say that I
have some application Foo that uses an external system for persistence,
like a SQL database. Before starting up service Foo I need to ensure both
that the database service is running and that the database instance for Foo
has been initialized, because Foo doesn't know how to initialize the
database on its own.

The first issue (how to ensure that the database service is up) seems to be
solved by adding a shepherd-root-service-type service extension that
declares a set of "requirements". And the second issue (performing
pre-startup initialization) seems to be handled by the
activation-service-type extension. So far so good.

But I couldn't find documentation on whether service activation scripts can
safely rely on other services that happen to be declared as requirements in
the shepherd-root-service-type extension. And while I found many activation
scripts that do simple things like modifying the filesystem, I couldn't see
any that interact directly with other services. However, I did see some
evidence of service extensions relying on the side effects of other service
extensions: a number of activation scripts call "getpwnam" for info on
system accounts that could exist only if the corresponding
account-service-type extension has already been executed.

So my questions are: could someone clarify best practices for initializing
state in Service A before Service B starts up? And is there anything about
the ordering/dependencies of a service's extensions that could be better
documented in the manual?

Thanks for all of your work on this project.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]