[libvirt-users] lxc: Add /dev/tty to lxcContainerPopulateDevices() ?

Hi, src/lxc/lxc_container.c:lxcContainerPopulateDevices() has this table of devices that are automatically created when an lxc container is started. const struct { int maj; int min; mode_t mode; const char *path; } devs[] = { { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_NULL, 0666, "/dev/null" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_ZERO, 0666, "/dev/zero" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_FULL, 0666, "/dev/full" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_RANDOM, 0666, "/dev/random" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_URANDOM, 0666, "/dev/urandom" }, }; Can we add '/dev/tty' to this list ? We were trying to run 'smbpasswd -a user' inside a container without /dev/tty and the fopen("/dev/tty", "w+") in smbpasswd made /dev/tty a regular file, breaking man(1), less(1), and ofcourse smbpasswd :-) Sure we can add /dev/tty to container's rc.local or something, but wouldn't it be in the same category as say, /dev/null or /dev/zero ? Sukadev

On Wed, May 16, 2012 at 03:44:19PM -0700, Sukadev Bhattiprolu wrote:
Hi,
src/lxc/lxc_container.c:lxcContainerPopulateDevices() has this table of devices that are automatically created when an lxc container is started.
const struct { int maj; int min; mode_t mode; const char *path; } devs[] = { { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_NULL, 0666, "/dev/null" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_ZERO, 0666, "/dev/zero" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_FULL, 0666, "/dev/full" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_RANDOM, 0666, "/dev/random" }, { LXC_DEV_MAJ_MEMORY, LXC_DEV_MIN_URANDOM, 0666, "/dev/urandom" }, };
Can we add '/dev/tty' to this list ?
We were trying to run 'smbpasswd -a user' inside a container without /dev/tty and the fopen("/dev/tty", "w+") in smbpasswd made /dev/tty a regular file, breaking man(1), less(1), and ofcourse smbpasswd :-)
Sure we can add /dev/tty to container's rc.local or something, but wouldn't it be in the same category as say, /dev/null or /dev/zero ?
No, we can't just pass in the host's /dev/tty device to the container. We need to virtualize it, but this is not really very easy todo if we need to take account of multiple consoles. Probably as a temporar hack, we can just symlink it to /dev/tty1 and try to figure out a proper fix later Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Daniel P. Berrange [berrange@redhat.com] wrote: | On Wed, May 16, 2012 at 03:44:19PM -0700, Sukadev Bhattiprolu wrote: | | No, we can't just pass in the host's /dev/tty device to the | container. We need to virtualize it, but this is not really | very easy todo if we need to take account of multiple consoles. | Probably as a temporar hack, we can just symlink it to /dev/tty1 | and try to figure out a proper fix later man tty(4) says: It is a synonym for the controlling terminal of a process, if any. so whether the process is in the host or in a container, /dev/tty will is just the process's own controlling terminal right ? Two processes each writing to "/dev/tty" would very well be writing to different terminals. So, I don't see why it needs to be virtualized. Besides, linking /dev/tty1 to /dev/tty would not be the right I think. Sukadev
participants (2)
-
Daniel P. Berrange
-
Sukadev Bhattiprolu