mirror of
https://github.com/troglobit/finit.git
synced 2026-11-09 16:21:24 +00:00
Update ChangeLog and bump version for v5.0-rc1
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
c512d57df4
commit
7644874b42
2 files changed
+139
-100
No files matched your search
+1
-1
@@ -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
@@ -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
|
||||||
---------------------
|
---------------------
|
||||||
|
|||||||
Reference in new issue
Block a user