vboxsrc05

La versione opensource di VirtualBox, Open Source Edition (OSE) Source code, può essere installata sia partendo dal tarball, rilasciato con lo stesso numero di release di quella distribuita (VirtualBox-1.5.6-2_OSE.tar.bz2), che partendo dall’albero di sviluppo svn (Subversion command line client tool).

I motivi per compilare la versione SVN possono essere diversi, partendo dalla scelta di provare nuove funzionalità introdotte per arrivare alla correzione dei bugs delle versioni rilasciate pacchettizzate, rinunciando però a funzionalità peculiari della versiona PUEL (esempio: USB).

Sul sito di VirtualBox è abbastanza chiara la procedura per la compilazione e questa non vuole essere una guida, ma una cronistoria di quanto fatto (e provato) negli ultimi giorni da me.

Il suddetto albero è visibile su http://virtualbox.org/browser/trunk, mentre le ultime modifiche sono evidenziate su http://virtualbox.org/timeline.

La prima cosa da fare (CONSIGLIATA), se vogliamo tornare al punto di partenza (E’ POSSIBILE FAR COESISTERE LE DUE VERSIONI), è quella di copiare l’albero .VirtualBox/Machines e il file ./VirtualBox/VirtualBox.xml in luogo sicuro, perché verranno modificati tutti i files XML per allinearli alla versione 1.3 (rispetto alla 1.2). Le prime righe del file xml della macchina (nuova versione) sono infatti:

<?xml version=”1.0″?>
<!– Automatically converted from version ‘1.3.pre-linux’ –>
<!– Automatically converted from version ‘1.2-linux’ –>
<!– innotek VirtualBox Machine Configuration –>
<VirtualBox xmlns=”http://www.innotek.de/VirtualBox-settings” version=”1.3-linux”>

(sperando che wordpress mantenga il codice xml)

Mentre non è necessario copiare i dischi immagine VDI.

vboxsrc03
Le librerie necessarie per la compilazione vengono riportate nella pagina delle istruzioni per linux, anche se non mi è chiaro a cosa si riferisce la versione “for VBox version >= 1.6:”
Per quanto mi riguarda ho installato oltre a quelle consigliate anche libqt4-dev:

sudo apt-get install gcc g++ bcc iasl xsltproc uuid-dev zlib1g-dev libidl-dev \
libsdl1.2-dev libxcursor-dev libqt3-headers libqt3-mt-dev \
libasound2-dev libstdc++5 libhal-dev libpulse-dev libxml2-dev \
libxslt1-dev

mentre su un’altra macchina non sono riuscito a capire la libreria GL mancante che causava errore:

kBuild: Linking VBoxSharedFolders
kBuild: Linking VBoxSharedOpenGL
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status

Iniziamo a scaricare l’albero svn:

svn co http://virtualbox.org/svn/vbox/trunk vbox

il messaggio della versione attuale verrà stampato a fine download, per ora è:

Caricamento di oggetto esterno in ‘vbox/src/libs/kStuff/kStuff’
L’oggetto esterno è stato estratto alla revisione 2.
Caricamento di oggetto esterno in ‘vbox/kBuild’
L’oggetto esterno è stato estratto alla revisione 1495.
Estratta revisione 8167.

Passiamo alla compilazione:

cd vbox
$ ./configure
Checking for environment: Determined build machine: linux.x86, target machine: linux.x86, OK.
Checking for kBuild: found, OK.
Checking for gcc: found version 4.2.3, OK.
Checking for as86: found version 0.16.17, OK.
Checking for bcc: found version 0.16.17, OK.
Checking for iasl: found version 20061109, OK.
Checking for xslt: found, OK.
Checking for pthread: found, OK.
Checking for libxml2: found version 2.6.31, OK.
Checking for libxslt: found version 1.1.22, OK.
Checking for libIDL: found version 0.8.10, OK.
Checking for zlib: found version 1.2.3.3, OK.
Checking for libpng: found version 1.2.15beta5, OK.
Checking for SDL: found version 1.2.12, OK.
Checking for X libraries: found, OK.
Checking for Xcursor: found, OK.
Checking for Qt3: found version 3.3.8b, OK.
Checking for Qt3 devtools: found version 3.3.8b, OK.
Checking for Qt4: found version 4.3.4, OK.
Checking for Qt4 devtools: found version 4.3.4, OK.
Checking for Qt4 uic3: found version 4.3.4, OK.
Checking for static stc++ library: found, OK.
Checking for Linux kernel sources: found version 2.6.24, OK.
Checking for ALSA: found version 1.0.15, OK.
Checking for PulseAudio: found version 0.9.10 API version 11, OK.
Checking for compiler.h: compiler.h not found, OK.

