Aggreghiamo le notizie italiane sull'Open Source
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.

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
