On Thu, Mar 14, 2013 at 11:10:31AM +0000, Purcareata Bogdan-B43198 wrote:
> Hello all,
> 
> I am looking for a way to start a container with libvirt and bind
> multiple consoles to it. My container is running busybox, the filesystem
> created using the LXC package (0.8.0). My libvirt version is 0.10.1.
> 
> Configuration of the filesystem:
> - in the container rootfs, /dev contains 2 devices - /dev/console and 
> /dev/tty1

Ok, there's no need to put anything in /dev. Libvirt will mount a
tmpfs on /dev and a devpts on /dev/pts create all the devices nodes
itself.

> - the inittab file looks like this:
> ::sysinit:/etc/init.d/rcS
> tty1::respawn:/bin/getty -L tty1 115200 vt100
> console::askfirst:/bin/sh
> - it will link the /bin/sh process to /dev/console and the /bin/getty process 
> to /dev/tty
> - when starting the container with lxc-start, each of these processes gets 
> his own local /dev/pts device:

I'm not sure how sf.net LXC tools setup consoles, but what you have won't
work with Libvirt LXC. The primary console is setup as /dev/console and
/dev/tty1, so your inittab here is putting both processes on the same
console device. The second console is /dev/tty2 with libvirt.

> I've found some documentation at [1], hence my trials in the presented .xml. 
> Is my scenario possible / supported?

Here is the XML I have just used to test the scenario you want:

<domain type='lxc'>
  <name>busyinit</name>
  <uuid>dda7b948-0846-1759-2873-0f375df7d7eb</uuid>
  <memory unit='KiB'>32768</memory>
  <currentMemory unit='KiB'>32768</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64'>exe</type>
    <init>/init</init>
  </os>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/libvirt_lxc</emulator>
    <filesystem type='mount' accessmode='passthrough'>
      <source dir='/root/containers/root-busybox'/>
      <target dir='/'/>
    </filesystem>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <console type='pty'>
      <target type='serial' port='1'/>
    </console>
    <console type='pty'>
      <target type='serial' port='2'/>
    </console>
    <console type='pty'>
      <target type='serial' port='3'/>
    </console>
  </devices>
  <seclabel type='static' model='selinux' relabel='no'>
    <label>system_u:system_r:svirt_t:s0:c724,c995</label>
  </seclabel>
</domain>


And I have this inittab

# cat /root/containers/root-busybox/etc/inittab
::sysinit:/etc/init.d/rcS
tty1::askfirst:/bin/sh
tty2::respawn:/bin/getty -L tty2 115200 vt100
tty3::respawn:/bin/getty -L tty3 115200 vt100
tty4::respawn:/bin/getty -L tty4 115200 vt100


Now if you start this 'virsh -c lxc:/// start busyinit'

Then

  # virsh -c lxc:/// console busyinit
  Connected to domain busyinit
  Escape character is ^]

  Please press Enter to activate this console.
  /bin/sh: can't access tty; job control turned off
  # ...


will connect you to the first console, which is tty1 and your /bin/sh

To connect to the 2nd, 3rd, etc consoles you can use

  # virsh -c lxc:/// console --devname console1 busyinit
  Connected to domain busyinit
  Escape character is ^]

  t500wlan.home.berrange.com login: 


Use 'virsh -c lxc:/// dumpxml busyinit' to see what console device
names libvirt gave to each - for LXC they'll be named 'console0',
'console1', 'console2', etc.  NB the tty paths in the XML are the
host side TTY names, which are different from the guest side names.

Regards,
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 :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to