systemd-knowledge-patch
systemd Knowledge Patch (v255--v260)
Claude knows systemd unit files, journalctl, systemctl, and basic service management through systemd 254. This skill covers systemd v255 (December 2023) through v260 (February 2026).
Index
| Topic | Reference | Key features |
|---|---|---|
| Breaking Changes | references/breaking-changes.md | cgroup v1 removed, SysV init removed, journal default persistent, IPForward deprecated, uaccess rules |
| Unit File Settings | references/unit-file-settings.md | PrivatePIDs, ProtectControlGroups, BindNetworkInterface, MemoryTHP, RestartMode=debug, DeferReactivation |
| journald & networkd | references/journald-and-networkd.md | Invocation tracking, ForwardToSocket, MobileNetwork section |
Breaking Changes at a Glance
| Change | Version | Impact |
|---|---|---|
| cgroup v1 removed | v258 | Only cgroup v2 (unified hierarchy) supported |
| SysV init scripts removed | v260 | systemd-sysv-generator, rc-local.service gone; native units required |
!! ExecStart prefix removed |
v258 | Ambient capabilities compat prefix silently ignored |
Journal default persistent |
v259 | Was auto; override with Storage= in journald.conf |
IPForward= deprecated |
v256 | Use IPv4Forwarding=/IPv6Forwarding= in .network or networkd.conf |
uaccess tag requires ACTION!="remove" |
v258 | Rules using ACTION=="add" no longer work |
| TTY default mode 0600 | v258 | mesg n is default; restore with -Dtty-mode=0620 |
KeepConfiguration=dynamic |
v257 | Replaces dhcp; preserves DHCPv4/v6, NDISC, IPv4LL |
IPForward= Migration (v256)
Replace IPForward= in .network files with explicit per-family settings:
# Old (.network file):
[Network]
IPForward=yes
# New (.network file -- per-link):
[Network]
IPv4Forwarding=yes
IPv6Forwarding=yes
Or set globally in networkd.conf:
# /etc/systemd/networkd.conf
[Network]
IPv4Forwarding=yes
IPv6Forwarding=yes
Note: IPv6SendRA= and IPMasquerade= now imply per-link forwarding, not global sysctl.
uaccess udev Rules Fix (v258)
Rules using ACTION=="add" for the uaccess tag silently stopped working:
# Broken since v258:
ACTION=="add", SUBSYSTEM=="hidraw", TAG+="uaccess"
# Correct:
ACTION!="remove", SUBSYSTEM=="hidraw", TAG+="uaccess"
See references/breaking-changes.md for all breaking changes.
Quick Reference -- Essential New Settings
PrivatePIDs= (v257)
Run processes as PID 1 in their own PID namespace with isolated /proc/:
[Service]
PrivatePIDs=yes
BindNetworkInterface= (v260)
Bind all sockets created by the unit to a specific interface (useful for VRF):
[Service]
BindNetworkInterface=eth0
ProtectControlGroups= extended (v257)
private creates a new cgroup namespace; strict also mounts cgroupfs read-only:
[Service]
ProtectControlGroups=strict
RestartMode=debug (v257)
On failure, restart with $DEBUG_INVOCATION=1 and LogLevelMax=debug:
[Service]
RestartMode=debug
Restart=on-failure
DeferReactivation= (v257)
For calendar timers, skip immediate reactivation if the service is still running:
[Timer]
OnCalendar=hourly
DeferReactivation=yes
StateDirectory= read-only suffix (v257)
Make managed directories read-only with :ro suffix:
[Service]
StateDirectory=myapp:ro
PrivateUsers= new modes (v257/v260)
identity(v257) -- identity-maps the first 65536 UIDs/GIDs in a user namespacemanaged(v260) -- auto-assigns a dynamic transient 65K range viasystemd-nsresourced
MemoryTHP= (v260)
Per-service Transparent Huge Pages control:
[Service]
MemoryTHP=always
SurviveFinalKillSignal= (v255)
Skip the unit during shutdown's final SIGTERM/SIGKILL. Required for soft-reboot survival:
[Service]
SurviveFinalKillSignal=yes
PassFileDescriptorsToExec= (v256)
Pass socket FDs to ExecStartPost=/ExecStopPre=/ExecStopPost= via $LISTEN_FDS:
[Socket]
PassFileDescriptorsToExec=yes
See references/unit-file-settings.md for the full list including CPUSchedulingPolicy=ext, PrivateTmp=disconnected, WantsMountsFor=, RefreshOnReload=, and fstab options.
journalctl Invocation Tracking (v257)
List and filter by service invocations (analogous to --list-boots/--boot):
journalctl --list-invocations -u myservice # list all invocations
journalctl -I 2 -u myservice # 2nd-to-last invocation
journald ForwardToSocket= (v256)
Forward journal entries to a remote socket in Journal Export Format:
[Journal]
ForwardToSocket=tcp:192.168.1.100:5555
MaxLevelSocket=info
networkd MobileNetwork Section (v260)
ModemManager integration for cellular connections in .network files:
# /etc/systemd/network/50-mobile.network
[Match]
Type=wwan
[MobileNetwork]
APN=internet
AllowRoaming=no
IPFamily=both
| Setting | Values | Purpose |
|---|---|---|
APN= |
string | Access Point Name for the carrier |
AllowRoaming= |
yes/no |
Allow data roaming |
IPFamily= |
ipv4/ipv6/both |
IP protocol family |
New Settings Summary
| Setting | Version | Section | Purpose |
|---|---|---|---|
PrivatePIDs= |
v257 | [Service] |
PID namespace isolation |
ProtectControlGroups=private|strict |
v257 | [Service] |
cgroup namespace / read-only cgroupfs |
StateDirectory=…:ro |
v257 | [Service] |
Read-only managed directories |
DeferReactivation= |
v257 | [Timer] |
Skip reactivation if service running |
RestartMode=debug |
v257 | [Service] |
Debug restart with verbose logging |
BindNetworkInterface= |
v260 | [Service] |
Bind sockets to interface |
MemoryTHP= |
v260 | [Service] |
Per-service THP control |
CPUSchedulingPolicy=ext |
v260 | [Service] |
SCHED_EXT scheduler |
PassFileDescriptorsToExec= |
v256 | [Socket] |
Pass FDs to Exec*Post/Pre |
PrivateUsers=identity |
v257 | [Service] |
Identity-mapped user namespace |
PrivateUsers=managed |
v260 | [Service] |
Auto-assigned UID/GID range |
PrivateTmp=disconnected |
v257 | [Service] |
Separate tmpfs (not shared) |
WantsMountsFor= |
v256 | [Unit] |
Wants= for mount dependencies |
SurviveFinalKillSignal= |
v255 | [Service] |
Survive shutdown kill |
RefreshOnReload= |
v260 | [Service] |
Refresh extensions/credentials on reload |
x-systemd.wants= |
v257 | fstab | Wants= dependency from fstab |
More from nevaberry/nevaberry-plugins
dioxus-knowledge-patch
Dioxus changes since training cutoff (latest: 0.7.4) — Signals replacing use_state, RSX macro overhaul, server functions, asset!() system, dx CLI, Element-as-Result. Load before working with Dioxus.
46rust-knowledge-patch
Rust changes since training cutoff (latest: 1.94.0) \u2014 Rust 2024 Edition, async closures, trait upcasting, new std APIs, cargo resolver v3. Load before working with Rust.
20postgresql-knowledge-patch
PostgreSQL changes since training cutoff (latest: 18.1) — JSON_TABLE, SQL/JSON functions, MERGE RETURNING, virtual generated columns, UUIDv7, temporal PRIMARY KEY. Load before working with PostgreSQL.
16bun-knowledge-patch
Bun changes since training cutoff (latest: 1.3.10) \u2014 S3 client, built-in SQL/Redis, route-based HTTP server, CSS bundler, V8 compatibility. Load before working with Bun.
14nextjs-knowledge-patch
Next.js changes since training cutoff (latest: 16.1) — proxy.ts, \"use cache\", Cache Components, navigation hooks, typed routes, auto PageProps, React 19.2. Load before working with Next.js.
14postgis-knowledge-patch
PostGIS changes since training cutoff (latest: 3.6.1) — SFCGAL CG_* rename, ST_CoverageClean, ST_AsRasterAgg, topology bigint IDs, viewport simplification, 3D SFCGAL ops. Load before working with PostGIS.
13