From 8f70fa9f591b9195b9c907a08e36f1caeefd723b Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Wed, 15 Jul 2026 14:27:11 +0200 Subject: [PATCH] Reapply "sdnotify-wrapper: drop" This reverts commit 09384d7270eed91a1eac560ad312b0b599a22b78. --- nixos/modules/services/desktops/seatd.nix | 3 +- pkgs/development/skaware-packages/default.nix | 10 +- .../sdnotify-wrapper/default.nix | 47 ----- .../sdnotify-wrapper/sdnotify-wrapper.c | 174 ------------------ pkgs/top-level/aliases.nix | 1 + pkgs/top-level/all-packages.nix | 1 - 6 files changed, 10 insertions(+), 226 deletions(-) delete mode 100644 pkgs/development/skaware-packages/sdnotify-wrapper/default.nix delete mode 100644 pkgs/development/skaware-packages/sdnotify-wrapper/sdnotify-wrapper.c diff --git a/nixos/modules/services/desktops/seatd.nix b/nixos/modules/services/desktops/seatd.nix index bedcc9a43120..939b9f338af9 100644 --- a/nixos/modules/services/desktops/seatd.nix +++ b/nixos/modules/services/desktops/seatd.nix @@ -40,7 +40,6 @@ in config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ seatd - sdnotify-wrapper ]; users.groups.seat = lib.mkIf (cfg.group == "seat") { }; @@ -55,7 +54,7 @@ in Type = "notify"; NotifyAccess = "all"; SyslogIdentifier = "seatd"; - ExecStart = "${pkgs.sdnotify-wrapper}/bin/sdnotify-wrapper ${pkgs.seatd.bin}/bin/seatd -n 1 -u ${cfg.user} -g ${cfg.group} -l ${cfg.logLevel}"; + ExecStart = "${lib.getExe' pkgs.s6 "s6-notify-socket-from-fd"} ${pkgs.seatd.bin}/bin/seatd -n 1 -u ${cfg.user} -g ${cfg.group} -l ${cfg.logLevel}"; RestartSec = 1; Restart = "always"; }; diff --git a/pkgs/development/skaware-packages/default.nix b/pkgs/development/skaware-packages/default.nix index b0877ada8c36..0ae8c4d43865 100644 --- a/pkgs/development/skaware-packages/default.nix +++ b/pkgs/development/skaware-packages/default.nix @@ -1,4 +1,8 @@ -{ lib, pkgs }: +{ + lib, + pkgs, + config, +}: lib.makeScope pkgs.newScope ( self: @@ -22,7 +26,6 @@ lib.makeScope pkgs.newScope ( # libs skalibs = callPackage ./skalibs { }; skalibs_2_10 = callPackage ./skalibs/2_10.nix { }; - sdnotify-wrapper = callPackage ./sdnotify-wrapper { }; # s6 tooling s6 = callPackage ./s6 { }; @@ -40,4 +43,7 @@ lib.makeScope pkgs.newScope ( s6-portable-utils-man-pages = self.s6-portable-utils.passthru.manpages; s6-rc-man-pages = self.s6-rc.passthru.manpages; } + // lib.optionalAttrs config.allowAliases { + sdnotify-wrapper = throw "sdnotify-wrapper has been removed in favour of s6-notify-socket-from-fd in the s6 package"; + } ) diff --git a/pkgs/development/skaware-packages/sdnotify-wrapper/default.nix b/pkgs/development/skaware-packages/sdnotify-wrapper/default.nix deleted file mode 100644 index d9fa940a3294..000000000000 --- a/pkgs/development/skaware-packages/sdnotify-wrapper/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - lib, - runCommandCC, - skalibs, -}: - -let - # From https://skarnet.org/software/misc/sdnotify-wrapper.c, - # which is unversioned. - src = ./sdnotify-wrapper.c; - -in -runCommandCC "sdnotify-wrapper" - { - - outputs = [ - "bin" - "doc" - "out" - ]; - - meta = { - homepage = "https://skarnet.org/software/misc/sdnotify-wrapper.c"; - description = "Use systemd sd_notify without having to link against libsystemd"; - mainProgram = "sdnotify-wrapper"; - platforms = lib.platforms.linux; - license = lib.licenses.isc; - maintainers = with lib.maintainers; [ Profpatsch ]; - }; - - } - '' - mkdir -p $bin/bin - mkdir $out - - # the -lskarnet has to come at the end to support static builds - $CC \ - -o $bin/bin/sdnotify-wrapper \ - -I${skalibs.dev}/include \ - -L${skalibs.lib}/lib \ - ${src} \ - -lskarnet - - mkdir -p $doc/share/doc/sdnotify-wrapper - # copy the documentation comment - sed -ne '/Usage:/,/*\//p' ${src} > $doc/share/doc/sdnotify-wrapper/README - '' diff --git a/pkgs/development/skaware-packages/sdnotify-wrapper/sdnotify-wrapper.c b/pkgs/development/skaware-packages/sdnotify-wrapper/sdnotify-wrapper.c deleted file mode 100644 index 00ede0b2d706..000000000000 --- a/pkgs/development/skaware-packages/sdnotify-wrapper/sdnotify-wrapper.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - Copyright: (C)2015-2020 Laurent Bercot. http://skarnet.org/ - ISC license. See http://opensource.org/licenses/ISC - - Build-time requirements: skalibs. https://skarnet.org/software/skalibs/ - Run-time requirements: none, if you link skalibs statically. - - Compilation: - gcc -o sdnotify-wrapper -L/usr/lib/skalibs sdnotify-wrapper.c -lskarnet - Use /usr/lib/skalibs/libskarnet.a instead of -lskarnet to link statically. - Adapt gcc's -I and -L options to your skalibs installation paths. - - Usage: if a daemon would be launched by systemd as "foobard args...", - launch it as "sdnotify-wrapper foobard args..." instead, and you can now - tell systemd that this daemon supports readiness notification. - - Instead of using sd_notify() and having to link against the systemd - library, the daemon notifies readiness by writing whatever it wants - to a file descriptor (by default: stdout), then a newline. (Then it - should close that file descriptor.) The simplest way is something like - int notify_readiness() { write(1, "\n", 1) ; close(1) ; } - This mechanism is understandable by any notification readiness framework. - - Readiness notification occurs when the newline is written, not when - the descriptor is closed; but since sdnotify-wrapper stops reading - after the first newline and will exit, any subsequent writes will - fail and it's best to simply close the descriptor right away. - - sdnotify-wrapper sees the notification when it occurs and sends it - to systemd using the sd_notify format. - - Options: - -d fd: the daemon will write its notification on descriptor fd. - Default is 1. - -f: do not doublefork. Use if the daemon waits for children it does - not know it has (for instance, superservers do this). When in doubt, - do not use that option, or you may have a zombie hanging around. - -t timeout: if the daemon has not sent a notification after timeout - milliseconds, give up and exit; systemd will not be notified. - -k: keep the NOTIFY_SOCKET environment variable when execing into the - daemon. By default, the variable is unset: the daemon should not need it. - - Notes: - sdnotify-wrapper does not change the daemon's pid. It runs as a - (grand)child of the daemon. - If the NOTIFY_SOCKET environment variable is not set, sdnotify-wrapper - does nothing - it only execs into the daemon. - sdnotify-wrapper is more liberal than sd_notify(). It will accept - a relative path in NOTIFY_SOCKET. -*/ - - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define USAGE "sdnotify-wrapper [ -d fd ] [ -f ] [ -t timeout ] [ -k ] prog..." -#define dieusage() strerr_dieusage(100, USAGE) - -#define VAR "NOTIFY_SOCKET" - -static inline int ipc_sendto (int fd, char const *s, size_t len, char const *path) -{ - struct sockaddr_un sa ; - size_t l = strlen(path) ; - if (l > IPCPATH_MAX) return (errno = ENAMETOOLONG, 0) ; - memset(&sa, 0, sizeof sa) ; - sa.sun_family = AF_UNIX ; - memcpy(sa.sun_path, path, l+1) ; - if (path[0] == '@') sa.sun_path[0] = 0 ; - return sendto(fd, s, len, MSG_NOSIGNAL, (struct sockaddr *)&sa, sizeof sa) >= 0 ; -} - -static inline void notify_systemd (pid_t pid, char const *socketpath) -{ - size_t n = 16 ; - char fmt[16 + PID_FMT] = "READY=1\nMAINPID=" ; - int fd = ipc_datagram_b() ; - if (fd < 0) strerr_diefu1sys(111, "create socket") ; - n += pid_fmt(fmt + n, pid) ; - fmt[n++] = '\n' ; - if (!ipc_sendto(fd, fmt, n, socketpath)) - strerr_diefu2sys(111, "send notification message to ", socketpath) ; - close(fd) ; -} - -static inline int run_child (int fd, unsigned int timeout, pid_t pid, char const *s) -{ - char dummy[4096] ; - iopause_fd x = { .fd = fd, .events = IOPAUSE_READ } ; - tain deadline ; - tain_now_g() ; - if (timeout) tain_from_millisecs(&deadline, timeout) ; - else deadline = tain_infinite_relative ; - tain_add_g(&deadline, &deadline) ; - for (;;) - { - int r = iopause_g(&x, 1, &deadline) ; - if (r < 0) strerr_diefu1sys(111, "iopause") ; - if (!r) return 99 ; - r = sanitize_read(fd_read(fd, dummy, 4096)) ; - if (r < 0) - if (errno == EPIPE) return 1 ; - else strerr_diefu1sys(111, "read from parent") ; - else if (r && memchr(dummy, '\n', r)) break ; - } - close(fd) ; - notify_systemd(pid, s) ; - return 0 ; -} - -int main (int argc, char const *const *argv) -{ - char const *s = getenv(VAR) ; - unsigned int fd = 1 ; - unsigned int timeout = 0 ; - int df = 1, keep = 0 ; - PROG = "sdnotify-wrapper" ; - { - subgetopt l = SUBGETOPT_ZERO ; - for (;;) - { - int opt = subgetopt_r(argc, argv, "d:ft:k", &l) ; - if (opt == -1) break ; - switch (opt) - { - case 'd' : if (!uint0_scan(l.arg, &fd)) dieusage() ; break ; - case 'f' : df = 0 ; break ; - case 't' : if (!uint0_scan(l.arg, &timeout)) dieusage() ; break ; - case 'k' : keep = 1 ; break ; - default : dieusage() ; - } - } - argc -= l.ind ; argv += l.ind ; - } - if (!argc) dieusage() ; - - if (!s) xexec(argv) ; - else - { - pid_t parent = getpid() ; - pid_t child ; - int p[2] ; - if (pipe(p) < 0) strerr_diefu1sys(111, "pipe") ; - child = df ? doublefork() : fork() ; - if (child < 0) strerr_diefu1sys(111, df ? "doublefork" : "fork") ; - else if (!child) - { - PROG = "sdnotify-wrapper (child)" ; - close(p[1]) ; - return run_child(p[0], timeout, parent, s) ; - } - close(p[0]) ; - if (fd_move((int)fd, p[1]) < 0) strerr_diefu1sys(111, "move descriptor") ; - if (keep) xexec(argv) ; - else xmexec_m(argv, VAR, sizeof(VAR)) ; - } -} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 9407085f56a2..c2f58bbf9dbd 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -2053,6 +2053,7 @@ mapAliases { SDL2_classic_mixer = throw "'SDL2_classic_mixer' has been removed as part of the deprecation of 'SDL2_classic'. Consider upgrading to 'SDL2_mixer' built with 'sdl2-compat'."; # Added 2025-05-20 SDL2_classic_ttf = throw "'SDL2_classic_ttf' has been removed as part of the deprecation of 'SDL2_classic'. Consider upgrading to 'SDL2_ttf' built with 'sdl2-compat'."; # Added 2025-05-20 SDL_compat = sdl12-compat; # Added 2026-05-19 + sdnotify-wrapper = skawarePackages.sdnotify-wrapper; seafile-server = throw "'seafile-server' has been removed as it is unmaintained"; # Added 2025-08-21 seahub = throw "'seahub' has been removed as it is unmaintained"; # Added 2025-08-21 securefs = throw "'securefs' has been removed as it depends on fuse2"; # Added 2026-05-05 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 06ef7f62abba..33c26ea4216c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6713,7 +6713,6 @@ with pkgs; s6-portable-utils-man-pages s6-rc s6-rc-man-pages - sdnotify-wrapper skalibs skalibs_2_10 tipidee