Commit a21f8a04 by Serge Hallyn Committed by Stéphane Graber

add lxc.console.logpath

logpath has been supported through lxc-start command line, but not through the API. Since the lxc.console is now required to be a device, support lxc.console.logfile to be a simple file to which console output will be logged. clear_config_item is not supported, as it isn't for lxc.console, bc you can do 'lxc.console.logfile =' to clear it. (This patch is for stable-1.0) Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent 4d772b5d
...@@ -536,12 +536,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ...@@ -536,12 +536,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term> <term>
<option>lxc.console</option> <option>lxc.console.logfile</option>
</term> </term>
<listitem> <listitem>
<para> <para>
Specify a path to a file where the console output will Specify a path to a file where the console output will
be written. The keyword 'none' will simply disable the be written.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>lxc.console</option>
</term>
<listitem>
<para>
Specify a path to a device to which the console will be
attached. The keyword 'none' will simply disable the
console. This is dangerous once if have a rootfs with a console. This is dangerous once if have a rootfs with a
console device file where the application can write, the console device file where the application can write, the
messages will fall in the host. messages will fall in the host.
......
...@@ -4390,6 +4390,8 @@ void lxc_conf_free(struct lxc_conf *conf) ...@@ -4390,6 +4390,8 @@ void lxc_conf_free(struct lxc_conf *conf)
{ {
if (!conf) if (!conf)
return; return;
if (conf->console.log_path)
free(conf->console.log_path);
if (conf->console.path) if (conf->console.path)
free(conf->console.path); free(conf->console.path);
if (conf->rootfs.mount) if (conf->rootfs.mount)
......
...@@ -88,6 +88,7 @@ static int config_network_ipv6_gateway(const char *, const char *, struct lxc_co ...@@ -88,6 +88,7 @@ static int config_network_ipv6_gateway(const char *, const char *, struct lxc_co
static int config_cap_drop(const char *, const char *, struct lxc_conf *); static int config_cap_drop(const char *, const char *, struct lxc_conf *);
static int config_cap_keep(const char *, const char *, struct lxc_conf *); static int config_cap_keep(const char *, const char *, struct lxc_conf *);
static int config_console(const char *, const char *, struct lxc_conf *); static int config_console(const char *, const char *, struct lxc_conf *);
static int config_console_logfile(const char *, const char *, struct lxc_conf *);
static int config_seccomp(const char *, const char *, struct lxc_conf *); static int config_seccomp(const char *, const char *, struct lxc_conf *);
static int config_includefile(const char *, const char *, struct lxc_conf *); static int config_includefile(const char *, const char *, struct lxc_conf *);
static int config_network_nic(const char *, const char *, struct lxc_conf *); static int config_network_nic(const char *, const char *, struct lxc_conf *);
...@@ -142,6 +143,7 @@ static struct lxc_config_t config[] = { ...@@ -142,6 +143,7 @@ static struct lxc_config_t config[] = {
{ "lxc.network.", config_network_nic }, { "lxc.network.", config_network_nic },
{ "lxc.cap.drop", config_cap_drop }, { "lxc.cap.drop", config_cap_drop },
{ "lxc.cap.keep", config_cap_keep }, { "lxc.cap.keep", config_cap_keep },
{ "lxc.console.logfile", config_console_logfile },
{ "lxc.console", config_console }, { "lxc.console", config_console },
{ "lxc.seccomp", config_seccomp }, { "lxc.seccomp", config_seccomp },
{ "lxc.include", config_includefile }, { "lxc.include", config_includefile },
...@@ -1564,6 +1566,12 @@ static int config_console(const char *key, const char *value, ...@@ -1564,6 +1566,12 @@ static int config_console(const char *key, const char *value,
return config_path_item(&lxc_conf->console.path, value); return config_path_item(&lxc_conf->console.path, value);
} }
static int config_console_logfile(const char *key, const char *value,
struct lxc_conf *lxc_conf)
{
return config_path_item(&lxc_conf->console.log_path, value);
}
static int config_includefile(const char *key, const char *value, static int config_includefile(const char *key, const char *value,
struct lxc_conf *lxc_conf) struct lxc_conf *lxc_conf)
{ {
...@@ -2160,6 +2168,8 @@ int lxc_get_config_item(struct lxc_conf *c, const char *key, char *retv, ...@@ -2160,6 +2168,8 @@ int lxc_get_config_item(struct lxc_conf *c, const char *key, char *retv,
return lxc_get_cgroup_entry(c, retv, inlen, key + 11); return lxc_get_cgroup_entry(c, retv, inlen, key + 11);
else if (strcmp(key, "lxc.utsname") == 0) else if (strcmp(key, "lxc.utsname") == 0)
v = c->utsname ? c->utsname->nodename : NULL; v = c->utsname ? c->utsname->nodename : NULL;
else if (strcmp(key, "lxc.console.logfile") == 0)
v = c->console.log_path;
else if (strcmp(key, "lxc.console") == 0) else if (strcmp(key, "lxc.console") == 0)
v = c->console.path; v = c->console.path;
else if (strcmp(key, "lxc.rootfs.mount") == 0) else if (strcmp(key, "lxc.rootfs.mount") == 0)
...@@ -2410,6 +2420,8 @@ void write_config(FILE *fout, struct lxc_conf *c) ...@@ -2410,6 +2420,8 @@ void write_config(FILE *fout, struct lxc_conf *c)
} }
if (c->console.path) if (c->console.path)
fprintf(fout, "lxc.console = %s\n", c->console.path); fprintf(fout, "lxc.console = %s\n", c->console.path);
if (c->console.log_path)
fprintf(fout, "lxc.console.logfile = %s\n", c->console.log_path);
if (c->rootfs.path) if (c->rootfs.path)
fprintf(fout, "lxc.rootfs = %s\n", c->rootfs.path); fprintf(fout, "lxc.rootfs = %s\n", c->rootfs.path);
if (c->rootfs.mount && strcmp(c->rootfs.mount, LXCROOTFSMOUNT) != 0) if (c->rootfs.mount && strcmp(c->rootfs.mount, LXCROOTFSMOUNT) != 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment