We are glad to announce version 1.0.4 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://gnu.org/software/shepherd/news/2024/12/the-shepherd-1.0.0-released/

• 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
  “init” system (PID 1) and also by unprivileged users to manage
  per-user daemons—e.g., gpg-agent, tor, privoxy.  It supports several
  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://www.gnu.org/software/shepherd/

• Download

  Here are the compressed sources and a GPG detached signature:
    https://ftp.gnu.org/gnu/shepherd/shepherd-1.0.4.tar.gz
    https://ftp.gnu.org/gnu/shepherd/shepherd-1.0.4.tar.gz.sig

  Here are the SHA1 and SHA256 checksums:

    3572630eaa1401c2ec4df697d2a3c9fef79015e5  shepherd-1.0.4.tar.gz
    13306a6b56dfe252464e84a23c23a7234338cc752c565e1b865f7cbf8a03f0cf  
shepherd-1.0.4.tar.gz

  Authenticate the code by downloading the corresponding .sig file:

    gpg --verify shepherd-1.0.4.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.4.tar.gz.sig

  It is bit-for-bit reproducible from a checkout of the ‘v1.0.4’ tag of
  the Git repository.


• Changes since version 1.0.3

  ** ‘herd status’ displays the command of socket-activated and inetd services

  When a systemd-style or inetd-style service is started and not yet spawned,
  ‘herd status SERVICE’ now displays its command in addition to the endpoint(s)
  it is listening on.

  ** ‘restart’ action passes extra arguments to the service’s constructor
     (<https://issues.guix.gnu.org/77109>)

  Until now, extra arguments passed to the ‘restart’ action would be ignored.
  Thus, “herd restart SERVICE a b c” would restart SERVICE but silently ignore
  the arguments “a b c”.  The behavior is now to pass those extra arguments to
  the ‘start’ method of the service.

  Incidentally, this also means that mistakenly running “herd restart SERVICE1
  SERVICE2” now results in an error because SERVICE2 is interpreted as an
  argument to SERVICE1 and not as a second service to restart.

  ** Starting a one-shot service concurrently no longer reports failure
     (<https://issues.guix.gnu.org/77274>)

  It used to be that, when trying to start a one-shot service that was already
  starting, ‘herd start’ would wrongfully report failure to start.  This is no
  longer the case.

  ** Fix potential deadlock with built-in service logger
     (<https://issues.guix.gnu.org/77373>)

  The built-in service logger (the one used when constructors are not given a
  #:log-file argument) could deadlock under some conditions when the service it
  was logging has just stopped.  The problem was known to manifest in some cases
  on Guix System upon ‘herd stop nginx’.  This is now fixed.

  ** ‘log-rotation’ does not compressed already-compressed log files

  Programs such as nginx can compress log files as they write them.  The
  ‘log-rotation’ service no longer re-compresses such log files.

  ** Timers correctly handle winter-to-summer DST change
     (<https://issues.guix.gnu.org/77401>)

  This is a followup to an incomplete fix in
  <https://issues.guix.gnu.org/75622>: during the summer-to-winter daylight
  saving time (DST) change, for example from CET (UTC+1) to CEST (UTC+2) on 30
  March 2025 in Western Europe, the interval between consecutive calendar events
  would be incorrectly calculated when the event would fall between 02:00am and
  03:00am, leading the timer to trigger many times in a row, unless it had
  #:wait-for-termination? #true.  This is now fixed; next year will be better!

  ** System log no longer crashes on some Unicode input
     (<https://issues.guix.gnu.org/77283>)

  Due to a bug in Guile’s (ice-9 regex) module, the ‘system-log’ service could
  crash on certain inputs containing non-ASCII Unicode characters, when
  ‘shepherd’ is running in a non-Unicode capable locale (which is usually the
  case for PID 1).  This is now fixed by sidestepping the regexp bug entirely.

  ** ‘make-systemd-constructor’ no longer passes O_NONBLOCK sockets
     (<https://issues.guix.gnu.org/77610>)

  The ‘make-systemd-constructor’ procedure used to pass sockets marked as
  non-blocking (O_NONBLOCK) to the process it spawns, except when using
  #:lazy-start? #f.  It now systematically passes blocking sockets.

  This bug would manifest on GNU/Hurd where accept(2) in this child process
  would return EAGAIN, which some daemons did not correctly handle.

  ** ‘system*’ and ‘system’ replacements honor current directory
     (<https://issues.guix.gnu.org/77707>)

  The ‘system*’ and ‘system’ replacements in the ‘shepherd’ process now run the
  given command in the current directory rather than under
  (default-service-directory).

  ** Refuse to start when another shepherd is listening on the socket
     (<https://issues.guix.gnu.org/76998>)

  Starting an additional ‘shepherd’ as a user used to lead it to take control of
  the socket (by default /run/user/UID/shepherd/socket) even though another
  instance was already running and listening to that socket.  Since that
  behavior is undesirable, ‘shepherd’ now refuses to start in this situation.

  ** Fixed a couple of test suite failures on the Hurd
     (<https://issues.guix.gnu.org/77634>)

  A couple of tests that used to fail on GNU/Hurd (i586-gnu) have been fixed.

  ** Translations

  This version is fully translated in German, Romanian, Swedish, and Ukrainian;
  it is partially translated in eight other languages.  Check out
  https://translationproject.org/domain/shepherd.html to help translate it into
  your language!



Please report bugs to bug-g...@gnu.org.
Join guix-de...@gnu.org for discussions.

Many thanks to everyone who reported bugs or contributed patches!

Ludovic, on behalf of the Shepherd herd.

Attachment: signature.asc
Description: PGP signature

Reply via email to