[libvirt] How to connect to console of domain on PowerPC?

Yin Olivia-R63875 r63875 at freescale.com
Tue Feb 5 03:05:58 UTC 2013


Hi Daniel,

Thanks for your comments.
So far there's no device in QEMU to align with chardev on FSL PowerPC platforms like spapr-pty for IBM PSeries.
Maybe it needs patches to QEMU. I'll take deeper investigation on it.

Anyway for LXC instance, it doesn't depend on the syntax.
I can connect to the console if connect a domain with simple shell.
# vi vm1.xml
<domain type='lxc'>
  <name>vm1</name>
  <memory>32768</memory>
  <os>
    <type>exe</type>
    <init>/bin/sh</init>
  </os>
  <vcpu>1</vcpu>
  <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>
    <console type='pty' tty='/dev/pts/3'>
      <source path='/dev/pts/3'/>
      <target port='0'/>
    </console>
  </devices>
</domain>

# virsh -c lxc:/// define vm1.xml
# virsh -c lxc:/// start vm1
Domain vm1 started

# virsh -c lxc:/// console vm1
Connected to domain vm1
Escape character is ^]
sh-4.2# pwd
/
sh-4.2# ps
  PID TTY          TIME CMD
    1 pts/2    00:00:00 sh
    3 pts/2    00:00:00 ps


But can't get any output when connecting domain with a simple private root filesystem.
# vi vm2.xml
<domain type='lxc'>
  <name>vm2</name>
  <memory>25536</memory>
  <os>
    <type>exe</type>
    <init>/sbin/init</init>
  </os>
  <vcpu>1</vcpu>
  <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'>
      <source dir='/media/ram/vm1-root'/>
      <target dir='/var/lib/libvirt/lxc/rootfs'/>
    </filesystem>
    <interface type='network'>
      <source network='default'/>
    </interface>
    <console type='pty' />
  </devices>
</domain>

# virsh -c lxc:/// define vm2.xml
# virsh -c lxc:/// start vm2
Domain vm2 started

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


Do you have any suggestion? 

Best Regards,
Olivia

-----Original Message-----
From: Daniel P. Berrange [mailto:berrange at redhat.com] 
Sent: Monday, February 04, 2013 6:19 PM
To: Yin Olivia-R63875
Cc: libvir-list at redhat.com
Subject: Re: [libvirt] How to connect to console of domain on PowerPC?

On Mon, Feb 04, 2013 at 02:22:03AM +0000, Yin Olivia-R63875 wrote:
> For instance,
> /usr/bin/qemu-system-ppc -name demo -M ppce500v2 -enable-kvm -m 256 
> -nographic -kernel /media/ram/uImage -initrd /media/ram/ramdisk 
> -append "root=/dev/ram rw console=ttyS0,115200" -serial 
> tcp::4445,server
> 
> Then to run 'telnet 10.193.20.xxx 4445' could connect the guest.
> 
> 
> The temporary workaround is not add '-device' string after '-serial' option.

This is wrong. -serial is legacy command line syntax that libvirt should never use for any QEMU released in the last 2 years. New syntax is uses a combination of -device + -chardev.

> diff -Nur libvirt-0.10.1.orig/src/qemu/qemu_command.c 
> libvirt-0.10.1/src/qemu/qemu_command.c
> --- libvirt-0.10.1.orig/src/qemu/qemu_command.c 2012-08-30 
> 15:35:18.000000000 +0530
> +++ libvirt-0.10.1/src/qemu/qemu_command.c      2012-10-05 17:19:32.060368755 +0530
> @@ -5501,13 +5501,15 @@
>                  virCommandAddArg(cmd, devstr);
>                  VIR_FREE(devstr);
> 
> -                virCommandAddArg(cmd, "-device");
> -                if (!(devstr = qemuBuildChrDeviceStr(serial, qemuCaps,
> +                if (!STREQ(def->os.arch, "ppc")) {
> +                    virCommandAddArg(cmd, "-device");
> +                    if (!(devstr = qemuBuildChrDeviceStr(serial, 
> + qemuCaps,
>                                                       def->os.arch,
>                                                       def->os.machine)))
> -                   goto error;
> -                virCommandAddArg(cmd, devstr);
> -                VIR_FREE(devstr);
> +                    goto error;
> +                    virCommandAddArg(cmd, devstr);
> +                    VIR_FREE(devstr);
> +                }
>              } else {
>                  virCommandAddArg(cmd, "-serial");
>                  if (!(devstr = qemuBuildChrArgStr(&serial->source, 
> NULL)))
> 
> Applying the above patch to libvirt, all the other domain control commands could work except 'virsh console domain'.
> 
> # cat >demo.args <<EOF
> > /usr/bin/qemu-system-ppc -name demo -M ppce500v2 -enable-kvm -m 256 
> > -nographic -kernel /media/ram/uImage -initrd /media/ram/ramdisk 
> > -append "root=/dev/ram rw console=ttyS0,115200" -serial 
> > tcp::4445,server -net nic EOF
> 
> # vi demo.args
> /usr/bin/qemu-system-ppc -name demo -M ppce500v2 -enable-kvm -m 256 
> -nographic -kernel /media/ram/uImage -initrd /media/ram/ramdisk 
> -append "root=/dev/ram rw console=ttyS0,115200" -serial 
> tcp::4445,server -net nic

If you think libvirt has a problem generating command line args, then rather than telling us about some random command line args you've created yourself, please provide the actual args that libvirt has generated. See /var/log/libvirt/qemu/$GUESTNAME.log for those.

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





More information about the libvir-list mailing list