[libvirt PATCH 00/11] systemd: Further improvements

This series addresses two pieces of feedback from my recent systemd changes: that some settings, such as LimitNOFILE, where still being repeated verbatim in multiple locations, and that only having the foo.{service,socket}.extra.in files for some services and not others could be confusing. Andrea Bolognani (11): systemd: libvirtd doesn't need @sockprefix@ systemd: Support merging multiple units systemd: Accept multiple files for service_extra_in/socket_extra_in systemd: Introduce systemd_service_limitnofile_extra systemd: Introduce systemd_service_taskmax_extra systemd: Introduce systemd_service_limitmemlock_extra systemd: Introduce systemd_service_oomscoreadjust_extra systemd: Allow comments at the top of units systemd: Set service_extra_in/socket_extra_in everywhere systemd: Make service_extra_in/socket_extra_in required systemd: Tweak service definitions scripts/merge-systemd-units.py | 20 +++++++--- src/ch/meson.build | 10 ++++- src/ch/virtchd.service.extra.in | 18 ++------- src/ch/virtchd.socket.extra.in | 2 + src/interface/meson.build | 6 +++ src/interface/virtinterfaced.service.extra.in | 2 + src/interface/virtinterfaced.socket.extra.in | 2 + src/libxl/meson.build | 8 +++- src/libxl/virtxend.service.extra.in | 3 ++ src/libxl/virtxend.socket.extra.in | 3 ++ src/locking/meson.build | 10 ++++- src/locking/virtlockd.service.extra.in | 2 + src/locking/virtlockd.service.in | 8 ---- src/locking/virtlockd.socket.extra.in | 2 + src/logging/meson.build | 10 ++++- src/logging/virtlogd.service.extra.in | 2 + src/logging/virtlogd.service.in | 8 ---- src/logging/virtlogd.socket.extra.in | 2 + src/lxc/meson.build | 10 ++++- src/lxc/virtlxcd.service.extra.in | 18 ++------- src/lxc/virtlxcd.socket.extra.in | 2 + src/meson.build | 40 ++++++++++--------- src/network/meson.build | 7 +++- src/network/virtnetworkd.service.extra.in | 3 ++ src/network/virtnetworkd.socket.extra.in | 2 + src/node_device/meson.build | 6 +++ src/node_device/virtnodedevd.service.extra.in | 2 + src/node_device/virtnodedevd.socket.extra.in | 2 + src/nwfilter/meson.build | 6 +++ src/nwfilter/virtnwfilterd.service.extra.in | 2 + src/nwfilter/virtnwfilterd.socket.extra.in | 2 + src/qemu/meson.build | 10 ++++- src/qemu/virtqemud.service.extra.in | 18 ++------- src/qemu/virtqemud.socket.extra.in | 2 + src/remote/libvirtd.service.extra.in | 2 + src/remote/libvirtd.service.in | 15 ------- src/remote/libvirtd.socket.extra.in | 2 + src/remote/meson.build | 18 ++++++++- src/remote/virtproxyd.service.extra.in | 2 + src/remote/virtproxyd.socket.extra.in | 2 + src/secret/meson.build | 6 +++ src/secret/virtsecretd.service.extra.in | 2 + src/secret/virtsecretd.socket.extra.in | 2 + src/storage/meson.build | 7 +++- src/storage/virtstoraged.service.extra.in | 3 ++ src/storage/virtstoraged.socket.extra.in | 2 + src/vbox/meson.build | 7 +++- src/vbox/virtvboxd.service.extra.in | 3 ++ src/vbox/virtvboxd.socket.extra.in | 2 + src/virtd.service.limitmemlock.extra.in | 7 ++++ src/virtd.service.limitnofile.extra.in | 5 +++ src/virtd.service.oomscoreadjust.extra.in | 5 +++ src/virtd.service.tasksmax.extra.in | 6 +++ src/vz/meson.build | 7 +++- src/vz/virtvzd.service.extra.in | 3 ++ src/vz/virtvzd.socket.extra.in | 2 + 56 files changed, 248 insertions(+), 112 deletions(-) create mode 100644 src/ch/virtchd.socket.extra.in create mode 100644 src/interface/virtinterfaced.service.extra.in create mode 100644 src/interface/virtinterfaced.socket.extra.in create mode 100644 src/locking/virtlockd.service.extra.in create mode 100644 src/locking/virtlockd.socket.extra.in create mode 100644 src/logging/virtlogd.service.extra.in create mode 100644 src/logging/virtlogd.socket.extra.in create mode 100644 src/lxc/virtlxcd.socket.extra.in create mode 100644 src/network/virtnetworkd.socket.extra.in create mode 100644 src/node_device/virtnodedevd.service.extra.in create mode 100644 src/node_device/virtnodedevd.socket.extra.in create mode 100644 src/nwfilter/virtnwfilterd.service.extra.in create mode 100644 src/nwfilter/virtnwfilterd.socket.extra.in create mode 100644 src/qemu/virtqemud.socket.extra.in create mode 100644 src/remote/libvirtd.service.extra.in create mode 100644 src/remote/libvirtd.socket.extra.in create mode 100644 src/remote/virtproxyd.service.extra.in create mode 100644 src/remote/virtproxyd.socket.extra.in create mode 100644 src/secret/virtsecretd.service.extra.in create mode 100644 src/secret/virtsecretd.socket.extra.in create mode 100644 src/storage/virtstoraged.socket.extra.in create mode 100644 src/vbox/virtvboxd.socket.extra.in create mode 100644 src/virtd.service.limitmemlock.extra.in create mode 100644 src/virtd.service.limitnofile.extra.in create mode 100644 src/virtd.service.oomscoreadjust.extra.in create mode 100644 src/virtd.service.tasksmax.extra.in create mode 100644 src/vz/virtvzd.socket.extra.in -- 2.41.0

It uses custom templates which already hardcode the correct value. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/remote/meson.build | 1 - 1 file changed, 1 deletion(-) diff --git a/src/remote/meson.build b/src/remote/meson.build index e14541f09e..41c73360d1 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -192,7 +192,6 @@ if conf.has('WITH_REMOTE') 'service': 'libvirtd', 'service_in': files('libvirtd.service.in'), 'name': 'legacy monolithic', - 'sockprefix': 'libvirt', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], 'socket_in': files('libvirtd.socket.in'), 'socket_ro_in': files('libvirtd-ro.socket.in'), -- 2.41.0

In order to further deduplicate the contents of the various unit files, we need to be able to merge multiple additional units into the initial one. Luckily the merge logic is in no way constrained to working with just two units, so achieving this is pretty much just a matter of lifting the existing limitation on the number of arguments that the script accepts. As a special case, it's now also possible to call the script with just the base unit as argument. No merging will be performed in that case, obviously, but we'll still go through the basic validation and cleanup steps. This also fixes a bug in the check for the number of arguments: sys.argv also contains the name of the script, so we should have checked that its size was at least 3. The check is now written in a way that's less prone to misunderstandings. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- scripts/merge-systemd-units.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/merge-systemd-units.py b/scripts/merge-systemd-units.py index bc3321230d..30e8757544 100755 --- a/scripts/merge-systemd-units.py +++ b/scripts/merge-systemd-units.py @@ -82,13 +82,18 @@ def merge_units(base, extra): return merged -if len(sys.argv) < 2: - print("usage: {} BASE EXTRA".format(sys.argv[0])) +prog = sys.argv[0] +args = sys.argv[1:] + +if len(args) < 1: + print("usage: {} BASE [EXTRA]...".format(prog)) sys.exit(1) -base = parse_unit(sys.argv[1]) -extra = parse_unit(sys.argv[2]) +merged = parse_unit(args[0]) + +for arg in args[1:]: + extra = parse_unit(arg) -merged = merge_units(base, extra) + merged = merge_units(merged, extra) sys.stdout.write(format_unit(merged)) -- 2.41.0

