Bug 460812 - Console not created/connected
Console not created/connected
Status: CLOSED WORKSFORME
Product: Virtualization Tools
Classification: Community
Component: libvirt (Show other bugs)
unspecified
All Linux
medium Severity high
: ---
: ---
Assigned To: Daniel Veillard
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2008-09-01 08:58 EDT by Stefan de Konink
Modified: 2010-03-16 13:14 EDT (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2009-01-22 07:53:36 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Stefan de Konink 2008-09-01 08:58:34 EDT
Description of problem:

After the <bootloader /> issued looked to be fixed, it created a regression in the console handling.


Version-Release number of selected component (if applicable):
git head + xen patch, now running Xen 3.3


How reproducible:

<domain type='xen'>
  <name>klant1_monetdb</name>
  <uuid>a850ec08-7c7d-2133-1f0e-0b56a793f858</uuid>
  <memory>4194304</memory>
  <currentMemory>4194304</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type>linux</type>
    <kernel>/usr/lib/xen/boot/linux-2.6.20-xen-r6</kernel>
    <cmdline> root=/dev/xvda ro ip=85.17.131.51:1.2.3.4:85.17.131.254:255.255.255.0::eth0:off</cmdline>
  </os>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/mnt/images/klant1_monetdb_1'/>
      <target dev='xvda' bus='xen'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/mnt/images/klant1_osm'/>
      <target dev='xvdb' bus='xen'/>
    </disk>
    <interface type='bridge'>
      <mac address='00:16:3e:00:00:29'/>
      <source bridge='xenbr0'/>
      <target dev='vif-1.0'/>
    </interface>
    <console type='pty'>
      <target port='0'/>
    </console>
  </devices>
</domain>

This file was created by the libvirt api using an inactive configuration. It results in:


<domain type='xen' id='7'>
  <name>klant1_monetdb</name>
  <uuid>a850ec08-7c7d-2133-1f0e-0b56a793f858</uuid>
  <memory>4194304</memory>
  <currentMemory>4194304</currentMemory>
  <vcpu>1</vcpu>
  <bootloader></bootloader>
  <os>
    <type>linux</type>
    <kernel>/usr/lib/xen/boot/linux-2.6.20-xen-r6</kernel>
    <cmdline> root=/dev/xvda ro ip=85.17.131.51:1.2.3.4:85.17.131.254:255.255.255.0::eth0:off</cmdline>
  </os>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/lib64/xen/bin/qemu-dm</emulator>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/mnt/images/klant1_monetdb_1'/>
      <target dev='xvda' bus='xen'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/mnt/images/klant1_osm'/>
      <target dev='xvdb' bus='xen'/>
    </disk>
    <interface type='bridge'>
      <mac address='00:16:3e:00:00:29'/>
      <source bridge='xenbr0'/>
      <target dev='vif7.0'/>
    </interface>
    <console type='pty' tty='/dev/pts/4'>
      <source path='/dev/pts/4'/>
      <target port='0'/>
    </console>
  </devices>
</domain>



Steps to Reproduce:
1. create domain
2. try to connect to it
  
Actual results:

xenapi bin # ./virsh create /mnt/netapp/users/klant1/monetdb/index.xml 
Domain klant1_monetdb created from /mnt/netapp/users/klant1/monetdb/index.xml

xenapi bin # xm console klant1_monetdb
xenconsole: Could not open tty `/dev/pts/4': No such file or directory
Comment 1 Daniel Berrange 2009-01-22 07:53:36 EST
I've tried again to reproduce this but it always works correctly for me. The console path in the XML is something we get given directly from XenD, so if the console then does not exist, I can only think XenD is giving us back incorrect information. Or alternatively the guest is crashing immediately after starting causing the QEMU process which provides the console, to exit. Either way I don't immediately see any libvirt bug here. Please re-open if you can find a way to reproduce.
Comment 2 adam.hamsik 2010-01-27 04:03:00 EST
I can reproduce same bug with libvirt version 0.7.5 and this serail console configuration 

   <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty' tty='/de/pts/1'>
      <target port='0'/>
    </console>

 I used strace to find what is going on, and relevant part of strace output is attached. I think that problem is in open call which is trying to open /dev/pts/1

sendto(3, "\0\0\0008 \0\200\206\0\0\0\1\0\0\0\20\0\0\0\0\0\0\0\5\0\0\0\0\0\0\0\3"..., 56, 0, NULL, 0) = 56
poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "\0\0\0X", 4, 0, NULL, NULL) = 4
recvfrom(3, " \0\200\206\0\0\0\1\0\0\0\20\0\0\0\1\0\0\0\5\0\0\0\0\0\0\0\1\0\0\0\0"..., 84, 0, NULL, NULL) = 84
poll([{fd=3, events=POLLOUT}, {fd=4, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "\0\0\0< \0\200\206\0\0\0\1\0\0\0\16\0\0\0\0\0\0\0\6\0\0\0\0\0\0\0\3"..., 60, 0, NULL, 0) = 60
poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "\0\0\6\340", 4, 0, NULL, NULL) = 4
recvfrom(3, " \0\200\206\0\0\0\1\0\0\0\16\0\0\0\1\0\0\0\6\0\0\0\0\0\0\6\242<dom"..., 1756, 0, NULL, NULL) = 1756
futex(0x7f1690795b60, FUTEX_WAKE_PRIVATE, 2147483647) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1690c83000
write(1, "Connected to domain pdc\n", 24Connected to domain pdc
) = 24
write(1, "Escape character is ^]\n", 23Escape character is ^]
) = 23
open("/dev/pts/1 ", O_RDWR|O_NOCTTY)    = -1 ENOENT (No such file or directory)

pts device is '/dev/pts/1' but we are trying to open '/dev/pts/1 ' which doesn't exists. 

if I change cmdRunConsole code below to open hardcoded '/dev/pts/1' everythings works. I then suspect that problem can be in obj = xmlXPathEval(BAD_CAST "string(/domain/devices/console/@tty)", ctxt); which returns bad string from xml.

if (vshRunConsole((const char *)obj->stringval) == 0)

Note You need to log in before you can comment on or make changes to this bug.