Systemd/src/core
Lennart Poettering 4b58153dd2 core: add "invocation ID" concept to service manager
This adds a new invocation ID concept to the service manager. The invocation ID
identifies each runtime cycle of a unit uniquely. A new randomized 128bit ID is
generated each time a unit moves from and inactive to an activating or active
state.

The primary usecase for this concept is to connect the runtime data PID 1
maintains about a service with the offline data the journal stores about it.
Previously we'd use the unit name plus start/stop times, which however is
highly racy since the journal will generally process log data after the service
already ended.

The "invocation ID" kinda matches the "boot ID" concept of the Linux kernel,
except that it applies to an individual unit instead of the whole system.

The invocation ID is passed to the activated processes as environment variable.
It is additionally stored as extended attribute on the cgroup of the unit. The
latter is used by journald to automatically retrieve it for each log logged
message and attach it to the log entry. The environment variable is very easily
accessible, even for unprivileged services. OTOH the extended attribute is only
accessible to privileged processes (this is because cgroupfs only supports the
"trusted." xattr namespace, not "user."). The environment variable may be
altered by services, the extended attribute may not be, hence is the better
choice for the journal.

Note that reading the invocation ID off the extended attribute from journald is
racy, similar to the way reading the unit name for a logging process is.

This patch adds APIs to read the invocation ID to sd-id128:
sd_id128_get_invocation() may be used in a similar fashion to
sd_id128_get_boot().

PID1's own logging is updated to always include the invocation ID when it logs
information about a unit.

A new bus call GetUnitByInvocationID() is added that allows retrieving a bus
path to a unit by its invocation ID. The bus path is built using the invocation
ID, thus providing a path for referring to a unit that is valid only for the
current runtime cycleof it.

