mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-05 06:19:25 +00:00
confile:add lxc.init.cwd
Signed-off-by: LiFeng <lifeng68@huawei.com>
This commit is contained in:
parent
7ded3c1878
commit
3c4915534d
@ -284,6 +284,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2>
|
||||
<title>Init working directory</title>
|
||||
<para>
|
||||
Sets the absolute path inside the container as the working directory for the containers.
|
||||
LXC will switch to this directory before executing init.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<option>lxc.init.cwd</option>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Absolute path inside the container to use as the working directory.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2>
|
||||
<title>Init ID</title>
|
||||
<para>
|
||||
|
@ -3432,6 +3432,7 @@ void lxc_conf_free(struct lxc_conf *conf)
|
||||
free(conf->rcfile);
|
||||
free(conf->execute_cmd);
|
||||
free(conf->init_cmd);
|
||||
free(conf->init_cwd);
|
||||
free(conf->unexpanded_config);
|
||||
free(conf->pty_names);
|
||||
free(conf->syslog);
|
||||
|
@ -359,6 +359,10 @@ struct lxc_conf {
|
||||
struct lxc_cgroup cgroup_meta;
|
||||
|
||||
char *inherit_ns[LXC_NS_MAX];
|
||||
|
||||
/* init working directory */
|
||||
char* init_cwd;
|
||||
|
||||
};
|
||||
|
||||
#ifdef HAVE_TLS
|
||||
|
@ -95,6 +95,7 @@ lxc_config_define(hooks);
|
||||
lxc_config_define(idmaps);
|
||||
lxc_config_define(includefiles);
|
||||
lxc_config_define(init_cmd);
|
||||
lxc_config_define(init_cwd);
|
||||
lxc_config_define(init_gid);
|
||||
lxc_config_define(init_uid);
|
||||
lxc_config_define(log_file);
|
||||
@ -176,6 +177,7 @@ static struct lxc_config_t config[] = {
|
||||
{ "lxc.init.cmd", false, set_config_init_cmd, get_config_init_cmd, clr_config_init_cmd, },
|
||||
{ "lxc.init.gid", false, set_config_init_gid, get_config_init_gid, clr_config_init_gid, },
|
||||
{ "lxc.init.uid", false, set_config_init_uid, get_config_init_uid, clr_config_init_uid, },
|
||||
{ "lxc.init.cwd", false, set_config_init_cwd, get_config_init_cwd, clr_config_init_cwd, },
|
||||
{ "lxc.log.file", false, set_config_log_file, get_config_log_file, clr_config_log_file, },
|
||||
{ "lxc.log.level", false, set_config_log_level, get_config_log_level, clr_config_log_level, },
|
||||
{ "lxc.log.syslog", false, set_config_log_syslog, get_config_log_syslog, clr_config_log_syslog, },
|
||||
@ -945,6 +947,12 @@ static int set_config_init_cmd(const char *key, const char *value,
|
||||
return set_config_path_item(&lxc_conf->init_cmd, value);
|
||||
}
|
||||
|
||||
static int set_config_init_cwd(const char *key, const char *value,
|
||||
struct lxc_conf *lxc_conf, void *data)
|
||||
{
|
||||
return set_config_path_item(&lxc_conf->init_cwd, value);
|
||||
}
|
||||
|
||||
static int set_config_init_uid(const char *key, const char *value,
|
||||
struct lxc_conf *lxc_conf, void *data)
|
||||
{
|
||||
@ -3249,6 +3257,12 @@ static int get_config_init_cmd(const char *key, char *retv, int inlen,
|
||||
return lxc_get_conf_str(retv, inlen, c->init_cmd);
|
||||
}
|
||||
|
||||
static int get_config_init_cwd(const char *key, char *retv, int inlen,
|
||||
struct lxc_conf *c, void *data)
|
||||
{
|
||||
return lxc_get_conf_str(retv, inlen, c->init_cwd);
|
||||
}
|
||||
|
||||
static int get_config_init_uid(const char *key, char *retv, int inlen,
|
||||
struct lxc_conf *c, void *data)
|
||||
{
|
||||
@ -3665,6 +3679,14 @@ static inline int clr_config_init_cmd(const char *key, struct lxc_conf *c,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int clr_config_init_cwd(const char *key, struct lxc_conf *c,
|
||||
void *data)
|
||||
{
|
||||
free(c->init_cwd);
|
||||
c->init_cwd = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int clr_config_init_uid(const char *key, struct lxc_conf *c,
|
||||
void *data)
|
||||
{
|
||||
|
@ -979,6 +979,11 @@ static int do_start(void *data)
|
||||
|
||||
setsid();
|
||||
|
||||
if (handler->conf->init_cwd && chdir(handler->conf->init_cwd)) {
|
||||
SYSERROR("Could not change directory to \"%s\"", handler->conf->init_cwd);
|
||||
goto out_warn_father;
|
||||
}
|
||||
|
||||
if (lxc_sync_barrier_parent(handler, LXC_SYNC_CGROUP_LIMITS))
|
||||
goto out_warn_father;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user