GNU Shepherd 1.0.9 released
Ludovic Courtès <[email protected]> Wed, 03 Dec 2025 17:44:10 +0100
| Newsgroups | gmane.lisp.guile.sources,gmane.comp.gnu.guix.devel,gmane.lisp.guile.user |
|---|---|
| Message-ID | <[email protected]> |
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
We are glad to announce version 1.0.9 of the Shepherd, the next
bug-fix release in the 1.0.x series.
Check out the web site to learn more about the Shepherd 1.0.x series:
https://shepherding.services/news/2024/12/the-shepherd-1.0.0-released/
=E2=80=A2 About
The Shepherd is a service manager written in Guile that looks after
the herd of daemons running on the system. It can be used as an
=E2=80=9Cinit=E2=80=9D system (PID 1) and also by unprivileged users to m=
anage
per-user daemons=E2=80=94e.g., gpg-agent, tor, privoxy. It supports seve=
ral
daemon startup mechanisms, including inetd, systemd-style socket
activation, and timers. The Shepherd is configured in Guile Scheme
and can be extended in the same language. It builds on a simple
memory-safe and callback-free programming model.
The Shepherd is developed jointly with the Guix project; it is used as
the init system of Guix System and service manager of Guix Home.
https://shepherding.services/
=E2=80=A2 Download
Here are the compressed sources and a GPG detached signature:
https://ftp.gnu.org/gnu/shepherd/shepherd-1.0.9.tar.gz
https://ftp.gnu.org/gnu/shepherd/shepherd-1.0.9.tar.gz.sig
Here are the SHA1 and SHA256 checksums:
4885c51e6a1a1c81ee165fa0264ddfbbb15aa8b5 shepherd-1.0.9.tar.gz
e488c585c8418df6e8f476dca81b72910f337c9cd3608fb467de5260004000d6 sheph=
erd-1.0.9.tar.gz
Authenticate the code by downloading the corresponding .sig file:
gpg --verify shepherd-1.0.9.tar.gz.sig
The signing key can be retrieved with:
gpg --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --keyring gnu-keyring.gpg --verify shepherd-1.0.9.tar.gz.sig
It is bit-for-bit reproducible from a checkout of the =E2=80=98v1.0.9=E2=
=80=99 tag of
the Git repository.
=E2=80=A2 Changes since version 1.0.8
** =E2=80=98system-log=E2=80=99 creates parent directories of log files
(<https://codeberg.org/shepherd/shepherd/issues/82>)
If the =E2=80=98#:message-destination=E2=80=99 procedure of =E2=80=98syst=
em-log=E2=80=99 returns a log file
whose parent directories do not exist, =E2=80=98system-log=E2=80=99 will =
now create them
instead of merely reporting =E2=80=9CNo such file or directory=E2=80=9D a=
s it tries to open
the log file.
** Fix memory leak in process monitor=E2=80=99s =E2=80=98fork/monitor=E2=
=80=99
(<https://codeberg.org/shepherd/shepherd/issues/40>)
The =E2=80=98process-monitor=E2=80=99 event loop was recurring from insid=
e a =E2=80=98catch=E2=80=99
expression in the =E2=80=98fork/monitor=E2=80=99 case, leaking memory ass=
ociated with the
exception handler. In the case of inetd services, this would cause a
per-connection leak as new transient service instances were spawned.
** Fix bug that lead to service's stop procedure not being called if a de=
pendent threw an error
(<https://codeberg.org/shepherd/shepherd/pulls/89>)
Stopping of dependents inside of stop-services didn't guard against
errors coming from stop-service of dependents. This meant that
if a service X tries to stop its dependent A and A throws an error,
the stop of X is aborted completely and the shutdown-services logic
reports that there has been an error when stopping X, instead of
reporting that A has thrown an error. X's stop procedure is
never called. This could have undesirable consequences on Guix System,
such as causing file systems to not be properly unmounted in some cases.
From now on, every shepherd service's stop procedure should get called
even if dependents throw an error.
** Stopping a timer stops its entire process group
(<https://codeberg.org/shepherd/shepherd/issues/83>)
Running =E2=80=98herd stop TIMER=E2=80=99 now terminates the entire proce=
ss group of any
commands TIMER spawned and that are currently running. Previously, it wo=
uld
only terminate the main process, possibly leaving child processes behind.
** =E2=80=98exec-command=E2=80=99 no longer leaks /dev/null file descript=
or
(<https://codeberg.org/shepherd/shepherd/issues/19>)
There used to be a race condition that could lead =E2=80=98exec-command=
=E2=80=99 to leak an
open file descriptor to /dev/null in child processes. This is now fixed.
** Translations
This version is fully translated in French, German, Romanian, Swedish, and
Ukrainian; it is partially translated in several other languages. Check =
out
https://translationproject.org/domain/shepherd.html to help translate it =
into
your language!
Please report bugs to <https://codeberg.org/shepherd/shepherd/issues>.
Join [email protected] for discussions.
Many thanks to everyone who reported bugs or contributed patches!
Ludovic, on behalf of the Shepherd herd.
--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQJBBAEBCgArFiEEPORkVYqE/cadtAz7CQsRmT2a67UFAmkwaN0NHGx1ZG9AZ251
Lm9yZwAKCRAJCxGZPZrrtbKmEACKw6jm8n1AUPymdUKfd5jsf1+dr/aIaHC66v5q
xaczbTssDJPXrnI6BzH6jn2MESFtdAkh7Ym7IvCEmxqhm0HwQIHBBCsyr4aTs5WZ
FqySQFuzfsW1NQRKfGd5RCjQKC0bJeZJL5iJuUnbRu7uBopY75Wd5D5+t73pddde
/lf04EYdbuV+KITxc6MeUKGgYQA1ABc3UWRSUuOPC0Ju/hyvMphD+HSAxvI58t9p
6+JmJufTLDAry9O32VCJiUfSskNS5IVoN10W/AtgpZCc4vqBifI246Bw41Ub9dh5
ZrPBvDtRqksdtGClCRDODVcFo/PxiZBEbCdlK/jK3o3PGMNk8s2CwGYuYg/GLNtD
xwxuCbCeMJMhlvu5HGW3eBFG6gCeY7QOwF19livsWKuPsHZ7IhE8452jOEzvDpKB
RDKw05QzrfC4roGgDq8WKIZRoxffH13Obeda1ZppZdFRm5TyJKpAP9EnCio1Oa2l
BNcVfHqqgUhtC6W5YaVXYRsj4u1Hb6q1tiEeR3P3psiRDd7YFyGvVC/6+A93yyxZ
ehyaU7p7D1ATYpCcL3zOUE9GbBFuAneWHUYbliwXUq9VGJ20sKku6m1oQBomX5Ob
MTW82YmJv9qDQpwodNZWJJOIQnN0hx2lEYQZz3/w+sgOaGKeGVtO/J7I7EBmEnac
mdGbDQ==
=h+ng
-----END PGP SIGNATURE-----
--=-=-=--