patches and low-level development discussion
 help / color / mirror / code / Atom feed
From: Demi Marie Obenour <demiobenour@gmail.com>
To: Spectrum OS Development <devel@spectrum-os.org>
Cc: Demi Marie Obenour <demiobenour@gmail.com>, Alyssa Ross <hi@alyssa.is>
Subject: [PATCH 3/3] host/rootfs: switch to systemd-udevd
Date: Sat, 13 Sep 2025 23:16:54 -0400	[thread overview]
Message-ID: <20250913-udev-v1-3-eade4ab8f2b4@gmail.com> (raw)
In-Reply-To: <20250913-udev-v1-0-eade4ab8f2b4@gmail.com>

This replaces the mdevd uevent daemon with systemd-udevd, which supports
much more hardware and is therefore to be preferred for a full desktop
environment.  Various Wayland compositors integrate with systemd-udevd,
allowing them to discover devices as they appear rather than having to
only use devices plugged in when the compositor is started.
Additionally, systemd-udevd has quirks for various devices that are
needed to support the wide variety of hardware end-users have.

The dependency on /dev/dri/card0 being present is eliminated, and
whatever devices the user has are now picked up by the compositor.  New
dependencies are added to ensure that udev coldplug has finished before
any non-trivial services are started.  systemd-udev-trigger.service runs
'udevadm trigger' and has Before=sysinit.target, so anything that is not
an early boot service can assume 'udevadm trigger' has run.

systemd-udevd doesn't set PATH to anything useful, presumably because
under NixOS this is handled some other way.  Therefore, explicitly set
it to /usr/bin in the scripts systemd-udevd calls.

Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
---
The changes to default.nix are so that I could use the binary cache,
which was necessary to test this in a reasonable amount of time.  I'm
also not sure what changes you (Alyssa) want in this file.  Feel free to
fix it up on commit.
---
 host/rootfs/Makefile                               | 17 ++--
 host/rootfs/default.nix                            | 94 ++++++----------------
 host/rootfs/etc/init                               |  2 +-
 host/rootfs/etc/mdev.conf                          |  7 --
 host/rootfs/etc/mdev/listen                        |  2 +-
 host/rootfs/etc/mdev/net/add                       |  1 +
 host/rootfs/etc/s6-rc/mdevd-coldplug/dependencies  |  4 -
 host/rootfs/etc/s6-rc/mdevd-coldplug/up            |  4 -
 host/rootfs/etc/s6-rc/mdevd/run                    |  5 --
 host/rootfs/etc/s6-rc/ok-all/contents              |  2 +-
 .../dependencies.d/systemd-udevd                   |  0
 .../type                                           |  0
 .../type.license                                   |  0
 host/rootfs/etc/s6-rc/systemd-udevd-coldplug/up    |  3 +
 host/rootfs/etc/s6-rc/systemd-udevd/flag-essential |  0
 .../s6-rc/{mdevd => systemd-udevd}/notification-fd |  0
 .../notification-fd.license                        |  0
 host/rootfs/etc/s6-rc/systemd-udevd/run            | 10 +++
 .../rootfs/etc/s6-rc/{mdevd => systemd-udevd}/type |  0
 .../s6-rc/{mdevd => systemd-udevd}/type.license    |  0
 host/rootfs/etc/s6-rc/vmm-env/contents             |  1 +
 host/rootfs/etc/s6-rc/weston/dependencies          |  4 -
 .../weston/dependencies.d/systemd-udevd-coldplug   |  0
 host/rootfs/etc/udev/rules.d/99-spectrum.rules     |  5 ++
 24 files changed, 56 insertions(+), 105 deletions(-)

diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile
index 22cdee17a3c878131ea9145fdcafbbbb4ba40db5..ed3937c5665273bb0a5ba7c1dfeaf6b887763c59 100644
--- a/host/rootfs/Makefile
+++ b/host/rootfs/Makefile
@@ -13,7 +13,6 @@ FILES = \
 	etc/group \
 	etc/init \
 	etc/login \
-	etc/mdev.conf \
 	etc/mdev/listen \
 	etc/mdev/net/add \
 	etc/mdev/wait \
@@ -52,6 +51,7 @@ FILES = \
 	etc/s6-linux-init/run-image/service/xdg-desktop-portal-spectrum-host/template/notification-fd \
 	etc/s6-linux-init/run-image/service/xdg-desktop-portal-spectrum-host/template/run \
 	etc/s6-linux-init/scripts/rc.init \
+	etc/udev/rules.d/99-spectrum.rules \
 	etc/xdg/weston/autolaunch \
 	etc/xdg/weston/weston.ini \
 	usr/bin/assign-devices \
@@ -136,12 +136,6 @@ S6_RC_FILES = \
 	etc/s6-rc/kvm/timeout-up \
 	etc/s6-rc/kvm/type \
 	etc/s6-rc/kvm/up \
-	etc/s6-rc/mdevd-coldplug/dependencies \
-	etc/s6-rc/mdevd-coldplug/type \
-	etc/s6-rc/mdevd-coldplug/up \
-	etc/s6-rc/mdevd/notification-fd \
-	etc/s6-rc/mdevd/run \
-	etc/s6-rc/mdevd/type \
 	etc/s6-rc/ok-all/contents \
 	etc/s6-rc/ok-all/type \
 	etc/s6-rc/static-nodes/type \
@@ -149,11 +143,18 @@ S6_RC_FILES = \
 	etc/s6-rc/sys-vmms/dependencies \
 	etc/s6-rc/sys-vmms/type \
 	etc/s6-rc/sys-vmms/up \
+	etc/s6-rc/systemd-udevd-coldplug/dependencies.d/systemd-udevd \
+	etc/s6-rc/systemd-udevd-coldplug/type \
+	etc/s6-rc/systemd-udevd-coldplug/up \
+	etc/s6-rc/systemd-udevd/flag-essential \
+	etc/s6-rc/systemd-udevd/notification-fd \
+	etc/s6-rc/systemd-udevd/run \
+	etc/s6-rc/systemd-udevd/type \
 	etc/s6-rc/vm-env/contents \
 	etc/s6-rc/vm-env/type \
 	etc/s6-rc/vmm-env/contents \
 	etc/s6-rc/vmm-env/type \
-	etc/s6-rc/weston/dependencies \
+	etc/s6-rc/weston/dependencies.d/systemd-udevd-coldplug \
 	etc/s6-rc/weston/notification-fd \
 	etc/s6-rc/weston/run \
 	etc/s6-rc/weston/type
diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix
index 20692ba75e9c1f3b93b16d6e47ee777a1965ff8d..ba605588afb2b69adfec59b41af09e8c11a70d79 100644
--- a/host/rootfs/default.nix
+++ b/host/rootfs/default.nix
@@ -3,7 +3,7 @@
 # SPDX-FileCopyrightText: 2022 Unikie
 
 import ../../lib/call-package.nix (
-{ callSpectrumPackage, lseek, src, pkgsMusl, pkgsStatic, linux_latest }:
+{ callSpectrumPackage, lseek, src, pkgsMusl, pkgsStatic, linux_latest, pkgs }:
 pkgsStatic.callPackage (
 
 { spectrum-host-tools
@@ -12,6 +12,11 @@ pkgsStatic.callPackage (
 , inkscape, iproute2, inotify-tools, jq, kmod, mdevd, s6, s6-linux-init, socat
 , util-linuxMinimal, virtiofsd, xorg, xdg-desktop-portal-spectrum-host
 }:
+pkgs.callPackage (
+{ systemdMinimal, foot, cosmic-files, crosvm
+, mesa, dejavu_fonts, westonLite, xdg-desktop-portal
+, xdg-desktop-portal-gtk
+}:
 
 let
   inherit (nixosAllHardware.config.hardware) firmware;
@@ -19,68 +24,9 @@ let
     concatMapStringsSep concatStrings escapeShellArgs fileset optionalAttrs
     mapAttrsToList systems trivial;
 
-  pkgsGui = pkgsMusl.extend (
-    final: super:
-    (optionalAttrs (systems.equals pkgsMusl.stdenv.hostPlatform super.stdenv.hostPlatform) {
-      flatpak = super.flatpak.override {
-        withMalcontent = false;
-      };
-
-      libgudev = super.libgudev.overrideAttrs ({ ... }: {
-        # Tests use umockdev, which is not compatible with libudev-zero.
-        doCheck = false;
-      });
-
-      qt6 = super.qt6.overrideScope (_: prev: {
-        qttranslations = prev.qttranslations.override {
-          qttools = prev.qttools.override {
-            qtbase = prev.qtbase.override {
-              qttranslations = null;
-              systemdSupport = false;
-            };
-            qtdeclarative = null;
-          };
-        };
-
-        qtbase = prev.qtbase.override {
-          systemdSupport = false;
-        };
-      });
-
-      systemd = super.systemd.overrideAttrs ({ meta ? { }, ... }: {
-        meta = meta // {
-          platforms = [ ];
-        };
-      });
-
-      upower = super.upower.override {
-        # Not ideal, but it's the best way to get rid of an installed
-        # test that needs umockdev.
-        withIntrospection = false;
-      };
-
-      udev = final.libudev-zero;
-
-      weston = super.weston.overrideAttrs ({ mesonFlags ? [], ... }: {
-        mesonFlags = mesonFlags ++ [
-          "-Dsystemd=false"
-        ];
-      });
-
-      xdg-desktop-portal = (super.xdg-desktop-portal.override {
-        enableSystemd = false;
-      }).overrideAttrs ({ ... }: {
-        # Tests use umockdev.
-        doCheck = false;
-      });
-    })
-  );
-
-  foot = pkgsGui.foot.override { allowPgo = false; };
-
   packages = [
-    bcachefs-tools cloud-hypervisor dbus execline inotify-tools
-    iproute2 jq kmod mdevd s6 s6-linux-init s6-rc socat
+    bcachefs-tools cloud-hypervisor cosmic-files crosvm dbus execline
+    foot inotify-tools iproute2 jq kmod s6 s6-linux-init s6-rc socat
     spectrum-host-tools virtiofsd xdg-desktop-portal-spectrum-host
 
     (cryptsetup.override {
@@ -96,6 +42,7 @@ let
         CONFIG_CHATTR n
         CONFIG_DEPMOD n
         CONFIG_FINDFS n
+        CONFIG_HALT n
         CONFIG_INIT n
         CONFIG_INSMOD n
         CONFIG_IP n
@@ -106,10 +53,13 @@ let
         CONFIG_MODINFO n
         CONFIG_MODPROBE n
         CONFIG_MOUNT n
+        CONFIG_POWEROFF n
+        CONFIG_REBOOT n
         CONFIG_RMMOD n
+        CONFIG_SHUTDOWN n
       '';
     })
-  ] ++ (with pkgsGui; [ cosmic-files crosvm foot ]);
+  ];
 
   nixosAllHardware = nixos ({ modulesPath, ... }: {
     imports = [ (modulesPath + "/profiles/all-hardware.nix") ];
@@ -126,7 +76,7 @@ let
   # (not just their bin/* files).
   usrPackages = [
     appvm kernel.modules firmware netvm
-  ] ++ (with pkgsGui; [ mesa dejavu_fonts westonLite ]);
+    mesa dejavu_fonts westonLite ];
 
   appvms = {
     appvm-firefox = callSpectrumPackage ../../vm/app/firefox.nix {};
@@ -144,16 +94,16 @@ let
     # Weston doesn't support SVG icons.
     inkscape -w 20 -h 20 \
         -o $out/usr/share/icons/hicolor/20x20/apps/com.system76.CosmicFiles.png \
-        ${pkgsGui.cosmic-files}/share/icons/hicolor/24x24/apps/com.system76.CosmicFiles.svg
+        ${cosmic-files}/share/icons/hicolor/24x24/apps/com.system76.CosmicFiles.svg
 
     ln -st $out/usr/bin \
         ${concatMapStringsSep " " (p: "${p}/bin/*") packages} \
-        ${pkgsGui.xdg-desktop-portal}/libexec/xdg-document-portal \
-        ${pkgsGui.xdg-desktop-portal-gtk}/libexec/xdg-desktop-portal-gtk
+        ${xdg-desktop-portal}/libexec/xdg-document-portal \
+        ${xdg-desktop-portal-gtk}/libexec/xdg-desktop-portal-gtk
     ln -st $out/usr/share/dbus-1 \
         ${dbus}/share/dbus-1/session.conf
     ln -st $out/usr/share/dbus-1/services \
-        ${pkgsGui.xdg-desktop-portal-gtk}/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gtk.service
+        ${xdg-desktop-portal-gtk}/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gtk.service
 
     for pkg in ${escapeShellArgs usrPackages}; do
         lndir -ignorelinks -silent "$pkg" "$out/usr"
@@ -167,6 +117,10 @@ let
     # programs we want.
     # https://lore.kernel.org/util-linux/87zgrl6ufb.fsf@alyssa.is/
     ln -s ${util-linuxMinimal}/bin/{findfs,uuidgen,lsblk,mount} $out/usr/bin
+
+    # TODO: this is another hack and it should be possible
+    # to build systemd without this.
+    ln -s -- ${lib.escapeShellArg systemdMinimal}/bin/udevadm "$out/usr/bin"
   '';
 in
 
@@ -203,7 +157,7 @@ stdenvNoCC.mkDerivation {
   unsafeDiscardReferences = { out = true; };
 
   passthru = {
-    inherit appvm firmware kernel nixosAllHardware packagesSysroot pkgsGui;
+    inherit appvm firmware kernel nixosAllHardware packagesSysroot;
   };
 
   meta = with lib; {
@@ -211,4 +165,4 @@ stdenvNoCC.mkDerivation {
     platforms = platforms.linux;
   };
 }
-) {}) (_: {})
+) {}) {}) (_: {})
diff --git a/host/rootfs/etc/init b/host/rootfs/etc/init
index 4085fa55545e7309004967e443e47fc2b82b0663..22b38017234e9b042c4c239377e80477aca5f5fa 100755
--- a/host/rootfs/etc/init
+++ b/host/rootfs/etc/init
@@ -2,4 +2,4 @@
 # SPDX-License-Identifier: EUPL-1.2+
 # SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is>
 
