just another site in the cloud
Xen USB forwarding
Jun 4th
Yesterday i was playing with Xen 3.4. I wanted to share my printer to the local network (using CUPS). I have a domU (using HVM), that acts as the internal server. Of course i wanted to configure CUPS on this domU, so i needed to forward the USB printer to the virtual machine.
I followed the instructions in the official Xen wiki. Since i’m using Xen 3.4 and HVM, the only option available (according to the wiki) was to use the qemu-dm emulation/passthrough. So i’ve retrieved the vendorId and productId of my printer, using lsusb and modified the configuration file of my virtual machine as explained in the documentation.
Everything seemed to work, but when i powered off the printer and then powered it on again, the domU wasn’t able to “see” it anymore. This is very annoying since i don’t want to leave it powered on all the time. To re-add the printer to the domU while it’s running i discovered that i can use the command xm usb-add. The problem now was to find an automatic way to run this command when the printer is powered on/off or disconnected/reconnected.
The idea was to use udev. So i wrote a very simple rule that runs a script when the printer is powered off/on (or disconnected/reconnected).
I created the file /lib/udev/rules.d/96-printer.rules:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", RUN+="/etc/xen/scripts/printer"
Where xxxx and yyyy are the values retrieved from lsusb as explained in the xen instructions. Then i created the file /etc/xen/scripts/printer:
#!/bin/bash /usr/sbin/xm usb-add domain host:xxxx:yyyy
That simply runs the usb-add command to re-add the printer to my domU (of course you must replace domain with the name of your domU and add the execution permission to the script).
Sonar
May 3rd
Qualche giorno fa ho scoperto Sonar, un tool davvero molto utile e ben fatto per l’analisi statica della qualità del codice.
Really secure hints…
Mar 5th
No, non è uno scherzo.
Consigli sulla scelta di una “buona” password, sul sito Fineco
Xen on Ubuntu 9.10 (Karmic Koala) server
Nov 25th
Qualche giorno fa ho provato ad installare Xen sull’ultima versione di Ubuntu Server (9.10, Karmic Koala). Il processo è stato davvero molto complicato. C’è infatti da notare che con questa nuova versione il team di Ubuntu ha apportato numerosi cambiamenti. Innanzitutto Xen non è più supportato ufficialmente, in quanto si è deciso di utilizzare KVM. Inoltre con questa nuova release si è deciso di passare a GRUB2, sebbene sia ancora in versione beta!
In ogni caso per installare Xen per prima cosa ho dovuto compilare manualmente un kernel adeguato. Esistono fondamentalmente 3 scelte:
- Far compilare il kernel direttamente dal pacchetto di Xen (scaricabile dal sito ufficile). In questo caso però si tratta di una versione abbastanza vecchia, 2.6.18.
- Scaricare un kernel vanilla ed applicare delle patch.
- Utilizzare un kernel, ancora in versione di sviluppo, con paravit_ops.
Ho scelto l’opzione 2 e, dopo aver patchato e compilato manualmente il kernel, ho cercato invano il tradizionale file di Grub per farlo partire al boot. Con la nuova versione del bootloader però le cose sono cambiate ed i file sono differenti. Nello specifico il file di configurazione è /boot/grub/grub.cfg, anche se non è consigliato editarlo in quanto viene auto-generato a partire da altri file.
Anche la sintassi del file è cambiata però. In particolare per Xen ora bisogna utilizzare la parola ‘multiboot’, al posto della vecchia ‘kernel’. L’entry finale risulta quindi simile alla seguente:
menuentry "Xen 2.6.31.5" {
.....
multiboot /xen-3.4.gz dom0_mem=512M
module /vmlinuz-2.6.31.5 root=/dev/mapper/main-root ro
module /initrd.img-2.6.31.5
}
In particolare ora si utilizza la keywork ‘multiboot’ invece di ‘kernel’.
In ogni caso però una configurazione di questo tipo non ha avuto successo: il kernel parte ma presenta degli errori durante il montaggio della partizione root. Il problema deriva dal fatto che le opzioni non vengono passate al kernel (in particolare root=/dev/…). Questo poiché esistono ancora dei problemi in GRUB2 con la modalità multiboot.
La (bruttissima) soluzione è stata quella di ricompilare il kernel direttamente con le opzioni da passare. Questa tecnica si adotta in genere nei sistemi embedded, per passare sempre delle opzioni di default. In ogni caso, impostando come command line options appunto “root=/dev…. ro” (nel mio caso) il problema si risolve. Naturalmente se volessimo passare un’altra opzione al kernel sarebbe necessario ricompilarlo!
In aggiunta a quanto detto, naturalmente, è necessario compilare manualmente anche xen (nel caso si voglia utilizzare l’ultima versione 3.4, in quanto nei repository si trova la 3.3). Questo processo però non presenta particolari problemi.
In conclusione quindi l’installazione di Xen non è stata affatto semplice, in particolare stupisce l’inclusione in una versione server di ubuntu di un pacchetto (GRUB2 appunto) ancora in beta, con evidenti problemi.
