From 156757eaf71ea812ed4e0743b8dfe6f322656603 Mon Sep 17 00:00:00 2001 From: Dawid Dziurla Date: Thu, 30 May 2024 19:51:42 +0200 Subject: [PATCH 1/4] nixos/systemd-user: add generators option --- nixos/modules/system/boot/systemd/user.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nixos/modules/system/boot/systemd/user.nix b/nixos/modules/system/boot/systemd/user.nix index 2685cf7e283a..53fca631678c 100644 --- a/nixos/modules/system/boot/systemd/user.nix +++ b/nixos/modules/system/boot/systemd/user.nix @@ -144,6 +144,18 @@ in { }; }; + systemd.user.generators = mkOption { + type = types.attrsOf types.path; + default = {}; + example = { systemd-gpt-auto-generator = "/dev/null"; }; + description = '' + Definition of systemd generators; see {manpage}`systemd.generator(5)`. + + For each `NAME = VALUE` pair of the attrSet, a link is generated from + `/etc/systemd/user-generators/NAME` to `VALUE`. + ''; + }; + systemd.additionalUpstreamUserUnits = mkOption { default = []; type = types.listOf types.str; From 25ad0cdbfcd2e3d0c62a77cf78a2c2067ac7831b Mon Sep 17 00:00:00 2001 From: Dawid Dziurla Date: Thu, 30 May 2024 19:52:22 +0200 Subject: [PATCH 2/4] nixos/systemd: link user-generators --- nixos/modules/system/boot/systemd.nix | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix index c82924763d5e..f93f3f83594f 100644 --- a/nixos/modules/system/boot/systemd.nix +++ b/nixos/modules/system/boot/systemd.nix @@ -503,8 +503,8 @@ in environment.systemPackages = [ cfg.package ]; environment.etc = let - # generate contents for /etc/systemd/system-${type} from attrset of links and packages - hooks = type: links: pkgs.runCommand "system-${type}" { + # generate contents for /etc/systemd/${scope}-${type} from attrset of links and packages + hooks = scope: type: links: pkgs.runCommand "${scope}-${type}" { preferLocalBuild = true; packages = cfg.packages; } '' @@ -512,7 +512,7 @@ in mkdir -p $out for package in $packages do - for hook in $package/lib/systemd/system-${type}/* + for hook in $package/lib/systemd/${scope}-${type}/* do ln -s $hook $out/ done @@ -562,8 +562,9 @@ in ${cfg.sleep.extraConfig} ''; - "systemd/system-generators" = { source = hooks "generators" cfg.generators; }; - "systemd/system-shutdown" = { source = hooks "shutdown" cfg.shutdown; }; + "systemd/user-generators" = { source = hooks "user" "generators" cfg.user.generators; }; + "systemd/system-generators" = { source = hooks "system" "generators" cfg.generators; }; + "systemd/system-shutdown" = { source = hooks "system" "shutdown" cfg.shutdown; }; }); services.dbus.enable = true; From 0133e21626dc8cd3cd910306910f37c121b1e7be Mon Sep 17 00:00:00 2001 From: Dawid Dziurla Date: Fri, 31 May 2024 11:58:18 +0200 Subject: [PATCH 3/4] nixos/tests/podman: add test for rootless quadlet --- nixos/tests/podman/default.nix | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/nixos/tests/podman/default.nix b/nixos/tests/podman/default.nix index 3eea45832f0a..f57523cf5888 100644 --- a/nixos/tests/podman/default.nix +++ b/nixos/tests/podman/default.nix @@ -1,5 +1,22 @@ import ../make-test-python.nix ( - { pkgs, lib, ... }: { + { pkgs, lib, ... }: + let + quadletContainerFile = pkgs.writeText "quadlet.container" '' + [Unit] + Description=A test quadlet container + + [Container] + Image=localhost/scratchimg:latest + Exec=bash -c 'trap exit SIGTERM SIGINT; while true; do sleep 1; done' + ContainerName=quadlet + Volume=/nix/store:/nix/store + Volume=/run/current-system/sw/bin:/bin + + [Install] + WantedBy=default.target + ''; + in + { name = "podman"; meta = { maintainers = lib.teams.podman.members; @@ -174,6 +191,16 @@ import ../make-test-python.nix ( with subtest("A podman non-member can not use the docker cli"): docker.fail(su_cmd("docker version", user="mallory")) + with subtest("A rootless quadlet container service is created"): + dir = "/home/alice/.config/containers/systemd" + rootless.succeed(su_cmd("tar cv --files-from /dev/null | podman import - scratchimg")) + rootless.succeed(su_cmd(f"mkdir -p {dir}")) + rootless.succeed(su_cmd(f"cp -f ${quadletContainerFile} {dir}/quadlet.container")) + rootless.systemctl("daemon-reload", "alice") + rootless.systemctl("start quadlet", "alice") + rootless.wait_until_succeeds(su_cmd("podman ps | grep quadlet"), timeout=20) + rootless.systemctl("stop quadlet", "alice") + # TODO: add docker-compose test ''; From fbbc41f7daeab95dbec8df18e83c4fa41b69f51f Mon Sep 17 00:00:00 2001 From: Dawid Dziurla Date: Mon, 3 Jun 2024 11:15:59 +0200 Subject: [PATCH 4/4] nixos/systemd: simplify hooks function --- nixos/modules/system/boot/systemd.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix index f93f3f83594f..14a4ab596b52 100644 --- a/nixos/modules/system/boot/systemd.nix +++ b/nixos/modules/system/boot/systemd.nix @@ -503,8 +503,8 @@ in environment.systemPackages = [ cfg.package ]; environment.etc = let - # generate contents for /etc/systemd/${scope}-${type} from attrset of links and packages - hooks = scope: type: links: pkgs.runCommand "${scope}-${type}" { + # generate contents for /etc/systemd/${dir} from attrset of links and packages + hooks = dir: links: pkgs.runCommand "${dir}" { preferLocalBuild = true; packages = cfg.packages; } '' @@ -512,7 +512,7 @@ in mkdir -p $out for package in $packages do - for hook in $package/lib/systemd/${scope}-${type}/* + for hook in $package/lib/systemd/${dir}/* do ln -s $hook $out/ done @@ -562,9 +562,9 @@ in ${cfg.sleep.extraConfig} ''; - "systemd/user-generators" = { source = hooks "user" "generators" cfg.user.generators; }; - "systemd/system-generators" = { source = hooks "system" "generators" cfg.generators; }; - "systemd/system-shutdown" = { source = hooks "system" "shutdown" cfg.shutdown; }; + "systemd/user-generators" = { source = hooks "user-generators" cfg.user.generators; }; + "systemd/system-generators" = { source = hooks "system-generators" cfg.generators; }; + "systemd/system-shutdown" = { source = hooks "system-shutdown" cfg.shutdown; }; }); services.dbus.enable = true;