Skaware summer 2026 (#542222)

This commit is contained in:
Alyssa Ross
2026-07-15 16:58:30 +00:00
committed by GitHub
16 changed files with 32 additions and 246 deletions

View File

@@ -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";
};

View File

@@ -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";
}
)

View File

@@ -7,14 +7,14 @@
}:
let
version = "2.9.9.1";
version = "2.9.9.2";
in
skawarePackages.buildPackage {
inherit version;
pname = "execline";
# ATTN: also check whether there is a new manpages version
sha256 = "sha256-vmNTMpepPDb9JnGVEXtOZoaHpSb4NFF6jbR9hbbH7Go=";
sha256 = "sha256-kI7U2zprOiOiBdj9TPKnEIkVbyrq4PVGVgRar60t7jI=";
# Maintainer of manpages uses following versioning scheme: for every
# upstream $version he tags manpages release as ${version}.1, and,

View File

@@ -2,8 +2,8 @@
skawarePackages.buildPackage {
pname = "nsss";
version = "0.2.1.2";
sha256 = "sha256-zKpz6QUJ8/pbUq+F2QIDumKMFsna7TTFQmea52gfEGc=";
version = "0.2.1.3";
sha256 = "sha256-FNpESoNtJLaihvrIilAr2qKWpNMo8J1Sl1aK07PgJoU=";
description = "Implementation of a subset of the pwd.h, group.h and shadow.h family of functions";

View File

@@ -2,8 +2,8 @@
skawarePackages.buildPackage {
pname = "s6-dns";
version = "2.4.1.2";
sha256 = "sha256-BhjYgw/OY+4Xt/VeSUKAachcl6FxCCensjSbZgzTOk4=";
version = "2.4.1.3";
sha256 = "sha256-+enetGSMVQeoSFVINkvRxW2r2jlLye4tfxy7FqA2zXY=";
description = "Suite of DNS client programs and libraries for Unix systems";

View File

@@ -10,8 +10,8 @@
skawarePackages.buildPackage {
pname = "s6-linux-init";
version = "1.2.0.1";
sha256 = "sha256-ctWbE2g9E5D335ooa+Rn5zKTQWAhr5+hAjySk+xcfXw=";
version = "1.2.0.2";
sha256 = "sha256-b60BTaFiwMgZJBl8V9FuGnXBM7NKIOQjQxobdB6Qex0=";
description = "Set of minimalistic tools used to create a s6-based init system, including a /sbin/init binary, on a Linux kernel";
platforms = lib.platforms.linux;

View File

@@ -25,8 +25,8 @@ assert sslSupportEnabled -> sslLibs ? ${sslSupport};
skawarePackages.buildPackage {
pname = "s6-networking";
version = "2.8.0.0";
sha256 = "sha256-rE9lhA/OwWJPe/nGMvtAVThRvJApV/+VayofIoGkXNQ=";
version = "2.8.0.1";
sha256 = "sha256-bwEcM7oFhs5Y/u4M+FSgsIfpCC/b0kq7eGFIRjgw80E=";
manpages = skawarePackages.buildManPages {
pname = "s6-networking-man-pages";

View File

@@ -10,8 +10,8 @@
skawarePackages.buildPackage {
pname = "s6-rc";
version = "0.6.1.1";
sha256 = "sha256-tU8iajW+HuVqIovxpMOUN/ByvGTmnb81bnM+YGqGQC0=";
version = "0.7.0.0";
sha256 = "sha256-v1uM4NpaTucNZCuBi2HZkWp6m2SkV1lfOIET5UoYhog=";
manpages = skawarePackages.buildManPages {
pname = "s6-rc-man-pages";

View File

@@ -7,8 +7,8 @@
skawarePackages.buildPackage {
pname = "s6";
version = "2.15.0.0";
sha256 = "sha256-J9/3PWJihVQBM+B151iHCH9RF/1R3llQPvfSnpb2nkw=";
version = "2.15.1.0";
sha256 = "sha256-6rnEbiK2axYTX5oF7Gig6ih9kGC4TRDe+qosqtFYq1I=";
manpages = skawarePackages.buildManPages {
pname = "s6-man-pages";

View File

@@ -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
''

View File

@@ -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 <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <skalibs/uint64.h>
#include <skalibs/types.h>
#include <skalibs/bytestr.h>
#include <skalibs/sgetopt.h>
#include <skalibs/strerr.h>
#include <skalibs/allreadwrite.h>
#include <skalibs/tai.h>
#include <skalibs/iopause.h>
#include <skalibs/djbunix.h>
#include <skalibs/socket.h>
#include <skalibs/exec.h>
#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)) ;
}
}

View File

@@ -7,8 +7,8 @@
skawarePackages.buildPackage {
pname = "skalibs";
version = "2.15.0.0";
sha256 = "sha256-f96W6K+0GRWToVMoiD6cdybJaJHPBxIiFGgh6Mh/gAc=";
version = "2.15.1.0";
sha256 = "sha256-+ckF50k1xv6RHH40Tj6J1fvSAUwaBGULUksVzptWNdE=";
description = "Set of general-purpose C programming libraries";
@@ -50,6 +50,8 @@ skawarePackages.buildPackage {
# child has successfully exec'ed. That happens with old glibcs
# and some virtual platforms.
"--with-sysdep-posixspawnearlyreturn=no"
"--with-sysdep-selectinfinite=${if stdenv.hostPlatform.isDarwin then "no" else "yes"}"
];
postInstall = ''

View File

@@ -6,8 +6,8 @@
skawarePackages.buildPackage {
pname = "tipidee";
version = "0.0.7.2";
sha256 = "sha256-x34St9s/3FbcI9s3ncpmhhbnQmA/6Gf6K9yNTxrKj5s=";
version = "0.0.8.0";
sha256 = "sha256-GjllM2YqxwvCsKC4xlYW/6f6IBUIhZMA67mtM82mEC0=";
description = "HTTP 1.1 webserver, serving static files and CGI/NPH";

View File

@@ -2,8 +2,8 @@
skawarePackages.buildPackage {
pname = "utmps";
version = "0.1.3.3";
sha256 = "sha256-4iEr0C/hdzBCT39eMKTd5x0IYqUrI9i3Ke7XRCCjSaI=";
version = "0.1.3.4";
sha256 = "sha256-EtzBAq1qyB+BrsxJUHM9uU81CBlHBUubFHPKxckIELw=";
description = "Secure utmpx and wtmp implementation";

View File

@@ -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

View File

@@ -6712,7 +6712,6 @@ with pkgs;
s6-portable-utils-man-pages
s6-rc
s6-rc-man-pages
sdnotify-wrapper
skalibs
skalibs_2_10
tipidee