Now that the underlying script is able to merge an arbitrary number of units into the base template, expose this possibility in the build system. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/ch/meson.build | 4 +++- src/libxl/meson.build | 8 ++++++-- src/lxc/meson.build | 4 +++- src/meson.build | 12 ++++++------ src/network/meson.build | 4 +++- src/qemu/meson.build | 4 +++- src/storage/meson.build | 4 +++- src/vbox/meson.build | 4 +++- src/vz/meson.build | 4 +++- 9 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/ch/meson.build b/src/ch/meson.build index df246ef9b0..7cee90d0da 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -58,7 +58,9 @@ if conf.has('WITH_CH') virt_daemon_units += { 'service': 'virtchd', 'name': 'Cloud Hypervisor', - 'service_extra_in': files('virtchd.service.extra.in'), + 'service_extra_in': [ + files('virtchd.service.extra.in'), + ], } virt_install_dirs += [ diff --git a/src/libxl/meson.build b/src/libxl/meson.build index 8e6f455139..e75a8f2fdb 100644 --- a/src/libxl/meson.build +++ b/src/libxl/meson.build @@ -67,8 +67,12 @@ if conf.has('WITH_LIBXL') virt_daemon_units += { 'service': 'virtxend', 'name': 'Xen', - 'service_extra_in': files('virtxend.service.extra.in'), - 'socket_extra_in': files('virtxend.socket.extra.in'), + 'service_extra_in': [ + files('virtxend.service.extra.in'), + ], + 'socket_extra_in': [ + files('virtxend.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/lxc/meson.build b/src/lxc/meson.build index 5eb23fbbbf..198e282e63 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -165,7 +165,9 @@ if conf.has('WITH_LXC') virt_daemon_units += { 'service': 'virtlxcd', 'name': 'LXC', - 'service_extra_in': files('virtlxcd.service.extra.in'), + 'service_extra_in': [ + files('virtlxcd.service.extra.in'), + ], } openrc_init_files += { diff --git a/src/meson.build b/src/meson.build index 144f24e526..f3814d75ce 100644 --- a/src/meson.build +++ b/src/meson.build @@ -199,8 +199,8 @@ guest_unit_files = [] # * sockets - array of additional sockets (optional, default [ 'main', 'ro', 'admin' ]) # * service_in - service source file (optional, default virtd.service.in) # * socket_$name_in - additional socket source files (optional, default virtd.socket.in or virtd-$name.socket.in) -# * service_extra_in - unit to merge with service_in (optional, default None) -# * socket_extra_in - unit to merge with socket_$name_in (optional, default None) +# * service_extra_in - units to merge with service_in (optional, default []) +# * socket_extra_in - units to merge with socket_$name_in (optional, default []) virt_daemon_units = [] # openrc_init_files @@ -824,9 +824,9 @@ if conf.has('WITH_LIBVIRTD') if 'service_extra_in' in unit service_in = configure_file( - input: [ service_in, unit['service_extra_in'] ], + input: [ service_in ] + unit['service_extra_in'], output: '@0@.in'.format(service_out), - command: [ merge_systemd_units_prog, '@INPUT0@', '@INPUT1@' ], + command: [ merge_systemd_units_prog, '@INPUT@' ], capture: true, ) endif @@ -852,9 +852,9 @@ if conf.has('WITH_LIBVIRTD') if 'socket_extra_in' in unit socket_in = configure_file( - input: [ socket_in, unit['socket_extra_in'] ], + input: [ socket_in ] + unit['socket_extra_in'], output: '@0@.in'.format(socket_out), - command: [ merge_systemd_units_prog, '@INPUT0@', '@INPUT1@' ], + command: [ merge_systemd_units_prog, '@INPUT@' ], capture: true, ) endif diff --git a/src/network/meson.build b/src/network/meson.build index d0383cca1c..3cf2ef3d3d 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -63,7 +63,9 @@ if conf.has('WITH_NETWORK') virt_daemon_units += { 'service': 'virtnetworkd', 'name': 'network', - 'service_extra_in': files('virtnetworkd.service.extra.in'), + 'service_extra_in': [ + files('virtnetworkd.service.extra.in'), + ], } openrc_init_files += { diff --git a/src/qemu/meson.build b/src/qemu/meson.build index 64c62e584f..fff61ddf27 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -184,7 +184,9 @@ if conf.has('WITH_QEMU') virt_daemon_units += { 'service': 'virtqemud', 'name': 'QEMU', - 'service_extra_in': files('virtqemud.service.extra.in'), + 'service_extra_in': [ + files('virtqemud.service.extra.in'), + ], } openrc_init_files += { diff --git a/src/storage/meson.build b/src/storage/meson.build index 023353c1d6..daad8abf25 100644 --- a/src/storage/meson.build +++ b/src/storage/meson.build @@ -112,7 +112,9 @@ if conf.has('WITH_STORAGE') virt_daemon_units += { 'service': 'virtstoraged', 'name': 'storage', - 'service_extra_in': files('virtstoraged.service.extra.in'), + 'service_extra_in': [ + files('virtstoraged.service.extra.in'), + ], } openrc_init_files += { diff --git a/src/vbox/meson.build b/src/vbox/meson.build index a72c1833f1..e05f532e35 100644 --- a/src/vbox/meson.build +++ b/src/vbox/meson.build @@ -58,7 +58,9 @@ if conf.has('WITH_VBOX') virt_daemon_units += { 'service': 'virtvboxd', 'name': 'VirtualBox', - 'service_extra_in': files('virtvboxd.service.extra.in'), + 'service_extra_in': [ + files('virtvboxd.service.extra.in'), + ], } openrc_init_files += { diff --git a/src/vz/meson.build b/src/vz/meson.build index ce2cbae454..bc5b5fb623 100644 --- a/src/vz/meson.build +++ b/src/vz/meson.build @@ -49,7 +49,9 @@ if conf.has('WITH_VZ') virt_daemon_units += { 'service': 'virtvzd', 'name': 'vz', - 'service_extra_in': files('virtvzd.service.extra.in'), + 'service_extra_in': [ + files('virtvzd.service.extra.in'), + ], } openrc_init_files += { -- 2.41.0

Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/ch/meson.build | 1 + src/ch/virtchd.service.extra.in | 4 ---- src/locking/meson.build | 3 +++ src/locking/virtlockd.service.in | 4 ---- src/logging/meson.build | 3 +++ src/logging/virtlogd.service.in | 4 ---- src/lxc/meson.build | 1 + src/lxc/virtlxcd.service.extra.in | 4 ---- src/meson.build | 5 +++++ src/qemu/meson.build | 1 + src/qemu/virtqemud.service.extra.in | 4 ---- src/remote/libvirtd.service.in | 4 ---- src/remote/meson.build | 3 +++ src/virtd.service.limitnofile.extra.in | 5 +++++ 14 files changed, 22 insertions(+), 24 deletions(-) create mode 100644 src/virtd.service.limitnofile.extra.in diff --git a/src/ch/meson.build b/src/ch/meson.build index 7cee90d0da..0760d1f8e1 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -60,6 +60,7 @@ if conf.has('WITH_CH') 'name': 'Cloud Hypervisor', 'service_extra_in': [ files('virtchd.service.extra.in'), + systemd_service_limitnofile_extra_in, ], } diff --git a/src/ch/virtchd.service.extra.in b/src/ch/virtchd.service.extra.in index bc2fef57cc..626cf0a21b 100644 --- a/src/ch/virtchd.service.extra.in +++ b/src/ch/virtchd.service.extra.in @@ -5,10 +5,6 @@ After=remote-fs.target [Service] KillMode=process -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 # The cgroups pids controller can limit the number of tasks started by # the daemon, which can limit the number of domains for some hypervisors. # A conservative default of 8 tasks per guest results in a TasksMax of diff --git a/src/locking/meson.build b/src/locking/meson.build index 6b3cd781d1..f3bdf57483 100644 --- a/src/locking/meson.build +++ b/src/locking/meson.build @@ -144,6 +144,9 @@ if conf.has('WITH_LIBVIRTD') virt_daemon_units += { 'service': 'virtlockd', 'service_in': files('virtlockd.service.in'), + 'service_extra_in': [ + systemd_service_limitnofile_extra_in, + ], 'name': 'locking', 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlockd.socket.in'), diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in index ce00b6def9..5c374fea8f 100644 --- a/src/locking/virtlockd.service.in +++ b/src/locking/virtlockd.service.in @@ -17,10 +17,6 @@ ExecReload=/bin/kill -USR1 $MAINPID # cause the machine to be fenced (rebooted), so make # sure we discourage OOM killer OOMScoreAdjust=-900 -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 [Install] WantedBy=multi-user.target diff --git a/src/logging/meson.build b/src/logging/meson.build index 1527f91faf..a3d0ad297c 100644 --- a/src/logging/meson.build +++ b/src/logging/meson.build @@ -91,6 +91,9 @@ if conf.has('WITH_LIBVIRTD') virt_daemon_units += { 'service': 'virtlogd', 'service_in': files('virtlogd.service.in'), + 'service_extra_in': [ + systemd_service_limitnofile_extra_in, + ], 'name': 'logging', 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlogd.socket.in'), diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in index 52c9e5bb9e..9108dd1ff9 100644 --- a/src/logging/virtlogd.service.in +++ b/src/logging/virtlogd.service.in @@ -17,10 +17,6 @@ ExecReload=/bin/kill -USR1 $MAINPID # cause the machine to be fenced (rebooted), so make # sure we discourage OOM killer OOMScoreAdjust=-900 -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 [Install] WantedBy=multi-user.target diff --git a/src/lxc/meson.build b/src/lxc/meson.build index 198e282e63..0c4d51d8b9 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -167,6 +167,7 @@ if conf.has('WITH_LXC') 'name': 'LXC', 'service_extra_in': [ files('virtlxcd.service.extra.in'), + systemd_service_limitnofile_extra_in, ], } diff --git a/src/lxc/virtlxcd.service.extra.in b/src/lxc/virtlxcd.service.extra.in index bc2fef57cc..626cf0a21b 100644 --- a/src/lxc/virtlxcd.service.extra.in +++ b/src/lxc/virtlxcd.service.extra.in @@ -5,10 +5,6 @@ After=remote-fs.target [Service] KillMode=process -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 # The cgroups pids controller can limit the number of tasks started by # the daemon, which can limit the number of domains for some hypervisors. # A conservative default of 8 tasks per guest results in a TasksMax of diff --git a/src/meson.build b/src/meson.build index f3814d75ce..a9e6b521ee 100644 --- a/src/meson.build +++ b/src/meson.build @@ -191,6 +191,11 @@ virt_test_aug_dir = datadir / 'augeas' / 'lenses' / 'tests' # guest unit files to install guest_unit_files = [] +# systemd_*_extra_in: +# snippets that are shared by multiple units +# can be used in service_extra_in/socket_extra_in (see below) +systemd_service_limitnofile_extra_in = files('virtd.service.limitnofile.extra.in') + # virt_daemon_units: # generate libvirt daemon systemd unit files # * service - name of the service (required) diff --git a/src/qemu/meson.build b/src/qemu/meson.build index fff61ddf27..09f79f52ee 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -186,6 +186,7 @@ if conf.has('WITH_QEMU') 'name': 'QEMU', 'service_extra_in': [ files('virtqemud.service.extra.in'), + systemd_service_limitnofile_extra_in, ], } diff --git a/src/qemu/virtqemud.service.extra.in b/src/qemu/virtqemud.service.extra.in index 585e1e82eb..48b349b48a 100644 --- a/src/qemu/virtqemud.service.extra.in +++ b/src/qemu/virtqemud.service.extra.in @@ -9,10 +9,6 @@ After=remote-fs.target [Service] KillMode=process -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 # The cgroups pids controller can limit the number of tasks started by # the daemon, which can limit the number of domains for some hypervisors. # A conservative default of 8 tasks per guest results in a TasksMax of diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in index 24a6712b75..8dc6df2138 100644 --- a/src/remote/libvirtd.service.in +++ b/src/remote/libvirtd.service.in @@ -33,10 +33,6 @@ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure -# Raise hard limits to match behaviour of systemd >= 240. -# During startup, daemon will set soft limit to match hard limit -# per systemd recommendations -LimitNOFILE=1024:524288 # The cgroups pids controller can limit the number of tasks started by # the daemon, which can limit the number of domains for some hypervisors. # A conservative default of 8 tasks per guest results in a TasksMax of diff --git a/src/remote/meson.build b/src/remote/meson.build index 41c73360d1..e2960195f7 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -191,6 +191,9 @@ if conf.has('WITH_REMOTE') virt_daemon_units += { 'service': 'libvirtd', 'service_in': files('libvirtd.service.in'), + 'service_extra_in': [ + systemd_service_limitnofile_extra_in, + ], 'name': 'legacy monolithic', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], 'socket_in': files('libvirtd.socket.in'), diff --git a/src/virtd.service.limitnofile.extra.in b/src/virtd.service.limitnofile.extra.in new file mode 100644 index 0000000000..42c1960a7d --- /dev/null +++ b/src/virtd.service.limitnofile.extra.in @@ -0,0 +1,5 @@ +[Service] +# Raise hard limits to match behaviour of systemd >= 240. +# During startup, daemon will set soft limit to match hard limit +# per systemd recommendations +LimitNOFILE=1024:524288 -- 2.41.0

Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/ch/meson.build | 1 + src/ch/virtchd.service.extra.in | 5 ----- src/lxc/meson.build | 1 + src/lxc/virtlxcd.service.extra.in | 5 ----- src/meson.build | 1 + src/qemu/meson.build | 1 + src/qemu/virtqemud.service.extra.in | 5 ----- src/remote/libvirtd.service.in | 5 ----- src/remote/meson.build | 1 + src/virtd.service.tasksmax.extra.in | 6 ++++++ 10 files changed, 11 insertions(+), 20 deletions(-) create mode 100644 src/virtd.service.tasksmax.extra.in diff --git a/src/ch/meson.build b/src/ch/meson.build index 0760d1f8e1..9eecf8c27f 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -61,6 +61,7 @@ if conf.has('WITH_CH') 'service_extra_in': [ files('virtchd.service.extra.in'), systemd_service_limitnofile_extra_in, + systemd_service_taskmax_extra_in, ], } diff --git a/src/ch/virtchd.service.extra.in b/src/ch/virtchd.service.extra.in index 626cf0a21b..38d820c1af 100644 --- a/src/ch/virtchd.service.extra.in +++ b/src/ch/virtchd.service.extra.in @@ -5,11 +5,6 @@ After=remote-fs.target [Service] KillMode=process -# The cgroups pids controller can limit the number of tasks started by -# the daemon, which can limit the number of domains for some hypervisors. -# A conservative default of 8 tasks per guest results in a TasksMax of -# 32k to support 4096 guests. -TasksMax=32768 # With cgroups v2 there is no devices controller anymore, we have to use # eBPF to control access to devices. In order to do that we create a eBPF # hash MAP which locks memory. The default map size for 64 devices together diff --git a/src/lxc/meson.build b/src/lxc/meson.build index 0c4d51d8b9..fb1aedb5fc 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -168,6 +168,7 @@ if conf.has('WITH_LXC') 'service_extra_in': [ files('virtlxcd.service.extra.in'), systemd_service_limitnofile_extra_in, + systemd_service_taskmax_extra_in, ], } diff --git a/src/lxc/virtlxcd.service.extra.in b/src/lxc/virtlxcd.service.extra.in index 626cf0a21b..38d820c1af 100644 --- a/src/lxc/virtlxcd.service.extra.in +++ b/src/lxc/virtlxcd.service.extra.in @@ -5,11 +5,6 @@ After=remote-fs.target [Service] KillMode=process -# The cgroups pids controller can limit the number of tasks started by -# the daemon, which can limit the number of domains for some hypervisors. -# A conservative default of 8 tasks per guest results in a TasksMax of -# 32k to support 4096 guests. -TasksMax=32768 # With cgroups v2 there is no devices controller anymore, we have to use # eBPF to control access to devices. In order to do that we create a eBPF # hash MAP which locks memory. The default map size for 64 devices together diff --git a/src/meson.build b/src/meson.build index a9e6b521ee..37239fd969 100644 --- a/src/meson.build +++ b/src/meson.build @@ -195,6 +195,7 @@ guest_unit_files = [] # snippets that are shared by multiple units # can be used in service_extra_in/socket_extra_in (see below) systemd_service_limitnofile_extra_in = files('virtd.service.limitnofile.extra.in') +systemd_service_taskmax_extra_in = files('virtd.service.tasksmax.extra.in') # virt_daemon_units: # generate libvirt daemon systemd unit files diff --git a/src/qemu/meson.build b/src/qemu/meson.build index 09f79f52ee..b28089aa06 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -187,6 +187,7 @@ if conf.has('WITH_QEMU') 'service_extra_in': [ files('virtqemud.service.extra.in'), systemd_service_limitnofile_extra_in, + systemd_service_taskmax_extra_in, ], } diff --git a/src/qemu/virtqemud.service.extra.in b/src/qemu/virtqemud.service.extra.in index 48b349b48a..164f672c08 100644 --- a/src/qemu/virtqemud.service.extra.in +++ b/src/qemu/virtqemud.service.extra.in @@ -9,11 +9,6 @@ After=remote-fs.target [Service] KillMode=process -# The cgroups pids controller can limit the number of tasks started by -# the daemon, which can limit the number of domains for some hypervisors. -# A conservative default of 8 tasks per guest results in a TasksMax of -# 32k to support 4096 guests. -TasksMax=32768 # With cgroups v2 there is no devices controller anymore, we have to use # eBPF to control access to devices. In order to do that we create a eBPF # hash MAP which locks memory. The default map size for 64 devices together diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in index 8dc6df2138..900b734f82 100644 --- a/src/remote/libvirtd.service.in +++ b/src/remote/libvirtd.service.in @@ -33,11 +33,6 @@ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure -# The cgroups pids controller can limit the number of tasks started by -# the daemon, which can limit the number of domains for some hypervisors. -# A conservative default of 8 tasks per guest results in a TasksMax of -# 32k to support 4096 guests. -TasksMax=32768 # With cgroups v2 there is no devices controller anymore, we have to use # eBPF to control access to devices. In order to do that we create a eBPF # hash MAP which locks memory. The default map size for 64 devices together diff --git a/src/remote/meson.build b/src/remote/meson.build index e2960195f7..898131424f 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -193,6 +193,7 @@ if conf.has('WITH_REMOTE') 'service_in': files('libvirtd.service.in'), 'service_extra_in': [ systemd_service_limitnofile_extra_in, + systemd_service_taskmax_extra_in, ], 'name': 'legacy monolithic', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], diff --git a/src/virtd.service.tasksmax.extra.in b/src/virtd.service.tasksmax.extra.in new file mode 100644 index 0000000000..2ea2939425 --- /dev/null +++ b/src/virtd.service.tasksmax.extra.in @@ -0,0 +1,6 @@ +[Service] +# The cgroups pids controller can limit the number of tasks started by +# the daemon, which can limit the number of domains for some hypervisors. +# A conservative default of 8 tasks per guest results in a TasksMax of +# 32k to support 4096 guests. +TasksMax=32768 -- 2.41.0

Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/ch/meson.build | 1 + src/ch/virtchd.service.extra.in | 6 ------ src/lxc/meson.build | 1 + src/lxc/virtlxcd.service.extra.in | 6 ------ src/meson.build | 1 + src/qemu/meson.build | 1 + src/qemu/virtqemud.service.extra.in | 6 ------ src/remote/libvirtd.service.in | 6 ------ src/remote/meson.build | 1 + ...service.extra.in => virtd.service.limitmemlock.extra.in} | 6 ------ 10 files changed, 5 insertions(+), 30 deletions(-) copy src/{ch/virtchd.service.extra.in => virtd.service.limitmemlock.extra.in} (75%) diff --git a/src/ch/meson.build b/src/ch/meson.build index 9eecf8c27f..29e76b6938 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -62,6 +62,7 @@ if conf.has('WITH_CH') files('virtchd.service.extra.in'), systemd_service_limitnofile_extra_in, systemd_service_taskmax_extra_in, + systemd_service_limitmemlock_extra_in, ], } diff --git a/src/ch/virtchd.service.extra.in b/src/ch/virtchd.service.extra.in index 38d820c1af..3655c51130 100644 --- a/src/ch/virtchd.service.extra.in +++ b/src/ch/virtchd.service.extra.in @@ -5,9 +5,3 @@ After=remote-fs.target [Service] KillMode=process -# With cgroups v2 there is no devices controller anymore, we have to use -# eBPF to control access to devices. In order to do that we create a eBPF -# hash MAP which locks memory. The default map size for 64 devices together -# with program takes 12k per guest. After rounding up we will get 64M to -# support 4096 guests. -LimitMEMLOCK=64M diff --git a/src/lxc/meson.build b/src/lxc/meson.build index fb1aedb5fc..044a38c918 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -169,6 +169,7 @@ if conf.has('WITH_LXC') files('virtlxcd.service.extra.in'), systemd_service_limitnofile_extra_in, systemd_service_taskmax_extra_in, + systemd_service_limitmemlock_extra_in, ], } diff --git a/src/lxc/virtlxcd.service.extra.in b/src/lxc/virtlxcd.service.extra.in index 38d820c1af..3655c51130 100644 --- a/src/lxc/virtlxcd.service.extra.in +++ b/src/lxc/virtlxcd.service.extra.in @@ -5,9 +5,3 @@ After=remote-fs.target [Service] KillMode=process -# With cgroups v2 there is no devices controller anymore, we have to use -# eBPF to control access to devices. In order to do that we create a eBPF -# hash MAP which locks memory. The default map size for 64 devices together -# with program takes 12k per guest. After rounding up we will get 64M to -# support 4096 guests. -LimitMEMLOCK=64M diff --git a/src/meson.build b/src/meson.build index 37239fd969..611f05583d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -196,6 +196,7 @@ guest_unit_files = [] # can be used in service_extra_in/socket_extra_in (see below) systemd_service_limitnofile_extra_in = files('virtd.service.limitnofile.extra.in') systemd_service_taskmax_extra_in = files('virtd.service.tasksmax.extra.in') +systemd_service_limitmemlock_extra_in = files('virtd.service.limitmemlock.extra.in') # virt_daemon_units: # generate libvirt daemon systemd unit files diff --git a/src/qemu/meson.build b/src/qemu/meson.build index b28089aa06..167ed849ea 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -188,6 +188,7 @@ if conf.has('WITH_QEMU') files('virtqemud.service.extra.in'), systemd_service_limitnofile_extra_in, systemd_service_taskmax_extra_in, + systemd_service_limitmemlock_extra_in, ], } diff --git a/src/qemu/virtqemud.service.extra.in b/src/qemu/virtqemud.service.extra.in index 164f672c08..32aba8be9c 100644 --- a/src/qemu/virtqemud.service.extra.in +++ b/src/qemu/virtqemud.service.extra.in @@ -9,12 +9,6 @@ After=remote-fs.target [Service] KillMode=process -# With cgroups v2 there is no devices controller anymore, we have to use -# eBPF to control access to devices. In order to do that we create a eBPF -# hash MAP which locks memory. The default map size for 64 devices together -# with program takes 12k per guest. After rounding up we will get 64M to -# support 4096 guests. -LimitMEMLOCK=64M [Install] Also=virtlogd.socket diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in index 900b734f82..250b4a6fc3 100644 --- a/src/remote/libvirtd.service.in +++ b/src/remote/libvirtd.service.in @@ -33,12 +33,6 @@ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure -# With cgroups v2 there is no devices controller anymore, we have to use -# eBPF to control access to devices. In order to do that we create a eBPF -# hash MAP which locks memory. The default map size for 64 devices together -# with program takes 12k per guest. After rounding up we will get 64M to -# support 4096 guests. -LimitMEMLOCK=64M [Install] WantedBy=multi-user.target diff --git a/src/remote/meson.build b/src/remote/meson.build index 898131424f..8b81a813f2 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -194,6 +194,7 @@ if conf.has('WITH_REMOTE') 'service_extra_in': [ systemd_service_limitnofile_extra_in, systemd_service_taskmax_extra_in, + systemd_service_limitmemlock_extra_in, ], 'name': 'legacy monolithic', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], diff --git a/src/ch/virtchd.service.extra.in b/src/virtd.service.limitmemlock.extra.in similarity index 75% copy from src/ch/virtchd.service.extra.in copy to src/virtd.service.limitmemlock.extra.in index 38d820c1af..3534b5ea48 100644 --- a/src/ch/virtchd.service.extra.in +++ b/src/virtd.service.limitmemlock.extra.in @@ -1,10 +1,4 @@ -[Unit] -Wants=systemd-machined.service -After=systemd-machined.service -After=remote-fs.target - [Service] -KillMode=process # With cgroups v2 there is no devices controller anymore, we have to use # eBPF to control access to devices. In order to do that we create a eBPF # hash MAP which locks memory. The default map size for 64 devices together -- 2.41.0

Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/locking/meson.build | 1 + src/locking/virtlockd.service.in | 4 ---- src/logging/meson.build | 1 + src/logging/virtlogd.service.in | 4 ---- src/meson.build | 1 + src/virtd.service.oomscoreadjust.extra.in | 5 +++++ 6 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/virtd.service.oomscoreadjust.extra.in diff --git a/src/locking/meson.build b/src/locking/meson.build index f3bdf57483..d15e2cb84a 100644 --- a/src/locking/meson.build +++ b/src/locking/meson.build @@ -145,6 +145,7 @@ if conf.has('WITH_LIBVIRTD') 'service': 'virtlockd', 'service_in': files('virtlockd.service.in'), 'service_extra_in': [ + systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], 'name': 'locking', diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in index 5c374fea8f..cd6c77c6af 100644 --- a/src/locking/virtlockd.service.in +++ b/src/locking/virtlockd.service.in @@ -13,10 +13,6 @@ Environment=VIRTLOCKD_ARGS= EnvironmentFile=-@initconfdir@/virtlockd ExecStart=@sbindir@/virtlockd $VIRTLOCKD_ARGS ExecReload=/bin/kill -USR1 $MAINPID -# Losing the locks is a really bad thing that will -# cause the machine to be fenced (rebooted), so make -# sure we discourage OOM killer -OOMScoreAdjust=-900 [Install] WantedBy=multi-user.target diff --git a/src/logging/meson.build b/src/logging/meson.build index a3d0ad297c..fbf492b16e 100644 --- a/src/logging/meson.build +++ b/src/logging/meson.build @@ -92,6 +92,7 @@ if conf.has('WITH_LIBVIRTD') 'service': 'virtlogd', 'service_in': files('virtlogd.service.in'), 'service_extra_in': [ + systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], 'name': 'logging', diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in index 9108dd1ff9..569c9f88ad 100644 --- a/src/logging/virtlogd.service.in +++ b/src/logging/virtlogd.service.in @@ -13,10 +13,6 @@ Environment=VIRTLOGD_ARGS= EnvironmentFile=-@initconfdir@/virtlogd ExecStart=@sbindir@/virtlogd $VIRTLOGD_ARGS ExecReload=/bin/kill -USR1 $MAINPID -# Losing the logs is a really bad thing that will -# cause the machine to be fenced (rebooted), so make -# sure we discourage OOM killer -OOMScoreAdjust=-900 [Install] WantedBy=multi-user.target diff --git a/src/meson.build b/src/meson.build index 611f05583d..29c37a030a 100644 --- a/src/meson.build +++ b/src/meson.build @@ -197,6 +197,7 @@ guest_unit_files = [] systemd_service_limitnofile_extra_in = files('virtd.service.limitnofile.extra.in') systemd_service_taskmax_extra_in = files('virtd.service.tasksmax.extra.in') systemd_service_limitmemlock_extra_in = files('virtd.service.limitmemlock.extra.in') +systemd_service_oomscoreadjust_extra_in = files('virtd.service.oomscoreadjust.extra.in') # virt_daemon_units: # generate libvirt daemon systemd unit files diff --git a/src/virtd.service.oomscoreadjust.extra.in b/src/virtd.service.oomscoreadjust.extra.in new file mode 100644 index 0000000000..53b93efda8 --- /dev/null +++ b/src/virtd.service.oomscoreadjust.extra.in @@ -0,0 +1,5 @@ +[Service] +# Losing this daemon is a really bad thing that will +# cause the machine to be fenced (rebooted), so make +# sure we discourage OOM killer +OOMScoreAdjust=-900 -- 2.41.0

