mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-22 22:03:43 +03:00
Merge pull request #1817 from iaguis/nspawn-custom-service-3
nspawn: support custom container service name
This commit is contained in:
commit
f094cb287e
@ -163,6 +163,11 @@
|
||||
<entry><varname>docker</varname></entry>
|
||||
<entry>Docker container manager</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><varname>rkt</varname></entry>
|
||||
<entry>rkt app container runtime</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -854,7 +854,8 @@
|
||||
<varname>lxc</varname>,
|
||||
<varname>lxc-libvirt</varname>,
|
||||
<varname>systemd-nspawn</varname>,
|
||||
<varname>docker</varname> to test
|
||||
<varname>docker</varname>,
|
||||
<varname>rkt</varname> to test
|
||||
against a specific implementation. See
|
||||
<citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
for a full list of known virtualization technologies and their
|
||||
|
@ -329,6 +329,7 @@ int detect_container(void) {
|
||||
{ "lxc-libvirt", VIRTUALIZATION_LXC_LIBVIRT },
|
||||
{ "systemd-nspawn", VIRTUALIZATION_SYSTEMD_NSPAWN },
|
||||
{ "docker", VIRTUALIZATION_DOCKER },
|
||||
{ "rkt", VIRTUALIZATION_RKT },
|
||||
};
|
||||
|
||||
static thread_local int cached_found = _VIRTUALIZATION_INVALID;
|
||||
@ -445,6 +446,7 @@ static const char *const virtualization_table[_VIRTUALIZATION_MAX] = {
|
||||
[VIRTUALIZATION_LXC] = "lxc",
|
||||
[VIRTUALIZATION_OPENVZ] = "openvz",
|
||||
[VIRTUALIZATION_DOCKER] = "docker",
|
||||
[VIRTUALIZATION_RKT] = "rkt",
|
||||
[VIRTUALIZATION_CONTAINER_OTHER] = "container-other",
|
||||
};
|
||||
|
||||
|
@ -48,6 +48,7 @@ enum {
|
||||
VIRTUALIZATION_LXC,
|
||||
VIRTUALIZATION_OPENVZ,
|
||||
VIRTUALIZATION_DOCKER,
|
||||
VIRTUALIZATION_RKT,
|
||||
VIRTUALIZATION_CONTAINER_OTHER,
|
||||
VIRTUALIZATION_CONTAINER_LAST = VIRTUALIZATION_CONTAINER_OTHER,
|
||||
|
||||
|
@ -39,7 +39,8 @@ int register_machine(
|
||||
unsigned n_mounts,
|
||||
int kill_signal,
|
||||
char **properties,
|
||||
bool keep_unit) {
|
||||
bool keep_unit,
|
||||
const char *service) {
|
||||
|
||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_bus_flush_close_unref_ sd_bus *bus = NULL;
|
||||
@ -61,7 +62,7 @@ int register_machine(
|
||||
"sayssusai",
|
||||
machine_name,
|
||||
SD_BUS_MESSAGE_APPEND_ID128(uuid),
|
||||
"nspawn",
|
||||
service,
|
||||
"container",
|
||||
(uint32_t) pid,
|
||||
strempty(directory),
|
||||
@ -86,7 +87,7 @@ int register_machine(
|
||||
"sayssusai",
|
||||
machine_name,
|
||||
SD_BUS_MESSAGE_APPEND_ID128(uuid),
|
||||
"nspawn",
|
||||
service,
|
||||
"container",
|
||||
(uint32_t) pid,
|
||||
strempty(directory),
|
||||
|
@ -27,5 +27,5 @@
|
||||
|
||||
#include "nspawn-mount.h"
|
||||
|
||||
int register_machine(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, bool keep_unit);
|
||||
int register_machine(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, bool keep_unit, const char *service);
|
||||
int terminate_machine(pid_t pid);
|
||||
|
@ -178,6 +178,7 @@ static bool arg_unified_cgroup_hierarchy = false;
|
||||
static SettingsMask arg_settings_mask = 0;
|
||||
static int arg_settings_trusted = -1;
|
||||
static char **arg_parameters = NULL;
|
||||
static const char *arg_container_service_name = "systemd-nspawn";
|
||||
|
||||
static void help(void) {
|
||||
printf("%s [OPTIONS...] [PATH] [ARGUMENTS...]\n\n"
|
||||
@ -387,7 +388,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
};
|
||||
|
||||
int c, r;
|
||||
const char *p;
|
||||
const char *p, *e;
|
||||
uint64_t plus = 0, minus = 0;
|
||||
bool mask_all_settings = false, mask_no_settings = false;
|
||||
|
||||
@ -909,6 +910,10 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
e = getenv("SYSTEMD_NSPAWN_CONTAINER_SERVICE");
|
||||
if (e)
|
||||
arg_container_service_name = e;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -2404,10 +2409,10 @@ static int inner_child(
|
||||
FDSet *fds) {
|
||||
|
||||
_cleanup_free_ char *home = NULL;
|
||||
unsigned n_env = 2;
|
||||
unsigned n_env = 1;
|
||||
const char *envp[] = {
|
||||
"PATH=" DEFAULT_PATH_SPLIT_USR,
|
||||
"container=systemd-nspawn", /* LXC sets container=lxc, so follow the scheme here */
|
||||
NULL, /* container */
|
||||
NULL, /* TERM */
|
||||
NULL, /* HOME */
|
||||
NULL, /* USER */
|
||||
@ -2508,6 +2513,9 @@ static int inner_child(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* LXC sets container=lxc, so follow the scheme here */
|
||||
envp[n_env++] = strjoina("container=", arg_container_service_name);
|
||||
|
||||
envp[n_env] = strv_find_prefix(environ, "TERM=");
|
||||
if (envp[n_env])
|
||||
n_env ++;
|
||||
@ -3426,7 +3434,8 @@ int main(int argc, char *argv[]) {
|
||||
arg_custom_mounts, arg_n_custom_mounts,
|
||||
arg_kill_signal,
|
||||
arg_property,
|
||||
arg_keep_unit);
|
||||
arg_keep_unit,
|
||||
arg_container_service_name);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user