We are thrilled to announce version 1.0.0 of the Shepherd, no less than twenty-one years after its initial alpha release! We believe Shepherd has become a solid tool, meeting the kind of user experience one has come to expect since systemd. Check out the web site to learn more: 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 GNU 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.0.tar.gz https://ftp.gnu.org/gnu/shepherd/shepherd-1.0.0.tar.gz.sig Here are the SHA1 and SHA256 checksums: bc9dc75b3b79e8a9dc26e50c02479ae7f59ebd3d shepherd-1.0.0.tar.gz e8e6af33b02790cc0a5480d759a4211a86d141d073acd3c9346b4cf010ed9e7c shepherd-1.0.0.tar.gz Verify the integrity of the tarball with ‘cksum -a sha256 --check’. Authenticate the code by downloading the corresponding .sig file: gpg --verify shepherd-0.10.5.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-0.10.5.tar.gz.sig This tarball was bootstrapped with the following tools: Autoconf 2.71 Automake 1.16.5 Gettext 0.21 Makeinfo 7.1.1 It is bit-for-bit reproducible from a checkout of the ‘v1.0.0’ tag of the Git repository. • Changes since version 0.10.5 ** ‘herd status SERVICE’ shows high-level info about services In previous version, ‘herd status SERVICE’ would print the “running value” of SERVICE: an integer denoting the PID of its main process, or a socket for inetd or systemd services. The output is now clearer, showing the “main PID”, listening endpoints, and so on. ** ‘herd status SERVICE’ shows recently logged messages and log files The command now lists recently-logged messages (choose the number of messages shown with the ‘-n’ option) as well as the file(s) it is logged to, if any. ** ‘herd status SERVICE’ shows custom actions When a service defines custom actions, these actions are now shown directly in ‘herd status SERVICE’, making it easier to discover them. ** ‘herd status SERVICE’ shows whether a replacement is available When a replacement is available for a service, this is now shown in the output of ‘herd status SERVICE’. Run ‘herd restart SERVICE’ to upgrade it and install the replacement in its stead. ** ‘herd status root’ shows information about the ‘root’ service itself It used to be that ‘herd status’ was synonymous with ‘herd status root’ and both would show the status of all registered services. This is no longer the case: ‘herd status root’ now shows information about the ‘root’ service itself, including recently-logged messages. ** Support for timed services The new ‘make-timer-constructor’ procedure lets you define a service that runs periodically—e.g., every day at noon, every Sunday at 10PM. The resulting service can be started, stopped, and triggered; it has its output logged like any other service. It is comparable to the venerable cron and its variants but hopefully much more convenient to use. See “Timers” in the manual. ** New log rotation service The ‘log-rotation’ service defined in (shepherd service log-rotation) defines a simple log rotation service, similar to the venerable rottlog and logrotate programs, which periodically compresses, moves around, and eventually deletes old log files. See “Log Rotation Service” in the manual for details. ** New system log service The ‘system-log’ service is a substitute for good’ol ‘syslogd’: it listens for messages written by applications on the /dev/log Unix-domain socket and dispatches them to log files according to administrator-provided rules. See “System Log” in the manual. ** New timer service The venerable ‘at’ command, to request the delayed execution of a command, also got a replacement in the form of the ‘timer’ service. See “Timers” in the manual. ** New transient service maker The new service called ‘transient’ lets you run commands in the background, and it does so by wrapping them in transient services. It is similar in spirit to ‘systemd-run’. See “Transient Service Maker” in the manual. ** Linux kexec support On GNU/Linux, the ‘root’ service has a new ‘kexec’ action that can be invoked with the ‘reboot -k’ command; it reboots straight into a new kernel previously loaded with the ‘kexec -l IMAGE’ command. See “Invoking reboot” in the manual. ** ‘shepherd’ honors ‘--silent’ Previously the ‘--silent’ option of ‘shepherd’ was, well, silently ignored. This is no longer the case. ** ‘shepherd’ now logs deprecation warnings Using deprecated interfaces leads to warnings that are now logged by shepherd and visible in its log file. ** GOOPS The GOOPS programming interface of shepherd, which was deprecated in 0.10.x, is now gone. See “Legacy GOOPS Interface” for more information. ** Reproducible source tarball The ‘shepherd-1.0.0.tar.gz’ file distributed at ftp.gnu.org is now bit-for-bit reproducible from the corresponding Git tag. This was prompted by vulnerabilities that propped up in the XZ package in April 2024 (CVE-2024-3094); code itself borrows from what Janneke Nieuwenhuizen did for Guix. ** Updated requirements: Guile, gzip, zstd Guile 2.2 is no longer supported; Guile 3.0.x is required. The log rotation service can use the ‘gzip’ and ‘zstd’ commands. Use the ‘--with-gzip’ and ‘--with-zstd’ configure options to specify the file name of the commands to use. ** Translations This version is fully translated in German, Romanian, Swedish, and Ukranian; 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-guix@gnu.org. Join guix-devel@gnu.org for discussions. Ludovic, on behalf of the Shepherd herd.