Outlook for the future: should the kernel eventually allow passing of cgroup
information along AF_UNIX/SOCK_DGRAM messages via a unique cgroup id, then we
can alter the invocation ID to be generated as hash from that rather than
entirely randomly. This way we can derive the invocation race-freely from the
messages.
2016-10-07 20:14:38 +02:00
..
.gitignore Move daemon-reload from package %post scripts to file triggers 2015-11-15 18:38:37 -05:00
Makefile build-sys: add stub makefiles to make emacs easier to use 2012-04-12 13:35:56 +02:00
audit-fd.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
audit-fd.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
automount.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
automount.h automount: rework propagation between automount and mount units 2016-05-02 16:51:45 +02:00
bus-policy.c util-lib: split out allocation calls into alloc-util.[ch] 2015-10-27 13:45:53 +01:00
bus-policy.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
busname.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
busname.h core: move enforcement of the start limit into per-unit-type code again 2016-05-02 13:08:00 +02:00
cgroup.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
cgroup.h core: introduce MemorySwapMax= 2016-08-30 11:11:45 +09:00
dbus-automount.c automount: implement transient automounts 2016-06-06 07:33:54 +02:00
dbus-automount.h automount: implement transient automounts 2016-06-06 07:33:54 +02:00
dbus-busname.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-busname.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-cgroup.c core: introduce MemorySwapMax= 2016-08-30 11:11:45 +09:00
dbus-cgroup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-device.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-device.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-execute.c core: add two new service settings ProtectKernelTunables= and ProtectControlGroups= 2016-09-25 10:18:48 +02:00
dbus-execute.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-job.c core: don't log job status message in case job was effectively NOP (#3199) 2016-05-16 11:24:51 -04:00
dbus-job.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-kill.c tree-wide: remove newlines from unit_write_drop_in 2016-05-28 16:29:42 -04:00
dbus-kill.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-manager.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
dbus-manager.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-mount.c mount: add new ForceUnmount= setting for mount units, mapping to umount(8)'s "-f" switch 2016-08-27 10:46:52 -04:00
dbus-mount.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-path.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-path.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-scope.c core: make sure RequestStop signal is send directed 2016-07-20 14:35:15 +02:00
dbus-scope.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-service.c core: add RemoveIPC= setting 2016-08-19 00:37:25 +02:00
dbus-service.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-slice.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-slice.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-socket.c core: add RemoveIPC= setting 2016-08-19 00:37:25 +02:00
dbus-socket.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-swap.c core: add RemoveIPC= setting 2016-08-19 00:37:25 +02:00
dbus-swap.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-target.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-target.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-timer.c tree-wide: remove newlines from unit_write_drop_in 2016-05-28 16:29:42 -04:00
dbus-timer.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dbus-unit.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
dbus-unit.h core: add Ref()/Unref() bus calls for units 2016-08-22 16:14:21 +02:00
dbus.c pid1: drop kdbus_fd and all associated logic 2016-09-09 15:16:26 +01:00
dbus.h core: add Ref()/Unref() bus calls for units 2016-08-22 16:14:21 +02:00
device.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
device.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
dynamic-user.c tree-wide: remove consecutive duplicate words in comments 2016-10-04 17:06:25 +02:00
dynamic-user.h core: add a concept of "dynamic" user ids, that are allocated as long as a service is running 2016-07-22 15:53:45 +02:00
execute.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
execute.h core: add two new service settings ProtectKernelTunables= and ProtectControlGroups= 2016-09-25 10:18:48 +02:00
failure-action.c core: rework reboot parameter logic a bit 2016-04-12 13:43:32 +02:00
failure-action.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
hostname-setup.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
hostname-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
ima-setup.c tree-wide: use mdash instead of a two minuses 2016-04-21 23:00:13 -04:00
ima-setup.h tree-wide: use mdash instead of a two minuses 2016-04-21 23:00:13 -04:00
job.c core: add Ref()/Unref() bus calls for units 2016-08-22 16:14:21 +02:00
job.h core: add Ref()/Unref() bus calls for units 2016-08-22 16:14:21 +02:00
kill.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
kill.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
killall.c shutdown: use 90s SIGKILL timeout 2016-07-12 17:32:30 +02:00
killall.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
kmod-setup.c Ensure kdbus isn't used (#3501) 2016-06-18 17:24:23 -04:00
kmod-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
load-dropin.c core: don't drop transient drop-ins when loading the rest 2016-04-12 13:43:31 +02:00
load-dropin.h core: rework generator dir logic, move the dirs into LookupPaths structure 2016-04-12 13:43:29 +02:00
load-fragment-gperf.gperf.m4 core: add two new service settings ProtectKernelTunables= and ProtectControlGroups= 2016-09-25 10:18:48 +02:00
load-fragment.c core: introduce MemorySwapMax= (#3659) 2016-08-31 12:28:54 +02:00
load-fragment.h core: add cgroup CPU controller support on the unified hierarchy 2016-08-07 09:45:39 -04:00
locale-setup.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
locale-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
loopback-setup.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
loopback-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
machine-id-setup.c core: rework machine-id-setup.c to use the calls from id128-util.[ch] 2016-07-22 12:59:36 +02:00
machine-id-setup.h core: rework machine-id-setup.c to use the calls from id128-util.[ch] 2016-07-22 12:59:36 +02:00
macros.systemd.in macros.systemd.in: add %systemd_ordering (#3776) 2016-07-22 09:33:13 -04:00
main.c core: add possibility to set action for ctrl-alt-del burst (#4105) 2016-10-06 21:08:21 -04:00
manager.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
manager.h core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
mount-setup.c core: use the unified hierarchy for the systemd cgroup controller hierarchy 2016-08-17 17:44:36 -04:00
mount-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
mount.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
mount.h mount: add new ForceUnmount= setting for mount units, mapping to umount(8)'s "-f" switch 2016-08-27 10:46:52 -04:00
namespace.c core:namespace: simplify ProtectHome= implementation 2016-09-25 12:41:16 +02:00
namespace.h core: introduce ProtectSystem=strict 2016-09-25 10:42:18 +02:00
org.freedesktop.systemd1.conf core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
org.freedesktop.systemd1.policy.in.in core: rework policykit hookup 2015-02-18 18:56:27 +01:00
org.freedesktop.systemd1.service move more main systemd parts to core/ 2012-04-12 14:24:40 +02:00
path.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
path.h core: move enforcement of the start limit into per-unit-type code again 2016-05-02 13:08:00 +02:00
scope.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
scope.h Merge pull request #3762 from poettering/sigkill-log 2016-07-22 09:18:30 +02:00
selinux-access.c tree-wide: get rid of selinux_context_t (#3732) 2016-07-15 18:44:02 +02:00
selinux-access.h core,network: Use const qualifiers for block-local variables in macro functions (#4019) 2016-08-23 12:29:30 +03:00
selinux-setup.c tree-wide: get rid of selinux_context_t (#3732) 2016-07-15 18:44:02 +02:00
selinux-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
service.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
service.h socket: add support to control no. of connections from one source (#3607) 2016-08-02 13:48:23 -04:00
show-status.c tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
show-status.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
shutdown.c shutdown: already sync IO before we enter the final killing spree 2016-07-12 17:38:19 +02:00
slice.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
slice.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
smack-setup.c tree-wide: indentation fixes 2016-02-26 22:23:38 +01:00
smack-setup.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
socket.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
socket.h systemd: do not serialize peer, bump count when deserializing socket instead 2016-08-05 08:16:31 -04:00
swap.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
swap.h core: add a concept of "dynamic" user ids, that are allocated as long as a service is running 2016-07-22 15:53:45 +02:00
system.conf core: add possibility to set action for ctrl-alt-del burst (#4105) 2016-10-06 21:08:21 -04:00
systemd.pc.in build-sys: move systemd.pc from pkgconfiglibdir back into pkgconfigdatadir 2015-04-21 20:35:17 +02:00
target.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
target.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
timer.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
timer.h core: move enforcement of the start limit into per-unit-type code again 2016-05-02 13:08:00 +02:00
transaction.c transaction: don't cancel jobs for units with IgnoreOnIsolate=true (#3671) 2016-07-25 20:02:55 +02:00
transaction.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
triggers.systemd.in rpm triggers: add note about minimum supported version 2016-04-02 11:35:07 -04:00
umount.c Fix typo 2016-10-05 18:36:48 +02:00
umount.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
unit-printf.c core: reuse manager_get_runtime_prefix() at more places 2016-04-12 13:43:30 +02:00
unit-printf.h tree-wide: remove Emacs lines from all files 2016-02-10 13:41:57 +01:00
unit.c core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
unit.h core: add "invocation ID" concept to service manager 2016-10-07 20:14:38 +02:00
user.conf core: rename StartLimitInterval= to StartLimitIntervalSec= 2016-04-29 16:27:48 +02:00