-/bin/s6-linux-init -c /etc/s6-linux-init -s /run/param -- $@
+/bin/s6-linux-init -c /etc/s6-linux-init -s /run/param -p /usr/bin -- $@
diff --git a/host/rootfs/etc/mdev.conf b/host/rootfs/etc/mdev.conf
deleted file mode 100644
index bddcfdc44ec2a8b1aa95e84cb88fdde625c766d8..0000000000000000000000000000000000000000
--- a/host/rootfs/etc/mdev.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# SPDX-License-Identifier: EUPL-1.2+
-# SPDX-FileCopyrightText: 2021-2022, 2024 Alyssa Ross <hi@alyssa.is>
-
-$PCI_CLASS=^2....$ 0:0 660 +/etc/mdev/net/add
--$MODALIAS=.* 0:0 660 +importas -Siu MODALIAS modprobe -q $MODALIAS
-kvm 0:0 660 +background { /etc/mdev/listen kvm }
-dri/card0 0:0 660 +background { /etc/mdev/listen card0 }
diff --git a/host/rootfs/etc/mdev/listen b/host/rootfs/etc/mdev/listen
index ab50ee8c5ed1139d1129bac56afa7263af150745..20969cab2106efc010cff7cd3aa3f1edc6037dbb 100755
--- a/host/rootfs/etc/mdev/listen
+++ b/host/rootfs/etc/mdev/listen
@@ -8,4 +8,4 @@ foreground {
 }
 
 redirfd -w 1 /run/wait/${1}
-echo
+/usr/bin/echo
diff --git a/host/rootfs/etc/mdev/net/add b/host/rootfs/etc/mdev/net/add
index f343779dcab6ca10c1661e40d3f5bfb8f6080e38..a964376abb75cdd7b07d608c1b76c25c802bcf49 100755
--- a/host/rootfs/etc/mdev/net/add
+++ b/host/rootfs/etc/mdev/net/add
@@ -5,6 +5,7 @@
 # Assign the whole IOMMU group containing this device to the network
 # VM.
 
