mirror of
https://github.com/systemd/systemd
synced 2024-09-30 05:15:19 +00:00
nspawn: set CoredumpReceive=yes on container's scope when --boot is set
When --boot is set, and --keep-unit is not, set CoredumpReceive=yes on the scope allocated for the container. When --keep-unit is set, nspawn does not allocate the container's unit, so the existing unit needs to configure this setting itself. Since systemd-nspawn@.service sets --boot and --keep-unit, add CoredumpReceives=yes to that unit.
This commit is contained in:
parent
cfc015f09e
commit
411d8c72ec
|
@ -8,6 +8,7 @@
|
|||
#include "bus-util.h"
|
||||
#include "bus-wait-for-jobs.h"
|
||||
#include "nspawn-register.h"
|
||||
#include "nspawn-settings.h"
|
||||
#include "special.h"
|
||||
#include "stat-util.h"
|
||||
#include "strv.h"
|
||||
|
@ -16,7 +17,8 @@ static int append_machine_properties(
|
|||
sd_bus_message *m,
|
||||
CustomMount *mounts,
|
||||
unsigned n_mounts,
|
||||
int kill_signal) {
|
||||
int kill_signal,
|
||||
bool coredump_receive) {
|
||||
|
||||
unsigned j;
|
||||
int r;
|
||||
|
@ -79,6 +81,12 @@ static int append_machine_properties(
|
|||
return bus_log_create_error(r);
|
||||
}
|
||||
|
||||
if (coredump_receive) {
|
||||
r = sd_bus_message_append(m, "(sv)", "CoredumpReceive", "b", true);
|
||||
if (r < 0)
|
||||
return bus_log_create_error(r);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -114,7 +122,8 @@ int register_machine(
|
|||
char **properties,
|
||||
sd_bus_message *properties_message,
|
||||
bool keep_unit,
|
||||
const char *service) {
|
||||
const char *service,
|
||||
StartMode start_mode) {
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
@ -174,7 +183,8 @@ int register_machine(
|
|||
m,
|
||||
mounts,
|
||||
n_mounts,
|
||||
kill_signal);
|
||||
kill_signal,
|
||||
start_mode == START_BOOT);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -226,7 +236,8 @@ int allocate_scope(
|
|||
int kill_signal,
|
||||
char **properties,
|
||||
sd_bus_message *properties_message,
|
||||
bool allow_pidfd) {
|
||||
bool allow_pidfd,
|
||||
StartMode start_mode) {
|
||||
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
|
@ -295,7 +306,8 @@ int allocate_scope(
|
|||
m,
|
||||
mounts,
|
||||
n_mounts,
|
||||
kill_signal);
|
||||
kill_signal,
|
||||
start_mode == START_BOOT);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -321,7 +333,7 @@ int allocate_scope(
|
|||
* doesn't support PIDFDs yet, let's try without. */
|
||||
if (allow_pidfd &&
|
||||
sd_bus_error_has_names(&error, SD_BUS_ERROR_UNKNOWN_PROPERTY, SD_BUS_ERROR_PROPERTY_READ_ONLY))
|
||||
return allocate_scope(bus, machine_name, pid, slice, mounts, n_mounts, kill_signal, properties, properties_message, /* allow_pidfd= */ false);
|
||||
return allocate_scope(bus, machine_name, pid, slice, mounts, n_mounts, kill_signal, properties, properties_message, /* allow_pidfd= */ false, start_mode);
|
||||
|
||||
return log_error_errno(r, "Failed to allocate scope: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
|
|
@ -6,9 +6,10 @@
|
|||
#include "sd-id128.h"
|
||||
|
||||
#include "nspawn-mount.h"
|
||||
#include "nspawn-settings.h"
|
||||
|
||||
int register_machine(sd_bus *bus, const char *machine_name, pid_t pid, const char *directory, sd_id128_t uuid, int local_ifindex, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, sd_bus_message *properties_message, bool keep_unit, const char *service);
|
||||
int register_machine(sd_bus *bus, const char *machine_name, pid_t pid, const char *directory, sd_id128_t uuid, int local_ifindex, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, sd_bus_message *properties_message, bool keep_unit, const char *service, StartMode start_mode);
|
||||
int unregister_machine(sd_bus *bus, const char *machine_name);
|
||||
|
||||
int allocate_scope(sd_bus *bus, const char *machine_name, pid_t pid, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, sd_bus_message *properties_message, bool allow_pidfds);
|
||||
int allocate_scope(sd_bus *bus, const char *machine_name, pid_t pid, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, sd_bus_message *properties_message, bool allow_pidfds, StartMode start_mode);
|
||||
int terminate_scope(sd_bus *bus, const char *machine_name);
|
||||
|
|
|
@ -5061,7 +5061,8 @@ static int run_container(
|
|||
arg_property,
|
||||
arg_property_message,
|
||||
arg_keep_unit,
|
||||
arg_container_service_name);
|
||||
arg_container_service_name,
|
||||
arg_start_mode);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -5075,7 +5076,8 @@ static int run_container(
|
|||
arg_kill_signal,
|
||||
arg_property,
|
||||
arg_property_message,
|
||||
/* allow_pidfds= */ true);
|
||||
/* allow_pidfds= */ true,
|
||||
arg_start_mode);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ SuccessExitStatus=133
|
|||
Slice=machine.slice
|
||||
Delegate=yes
|
||||
DelegateSubgroup=supervisor
|
||||
CoredumpReceive=yes
|
||||
TasksMax=16384
|
||||
{{SERVICE_WATCHDOG}}
|
||||
|
||||
|
|
Loading…
Reference in a new issue