Currently due to some safety checks for !rootfs.path, lxc-execute works
ok if you do not set lxc.rootfs at all in your lxc.conf. But if you
set lxc.rootfs = '/', then it sets up console, and when you do an
lxc-execute, the console appears hung.
However the lxc.rootfs NULL check was just incidental to not dereference
a NULL pointer. In fact we should not be setting up a console if the
container isn't running a full-fledged distro with a getty/login
running on the container's /dev/console.
Have lxc_execute() mark in lxc_conf that this is a lxc-execute and not
an lxc-start, and don't set up the console.
The issue is documented at https://sourceforge.net/p/lxc/bugs/67/ .
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Dwight Engen <dwight.engen@oracle.com>
}
}
- if (setup_console(&lxc_conf->rootfs, &lxc_conf->console, lxc_conf->ttydir)) {
+ if (!lxc_conf->is_execute && setup_console(&lxc_conf->rootfs, &lxc_conf->console, lxc_conf->ttydir)) {
ERROR("failed to setup the console for '%s'", name);
return -1;
}
ERROR("failed to setup kmsg for '%s'", name);
}
- if (setup_tty(&lxc_conf->rootfs, &lxc_conf->tty_info, lxc_conf->ttydir)) {
+ if (!lxc_conf->is_execute && setup_tty(&lxc_conf->rootfs, &lxc_conf->tty_info, lxc_conf->ttydir)) {
ERROR("failed to setup the ttys for '%s'", name);
return -1;
}
};
struct lxc_conf {
+ int is_execute;
char *fstab;
int tty;
int pts;
struct lxc_conf *conf = handler->conf;
struct lxc_console *console = &conf->console;
+ if (conf->is_execute) {
+ INFO("no console for lxc-execute.");
+ return 0;
+ }
+
if (!conf->rootfs.path) {
INFO("no rootfs, no console.");
return 0;
{
struct lxc_console *console = &conf->console;
+ if (conf->is_execute) {
+ INFO("no console for lxc-execute.");
+ return 0;
+ }
+
if (!conf->rootfs.path)
return 0;
if (lxc_check_inherited(conf, -1))
return -1;
+ conf->is_execute = 1;
return __lxc_start(name, conf, &execute_start_ops, &args, lxcpath);
}