[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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 redhat com] 
Sent: Monday, February 04, 2013 6:19 PM
To: Yin Olivia-R63875
Cc: libvir-list 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 :|



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]