Package: lxc
Version: 0.8.0~rc1-8
Severity: important
Tags: patch

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

when creating an lxc container with the debian template the setup
generated is not working:

# lxc-create -n foo -t debian
[Hitting Return several times]
# lxc-start -n foo    
Mount failed for selinuxfs on /selinux:  Operation not permitted
INIT: version 2.88 booting
[...]
Starting OpenBSD Secure Shell server: sshdCould not load host key:
/etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
.

In another console:
# lxc-console -n foo

Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a
itself

And nothing happens because getty can't acquire any tty (because none is
there):
# ls -l /var/lib/lxc/foo/rootfs/dev/tty*
crw-rw-rw- 1 root root 5, 0 Jul 28 15:40 /var/lib/lxc/foo/rootfs/dev/tty
#

Running lxc-start with -l DEBUG -o /dev/stderr reveals:
lxc-start 1343507262.616 INFO     lxc_conf - console has been setup
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/3'->'/usr/lib/i386-linux-gnu/lxc/dev/tty1'
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/10'->'/usr/lib/i386-linux-gnu/lxc/dev/tty2
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/12'->'/usr/lib/i386-linux-gnu/lxc/dev/tty3
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/13'->'/usr/lib/i386-linux-gnu/lxc/dev/tty4
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/14'->'/usr/lib/i386-linux-gnu/lxc/dev/tty5
lxc-start 1343507262.616 WARN     lxc_conf - failed to mount 
'/dev/pts/15'->'/usr/lib/i386-linux-gnu/lxc/dev/tty6
lxc-start 1343507262.616 INFO     lxc_conf - 6 tty(s) has been setup

mount failes because of ENOENT. There are three possible solutions I can
think of:

a) In setup_tty() in the else branch call creat() like it is done in
   the 'if (ttydir)' branch.
b) touch or mknod $rootfs/dev/tty[1-6] in the template
c) Set lxc.devttydir in the config.

a) seems the most elegant solution to me although it requires patching
upstream code. Maybe this can be forwarded to upstream anyway. c) should
be the least invasive one.

I have attached a patch for a) and one for c).

TIA, HTH, HAND,
 Sebastian

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iD8DBQFQFFFevBVic1oTsEgRAi8RAJ4gOcup1cSC7hvNaF4q/yLRLgpypQCfSZ8O
iE/Xky4curDRQVqsMuvHxZk=
=k5mp
-----END PGP SIGNATURE-----
diff -Nru lxc-0.8.0~rc1/debian/patches/13-lxc-create-tty-mountpoint.patch lxc-0.8.0~rc1.ttycreat/debian/patches/13-lxc-create-tty-mountpoint.patch
--- lxc-0.8.0~rc1/debian/patches/13-lxc-create-tty-mountpoint.patch	1970-01-01 01:00:00.000000000 +0100
+++ lxc-0.8.0~rc1.ttycreat/debian/patches/13-lxc-create-tty-mountpoint.patch	2012-07-28 22:45:15.248840054 +0200
@@ -0,0 +1,17 @@
+Author: Sebastian Schmidt <y...@yath.de>
+Description: create mountpoint for tty bind mounts
+
+--- lxc-0.8.0~rc1.orig/src/lxc/conf.c
++++ lxc-0.8.0~rc1/src/lxc/conf.c
+@@ -563,6 +563,11 @@ static int setup_tty(const struct lxc_ro
+ 				return -1;
+ 			}
+ 		} else {
++			ret = creat(path, 0660);
++			if (ret==-1 && errno != EEXIST) {
++				SYSERROR("error creating %s\n", path);
++				return -1;
++			}
+ 			if (mount(pty_info->name, path, "none", MS_BIND, 0)) {
+ 				WARN("failed to mount '%s'->'%s'",
+ 						pty_info->name, path);
diff -Nru lxc-0.8.0~rc1/debian/patches/series lxc-0.8.0~rc1.ttycreat/debian/patches/series
--- lxc-0.8.0~rc1/debian/patches/series	2012-06-29 23:14:41.000000000 +0200
+++ lxc-0.8.0~rc1.ttycreat/debian/patches/series	2012-07-28 22:45:15.248840054 +0200
@@ -10,3 +10,4 @@
 10-lxc-clone-trap-name.patch
 11-lxc-console-escape.patch
 12-lxc-create-rootfs.patch
+13-lxc-create-tty-mountpoint.patch
diff -Nru lxc-0.8.0~rc1/debian/local/lxc-debconf lxc-0.8.0~rc1.devttypath/debian/local/lxc-debconf
--- lxc-0.8.0~rc1/debian/local/lxc-debconf	2012-06-30 14:06:33.000000000 +0200
+++ lxc-0.8.0~rc1.devttypath/debian/local/lxc-debconf	2012-07-28 22:52:04.858871194 +0200
@@ -576,6 +576,7 @@
 cat >> "${_PATH}/config" << EOF
 #lxc.console                            = /var/log/lxc/${_NAME}.console
 lxc.tty                                 = 6
+lxc.devttydir                           = lxc
 lxc.pts                                 = 1024
 
 ## Capabilities

Reply via email to