[lxc-devel] [PATCH 1/1] systemd: specify container_ttys in environment

Serge Hallyn serge.hallyn at ubuntu.com
Wed Jan 28 16:23:43 UTC 2015


Quoting Daniel P. Berrange (berrange at redhat.com):
> On Tue, Jan 27, 2015 at 08:48:25PM +0000, Serge Hallyn wrote:
> > The lxc.tty configuration item specifies a number of ttys to create.
> > Historically, for each of those, we create a /dev/pts/N entry and
> > symlink it to /dev/ttyN for older inits to use.  For systemd, we should
> > instead specify each tty name in a $container_ttys environment variable
> > passed to init.
> > 
> > See http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface/ and
> > https://github.com/lxc/lxc/issues/419.
> > 
> > Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
> > ---
> >  src/lxc/conf.c  | 43 ++++++++++++++++++++++++++++++++++++++++---
> >  src/lxc/conf.h  |  1 +
> >  src/lxc/start.c |  8 +++++---
> >  3 files changed, 46 insertions(+), 6 deletions(-)
> > 
> 
> > +static int setup_tty(struct lxc_conf *conf)
> > +{
> > +	const struct lxc_rootfs *rootfs = &conf->rootfs;
> > +	const struct lxc_tty_info *tty_info = &conf->tty_info;
> > +	char *ttydir = conf->ttydir;
> >  	char path[MAXPATHLEN], lxcpath[MAXPATHLEN];
> >  	int i, ret;
> >  
> > @@ -999,6 +1024,8 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
> >  				SYSERROR("failed to create symlink for tty %d", i+1);
> >  				return -1;
> >  			}
> > +			/* Now save the relative path in @path for append_ptyname */
> > +			sprintf(path, "%s/tty%d", ttydir, i + 1);
> >  		} else {
> >  			/* If we populated /dev, then we need to create /dev/ttyN */
> >  			if (access(path, F_OK)) {
> > @@ -1015,6 +1042,12 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
> >  						pty_info->name, path);
> >  				continue;
> >  			}
> > +			/* Now save the relative path in @path for append_ptyname */
> > +			sprintf(path, "tty%d", i + 1);
> > +		}
> > +		if (!append_ptyname(&conf->pty_names, path)) {
> > +			ERROR("Error setting up container_ttys string");
> > +			return -1;
> >  		}
> >  	}
> 
> I'm unclear if this is relevant for LXC tools or not, but if one of those
> ptys is symlinked to /dev/console, then it should be excluded from the
> set in "container_ttys" env variable.
> 
> In libvirt /dev/pts/0 is always symlinked to /dev/console, so we only
> include pts/1, pts/2, etc in "container_ttys".  Not doing this will
> result in systemd trying to launch login process on both /dev/console
> and /dev/pts/0 with obvious hilarity / fail :-)

:)  Yup, the setup_tty() function which adds to the pty_names list is
only called for the ptys other than /dev/console, so this bit is ok.

(Something else seems to be wrong with it, but not sure yet what)

thanks,
-serge


More information about the lxc-devel mailing list