Currently the script will reject any type of contents outside of a section, but we want to be able to have some useful comments at the top of each file to help users understand how they are processed. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- scripts/merge-systemd-units.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/merge-systemd-units.py b/scripts/merge-systemd-units.py index 30e8757544..869d857f1d 100755 --- a/scripts/merge-systemd-units.py +++ b/scripts/merge-systemd-units.py @@ -24,6 +24,11 @@ def parse_unit(unit_path): if line == "": continue + # Comments at the very top of the file, outside of any + # section, are allowed and will not show up in the output + if line[0] == "#" and current_section == "[Invalid]": + continue + if line[0] == "[" and line[-1] == "]": if line not in SECTIONS: print("Unknown section {}".format(line)) -- 2.41.0

It's somewhat confusing that some of the services have a corresponding foo.service.extra.in and foo.socket.extra.in, some have just one of the two, and some have neither. In order to make things more approachable, make sure that both files exists for each service. In most cases the extra units are currently unused, so they will just contain a comment briefly explaining their purpose and pointing users to meson.build, where they can find more information. The same comment is also added to the top of extra units that already have some contents in them for consistency. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/ch/meson.build | 3 +++ src/ch/virtchd.service.extra.in | 3 +++ src/ch/virtchd.socket.extra.in | 2 ++ src/interface/meson.build | 6 ++++++ src/interface/virtinterfaced.service.extra.in | 2 ++ src/interface/virtinterfaced.socket.extra.in | 2 ++ src/libxl/virtxend.service.extra.in | 3 +++ src/libxl/virtxend.socket.extra.in | 3 +++ src/locking/meson.build | 4 ++++ src/locking/virtlockd.service.extra.in | 2 ++ src/locking/virtlockd.socket.extra.in | 2 ++ src/logging/meson.build | 4 ++++ src/logging/virtlogd.service.extra.in | 2 ++ src/logging/virtlogd.socket.extra.in | 2 ++ src/lxc/meson.build | 3 +++ src/lxc/virtlxcd.service.extra.in | 3 +++ src/lxc/virtlxcd.socket.extra.in | 2 ++ src/network/meson.build | 3 +++ src/network/virtnetworkd.service.extra.in | 3 +++ src/network/virtnetworkd.socket.extra.in | 2 ++ src/node_device/meson.build | 6 ++++++ src/node_device/virtnodedevd.service.extra.in | 2 ++ src/node_device/virtnodedevd.socket.extra.in | 2 ++ src/nwfilter/meson.build | 6 ++++++ src/nwfilter/virtnwfilterd.service.extra.in | 2 ++ src/nwfilter/virtnwfilterd.socket.extra.in | 2 ++ src/qemu/meson.build | 3 +++ src/qemu/virtqemud.service.extra.in | 3 +++ src/qemu/virtqemud.socket.extra.in | 2 ++ src/remote/libvirtd.service.extra.in | 2 ++ src/remote/libvirtd.socket.extra.in | 2 ++ src/remote/meson.build | 10 ++++++++++ src/remote/virtproxyd.service.extra.in | 2 ++ src/remote/virtproxyd.socket.extra.in | 2 ++ src/secret/meson.build | 6 ++++++ src/secret/virtsecretd.service.extra.in | 2 ++ src/secret/virtsecretd.socket.extra.in | 2 ++ src/storage/meson.build | 3 +++ src/storage/virtstoraged.service.extra.in | 3 +++ src/storage/virtstoraged.socket.extra.in | 2 ++ src/vbox/meson.build | 3 +++ src/vbox/virtvboxd.service.extra.in | 3 +++ src/vbox/virtvboxd.socket.extra.in | 2 ++ src/vz/meson.build | 3 +++ src/vz/virtvzd.service.extra.in | 3 +++ src/vz/virtvzd.socket.extra.in | 2 ++ 46 files changed, 136 insertions(+) create mode 100644 src/ch/virtchd.socket.extra.in create mode 100644 src/interface/virtinterfaced.service.extra.in create mode 100644 src/interface/virtinterfaced.socket.extra.in create mode 100644 src/locking/virtlockd.service.extra.in create mode 100644 src/locking/virtlockd.socket.extra.in create mode 100644 src/logging/virtlogd.service.extra.in create mode 100644 src/logging/virtlogd.socket.extra.in create mode 100644 src/lxc/virtlxcd.socket.extra.in create mode 100644 src/network/virtnetworkd.socket.extra.in create mode 100644 src/node_device/virtnodedevd.service.extra.in create mode 100644 src/node_device/virtnodedevd.socket.extra.in create mode 100644 src/nwfilter/virtnwfilterd.service.extra.in create mode 100644 src/nwfilter/virtnwfilterd.socket.extra.in create mode 100644 src/qemu/virtqemud.socket.extra.in create mode 100644 src/remote/libvirtd.service.extra.in create mode 100644 src/remote/libvirtd.socket.extra.in create mode 100644 src/remote/virtproxyd.service.extra.in create mode 100644 src/remote/virtproxyd.socket.extra.in create mode 100644 src/secret/virtsecretd.service.extra.in create mode 100644 src/secret/virtsecretd.socket.extra.in create mode 100644 src/storage/virtstoraged.socket.extra.in create mode 100644 src/vbox/virtvboxd.socket.extra.in create mode 100644 src/vz/virtvzd.socket.extra.in diff --git a/src/ch/meson.build b/src/ch/meson.build index 29e76b6938..335b10ffaf 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -64,6 +64,9 @@ if conf.has('WITH_CH') systemd_service_taskmax_extra_in, systemd_service_limitmemlock_extra_in, ], + 'socket_extra_in': [ + files('virtchd.socket.extra.in'), + ], } virt_install_dirs += [ diff --git a/src/ch/virtchd.service.extra.in b/src/ch/virtchd.service.extra.in index 3655c51130..8a3bc5b34d 100644 --- a/src/ch/virtchd.service.extra.in +++ b/src/ch/virtchd.service.extra.in @@ -1,3 +1,6 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] Wants=systemd-machined.service After=systemd-machined.service diff --git a/src/ch/virtchd.socket.extra.in b/src/ch/virtchd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/ch/virtchd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/interface/meson.build b/src/interface/meson.build index b1617d83e6..3d2991315e 100644 --- a/src/interface/meson.build +++ b/src/interface/meson.build @@ -45,6 +45,12 @@ if conf.has('WITH_INTERFACE') virt_daemon_units += { 'service': 'virtinterfaced', 'name': 'interface', + 'service_extra_in': [ + files('virtinterfaced.service.extra.in'), + ], + 'socket_extra_in': [ + files('virtinterfaced.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/interface/virtinterfaced.service.extra.in b/src/interface/virtinterfaced.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/interface/virtinterfaced.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/interface/virtinterfaced.socket.extra.in b/src/interface/virtinterfaced.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/interface/virtinterfaced.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/libxl/virtxend.service.extra.in b/src/libxl/virtxend.service.extra.in index 55783aa3d5..b367a1db4c 100644 --- a/src/libxl/virtxend.service.extra.in +++ b/src/libxl/virtxend.service.extra.in @@ -1,3 +1,6 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] Wants=virtlockd.socket After=virtlockd.socket diff --git a/src/libxl/virtxend.socket.extra.in b/src/libxl/virtxend.socket.extra.in index c8322efbbc..fc73809a0e 100644 --- a/src/libxl/virtxend.socket.extra.in +++ b/src/libxl/virtxend.socket.extra.in @@ -1,2 +1,5 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] ConditionPathExists=/proc/xen/capabilities diff --git a/src/locking/meson.build b/src/locking/meson.build index d15e2cb84a..71e628de04 100644 --- a/src/locking/meson.build +++ b/src/locking/meson.build @@ -145,6 +145,7 @@ if conf.has('WITH_LIBVIRTD') 'service': 'virtlockd', 'service_in': files('virtlockd.service.in'), 'service_extra_in': [ + files('virtlockd.service.extra.in'), systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], @@ -152,6 +153,9 @@ if conf.has('WITH_LIBVIRTD') 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlockd.socket.in'), 'socket_admin_in': files('virtlockd-admin.socket.in'), + 'socket_extra_in': [ + files('virtlockd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/locking/virtlockd.service.extra.in b/src/locking/virtlockd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/locking/virtlockd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/locking/virtlockd.socket.extra.in b/src/locking/virtlockd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/locking/virtlockd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/logging/meson.build b/src/logging/meson.build index fbf492b16e..f538a663fb 100644 --- a/src/logging/meson.build +++ b/src/logging/meson.build @@ -92,6 +92,7 @@ if conf.has('WITH_LIBVIRTD') 'service': 'virtlogd', 'service_in': files('virtlogd.service.in'), 'service_extra_in': [ + files('virtlogd.service.extra.in'), systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], @@ -99,6 +100,9 @@ if conf.has('WITH_LIBVIRTD') 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlogd.socket.in'), 'socket_admin_in': files('virtlogd-admin.socket.in'), + 'socket_extra_in': [ + files('virtlogd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/logging/virtlogd.service.extra.in b/src/logging/virtlogd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/logging/virtlogd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/logging/virtlogd.socket.extra.in b/src/logging/virtlogd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/logging/virtlogd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/lxc/meson.build b/src/lxc/meson.build index 044a38c918..666c6c1311 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -171,6 +171,9 @@ if conf.has('WITH_LXC') systemd_service_taskmax_extra_in, systemd_service_limitmemlock_extra_in, ], + 'socket_extra_in': [ + files('virtlxcd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/lxc/virtlxcd.service.extra.in b/src/lxc/virtlxcd.service.extra.in index 3655c51130..8a3bc5b34d 100644 --- a/src/lxc/virtlxcd.service.extra.in +++ b/src/lxc/virtlxcd.service.extra.in @@ -1,3 +1,6 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] Wants=systemd-machined.service After=systemd-machined.service diff --git a/src/lxc/virtlxcd.socket.extra.in b/src/lxc/virtlxcd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/lxc/virtlxcd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/network/meson.build b/src/network/meson.build index 3cf2ef3d3d..eb171ae779 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -66,6 +66,9 @@ if conf.has('WITH_NETWORK') 'service_extra_in': [ files('virtnetworkd.service.extra.in'), ], + 'socket_extra_in': [ + files('virtnetworkd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/network/virtnetworkd.service.extra.in b/src/network/virtnetworkd.service.extra.in index 9fcabf652d..546709b7f4 100644 --- a/src/network/virtnetworkd.service.extra.in +++ b/src/network/virtnetworkd.service.extra.in @@ -1,2 +1,5 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Service] KillMode=process diff --git a/src/network/virtnetworkd.socket.extra.in b/src/network/virtnetworkd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/network/virtnetworkd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/node_device/meson.build b/src/node_device/meson.build index d1e349bc5e..d66c02a0e2 100644 --- a/src/node_device/meson.build +++ b/src/node_device/meson.build @@ -53,6 +53,12 @@ if conf.has('WITH_NODE_DEVICES') virt_daemon_units += { 'service': 'virtnodedevd', 'name': 'nodedev', + 'service_extra_in': [ + files('virtnodedevd.service.extra.in'), + ], + 'socket_extra_in': [ + files('virtnodedevd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/node_device/virtnodedevd.service.extra.in b/src/node_device/virtnodedevd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/node_device/virtnodedevd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/node_device/virtnodedevd.socket.extra.in b/src/node_device/virtnodedevd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/node_device/virtnodedevd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/nwfilter/meson.build b/src/nwfilter/meson.build index 1b914f2360..de3d202267 100644 --- a/src/nwfilter/meson.build +++ b/src/nwfilter/meson.build @@ -51,6 +51,12 @@ if conf.has('WITH_NWFILTER') virt_daemon_units += { 'service': 'virtnwfilterd', 'name': 'nwfilter', + 'service_extra_in': [ + files('virtnwfilterd.service.extra.in'), + ], + 'socket_extra_in': [ + files('virtnwfilterd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/nwfilter/virtnwfilterd.service.extra.in b/src/nwfilter/virtnwfilterd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/nwfilter/virtnwfilterd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/nwfilter/virtnwfilterd.socket.extra.in b/src/nwfilter/virtnwfilterd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/nwfilter/virtnwfilterd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/qemu/meson.build b/src/qemu/meson.build index 167ed849ea..b73c8be0d1 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -190,6 +190,9 @@ if conf.has('WITH_QEMU') systemd_service_taskmax_extra_in, systemd_service_limitmemlock_extra_in, ], + 'socket_extra_in': [ + files('virtqemud.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/qemu/virtqemud.service.extra.in b/src/qemu/virtqemud.service.extra.in index 32aba8be9c..cc16b6a9bb 100644 --- a/src/qemu/virtqemud.service.extra.in +++ b/src/qemu/virtqemud.service.extra.in @@ -1,3 +1,6 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] Requires=virtlogd.socket Wants=virtlockd.socket diff --git a/src/qemu/virtqemud.socket.extra.in b/src/qemu/virtqemud.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/qemu/virtqemud.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/remote/libvirtd.service.extra.in b/src/remote/libvirtd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/remote/libvirtd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/remote/libvirtd.socket.extra.in b/src/remote/libvirtd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/remote/libvirtd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/remote/meson.build b/src/remote/meson.build index 8b81a813f2..49d19b3cbf 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -192,6 +192,7 @@ if conf.has('WITH_REMOTE') 'service': 'libvirtd', 'service_in': files('libvirtd.service.in'), 'service_extra_in': [ + files('libvirtd.service.extra.in'), systemd_service_limitnofile_extra_in, systemd_service_taskmax_extra_in, systemd_service_limitmemlock_extra_in, @@ -203,6 +204,9 @@ if conf.has('WITH_REMOTE') 'socket_admin_in': files('libvirtd-admin.socket.in'), 'socket_tcp_in': files('libvirtd-tcp.socket.in'), 'socket_tls_in': files('libvirtd-tls.socket.in'), + 'socket_extra_in': [ + files('libvirtd.socket.extra.in'), + ], } openrc_init_files += { @@ -229,8 +233,14 @@ if conf.has('WITH_REMOTE') virt_daemon_units += { 'service': 'virtproxyd', 'name': 'proxy', + 'service_extra_in': [ + files('virtproxyd.service.extra.in'), + ], 'sockprefix': 'libvirt', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], + 'socket_extra_in': [ + files('virtproxyd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/remote/virtproxyd.service.extra.in b/src/remote/virtproxyd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/remote/virtproxyd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/remote/virtproxyd.socket.extra.in b/src/remote/virtproxyd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/remote/virtproxyd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/secret/meson.build b/src/secret/meson.build index 791ce1a024..3b859ea7b4 100644 --- a/src/secret/meson.build +++ b/src/secret/meson.build @@ -34,6 +34,12 @@ if conf.has('WITH_SECRETS') virt_daemon_units += { 'service': 'virtsecretd', 'name': 'secret', + 'service_extra_in': [ + files('virtsecretd.service.extra.in'), + ], + 'socket_extra_in': [ + files('virtsecretd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/secret/virtsecretd.service.extra.in b/src/secret/virtsecretd.service.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/secret/virtsecretd.service.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/secret/virtsecretd.socket.extra.in b/src/secret/virtsecretd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/secret/virtsecretd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/storage/meson.build b/src/storage/meson.build index daad8abf25..404d6a6941 100644 --- a/src/storage/meson.build +++ b/src/storage/meson.build @@ -115,6 +115,9 @@ if conf.has('WITH_STORAGE') 'service_extra_in': [ files('virtstoraged.service.extra.in'), ], + 'socket_extra_in': [ + files('virtstoraged.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/storage/virtstoraged.service.extra.in b/src/storage/virtstoraged.service.extra.in index d134ae18da..49fa4933e9 100644 --- a/src/storage/virtstoraged.service.extra.in +++ b/src/storage/virtstoraged.service.extra.in @@ -1,3 +1,6 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] After=iscsid.service After=remote-fs.target diff --git a/src/storage/virtstoraged.socket.extra.in b/src/storage/virtstoraged.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/storage/virtstoraged.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/vbox/meson.build b/src/vbox/meson.build index e05f532e35..a162865356 100644 --- a/src/vbox/meson.build +++ b/src/vbox/meson.build @@ -61,6 +61,9 @@ if conf.has('WITH_VBOX') 'service_extra_in': [ files('virtvboxd.service.extra.in'), ], + 'socket_extra_in': [ + files('virtvboxd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/vbox/virtvboxd.service.extra.in b/src/vbox/virtvboxd.service.extra.in index ba3ad13ace..5367f7516c 100644 --- a/src/vbox/virtvboxd.service.extra.in +++ b/src/vbox/virtvboxd.service.extra.in @@ -1,2 +1,5 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] After=remote-fs.target diff --git a/src/vbox/virtvboxd.socket.extra.in b/src/vbox/virtvboxd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/vbox/virtvboxd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. diff --git a/src/vz/meson.build b/src/vz/meson.build index bc5b5fb623..25d2b620d1 100644 --- a/src/vz/meson.build +++ b/src/vz/meson.build @@ -52,6 +52,9 @@ if conf.has('WITH_VZ') 'service_extra_in': [ files('virtvzd.service.extra.in'), ], + 'socket_extra_in': [ + files('virtvzd.socket.extra.in'), + ], } openrc_init_files += { diff --git a/src/vz/virtvzd.service.extra.in b/src/vz/virtvzd.service.extra.in index ba3ad13ace..5367f7516c 100644 --- a/src/vz/virtvzd.service.extra.in +++ b/src/vz/virtvzd.service.extra.in @@ -1,2 +1,5 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. + [Unit] After=remote-fs.target diff --git a/src/vz/virtvzd.socket.extra.in b/src/vz/virtvzd.socket.extra.in new file mode 100644 index 0000000000..1fc8c672f7 --- /dev/null +++ b/src/vz/virtvzd.socket.extra.in @@ -0,0 +1,2 @@ +# The contents of this unit will be merged into a base template. +# Additional units might be merged as well. See meson.build for details. -- 2.41.0

We want at least one file to always be present, so that it can serve as a pointer for users. Ensure that this is the case by unconditionally using the value of the respective keys. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/meson.build | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/meson.build b/src/meson.build index 29c37a030a..0104e51571 100644 --- a/src/meson.build +++ b/src/meson.build @@ -207,8 +207,8 @@ systemd_service_oomscoreadjust_extra_in = files('virtd.service.oomscoreadjust.ex # * sockets - array of additional sockets (optional, default [ 'main', 'ro', 'admin' ]) # * service_in - service source file (optional, default virtd.service.in) # * socket_$name_in - additional socket source files (optional, default virtd.socket.in or virtd-$name.socket.in) -# * service_extra_in - units to merge with service_in (optional, default []) -# * socket_extra_in - units to merge with socket_$name_in (optional, default []) +# * service_extra_in - units to merge with service_in (required) +# * socket_extra_in - units to merge with socket_$name_in (required) virt_daemon_units = [] # openrc_init_files @@ -830,14 +830,12 @@ if conf.has('WITH_LIBVIRTD') service_in = unit.get('service_in', service_in_default) service_out = '@0@.service'.format(unit['service']) - if 'service_extra_in' in unit - service_in = configure_file( - input: [ service_in ] + unit['service_extra_in'], - output: '@0@.in'.format(service_out), - command: [ merge_systemd_units_prog, '@INPUT@' ], - capture: true, - ) - endif + service_in = configure_file( + input: [ service_in ] + unit['service_extra_in'], + output: '@0@.in'.format(service_out), + command: [ merge_systemd_units_prog, '@INPUT@' ], + capture: true, + ) configure_file( input: service_in, @@ -858,14 +856,12 @@ if conf.has('WITH_LIBVIRTD') socket_out = '@0@-@1@.socket'.format(unit['service'], socket) endif - if 'socket_extra_in' in unit - socket_in = configure_file( - input: [ socket_in ] + unit['socket_extra_in'], - output: '@0@.in'.format(socket_out), - command: [ merge_systemd_units_prog, '@INPUT@' ], - capture: true, - ) - endif + socket_in = configure_file( + input: [ socket_in ] + unit['socket_extra_in'], + output: '@0@.in'.format(socket_out), + command: [ merge_systemd_units_prog, '@INPUT@' ], + capture: true, + ) configure_file( input: socket_in, -- 2.41.0

Use a consistent style everywhere. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/locking/meson.build | 2 +- src/logging/meson.build | 2 +- src/remote/meson.build | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locking/meson.build b/src/locking/meson.build index 71e628de04..ff1578cfcb 100644 --- a/src/locking/meson.build +++ b/src/locking/meson.build @@ -143,13 +143,13 @@ if conf.has('WITH_LIBVIRTD') virt_daemon_units += { 'service': 'virtlockd', + 'name': 'locking', 'service_in': files('virtlockd.service.in'), 'service_extra_in': [ files('virtlockd.service.extra.in'), systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], - 'name': 'locking', 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlockd.socket.in'), 'socket_admin_in': files('virtlockd-admin.socket.in'), diff --git a/src/logging/meson.build b/src/logging/meson.build index f538a663fb..4d98113ac7 100644 --- a/src/logging/meson.build +++ b/src/logging/meson.build @@ -90,13 +90,13 @@ if conf.has('WITH_LIBVIRTD') virt_daemon_units += { 'service': 'virtlogd', + 'name': 'logging', 'service_in': files('virtlogd.service.in'), 'service_extra_in': [ files('virtlogd.service.extra.in'), systemd_service_oomscoreadjust_extra_in, systemd_service_limitnofile_extra_in, ], - 'name': 'logging', 'sockets': [ 'main', 'admin' ], 'socket_in': files('virtlogd.socket.in'), 'socket_admin_in': files('virtlogd-admin.socket.in'), diff --git a/src/remote/meson.build b/src/remote/meson.build index 49d19b3cbf..fba7e34c88 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -190,6 +190,7 @@ if conf.has('WITH_REMOTE') virt_daemon_units += { 'service': 'libvirtd', + 'name': 'legacy monolithic', 'service_in': files('libvirtd.service.in'), 'service_extra_in': [ files('libvirtd.service.extra.in'), @@ -197,7 +198,6 @@ if conf.has('WITH_REMOTE') systemd_service_taskmax_extra_in, systemd_service_limitmemlock_extra_in, ], - 'name': 'legacy monolithic', 'sockets': [ 'main', 'ro', 'admin', 'tcp', 'tls' ], 'socket_in': files('libvirtd.socket.in'), 'socket_ro_in': files('libvirtd-ro.socket.in'), -- 2.41.0

On Mon, Oct 02, 2023 at 10:51:15AM +0200, Andrea Bolognani wrote:
This series addresses two pieces of feedback from my recent systemd changes: that some settings, such as LimitNOFILE, where still being repeated verbatim in multiple locations, and that only having the foo.{service,socket}.extra.in files for some services and not others could be confusing.
Andrea Bolognani (11): systemd: libvirtd doesn't need @sockprefix@ systemd: Support merging multiple units systemd: Accept multiple files for service_extra_in/socket_extra_in systemd: Introduce systemd_service_limitnofile_extra systemd: Introduce systemd_service_taskmax_extra systemd: Introduce systemd_service_limitmemlock_extra systemd: Introduce systemd_service_oomscoreadjust_extra systemd: Allow comments at the top of units systemd: Set service_extra_in/socket_extra_in everywhere systemd: Make service_extra_in/socket_extra_in required systemd: Tweak service definitions
Ping It still applies cleanly. I've noticed that I've called one of the new meson variables systemd_service_taskmax_extra instead of systemd_service_tasksmax_extra The latter is consistent with the name of the corresponding file (src/virtd.service.tasksmax.extra.in) and the systemd knob it changes (TasksMax=). I've changed it locally, but it doesn't seem worthwhile to post a v2 just because of that. -- Andrea Bolognani / Red Hat / Virtualization

On 10/2/23 10:51, Andrea Bolognani wrote:
This series addresses two pieces of feedback from my recent systemd changes: that some settings, such as LimitNOFILE, where still being repeated verbatim in multiple locations, and that only having the foo.{service,socket}.extra.in files for some services and not others could be confusing.
Andrea Bolognani (11): systemd: libvirtd doesn't need @sockprefix@ systemd: Support merging multiple units systemd: Accept multiple files for service_extra_in/socket_extra_in systemd: Introduce systemd_service_limitnofile_extra systemd: Introduce systemd_service_taskmax_extra systemd: Introduce systemd_service_limitmemlock_extra systemd: Introduce systemd_service_oomscoreadjust_extra systemd: Allow comments at the top of units systemd: Set service_extra_in/socket_extra_in everywhere systemd: Make service_extra_in/socket_extra_in required systemd: Tweak service definitions
56 files changed, 248 insertions(+), 112 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Andrea Bolognani
-
Michal Prívozník