static bool arg_read_only = false;
static bool arg_boot = false;
static LinkJournal arg_link_journal = LINK_AUTO;
+static bool arg_link_journal_try = false;
static uint64_t arg_retain =
(1ULL << CAP_CHOWN) |
(1ULL << CAP_DAC_OVERRIDE) |
" --capability=CAP In addition to the default, retain specified\n"
" capability\n"
" --drop-capability=CAP Drop the specified capability from the default set\n"
- " --link-journal=MODE Link up guest journal, one of no, auto, guest, host\n"
- " -j Equivalent to --link-journal=host\n"
+ " --link-journal=MODE Link up guest journal, one of no, auto, guest, host,\n"
+ " try-guest, try-host\n"
+ " -j Equivalent to --link-journal=try-guest\n"
" --read-only Mount the root directory read-only\n"
" --bind=PATH[:PATH] Bind mount a file or directory from the host into\n"
" the container\n"
case 'j':
arg_link_journal = LINK_GUEST;
+ arg_link_journal_try = true;
break;
case ARG_LINK_JOURNAL:
arg_link_journal = LINK_GUEST;
else if (streq(optarg, "host"))
arg_link_journal = LINK_HOST;
- else {
+ else if (streq(optarg, "try-guest")) {
+ arg_link_journal = LINK_GUEST;
+ arg_link_journal_try = true;
+ } else if (streq(optarg, "try-host")) {
+ arg_link_journal = LINK_HOST;
+ arg_link_journal_try = true;
+ } else {
log_error("Failed to parse link journal mode %s", optarg);
return -EINVAL;
}
t = path_is_mount_point(where, true);
if (t < 0) {
- log_error("Failed to detect whether %s is a mount point: %s", where, strerror(-t));
+ log_error_errno(-t, "Failed to detect whether %s is a mount point: %m", where);
if (r == 0)
r = t;
t = mkdir_p(where, 0755);
if (t < 0) {
if (mount_table[k].fatal) {
- log_error("Failed to create directory %s: %s", where, strerror(-t));
+ log_error_errno(-t, "Failed to create directory %s: %m", where);
if (r == 0)
r = t;
} else
- log_warning("Failed to create directory %s: %s", where, strerror(-t));
+ log_warning_errno(-t, "Failed to create directory %s: %m", where);
continue;
}
} else if (errno == ENOENT) {
r = mkdir_parents_label(where, 0755);
if (r < 0) {
- log_error("Failed to bind mount %s: %s", *x, strerror(-r));
+ log_error_errno(-r, "Failed to bind mount %s: %m", *x);
return r;
}
} else {
if (S_ISDIR(source_st.st_mode)) {
r = mkdir_label(where, 0755);
if (r < 0 && errno != EEXIST) {
- log_error("Failed to create mount point %s: %s", where, strerror(-r));
+ log_error_errno(-r, "Failed to create mount point %s: %m", where);
return r;
}
} else if (S_ISREG(source_st.st_mode)) {
r = touch(where);
if (r < 0) {
- log_error("Failed to create mount point %s: %s", where, strerror(-r));
+ log_error_errno(-r, "Failed to create mount point %s: %m", where);
return r;
}
if (ro) {
r = bind_remount_recursive(where, true);
if (r < 0) {
- log_error("Read-Only bind mount failed: %s", strerror(-r));
+ log_error_errno(-r, "Read-Only bind mount failed: %m");
return r;
}
}
return log_oom();
r = mkdir_label(where, 0755);
- if (r < 0) {
- log_error("creating mount point for tmpfs %s failed: %s", where, strerror(-r));
+ if (r < 0 && errno != EEXIST) {
+ log_error_errno(-r, "creating mount point for tmpfs %s failed: %m", where);
return r;
}
r = mkdir_parents(where, 0755);
if (r < 0) {
- log_error("Failed to create directory for timezone info %s in container: %s", where, strerror(-r));
+ log_error_errno(-r, "Failed to create directory for timezone info %s in container: %m", where);
return 0;
}
* fails, it fails, but meh... */
r = mkdir_parents(where, 0755);
if (r < 0) {
- log_warning("Failed to create parent directory for resolv.conf %s: %s", where, strerror(-r));
+ log_warning_errno(-r, "Failed to create parent directory for resolv.conf %s: %m", where);
return 0;
}
r = copy_file("/etc/resolv.conf", where, O_TRUNC|O_NOFOLLOW, 0644);
if (r < 0) {
- log_warning("Failed to copy /etc/resolv.conf to %s: %s", where, strerror(-r));
+ log_warning_errno(-r, "Failed to copy /etc/resolv.conf to %s: %m", where);
return 0;
}
r = bind_remount_recursive(directory, true);
if (r < 0) {
- log_error("Failed to remount %s read-only: %s", directory, strerror(-r));
+ log_error_errno(-r, "Failed to remount %s read-only: %m", directory);
return r;
}
r = bind_remount_recursive(t, true);
if (r < 0) {
- log_error("Failed to remount %s read-only: %s", t, strerror(-r));
+ log_error_errno(-r, "Failed to remount %s read-only: %m", t);
goto fail;
}
r = sd_id128_randomize(&rnd);
if (r < 0) {
- log_error("Failed to generate random boot id: %s", strerror(-r));
+ log_error_errno(-r, "Failed to generate random boot id: %m");
return r;
}
r = write_string_file(from, as_uuid);
if (r < 0) {
- log_error("Failed to write boot id: %s", strerror(-r));
+ log_error_errno(-r, "Failed to write boot id: %m");
return r;
}
} else {
r = mkdir_parents(to, 0775);
if (r < 0) {
- log_error("Failed to create parent directory of %s: %s", to, strerror(-r));
+ log_error_errno(-r, "Failed to create parent directory of %s: %m", to);
return -r;
}
r = chmod_and_chown(console, 0600, 0, 0);
if (r < 0) {
- log_error("Failed to correct access mode for TTY: %s", strerror(-r));
+ log_error_errno(-r, "Failed to correct access mode for TTY: %m");
return r;
}
r = chmod_and_chown(from, 0600, 0, 0);
if (r < 0) {
- log_error("Failed to correct access mode for /dev/kmsg: %s", strerror(-r));
+ log_error_errno(-r, "Failed to correct access mode for /dev/kmsg: %m");
return r;
}
if (r == -ENOENT && arg_link_journal == LINK_AUTO)
return 0;
else if (r < 0) {
- log_error("Failed to read machine ID from %s: %s", p, strerror(-r));
+ log_error_errno(-r, "Failed to read machine ID from %s: %m", p);
return r;
}
/* Verify validity */
r = sd_id128_from_string(id, &machine_id);
if (r < 0) {
- log_error("Failed to parse machine ID from %s: %s", p, strerror(-r));
+ log_error_errno(-r, "Failed to parse machine ID from %s: %m", p);
return r;
}
r = sd_id128_get_machine(&this_id);
if (r < 0) {
- log_error("Failed to retrieve machine ID: %s", strerror(-r));
+ log_error_errno(-r, "Failed to retrieve machine ID: %m");
return r;
}
if (arg_link_journal == LINK_GUEST) {
if (symlink(q, p) < 0) {
- log_error("Failed to symlink %s to %s: %m", q, p);
- return -errno;
+ if (arg_link_journal_try) {
+ log_debug("Failed to symlink %s to %s, skipping journal setup: %m", q, p);
+ return 0;
+ } else {
+ log_error("Failed to symlink %s to %s: %m", q, p);
+ return -errno;
+ }
}
r = mkdir_p(q, 0755);
}
if (arg_link_journal == LINK_HOST) {
- r = mkdir_p(p, 0755);
+ /* don't create parents here -- if the host doesn't have
+ * permanent journal set up, don't force it here */
+ r = mkdir(p, 0755);
if (r < 0) {
- log_error("Failed to create %s: %m", p);
- return r;
+ if (arg_link_journal_try) {
+ log_debug("Failed to create %s, skipping journal setup: %m", p);
+ return 0;
+ } else {
+ log_error("Failed to create %s: %m", p);
+ return r;
+ }
}
} else if (access(p, F_OK) < 0)
return 0;
}
-static int setup_kdbus(const char *dest, const char *path) {
- const char *p;
-
- if (!path)
- return 0;
-
- p = strappenda(dest, "/dev/kdbus");
- if (mkdir(p, 0755) < 0) {
- log_error("Failed to create kdbus path: %m");
- return -errno;
- }
-
- if (mount(path, p, "bind", MS_BIND, NULL) < 0) {
- log_error("Failed to mount kdbus domain path: %m");
- return -errno;
- }
-
- return 0;
-}
-
static int drop_capabilities(void) {
return capability_bounding_set_drop(~arg_retain, false);
}
r = sd_bus_default_system(&bus);
if (r < 0) {
- log_error("Failed to open system bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open system bus: %m");
return r;
}
"org.freedesktop.machine1.Manager",
"CreateMachineWithNetwork");
if (r < 0) {
- log_error("Failed to create message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to create message: %m");
return r;
}
strempty(arg_directory),
local_ifindex > 0 ? 1 : 0, local_ifindex);
if (r < 0) {
- log_error("Failed to append message arguments: %s", strerror(-r));
+ log_error_errno(-r, "Failed to append message arguments: %m");
return r;
}
r = sd_bus_message_open_container(m, 'a', "(sv)");
if (r < 0) {
- log_error("Failed to open container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open container: %m");
return r;
}
if (!isempty(arg_slice)) {
r = sd_bus_message_append(m, "(sv)", "Slice", "s", arg_slice);
if (r < 0) {
- log_error("Failed to append slice: %s", strerror(-r));
+ log_error_errno(-r, "Failed to append slice: %m");
return r;
}
}
r = sd_bus_message_append(m, "(sv)", "DevicePolicy", "s", "strict");
if (r < 0) {
- log_error("Failed to add device policy: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add device policy: %m");
return r;
}
- r = sd_bus_message_append(m, "(sv)", "DeviceAllow", "a(ss)", 11,
+ r = sd_bus_message_append(m, "(sv)", "DeviceAllow", "a(ss)", 9,
/* Allow the container to
* access and create the API
* device nodes, so that
* container to ever create
* these device nodes. */
"/dev/pts/ptmx", "rw",
- "char-pts", "rw",
- /* Allow the container
- * access to all kdbus
- * devices. Again, the
- * container cannot create
- * these nodes, only use
- * them. We use a pretty
- * open match here, so that
- * the kernel API can still
- * change. */
- "char-kdbus", "rw",
- "char-kdbus/*", "rw");
+ "char-pts", "rw");
if (r < 0) {
- log_error("Failed to add device whitelist: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add device whitelist: %m");
return r;
}
r = sd_bus_message_close_container(m);
if (r < 0) {
- log_error("Failed to close container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close container: %m");
return r;
}
r = sd_bus_default_system(&bus);
if (r < 0) {
- log_error("Failed to open system bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open system bus: %m");
return r;
}
if (r == -ENOENT)
return 0;
if (r < 0) {
- log_error("Failed to read /proc/self/loginuid: %s", strerror(-r));
+ log_error_errno(-r, "Failed to read /proc/self/loginuid: %m");
return r;
}
r = sd_rtnl_open(&rtnl, 0);
if (r < 0) {
- log_error("Failed to connect to netlink: %s", strerror(-r));
+ log_error_errno(-r, "Failed to connect to netlink: %m");
return r;
}
r = sd_rtnl_message_new_link(rtnl, &m, RTM_NEWLINK, 0);
if (r < 0) {
- log_error("Failed to allocate netlink message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to allocate netlink message: %m");
return r;
}
r = sd_rtnl_message_append_string(m, IFLA_IFNAME, iface_name);
if (r < 0) {
- log_error("Failed to add netlink interface name: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink interface name: %m");
return r;
}
r = sd_rtnl_message_append_ether_addr(m, IFLA_ADDRESS, &mac_host);
if (r < 0) {
- log_error("Failed to add netlink MAC address: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink MAC address: %m");
return r;
}
r = sd_rtnl_message_open_container(m, IFLA_LINKINFO);
if (r < 0) {
- log_error("Failed to open netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open netlink container: %m");
return r;
}
r = sd_rtnl_message_open_container_union(m, IFLA_INFO_DATA, "veth");
if (r < 0) {
- log_error("Failed to open netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open netlink container: %m");
return r;
}
r = sd_rtnl_message_open_container(m, VETH_INFO_PEER);
if (r < 0) {
- log_error("Failed to open netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open netlink container: %m");
return r;
}
r = sd_rtnl_message_append_string(m, IFLA_IFNAME, "host0");
if (r < 0) {
- log_error("Failed to add netlink interface name: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink interface name: %m");
return r;
}
r = sd_rtnl_message_append_ether_addr(m, IFLA_ADDRESS, &mac_container);
if (r < 0) {
- log_error("Failed to add netlink MAC address: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink MAC address: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_NET_NS_PID, pid);
if (r < 0) {
- log_error("Failed to add netlink namespace field: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink namespace field: %m");
return r;
}
r = sd_rtnl_message_close_container(m);
if (r < 0) {
- log_error("Failed to close netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close netlink container: %m");
return r;
}
r = sd_rtnl_message_close_container(m);
if (r < 0) {
- log_error("Failed to close netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close netlink container: %m");
return r;
}
r = sd_rtnl_message_close_container(m);
if (r < 0) {
- log_error("Failed to close netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close netlink container: %m");
return r;
}
r = sd_rtnl_call(rtnl, m, 0, NULL);
if (r < 0) {
- log_error("Failed to add new veth interfaces: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add new veth interfaces: %m");
return r;
}
r = sd_rtnl_open(&rtnl, 0);
if (r < 0) {
- log_error("Failed to connect to netlink: %s", strerror(-r));
+ log_error_errno(-r, "Failed to connect to netlink: %m");
return r;
}
r = sd_rtnl_message_new_link(rtnl, &m, RTM_SETLINK, 0);
if (r < 0) {
- log_error("Failed to allocate netlink message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to allocate netlink message: %m");
return r;
}
r = sd_rtnl_message_link_set_flags(m, IFF_UP, IFF_UP);
if (r < 0) {
- log_error("Failed to set IFF_UP flag: %s", strerror(-r));
+ log_error_errno(-r, "Failed to set IFF_UP flag: %m");
return r;
}
r = sd_rtnl_message_append_string(m, IFLA_IFNAME, veth_name);
if (r < 0) {
- log_error("Failed to add netlink interface name field: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink interface name field: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_MASTER, bridge);
if (r < 0) {
- log_error("Failed to add netlink master field: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink master field: %m");
return r;
}
r = sd_rtnl_call(rtnl, m, 0, NULL);
if (r < 0) {
- log_error("Failed to add veth interface to bridge: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add veth interface to bridge: %m");
return r;
}
r = sd_rtnl_open(&rtnl, 0);
if (r < 0) {
- log_error("Failed to connect to netlink: %s", strerror(-r));
+ log_error_errno(-r, "Failed to connect to netlink: %m");
return r;
}
r = sd_rtnl_message_new_link(rtnl, &m, RTM_SETLINK, ifi);
if (r < 0) {
- log_error("Failed to allocate netlink message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to allocate netlink message: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_NET_NS_PID, pid);
if (r < 0) {
- log_error("Failed to append namespace PID to netlink message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to append namespace PID to netlink message: %m");
return r;
}
r = sd_rtnl_call(rtnl, m, 0, NULL);
if (r < 0) {
- log_error("Failed to move interface %s to namespace: %s", *i, strerror(-r));
+ log_error_errno(-r, "Failed to move interface %s to namespace: %m", *i);
return r;
}
}
r = sd_rtnl_open(&rtnl, 0);
if (r < 0) {
- log_error("Failed to connect to netlink: %s", strerror(-r));
+ log_error_errno(-r, "Failed to connect to netlink: %m");
return r;
}
r = sd_rtnl_message_new_link(rtnl, &m, RTM_NEWLINK, 0);
if (r < 0) {
- log_error("Failed to allocate netlink message: %s", strerror(-r));
+ log_error_errno(-r, "Failed to allocate netlink message: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_LINK, ifi);
if (r < 0) {
- log_error("Failed to add netlink interface index: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink interface index: %m");
return r;
}
r = sd_rtnl_message_append_string(m, IFLA_IFNAME, n);
if (r < 0) {
- log_error("Failed to add netlink interface name: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink interface name: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_NET_NS_PID, pid);
if (r < 0) {
- log_error("Failed to add netlink namespace field: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add netlink namespace field: %m");
return r;
}
r = sd_rtnl_message_open_container(m, IFLA_LINKINFO);
if (r < 0) {
- log_error("Failed to open netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open netlink container: %m");
return r;
}
r = sd_rtnl_message_open_container_union(m, IFLA_INFO_DATA, "macvlan");
if (r < 0) {
- log_error("Failed to open netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to open netlink container: %m");
return r;
}
r = sd_rtnl_message_append_u32(m, IFLA_MACVLAN_MODE, MACVLAN_MODE_BRIDGE);
if (r < 0) {
- log_error("Failed to append macvlan mode: %s", strerror(-r));
+ log_error_errno(-r, "Failed to append macvlan mode: %m");
return r;
}
r = sd_rtnl_message_close_container(m);
if (r < 0) {
- log_error("Failed to close netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close netlink container: %m");
return r;
}
r = sd_rtnl_message_close_container(m);
if (r < 0) {
- log_error("Failed to close netlink container: %s", strerror(-r));
+ log_error_errno(-r, "Failed to close netlink container: %m");
return r;
}
r = sd_rtnl_call(rtnl, m, 0, NULL);
if (r < 0) {
- log_error("Failed to add new macvlan interfaces: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add new macvlan interfaces: %m");
return r;
}
}
r = seccomp_add_secondary_archs(seccomp);
if (r < 0) {
- log_error("Failed to add secondary archs to seccomp filter: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add secondary archs to seccomp filter: %m");
goto finish;
}
if (r == -EFAULT)
continue; /* unknown syscall */
if (r < 0) {
- log_error("Failed to block syscall: %s", strerror(-r));
+ log_error_errno(-r, "Failed to block syscall: %m");
goto finish;
}
}
SCMP_A0(SCMP_CMP_EQ, AF_NETLINK),
SCMP_A2(SCMP_CMP_EQ, NETLINK_AUDIT));
if (r < 0) {
- log_error("Failed to add audit seccomp rule: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add audit seccomp rule: %m");
goto finish;
}
r = seccomp_attr_set(seccomp, SCMP_FLTATR_CTL_NNP, 0);
if (r < 0) {
- log_error("Failed to unset NO_NEW_PRIVS: %s", strerror(-r));
+ log_error_errno(-r, "Failed to unset NO_NEW_PRIVS: %m");
goto finish;
}
r = seccomp_load(seccomp);
if (r < 0)
- log_error("Failed to install seccomp audit filter: %s", strerror(-r));
+ log_error_errno(-r, "Failed to install seccomp audit filter: %m");
finish:
seccomp_release(seccomp);
r = udev_enumerate_scan_devices(e);
if (r < 0) {
- log_error("Failed to scan for partition devices of %s: %s", arg_image, strerror(-r));
+ log_error_errno(-r, "Failed to scan for partition devices of %s: %m", arg_image);
return r;
}
if (root_device) {
r = mount_device(root_device, arg_directory, NULL, root_device_rw);
if (r < 0) {
- log_error("Failed to mount root directory: %s", strerror(-r));
+ log_error_errno(-r, "Failed to mount root directory: %m");
return r;
}
}
if (home_device) {
r = mount_device(home_device, arg_directory, "/home", home_device_rw);
if (r < 0) {
- log_error("Failed to mount home directory: %s", strerror(-r));
+ log_error_errno(-r, "Failed to mount home directory: %m");
return r;
}
}
if (srv_device) {
r = mount_device(srv_device, arg_directory, "/srv", srv_device_rw);
if (r < 0) {
- log_error("Failed to mount server data directory: %s", strerror(-r));
+ log_error_errno(-r, "Failed to mount server data directory: %m");
return r;
}
}
r = mkdir_parents(home, 0775);
if (r < 0) {
- log_error("Failed to make home root directory: %s", strerror(-r));
+ log_error_errno(-r, "Failed to make home root directory: %m");
return r;
}
r = mkdir_safe(home, 0755, uid, gid);
if (r < 0 && r != -EEXIST) {
- log_error("Failed to make home directory: %s", strerror(-r));
+ log_error_errno(-r, "Failed to make home directory: %m");
return r;
}
r = wait_for_terminate(pid, &status);
if (r < 0) {
- log_warning("Failed to wait for container: %s", strerror(-r));
+ log_warning_errno(-r, "Failed to wait for container: %m");
return r;
}
int main(int argc, char *argv[]) {
- _cleanup_free_ char *kdbus_domain = NULL, *device_path = NULL, *root_device = NULL, *home_device = NULL, *srv_device = NULL;
+ _cleanup_free_ char *device_path = NULL, *root_device = NULL, *home_device = NULL, *srv_device = NULL;
bool root_device_rw = true, home_device_rw = true, srv_device_rw = true;
- _cleanup_close_ int master = -1, kdbus_fd = -1, image_fd = -1;
+ _cleanup_close_ int master = -1, image_fd = -1;
_cleanup_close_pair_ int kmsg_socket_pair[2] = { -1, -1 };
_cleanup_fdset_free_ FDSet *fds = NULL;
int r = EXIT_FAILURE, k, n_fd_passed, loop_nr = -1;
if (n_fd_passed > 0) {
k = fdset_new_listen_fds(&fds, false);
if (k < 0) {
- log_error("Failed to collect file descriptors: %s", strerror(-k));
+ log_error_errno(-k, "Failed to collect file descriptors: %m");
goto finish;
}
}
goto finish;
}
- if (access("/dev/kdbus/control", F_OK) >= 0) {
-
- if (arg_share_system) {
- kdbus_domain = strdup("/dev/kdbus");
- if (!kdbus_domain) {
- log_oom();
- goto finish;
- }
- } else {
- const char *ns;
-
- ns = strappenda("machine-", arg_machine);
- kdbus_fd = bus_kernel_create_domain(ns, &kdbus_domain);
- if (r < 0)
- log_debug("Failed to create kdbus domain: %s", strerror(-r));
- else
- log_debug("Successfully created kdbus domain as %s", kdbus_domain);
- }
- }
-
if (socketpair(AF_UNIX, SOCK_DGRAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0, kmsg_socket_pair) < 0) {
log_error("Failed to create kmsg socket pair: %m");
goto finish;
r = barrier_create(&barrier);
if (r < 0) {
- log_error("Cannot initialize IPC barrier: %s", strerror(-r));
+ log_error_errno(-r, "Cannot initialize IPC barrier: %m");
goto finish;
}
k = -EINVAL;
}
- log_error("Failed to open console: %s", strerror(-k));
+ log_error_errno(-k, "Failed to open console: %m");
_exit(EXIT_FAILURE);
}
if (arg_read_only) {
k = bind_remount_recursive(arg_directory, true);
if (k < 0) {
- log_error("Failed to make tree read-only: %s", strerror(-k));
+ log_error_errno(-k, "Failed to make tree read-only: %m");
_exit(EXIT_FAILURE);
}
}
if (mount_tmpfs(arg_directory) < 0)
_exit(EXIT_FAILURE);
- if (setup_kdbus(arg_directory, kdbus_domain) < 0)
- _exit(EXIT_FAILURE);
-
/* Tell the parent that we are ready, and that
* it can cgroupify us to that we lack access
* to certain devices and resources. */
r = sd_event_new(&event);
if (r < 0) {
- log_error("Failed to get default event source: %s", strerror(-r));
+ log_error_errno(-r, "Failed to get default event source: %m");
goto finish;
}
r = pty_forward_new(event, master, &forward);
if (r < 0) {
- log_error("Failed to create PTY forwarder: %s", strerror(-r));
+ log_error_errno(-r, "Failed to create PTY forwarder: %m");
goto finish;
}
r = sd_event_loop(event);
if (r < 0) {
- log_error("Failed to run event loop: %s", strerror(-r));
+ log_error_errno(-r, "Failed to run event loop: %m");
return r;
}