Monthly Archives: November 2011

Installare KVM su Ubuntu Linux 10.04, 10.10 e Fedora/CentOS

KVM (Kernel Based Virtual Machine) è un’ottima piattaforma di virtualizzazione per GNU/Linux utile per creare una piccola Infrastruttura Cloud privata.

Kernel Based Virtual Machine Logo

Per chi non lo conoscesse, KVM è un progetto Open Source nato qualche anno fa con l’intento di sviluppare una nuova architettura di virtualizzazione alternativa a XEN; a differenza di XEN, per il quale è necessaria una versione particolare del Kernel Linux, KVM è caricabile nel Kernel Linux come un modulo sacrificando leggermente le performances ma rendendone più semplice il Setup. KVM supporta una virtualizzazione completa sfruttando le istruzioni per virtualizzazione delle CPU (AMD-V o Intel-VT) con le quali è possibile utilizzare l’accelerazione Hardware nativa.

KVM support libvirt ed implementa i nuovissimi driver VirtIO per periferiche virtuali di Input/Outut come schede di rete e storage ad alte performance.

Installare KVM è molto semplice e veloce sia su Ubuntu che su Fedora/CentOS, la procedura richiede una manciata di minuti.

Questa è la procedura su Ubuntu 10.04, 10.10, probabilmente funzionante anche sulle versioni più recenti.

apt-get install kvm qemu-kvm libvirt-bin virt-manager

Su Fedora e CentOs invece è necessatio lanciare il seguente comando:

yum install kvm kmod-kvm libvirt virt-manager

Fate attenzione ad installare anche virt-manager (non è sempre una dipendenza) che è un’ottimo front end ad interfaccia grafica – sviluppato da Red Hat – per gestire le macchine virtuali KVM.

Virt-manager è sviluppato sulla libreria libvirt, permettendo quindi una gestione contemporanea di parecchi Host remoti con differenti piattaforme di virtualizzazione – ad oggi libvirt è compatibile con KVM/QEMU, XEN, LXC, OpenVZ, User Mode Linux, Virtualbox, VMware ESX e GSX, VMware Workstation e Player, Microsoft Hyper-V.

Una volta completata la procedura di installazione potete creare una nuova macchina virtuale direttamente con Virt-Manager oppure con il seguente comando da shell:

virt-install -n myVirtualMachine -r 512 --virt-type=kvm -f /path/to/diskImage.img --vnc -c /path/to/osImage

Il flag -n è il nome della Macchina Virtuale, -r la quantità di RAM della Macchina, -f il path ad un file immagine di un dispositivo a blocchi e -c il path ad un’immagine ISO.

Per creare un file immagine di un dispositivo a blocchi è sufficiente utilizzare dd con il quale verrà creato un file binario grezzo.

Parsing di file XML con Python e lxml

Da quando Ajax, le applicazioni Web ed il cloud computing si sono grandemente diffusi, è sempre più importante scegliere il miglior protocollo di comunicazione tramite il quale rendere semplice e veloce la comunicazione tra Client e Server.

Le uniche due specifiche standard per l’interscambio di dati stutturati tra un Browser e un Server (ospitante API) sono JSON ed XML. Entrambi i protocolli hanno vantaggi e svantaggi ed entrambi aggiungono overhead alla comunicazione; per JSON però esistono librerie di semplice utilizzo che con poche righe di codice permettono la serializzazione e la de-serializzazione dei dati trasferiti, mentre per XML tutto è leggermente più complicato.

Oggi vedremo in azione Python che grazie ad LXML mette a disposizione ottimi strumenti per il parsing di dati strutturati con XML. LXML offre strumenti per XML, HTML ed HTML5 ma anche per CSS.

LXML vanta ottime prestazioni, sicuramente le migliori su Python, essendo direttamente sviluppato sulle API della potente libreria libxml2. Qui potete trovare dei benchmark dal sito ufficiale di LXML e dal blog di Ian Bicking, nel blog di Ian emerge che LXML ottiene le migliori prestazioni nel Parsing e nella Serializzazione pur richiedendo una superiore quantità di Ram. LXML è inoltre una libreria solida e stabile. Utilizzo io stesso LXML in produzione su alcuni Server Web per l’intescambio di dati in applicazioni Web ed applicazioni cloud.

Eseguire il parsing di dati XML è molto semplice, soprattutto utilizzando Xpath, e permette un buon livello di flessibilità. Per l’esempio è stato utilizzato un file XML contenente Feed RSS non molto complesso, ma giungiamo subito al codice.


#Importiamo la libreria html, xpath è compatibile sia con HTML che XML
#per comodità utilizziamo un Alias (parser)
from lxml.html as parser

#Apriamo in maniera tradizionale il file XML
f = open("myXML.xml")
file = f.read()

#Importiamo l'XML in un oggetto lxml
xmlDoc = parser.document_fromstring(file)
for item in xmlDoc.xpath("//item"):

#Estraiamo il contenuto testuale del nodo XML
print item.text_content()

#Estraiamo dati dagli attributi del nodo XML
print item.attrib['attribName']

La riga più interessante è quella che contiene xmlDoc.xpath che vuole come argomento il nome del tag xml/html da estrarre dal documento XML, ovviamente è possibile anche effettuare selezioni di nodi più complesse di quella nell’esempio ma un parsing tradizionale è sempre il punto di partenza.