giovedì 10 gennaio 2008

Macchina virtuale per VMware "da zero" (parte II)

Provo ora a costruire un hard disk virtuale. La prima buona notizia è che, a differenza del file di configurazione vmx, il file vmdk, che definisce i dischi, ha una documentazione ufficiale scaricabile dal sito di VMware. Mi sembra abbastanza chiara. Prima di tutto viene definito cosa è un disco virtuale. In generale un disco può essere composto da una catena di link dove il primo elemento è il disco base e tutti i successivi (collegati in catena) sono i delta link che vengono creati ogni volta che viene generato uno snapshot (cioè una foto istantanea) del disco. Questa architettura permette di avere quindi delle istantanee in momenti precisi e poter eventualmente ripristinare il disco a questi punti. A me per ora interessa creare solamente un "disco base", quindi cercherò di evitarmi complicazioni in questo senso. Ogni link è composto da uno o più extent, un extent è uno spazio "fisico" nel quale sono memorizzati i dati e generalmente è un file del sistema "reale" (ma potrebbe essere anche un hard disk reale o una partizione di un hard disk reale)
  • il link può utilizzare un singolo extent oppure l'insieme di più piccoli extent
  • lo spazio utilizzato può essere allocato tutto in fase di creazione del disco, oppure può crescere dinamicamente nel momento in cui c'è l'esigenza di archiviare i dati.