+export PATH /usr/bin
 if { modprobe vfio-pci }
 
 importas -i devpath DEVPATH
diff --git a/host/rootfs/etc/s6-rc/mdevd-coldplug/dependencies b/host/rootfs/etc/s6-rc/mdevd-coldplug/dependencies
deleted file mode 100644
index 59b02b7356ea0d88ac446cea74791a9cd3303de4..0000000000000000000000000000000000000000
--- a/host/rootfs/etc/s6-rc/mdevd-coldplug/dependencies
+++ /dev/null
@@ -1,4 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-# SPDX-FileCopyrightText: 2020 Alyssa Ross <hi@alyssa.is>
-#
-mdevd
diff --git a/host/rootfs/etc/s6-rc/mdevd-coldplug/up b/host/rootfs/etc/s6-rc/mdevd-coldplug/up
deleted file mode 100644
index 8698f7d7988a017786fb91a584eafbfb23b3165d..0000000000000000000000000000000000000000
--- a/host/rootfs/etc/s6-rc/mdevd-coldplug/up
+++ /dev/null
@@ -1,4 +0,0 @@
-# SPDX-License-Identifier: EUPL-1.2+
-# SPDX-FileCopyrightText: 2020-2021 Alyssa Ross <hi@alyssa.is>
-
-mdevd-coldplug
diff --git a/host/rootfs/etc/s6-rc/mdevd/run b/host/rootfs/etc/s6-rc/mdevd/run
deleted file mode 100644
index 55899bbe674426e4591e866a4d0617361ba34305..0000000000000000000000000000000000000000
--- a/host/rootfs/etc/s6-rc/mdevd/run
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/execlineb -P
-# SPDX-License-Identifier: EUPL-1.2+
-# SPDX-FileCopyrightText: 2020-2022 Alyssa Ross <hi@alyssa.is>
-
-mdevd -D3 -O4 -b134217728
diff --git a/host/rootfs/etc/s6-rc/ok-all/contents b/host/rootfs/etc/s6-rc/ok-all/contents
index 9f8b0ed66ceedd591ed2f1a7e164d9abcc54cc53..c76a5af336c7f1c3f4b81bf1f6244a53e0399fe8 100644
--- a/host/rootfs/etc/s6-rc/ok-all/contents
+++ b/host/rootfs/etc/s6-rc/ok-all/contents
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: CC0-1.0
 # SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
 #
-mdevd-coldplug
+systemd-udevd-coldplug
 sys-vmms
 vm-env
