Update ChangeLog and bump version for v5.0-rc1

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2026-08-29 09:35:11 +02:00
1 parent c512d57df4
commit 7644874b42
2 files changed
+139 -100

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
AC_INIT([Finit], [5.0-dev], [https://github.com/finit-project/finit/issues], AC_INIT([Finit], [5.0-rc1], [https://github.com/finit-project/finit/issues],
[finit], [https://http://finit-project.github.io/]) [finit], [https://http://finit-project.github.io/])
AC_CONFIG_AUX_DIR(aux) AC_CONFIG_AUX_DIR(aux)
AM_INIT_AUTOMAKE([1.11 foreign subdir-objects]) AM_INIT_AUTOMAKE([1.11 foreign subdir-objects])
+138 -99
View File
@@ -3,117 +3,156 @@ Change Log
All relevant changes are documented in this file. All relevant changes are documented in this file.
[Unreleased] [5.0][UNRELEASED]
------------ --------------------
### Changes ### Changes
- The generated `/run/finit/system/*.conf` files for built-in services - keventd is now a full device manager, promoted from the power supply
(keventd, watchdogd, runparts) are now read before monitor it was in v4, and the device management defaults have swapped:
`/lib/finit/system/*.conf` instead of after. Built-ins can now be keventd is enabled by default (`--without-keventd` opts out, libblkid is
referenced in `if:` statements from system .conf files and overridden required to build it), while the hotplug plugin, which runs an external
by name from both `/lib/finit/system` and `/etc/finit.d`, the latter `udevd`, `mdevd`, or `mdev`, is now opt-in. With the plugin enabled,
is still always read last keventd steps back to passive mode and monitors only power supply
- The `dbus.so` plugin, which starts an external `dbus-daemon`, is now events, as before. As the system device manager it replaces mdev,
enabled by default. It does nothing on systems without a mdevd, and udevd, and handles:
`dbus-daemon` installed, and `--disable-dbus-plugin` opts out. The
daemon it used to register from C now lives in `20-dbus.conf`, and * udev rules: an engine covering most of the udev(7) grammar --
the directories it needs in `tmpfiles.d/dbus.conf`, so both can be parent-chain matching, `PROGRAM`/`RESULT`, `IMPORT`, `RUN`,
overridden from `/etc` like any other system file. Those `GOTO`/`LABEL`, and the standard substitutions -- reading the usual
directories are no longer chowned to `messagebus`, matching how `udev/rules.d` directories under `/lib`, `/run`, and `/etc` with
Finit ships directories for other daemons udev's precedence and masking. A curated ruleset derived from eudev
- The `tty` block takes `passenv`, which the line-based format has had 3.2.14 is installed by default, `--without-udev-rules` skips it.
since v4.4 (issue #286) and the block format was missing See [Device Manager](keventd.md) for the supported subset and the
- New `provides` setting for run/task/service/sysv blocks, naming few deliberate divergences
conditions the service asserts in addition to its own `pid/<ident>`.
Lets variants of one service, qualified with `if`, share the barrier * builtins used by the ruleset: `blkid`, `hwdb`, `input_id`, `kmod`,
condition downstream services wait for, which a block title alone `net_id`, `path_id`, and `usb_id`
could not express. Any namespace is allowed, and a second claim on
the same condition is refused with a warning naming the owner * device nodes with per-subsystem default permissions, persistent
- The `command` setting in a block takes a list of candidates for the symlinks (`/dev/disk/by-uuid`, `by-label`, `by-id`, `by-path`, plus
same service, `command = { "/lib/systemd/systemd-udevd", "-udevd" }`, `by-id`/`by-path` for input, serial, sound, v4l, and tape), kernel
and Finit starts the first one it finds. The line-based format could firmware load requests, and module loading from `MODALIAS`
only express this by repeating the whole stanza per candidate
- Finit now ships with a built-in brokerless D-Bus implementation, * predictable network interface names via the eudev ruleset,
**libink**, exposing the running init system as a peer on its own `net.ifnames=0` on the kernel command line keeps classic names.
private bus at `/run/finit/bus`, and -- opportunistically -- **Note:** switching a system over to keventd can rename its NICs
registering `org.finit` on the standard system bus when a
`dbus-daemon` is reachable. No external `libdbus`/`sd-bus`/`GIO` * coldplug: as device manager keventd starts with `-c`, replaying add
dependency. The bus implements the stock `org.freedesktop.DBus`, events for hardware present at boot. The `pid/keventd` condition
`Peer`, `Introspectable`, and `Properties` interfaces. is deferred until the coldplug queue has drained, so services
See [D-Bus Integration](dbus.md) for the full surface, build flag, gating on it can assume `/dev` is populated and symlinks are live
and `dbus-send`/`dbus-monitor` examples
- New `org.finit.Manager1` interface at `/org/finit/manager`: * `keventd -S`, the `udevadm settle` equivalent, asks the running
`ListServices`, `GetService`, `Start`/`Stop`/`Restart`/`Reload`, daemon over D-Bus and falls back to polling the kernel's uevent
`SetRunlevel`, `SetDebug`, `Signal`, `Suspend`, and the sequence number
`Reboot`/`Halt`/`Poweroff` triplet, which take a timeout argument
arming the emergency shutdown bypass like `initctl -t`. Read-only * libudev compatibility: per-device properties in `/run/udev/data`
properties `Runlevel`, `PrevRunlevel`, `Version`; signals and processed uevents rebroadcast to netlink group 0x4, so
libudev-zero consumers, e.g. compositors and libinput, see hotplug
events
* new conditions for the service engine: `dev/<node>` for device
nodes, `class/<subsystem>/<name>` for sysfs class devices without a
node (LEDs, IIO, DSA ports), and `driver/<name>`, asserted while a
driver is bound to at least one device
- Generated `/run/finit/system/*.conf` files for bundled services (keventd,
watchdogd, runparts) are now read before `/lib/finit/system/*.conf` instead
of after. Built-ins can now be referenced in `if:` statements from system
.conf files and overridden by name from both `/lib/finit/system` and
`/etc/finit.d`, the latter is still always read last
- The `dbus.so` plugin, which starts an external `dbus-daemon`, is now enabled
by default. It does nothing on systems without a `dbus-daemon` installed,
and `--disable-dbus-plugin` opts out. The daemon it used to register from C
now lives in `20-dbus.conf`, and the directories it needs in
`tmpfiles.d/dbus.conf`, so both can be overridden from `/etc` like any other
system file. Those directories are no longer chowned to `messagebus`,
matching how Finit ships directories for other daemons
- The `tty` block takes `passenv`, which the line-based format has had since
v4.4 (issue #286) and the block format was missing
- New `provides` setting for run/task/service/sysv blocks, naming conditions
the service asserts in addition to its own `pid/<ident>`. Lets variants of
one service, qualified with `if`, share the barrier condition downstream
services wait for, which a block title alone could not express. Any
namespace is allowed, and a second claim on the same condition is refused
with a warning naming the owner
- The `command` setting in a block takes a list of candidates for the same
service, `command = { "/lib/systemd/systemd-udevd", "-udevd" }`, and Finit
starts the first one it finds. The line-based format could only express
this by repeating the whole stanza per candidate
- Finit now ships with a built-in brokerless D-Bus implementation, **libink**,
exposing the running init system as a peer on its own private bus at
`/run/finit/bus`, and -- opportunistically -- registering `org.finit` on the
standard system bus when a `dbus-daemon` is reachable. No external
`libdbus`/`sd-bus`/`GIO` dependency. The bus implements the stock
`org.freedesktop.DBus`, `Peer`, `Introspectable`, and `Properties`
interfaces. See [D-Bus Integration](dbus.md) for the full surface, build
flag, and `dbus-send`/`dbus-monitor` examples
- New `org.finit.Manager1` interface at `/org/finit/manager`: `ListServices`,
`GetService`, `Start`/`Stop`/`Restart`/`Reload`, `SetRunlevel`, `SetDebug`,
`Signal`, `Suspend`, and the `Reboot`/`Halt`/`Poweroff` triplet, which take
a timeout argument arming the emergency shutdown bypass like `initctl -t`.
Read-only properties `Runlevel`, `PrevRunlevel`, `Version`; signals
`ServiceStateChanged (sss)` and `RunlevelChanged (ss)` `ServiceStateChanged (sss)` and `RunlevelChanged (ss)`
- New `org.finit.Service1` interface at `/org/finit/service/<encoded>`, - New `org.finit.Service1` interface at `/org/finit/service/<encoded>`, one
one object per loaded service, with `Start`/`Stop`/`Restart`/`Reload` object per loaded service, with `Start`/`Stop`/`Restart`/`Reload` for
for working off an object handle rather than passing the identity working off an object handle rather than passing the identity string around
string around - New `org.finit.Cond1` interface at `/org/finit/cond`: `Get`, `Set`, `Clear`,
- New `org.finit.Cond1` interface at `/org/finit/cond`: `Get`, `Set`, `List`, `Dump` for [user-defined conditions](conditions.md), with a
`Clear`, `List`, `Dump` for [user-defined conditions](conditions.md), `ConditionChanged (ss)` signal
with a `ConditionChanged (ss)` signal - keventd serves `org.finit.Device1` on its own bus at `/run/keventd/bus`:
- keventd serves `org.finit.Device1` on its own bus at `Settle`, `Trigger`, `Info`, `RulesReload`, queue-state properties, and a
`/run/keventd/bus`: `Settle`, `Trigger`, `Info`, `RulesReload`, `DeviceProcessed (ss)` signal. The `udevadm` settle/trigger/info
queue-state properties, and a `DeviceProcessed (ss)` signal. The equivalents are thereby bus methods and `keventd -S` asks the running daemon
`udevadm` settle/trigger/info equivalents are thereby bus methods first. Finit also gained a `Manager1.ConfigReloaded` signal, fired when
and `keventd -S` asks the running daemon first. Finit also gained a `initctl reload` completes, for external condition providers and monitoring
`Manager1.ConfigReloaded` signal, fired when `initctl reload` - Privileged D-Bus methods accept root and members of the `--with-group`
completes, for external condition providers and monitoring group; everyone else is refused. On the local bus the caller's uid and
- Privileged D-Bus methods accept root and members of the groups come straight from the kernel (`SO_PEERCRED` + `SO_PEERGROUPS`), so
`--with-group` group; everyone else is refused. On the local bus the check never blocks PID 1 on an NSS lookup. Over the system bus the uid
the caller's uid and groups come straight from the kernel is resolved from the broker (`GetConnectionUnixUser`) and privileged methods
(`SO_PEERCRED` + `SO_PEERGROUPS`), so the check never blocks PID 1 are root-only. Read-only methods are open
on an NSS lookup. Over the system bus the uid is resolved from the - `initctl` now transparently routes through D-Bus when the bus is reachable,
broker (`GetConnectionUnixUser`) and privileged methods are with the legacy `INIT_SOCKET` transport as a fallback: `start`, `stop`,
root-only. Read-only methods are open `restart`, `reload`, `reload <svc>`, `reboot`, `halt`, `poweroff`,
`suspend`, `debug`, `signal`, `runlevel`, and `cond {get,set,clr}` all use
the new path. Two new subcommands show up that have no legacy equivalent:
- `initctl` now transparently routes through D-Bus when the bus is * `initctl monitor` -- streams every signal on the bus to the terminal,
reachable, with the legacy `INIT_SOCKET` transport as a fallback: one line per delivery (`HH:MM:SS iface.member(args)`), until
`start`, `stop`, `restart`, `reload`, `reload <svc>`, `reboot`, interrupted. Same idea as `dbus-monitor`, but scoped to Finit and with
`halt`, `poweroff`, `suspend`, `debug`, `signal`, `runlevel`, and no address plumbing required.
`cond {get,set,clr}` all use the new path. Two new subcommands
show up that have no legacy equivalent:
* `initctl monitor` -- streams every signal on the bus to the
terminal, one line per delivery (`HH:MM:SS iface.member(args)`),
until interrupted. Same idea as `dbus-monitor`, but scoped to
Finit and with no address plumbing required.
* Issuing `initctl cond set/clr` over D-Bus also fires the * Issuing `initctl cond set/clr` over D-Bus also fires the
`Cond1.ConditionChanged` signal, so observers see user-driven `Cond1.ConditionChanged` signal, so observers see user-driven state
state changes the same way they see service-driven ones. changes the same way they see service-driven ones.
- Restart log now spells out the signal name and flags core dumps, - Restart log now spells out the signal name and flags core dumps,
e.g. `killed by SIGKILL` or `killed by SIGSEGV, core dumped`, in e.g. `killed by SIGKILL` or `killed by SIGSEGV, core dumped`, in place of
place of the bare numeric `by signal: N`. Gives operators a much the bare numeric `by signal: N`. Gives operators a much stronger breadcrumb
stronger breadcrumb when a daemon dies unexpectedly when a daemon dies unexpectedly
### Fixes ### Fixes
- Reject a .conf file that declares the same block title twice. The - Reject a .conf file that declares the same block title twice. The title is
title is the service identity and libConfuse merges two sections the service identity and libConfuse merges two sections sharing one, so the
sharing one, so the file loaded as a single service holding a mix of file loaded as a single service holding a mix of both declarations,
both declarations, silently. This hit `system/10-hotplug.conf`, silently. This hit `system/10-hotplug.conf`, where the two `udevd` blocks
where the two `udevd` blocks left only the second command, dropping left only the second command, dropping the service on systems that only have
the service on systems that only have `systemd-udevd`. The same `systemd-udevd`. The same title in another file is still how a system .conf
title in another file is still how a system .conf is overridden is overridden
- Remove stale daemon-owned (`pid:!`) pidfiles after unclean exits. - Remove stale daemon-owned (`pid:!`) pidfiles after unclean exits. When a
When a daemon dies via SIGKILL/OOM/segfault, or exits early during daemon dies via SIGKILL/OOM/segfault, or exits early during startup, its
startup, its pidfile lingers and can prevent the next instance from pidfile lingers and can prevent the next instance from starting --
starting -- `dbus-daemon` for example refuses to start when its `dbus-daemon` for example refuses to start when its pidfile already exists,
pidfile already exists, so Finit's restart loop gives up. Finit now so Finit's restart loop gives up. Finit now drops the file when it still
drops the file when it still names the just-reaped PID and that PID names the just-reaped PID and that PID is no longer alive (the liveness
is no longer alive (the liveness check guards against PID reuse). check guards against PID reuse). This is a controlled exception to the
This is a controlled exception to the long-standing rule that Finit long-standing rule that Finit does not touch service-owned pidfiles
does not touch service-owned pidfiles - Fix misspelled `SIGUNKOWN` returned by `sig_name()` for unknown signal
- Fix misspelled `SIGUNKOWN` returned by `sig_name()` for unknown numbers, now spelled correctly as `SIGUNKNOWN`. Surfaced by the new restart
signal numbers, now spelled correctly as `SIGUNKNOWN`. Surfaced by log above
the new restart log above
[4.17][] - 2026-04-28 [4.17][] - 2026-04-28
--------------------- ---------------------