La struttura di link di un disco virtuale è definita in un file di configurazione ("descriptor file", cioè un file di testo con estensione .vmdk) Dopo questa premessa (essenziale per capire) inizio a creare il file di configurazione (xubuntu.vmdk) secondo le specifiche. Prima di tutto la versione che è 1:
version = 1
Successivamente devono essere inseriti due parametri che definiscono un identificativo univoco del link (CID) e l'identificativo del link padre (parentCID). Gli identificativi sono valori casuali a 32bit e nel file di configurazione sono espressi in forma esadecimale. Nel mio caso il disco base non ha un link padre, quindi parentCID deve essere impostato ad un valore predefinito che da specifiche è (~0x0) (cioè la negazione di uno zero che nella rappresentazione esadecimale diventa ffffffff). In pratica i parametri da impostare sono:
CID=fffffffe
parentCID=ffffffff
Il parametro successivo consente di definire il tipo di disco. Tra le varie opzioni possibili scelgo "twoGbMaxExtentSparse" che genera, per ogni link, diversi extent (con una dimensione massima di 2Gb ciascuno) e alloca lo spazio dinamicamente (così non ho bisogno di occupare effettivamente tutto lo spazio del disco virtuale. Scrivo quindi: createType="twoGbMaxExtentSparse" Ora devono essere definiti i singoli extent. Vorrei un disco da 10Gb, quindi lo costruisco con 5 extent di 2Gb l'uno. La sintassi per definire un extent è la seguente:
modalità dimensione tipo nome
modalità
indica se è in scrittura o in sola lettura, imposto RW (lettura e scrittura)
dimensione
è la dimensione dell'extent espressa in settori, 1 settore = 512 byte. Se voglio un extent da 2 Gb scrivo 2 * 1024 * 1024 * 1024 / 512 = 4194304
tipo
uso SPARSE che indica che lo spazio viene allocato solo quando serve
nome
è il nome del file che contiene i dati. Utilizzando la sintassi consigliata lo chiamo xubuntu-s0001.vmdk la "s" indica che è di tipo SPARSE mentre 0001 è un numero progressivo. Riassumendo scrivo:
RW 4194304 SPARSE "xubuntu-s0001.vmdk"
RW 4194304 SPARSE "xubuntu-s0002.vmdk"
RW 4194304 SPARSE "xubuntu-s0003.vmdk"
RW 4194304 SPARSE "xubuntu-s0004.vmdk"
RW 4194304 SPARSE "xubuntu-s0005.vmdk"
L'ultima parte del file di descrizione del disco definisce come sarà visto l'hardware dalla macchina virtuale. È necessario definire il tipo di interfaccia (adapterType) che imposto a "ide" e la geometria del disco; uest'ultima mi risulta un po' più complessa da capire, e deve essere coerente con la dimensione effettiva del disco. Un'altra volta proverò ad approfondire il significato dei parametri, per ora mi limito ad utilizzare questa tabella. Quindi, copiando, scrivo:
ddb.adapterType = "ide"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "16"
ddb.geometry.cylinders = "16383"
Ora il file di configurazione dovrebbe essere completo. Mi resta solo un dubbio. I file del disco (xubuntu-s0001.vmdk) vengono generati direttamente da VMPlayer all'avvio o devono già esistere? Proviamo a partire senza. Niente: non parte! Proviamo a partire generando dei file vuoti... non parte! Probabilmente è necessario generare i file degli extent già nel formato corretto. La cosa è diventata un po' più complessa del previsto. Ma penso che questa sarà un'altra puntata!

mercoledì 9 gennaio 2008

OpenID

Da qualche tempo ho notato che è possibile autenticarsi per i commenti su blogger utilizzando un OpenID ed il nome mi ha incuriosito. L'idea è intrigante: un solo utente per tutto internet (almeno in teoria). Purtroppo c'è anche il rovescio della medaglia: nella definizione in inglese su wikipedia vengono sottolineati alcuni aspetti critici sul piano della sicurezza. Secondo me non è da trascurare nemmeno il problema della privacy: se ogni sito che supporta OpenID deve verificare le credenziali sul server del provider OpenID, indirettamente quest'ultimo può conoscere i siti visitati dall'utente. Comunque la cosa merita un approfondimento: prima o poi cercherò di capirci qualcosa in più.

sabato 5 gennaio 2008

Macchina virtuale per VMware "da zero" (parte I)

Mi trovo ad aver bisogno di un PC con linux ma non possiedo un hardware sul quale installarlo. Ho però un bel portatile con Windows Vista 1G di RAM e molto spazio sull'HD: vorrei provare ad installare Ubuntu su un server virtuale con VMWare. Nulla di particolare: ci sono molte guide in rete per questo tipo di operazione ma proviamo in diretta. Gli ingredienti sono:
  • VMWare Player (scaricabile dal sito di VMWare)
  • Immagine ISO del CD di installazione di XUbuntu Linux (Ho scelto la distribuzione Xubuntu al posto della "sorella maggiore" Ubuntu poiché è più leggera.
Prima di tutto è necessario generare una macchina virtuale da utilizzare per installare il sistema operativo. Su internet esiste un ottimo sito (EasyVMX) che permette di configurare online la propria macchina virtuale e scaricarla. Purtroppo, sebbene l'avessi già usato con buoni risultati altre volte, la macchina generata da EasyVMX non ne vuole sapere di funzionare: sembra che vada tutto bene ma poi dopo alcuni secondi l'applicazione non risponde più. Tempo sprecato. Decido di tentare un'altra strada: creare a mano i file di configurazione! Dopotutto è sufficiente un file di testo contenente la configurazione ed eventualmente i file di descrizione degli hard disk virtuali. È l'occasione per sperimentare qualcosa di nuovo! Per fortuna qualcuno ha già pensato di scrivere qualcosa sulla sintassi dei file di configurazione vmx! Seguirò le regole suggerite dall'autore del sito: "i file di configurazione piccoli sono meglio di quelli grandi" e "fatto in casa è meglio". Iniziamo. Creo il file xubuntu.vmx contenente il minimo indispensabile:
config.version = "8"
virtualHW.version = "6"
guestOS = "ubuntu"
Provo a far partire la macchina: non farà nulla ma almeno vediamo se parte. Tutto OK: mi dice che non trova il sistema operativo :). Dopo aver eseguito VMware Player con la configurazione creata, vengono aggiunte automaticamente alcune righe al file .vmx: in particolare
floppy0.fileName = "A:"
Questa non mi piace: ha impostato di default un lettore floppy mappato sul drive A: del mio PC reale, siccome non ho il floppy, per evitare problemi la sostituisco con:
floppy0.present = "false"
Inizio ad aggiungere "pezzi" alla macchina. Per la scheda di rete scelgo la modalità NAT che permette di condividere semplicemente la connessione a internet del PC reale e imposto "e1000" come modello di scheda siccome è consigliato per sistemi operativi "moderni":
ethernet0.present= "true"
ethernet0.startConnected = "true"
ethernet0.virtualDev = "e1000"
ethernet0.connectionType = "nat"
La RAM (deve essere un multiplo di 4) la imposto a 256 Mb... meglio non esagerare, altrimenti mi occupa tutta quella reale!
memsize = "256"
La scheda audio (impostazioni minimali consigliate):
sound.autodetect = "TRUE"
sound.fileName = "-1"
sound.present = "TRUE"
Ora aggiungo il lettore CD-ROM mappandolo sull'immagine ISO di Xubuntu:
ide1:0.present = "true"
ide1:0.deviceType = "cdrom-image"
ide1:0.filename = "xubuntu-7.10-desktop-i386.iso"
ide1:0.startConnected = "TRUE"
Provo di nuovo ad avviare la macchina: manca ancora l'hard disk ma il CD di Xubuntu parte anche come "live CD" e posso comunque vedere se funziona. Anche questa volta la fortuna mi assiste: funziona perfettamente, compreso l'accesso a internet. Ora viene la parte che mi sembra più difficile: aggiungere un hard-disk. Nella configurazione aggiungo
ide0:0.present = "TRUE"
ide0:0.deviceType = "disk"
ide0:0.filename = "xubuntu.vmdk"
e dovrebbe essere sufficiente. Ora devo costruire il file di configurazione del disco (.vmdk)... ma meglio rimandare alla prossima puntata!

Iniziamo!

Ci provo un'altra volta. Dopo anni passati a "succhiare" informazioni dalla rete vediamo se riesco a mettere la mia esperienza a disposizione di chi ne dovesse avere bisogno. Gli argomenti di cui parlerò riguarderanno la tecnologia, principalmente informatica e simili... ma chi lo sa... potrebbero esserci anche altre cose. Mi auguro buona fortuna da solo!