diff --git a/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/dependencies.d/systemd-udevd b/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/dependencies.d/systemd-udevd
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/host/rootfs/etc/s6-rc/mdevd-coldplug/type b/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/type
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd-coldplug/type
rename to host/rootfs/etc/s6-rc/systemd-udevd-coldplug/type
diff --git a/host/rootfs/etc/s6-rc/mdevd-coldplug/type.license b/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/type.license
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd-coldplug/type.license
rename to host/rootfs/etc/s6-rc/systemd-udevd-coldplug/type.license
diff --git a/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/up b/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/up
new file mode 100644
index 0000000000000000000000000000000000000000..5cf329c5b32f44ab8b48dc10239542a982c68d14
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/systemd-udevd-coldplug/up
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: CC0-1.0
+# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
+/usr/bin/udevadm trigger
diff --git a/host/rootfs/etc/s6-rc/systemd-udevd/flag-essential b/host/rootfs/etc/s6-rc/systemd-udevd/flag-essential
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/host/rootfs/etc/s6-rc/mdevd/notification-fd b/host/rootfs/etc/s6-rc/systemd-udevd/notification-fd
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd/notification-fd
rename to host/rootfs/etc/s6-rc/systemd-udevd/notification-fd
diff --git a/host/rootfs/etc/s6-rc/mdevd/notification-fd.license b/host/rootfs/etc/s6-rc/systemd-udevd/notification-fd.license
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd/notification-fd.license
rename to host/rootfs/etc/s6-rc/systemd-udevd/notification-fd.license
diff --git a/host/rootfs/etc/s6-rc/systemd-udevd/run b/host/rootfs/etc/s6-rc/systemd-udevd/run
new file mode 100644
index 0000000000000000000000000000000000000000..a7290b8c7185aea2b8faae4fd6c2aaf1ca9f1ab3
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/systemd-udevd/run
@@ -0,0 +1,10 @@
+#!/bin/execlineb -P
+# SPDX-License-Identifier: EUPL-1.2+
+# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
+
+# systemd-udevd is a multi-call binary, and
+# the third argument to sd-notify-adapter is
+# passed as argv[0], so this invokes systemd-udevd
+# despite looking like it does not.
+sd-notify-adapter --oom-score-adj=-1000 --
+3 /run/udev-notify/notify-sock /usr/bin/udevadm systemd-udevd
diff --git a/host/rootfs/etc/s6-rc/mdevd/type b/host/rootfs/etc/s6-rc/systemd-udevd/type
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd/type
rename to host/rootfs/etc/s6-rc/systemd-udevd/type
diff --git a/host/rootfs/etc/s6-rc/mdevd/type.license b/host/rootfs/etc/s6-rc/systemd-udevd/type.license
similarity index 100%
rename from host/rootfs/etc/s6-rc/mdevd/type.license
rename to host/rootfs/etc/s6-rc/systemd-udevd/type.license
diff --git a/host/rootfs/etc/s6-rc/vmm-env/contents b/host/rootfs/etc/s6-rc/vmm-env/contents
index ee1e3cfc39d1a6545bbefc3692782b9de6b3ade3..6f4c16d17c1cb23ebf059e50d59b4c1c7d963706 100644
--- a/host/rootfs/etc/s6-rc/vmm-env/contents
+++ b/host/rootfs/etc/s6-rc/vmm-env/contents
@@ -4,3 +4,4 @@
 core
 kvm
 static-nodes
+systemd-udevd-coldplug
diff --git a/host/rootfs/etc/s6-rc/weston/dependencies b/host/rootfs/etc/s6-rc/weston/dependencies
deleted file mode 100644
index 8470c0fabc5c85b2529ee26ad82d3910e95f23cb..0000000000000000000000000000000000000000
--- a/host/rootfs/etc/s6-rc/weston/dependencies
+++ /dev/null
@@ -1,4 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
-#
-card0
diff --git a/host/rootfs/etc/s6-rc/weston/dependencies.d/systemd-udevd-coldplug b/host/rootfs/etc/s6-rc/weston/dependencies.d/systemd-udevd-coldplug
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/host/rootfs/etc/udev/rules.d/99-spectrum.rules b/host/rootfs/etc/udev/rules.d/99-spectrum.rules
new file mode 100644
index 0000000000000000000000000000000000000000..199397bc26874a261c9e1ea1778207fdb0d8ad39
--- /dev/null
+++ b/host/rootfs/etc/udev/rules.d/99-spectrum.rules
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: EUPL-1.2+
+# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
+ACTION!="remove", KERNEL=="kvm", RUN+="/etc/mdev/listen kvm"
+ACTION!="remove", ENV{PCI_CLASS}=="2????", RUN+="/etc/mdev/net/add"
+ACTION!="remove", ENV{MODALIAS}=="?*", RUN+="/usr/bin/modprobe -q $env{MODALIAS}"

