Installing LinuxMCE on Virtual Machine via KVM

From LinuxMCE
Revision as of 20:50, 19 August 2009 by Ray N (Talk | contribs)

Jump to: navigation, search

KVM: To badly go where (almost) no man has gone before

In this overview I will try to follow the installation path to get LCME 8.10 into a virtual machine which uses PCI(-E) devices from the host. Normally the option to install on a dedicated computer is the best, but as I want to host several systems, including LCME, websites etc and the ease of testing out new stuff combined with the fact that I want to keep it as green as possible lead me to the conclusion that virtualization was the way to go. Over the last 2 years I've been building systems that have failed in doing what I wanted (XEN and KVM based), but with the latest state of soft- and hardware I'll hope I'll have a better change. The below is my queste for the wanted setup up, step by step.

Virtualization the way I want to do it can only be done with specific hardware/firmware which uses VT-d, a virtualization PCI Passthrough technique embedded in the bios.

Status is concept from step 4

So I will state my machine details first:

  • Motherboard: ASUS P5E VM DO with bios 10.1
  • CPU: Q6600
  • 6 Gb DDR-2 Memory
  • 1 onboard GbE Nic
  • 1 PCI-E GbE Nic
  • 1 Hauppauge PVR-150 (for the moment)


han@obelix:~$ lspci                                                             
00:00.0 Host bridge: Intel Corporation 82Q35 Express DRAM Controller (rev 02)    
00:02.0 VGA compatible controller: Intel Corporation 82Q35 Express Integrated Graphics Controller (rev 02)
00:03.0 Communication controller: Intel Corporation 82Q35 Express MEI Controller (rev 02)                 
00:03.2 IDE interface: Intel Corporation 82Q35 Express PT IDER Controller (rev 02)                        
00:03.3 Serial controller: Intel Corporation 82Q35 Express Serial KT Controller (rev 02)                  
00:19.0 Ethernet controller: Intel Corporation 82566DM-2 Gigabit Network Connection (rev 02)              
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)            
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)            
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)            
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IO (ICH9DO) LPC Interface Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
00:1f.5 IDE interface: Intel Corporation 82801I (ICH9 Family) 2 port SATA IDE Controller (rev 02)
00:1f.6 Signal processing controller: Intel Corporation 82801I (ICH9 Family) Thermal Subsystem (rev 02)
01:00.0 IDE interface: JMicron Technologies, Inc. JMB368 IDE controller
02:00.0 Ethernet controller: Intel Corporation 82572EI Gigabit Ethernet Controller (Copper) (rev 06)
03:01.0 Multimedia video controller: Internext Compression Inc iTVC16 (CX23416) MPEG-2 Encoder (rev 01)
03:02.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 70)

Step 1) Install Ubuntu 9.04 server AMD 64 (should be easy enough if you are able to get LMCE up and running :-) )


Step 2) Make the system current:

 sudo apt-get update
 sudo apt-get upgrade


Step 3) Add some management tools:

sudo wget http://prdownloads.sourceforge.net/webadmin/webmin_1.480_all.deb
sudo apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl
sudo dpkg -i webmin_1.480_all.deb
sudo apt-get install mc

I use webmin to give my server a fixed ip address and perform other administrative tasks. MC (Midnight Commander) is a nice tool to move files around the server.


Step 4) To be able to do remote monitoring of virtual machines, install virt-manager on your remote machine. If your are using Jaunty on your remote system, install ssh-askpass as per [[1]]

sudo apt-get install ssh-askpass

or use ssh keys


Step 5) Download the latest kernel from The Linux Kernel Archives [[2]] and unpack it into /usr/bin.

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.bz2
sudo tar -jxvf linux-2.6.30.4.tar.bz2 -C /usr/bin


Step 6) Install dependencies for make menuconfig.

sudo apt-get install gcc ncurses* kernel-package fakeroot


Step 7) Configure the new kernel.

cd /usr/bin/linux-2.6.30.4
sudo make menuconfig
   * set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
   * set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
   * set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"
   * optional setting: set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"


Step 8) Build the new kernel.

sudo make-kpkg clean
sudo fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

You can grab a coffee, make a hot meal, have a sleep ;-)


Step 9) Install The New Kernel

After the successful kernel build, you can find two .deb packages in the /usr/bin directory.

cd .. 
ls -l linux*

Install them:

sudo dpkg -i linux-image-2.6.30.4-custom_2.6.30.4-custom-10.00.Custom_amd64.deb
sudo  sudo dpkg -i linux-headers-2.6.30.4-custom_2.6.30.4-custom-10.00.Custom_amd64.deb


Step 10) Check that menu.list has been updated with your new kernel

cat /boot/grub/menu.lst
sudo reboot