#include <sys/socket.h>
#include <linux/netlink.h>
#include <sys/eventfd.h>
-#if HAVE_SELINUX
+#ifdef HAVE_SELINUX
#include <selinux/selinux.h>
#endif
static sd_id128_t arg_uuid = {};
static char *arg_machine = NULL;
static char *arg_process_label = NULL;
-static char *arg_file_label = NULL;
+static char *arg_apifs_label = NULL;
static const char *arg_slice = NULL;
static bool arg_private_network = false;
static bool arg_read_only = false;
static char **arg_bind = NULL;
static char **arg_bind_ro = NULL;
static char **arg_setenv = NULL;
+static bool arg_quiet = false;
static int help(void) {
" --uuid=UUID Set a specific machine UUID for the container\n"
" -M --machine=NAME Set the machine name for the container\n"
" -S --slice=SLICE Place the container in the specified slice\n"
- " -L --file-label=LABEL Set the MAC file label to be used by tmpfs file\n"
+ " -L --apifs-label=LABEL Set the MAC file label to be used by API/tmpfs file\n"
" systems in the container\n"
" -Z --process-label=LABEL Set the MAC label to be used by processes in\n"
" the container\n"
" --bind=PATH[:PATH] Bind mount a file or directory from the host into\n"
" the container\n"
" --bind-ro=PATH[:PATH] Similar, but creates a read-only bind mount\n"
- " --setenv=NAME=VALUE Pass an environment variable to PID 1\n",
+ " --setenv=NAME=VALUE Pass an environment variable to PID 1\n"
+ " -q --quiet Do not show status information\n",
program_invocation_short_name);
return 0;
{ "slice", required_argument, NULL, 'S' },
{ "setenv", required_argument, NULL, ARG_SETENV },
{ "process-label", required_argument, NULL, 'Z' },
- { "file-label", required_argument, NULL, 'L' },
+ { "apifs-label", required_argument, NULL, 'L' },
+ { "quiet", no_argument, NULL, 'q' },
{}
};
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "+hD:u:bL:M:jS:Z:", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "+hD:u:bL:M:jS:Z:q", options, NULL)) >= 0) {
switch (c) {
break;
case 'L':
- arg_file_label = optarg;
+ arg_apifs_label = optarg;
break;
case 'Z':
break;
}
+ case 'q':
+ arg_quiet = true;
+ break;
+
case '?':
return -EINVAL;
mkdir_p(where, 0755);
#ifdef HAVE_SELINUX
- if (arg_file_label && (streq_ptr(mount_table[k].what, "tmpfs") || streq_ptr(mount_table[k].what, "devpts"))) {
- options = strjoin(mount_table[k].options, ",context=\"", arg_file_label, "\"", NULL);
+ if (arg_apifs_label && (streq_ptr(mount_table[k].what, "tmpfs") || streq_ptr(mount_table[k].what, "devpts"))) {
+ options = strjoin(mount_table[k].options, ",context=\"", arg_apifs_label, "\"", NULL);
if (!options)
return log_oom();
_cleanup_bus_unref_ sd_bus *bus = NULL;
int r;
- r = sd_bus_open_system(&bus);
+ r = sd_bus_default_system(&bus);
if (r < 0) {
log_error("Failed to open system bus: %s", strerror(-r));
return r;
goto finish;
}
- log_info("Spawning container %s on %s. Press ^] three times within 1s to abort execution.", arg_machine, arg_directory);
+ if (!arg_quiet)
+ log_info("Spawning container %s on %s. Press ^] three times within 1s to abort execution.", arg_machine, arg_directory);
if (unlockpt(master) < 0) {
log_error("Failed to unlock tty: %m");
} else
env_use = (char**) envp;
-#if HAVE_SELINUX
+#ifdef HAVE_SELINUX
if (arg_process_label)
if (setexeccon(arg_process_label) < 0)
log_error("setexeccon(\"%s\") failed: %m", arg_process_label);
break;
}
- putc('\n', stdout);
+ if (!arg_quiet)
+ putc('\n', stdout);
/* Kill if it is not dead yet anyway */
terminate_machine(pid);
break;
}
- log_debug("Container %s exited successfully.", arg_machine);
+ if (!arg_quiet)
+ log_debug("Container %s exited successfully.", arg_machine);
break;
} else if (status.si_code == CLD_KILLED &&
status.si_status == SIGINT) {
- log_info("Container %s has been shut down.", arg_machine);
+
+ if (!arg_quiet)
+ log_info("Container %s has been shut down.", arg_machine);
r = 0;
break;
} else if (status.si_code == CLD_KILLED &&
status.si_status == SIGHUP) {
- log_info("Container %s is being rebooted.", arg_machine);
+
+ if (!arg_quiet)
+ log_info("Container %s is being rebooted.", arg_machine);
continue;
} else if (status.si_code == CLD_KILLED ||
status.si_code == CLD_DUMPED) {