-- 
2.51.0


  parent reply	other threads:[~2025-09-14  3:19 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-14  3:16 [PATCH 0/3] Switch from mdevd to systemd-udevd in root filesystem Demi Marie Obenour
2025-09-14  3:16 ` [PATCH 1/3] host/rootfs: Add early serial output Demi Marie Obenour
2025-09-17 11:45   ` Alyssa Ross
2025-09-18  2:44     ` Demi Marie Obenour
2025-09-19 14:21   ` Alyssa Ross
2025-09-19 14:49   ` Alyssa Ross
2025-09-14  3:16 ` [PATCH 2/3] tools: Add adapter tool for services using sd_notify Demi Marie Obenour
2025-09-14  3:16 ` Demi Marie Obenour [this message]
2025-09-19 14:12   ` [PATCH 3/3] host/rootfs: switch to systemd-udevd Alyssa Ross
2025-09-19 19:32     ` Demi Marie Obenour
2025-09-21 12:18       ` Alyssa Ross
2025-09-21 17:02         ` Demi Marie Obenour
2025-09-21 16:27       ` Demi Marie Obenour
2025-09-21 16:28     ` Demi Marie Obenour
2025-09-23 18:39       ` Alyssa Ross
2025-09-23 19:18         ` Demi Marie Obenour
2025-09-24 10:32 ` [PATCH v2 0/3] Switch from mdevd to systemd-udevd in root filesystem Demi Marie Obenour
2025-09-24 10:32   ` [PATCH v2 1/3] tools: Add adapter tool for services using sd_notify Demi Marie Obenour
2025-09-25 10:29     ` Alyssa Ross
2025-09-25 16:54       ` Demi Marie Obenour
2025-09-24 10:32   ` [PATCH v2 2/3] host/rootfs: Switch to systemd-udevd Demi Marie Obenour
2025-09-25 10:53     ` Alyssa Ross
2025-09-25 17:53       ` Demi Marie Obenour
2025-09-26 14:56         ` Alyssa Ross
2025-09-28 22:51     ` [PATCH v3 0/2] Switch from mdevd to systemd-udevd in root filesystem Demi Marie Obenour
2025-09-28 22:51       ` [PATCH v3 1/2] tools: Add adapter tool for services using sd_notify Demi Marie Obenour
2025-10-01 16:06         ` Alyssa Ross
2025-09-28 22:51       ` [PATCH v3 2/2] host/rootfs: Switch to systemd-udevd Demi Marie Obenour
2025-10-01 14:24         ` Alyssa Ross
2025-10-01 14:39         ` Alyssa Ross
2025-10-01 17:40           ` Demi Marie Obenour
2025-10-02  9:53             ` Alyssa Ross
2025-10-02 10:34         ` Alyssa Ross
2025-10-02 10:36       ` [PATCH v3 0/2] Switch from mdevd to systemd-udevd in root filesystem Alyssa Ross
2025-10-03 21:42       ` [PATCH v4 " Demi Marie Obenour
2025-10-03 21:42         ` [PATCH v4 1/2] tools: Add adapter tool for services using sd_notify Demi Marie Obenour
2025-10-28 15:38           ` Alyssa Ross
2025-10-28 22:56             ` Demi Marie Obenour
2025-10-29 11:26           ` Alyssa Ross
2025-10-31  4:34             ` Demi Marie Obenour
2025-10-31  8:54               ` Alyssa Ross
2025-11-01 18:23                 ` Demi Marie Obenour
2025-10-03 21:42         ` [PATCH v4 2/2] host/rootfs: Switch to systemd-udevd Demi Marie Obenour
2025-10-28 16:02           ` Alyssa Ross
2025-10-28 22:56             ` Demi Marie Obenour
2025-10-29  9:31               ` Alyssa Ross
2025-10-29  9:55                 ` Demi Marie Obenour
2025-09-24 10:32   ` [PATCH v2 3/3] host/rootfs: Simplify s6-rc dependencies Demi Marie Obenour
2025-09-25 11:07     ` Alyssa Ross
2025-09-25 15:50       ` Demi Marie Obenour
2025-10-02 10:37         ` Alyssa Ross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250913-udev-v1-3-eade4ab8f2b4@gmail.com \
    --to=demiobenour@gmail.com \
    --cc=devel@spectrum-os.org \
    --cc=hi@alyssa.is \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://spectrum-os.org/git/crosvm
	https://spectrum-os.org/git/doc
	https://spectrum-os.org/git/mktuntap
	https://spectrum-os.org/git/nixpkgs
	https://spectrum-os.org/git/spectrum
	https://spectrum-os.org/git/ucspi-vsock
	https://spectrum-os.org/git/www

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).