Successfully generated ‘/Software/vbox/AutoConfig.kmk’ and ‘/Software/vbox/env.sh’.
Source ‘/Software/vbox/env.sh’ once before you start to build VBox:

leggiamo il file (env.sh) delle variabili

$ source /Software/vbox/env.sh

e compiliamo con:

$ kmk
kBuild: Generating /home/Software/vbox/out/linux.x86/release/revision.kmk
/Software/vbox/kBuild/bin/linux.x86/kmk_redirect -E ‘LC_ALL=C’ -wo /home/Software/vbox/out/linux.x86/release/revision.kmk.ts.tmp — svn info /home/Software/vbox
/Software/vbox/kBuild/bin/linux.x86/kmk_sed -e ‘/^Revision/!d’ -e ’s/Revision\: */export VBOX_SVN_REV=/’ –output /home/Software/vbox/out/linux.x86/release/revision.kmk.ts /home/Software/vbox/out/linux.x86/release/revision.kmk.ts.tmp
/home/Software/vbox/out/linux.x86/release/revision.kmk.ts -> /home/Software/vbox/out/linux.x86/release/revision.kmk

…………..
sizeof(PCIATAState): 0xa84 (2692)
sizeof(SerialState): 0xc8 (200)
tstDeviceStructSize: SUCCESS

Una volta finita possiamo compilare il modulo per il nostro kernel:

$ cd ./out/linux.x86/release/bin/src
$ make

Makefile:56: Using BUILD_TARGET_ARCH=’x86′ from the environment.
Makefile:66: Using BUILD_TYPE=’release’ from the environment.
make KBUILD_VERBOSE=1 -C /lib/modules/2.6.24-12-generic/build SUBDIRS=/home/Software/vbox/out/linux.x86/release/bin/src SRCROOT=/home/Software/vbox/out/linux.x86/release/bin/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-12-generic’

……………….
ld -m elf_i386 -r -m elf_i386 –build-id -o /home/Software/vbox/out/linux.x86/release/bin/src/vboxdrv.ko /home/Software/vbox/out/linux.x86/release/bin/src/vboxdrv.o /home/Software/vbox/out/linux.x86/release/bin/src/vboxdrv.mod.o
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-12-generic’

E’ chiaro che se abbiamo installato i moduli della versione PUEL oppure OSE pacchettizzati, per caricare quello appena compilato, dobbiamo rimuovere il vecchio modulo e inserire il nuovo:

$ sudo modprobe -r vboxdrv
$ sudo insmod out/linux.x86/release/bin/src/vboxdrv.ko

infatti il modulo è leggermente più grande:

prima:
$ lsmod |grep vbox
vboxdrv 61104 0

dopo:
$ lsmod |grep vbox
vboxdrv 77504 1

spostiamoci nella directory di output e eseguiamo il nostro nuovo VirtualBox:

$ cd out/linux.x86/release/bin/
LD_LIBRARY_PATH=. ./VirtualBox

oppure specifichiamo LD_LIBRARY_PATH e percorso in un unico comando:

LD_LIBRARY_PATH=/home/adoldo/vbox/out/linux.x86/release/bin/ \
/home/adoldo/vbox/out/linux.x86/release/bin/VirtualBox

Buona virtualizzazione,

Enjoy :)

vboxsrc04 (SVN 1.5.51)

vboxsrc02

vboxsrc06

vboxsrc07