A capocchia

Mar 9, 2012 - 0 comments - Archiviato in: #Cazzate

9 Marzo 2012, Gian Antonio Stella, parlando di disparità di stipendio tra commessi parlamentari e direttori di musei, dice:

Che senso ha che lo Stato tratti con tanta disparità, a capocchia, figli e figliastri?

1994, comune di Gravina in Puglia, elezioni Comunali. 220px-Macro_of_a_matchSi lavorava con Luca alla prima versione di “Elezioni Comunali per Windows”, una applicazione che predatava quanto oggi si può fare in quattro righe con Adobe Flash. Ci si imbarcamenava con la calcolatrice nell’individuare le “sezioni campione” e Berlusconi (in persona?) inviava da Milano una “signora esperta in sondaggi” che aveva determinato, tramite pochissime interviste telefoniche, una netta vittoria del candidato del centro destra. Ci chiesero se potessero generare “la grafica” per quei dati e Luca stizzito disse che non voleva metterci la faccia e il nome su dati ottenuti con il “metodo a capocchia”. Ora c’è da precisare che la parola capocchia, in gravinese, ha un significato occulto designante una parte ben precisa del membro maschile. E “metodo a capocchia” aveva una accezione molto diversa da quello che aveva “captato” la signora milanese, a cui la locuzione “a capocchia” suonava talmente bene da ripeterla almeno quattro o cinque volte in diretta tivvì (e la TV era locale!).

Mi piace credere che se l’espressione atterrata sulle pagine del corriere di oggi sia in un certo senso nata in quella precisa occasione; ed io c’ero.

-quack

Xen recipes #4: Xen Cloud Platform 1.5 beta

Mar 5, 2012 - 0 comments - Archiviato in: #Virtualizzazione

XCP è una versione standalone di Xen basata su CentOS. Ovvero da usare out-of-the-box invece di installare l’OS, poi Xen, poi configurare, bestemmiare, inveire, ecc.

È basata su XenServer allo stesso modo in cui CentOS è basato su Red Hat: ovvero siccome il sorgente è pressoché pubblico, non è altro che una ricompilazione accurata di quanto disponibile al punto che è possibile installare il “client” di XenServer per farlo parlare con XCP. XenServer 6.0 a sua volta è una ridistribuzione minima di CentOS + Xen4.1 + altri tool interessanti per la virtualizzazione + client abbastanza carino + preconfigurazione no-nonsense (infatti SELinux non mi pare sia neanche installato).

L’unica noia è che non so per quale motivo, ufficialmente si parla di stabilità ma io non ci credo, alcune feature di Xen non sono disponibili direttamente ma sono attivabili con workaround non ufficialmente supportati.

Quando ho cominciato l’esperimentòn la versione di XCP disponibile era la 1.1 basata su XenServer 5.6 basato a sua volta su Xen 3.0. Poche settimane fa invece è stata rilasciata la beta della versione 1.5 che ho installato su un disco di sistema separato, onde evitare rimpianti. Applicando tutti i workaround del caso XCP 1.5 offre tutto quello che mi ha finora offerto Fedora+Xen e anche qualcosina in più.

I workadound servono a:

  1. supportare il passaggio di dischi fisici direttamente al guest. È incredibile XS6 permetta di farlo solo con dischi rimuovibili: la “scusa” è che i dischi fisici non permettono la migrazione, ma questo cozza con il fatto che c’è il supporto del passthrough della scheda grafica che impedisce migrazioni.
    Il trucco è di aggiungere due regole al file /etc/udev/rules.d/50-udev.rules come spiegato in questo post. Le mie ad esempio:
    ACTION=="add", 
    ID=="1:0:0:0|3:0:0:0|6:0:0:0|7:0:0:0|8:0:0:0|9:0:0:0",
    SYMLINK+="xapi/block/%k", RUN+="/bin/sh -c
    '/opt/xensource/libexec/local-device-change
    %k 2>&1 >/dev/null&'"
    ACTION=="remove",
    ID=="1:0:0:0|3:0:0:0|6:0:0:0|7:0:0:0|8:0:0:0|9:0:0:0",
    RUN+="/bin/sh -c '/opt/xensource/libexec/local-device-change
    %k 2>&1 >/dev/null&'"
  2. supportare il PCI passthrough, per la stessa stupida scusa accampata al punto 1.
    Per farlo bisogna editare il file /boot/extlinux.conf e “nascondere” i dispositivi da passare ai guest:
    append /boot/xen.gz dom0_mem=752M lowmem_emergency_pool=1M
    crashkernel=64M@32M console= vga=mode-0x0311 ---
    /boot/vmlinuz-2.6-xen root=LABEL=root-ogqzyliv ro
    xencons=hvc console=hvc0 console=tty0 quiet vga=785 splash
    pciback.hide=(00:1a.0)(00:1b.0)(00:1d.0)
    --- /boot/initrd-2.6-xen.img

    Una volta riavviato e verificato che i dispositivi sono disponibili al pass-through (xl pci-list-assignable-devices), bisogna assegnarli alle macchine virtuali con il comando:
    xe vm-param-set 
    other-config:pci=0/0000:00:1a.0,0/0000:00:1b.0 uuid=...
    dove lo uuid della macchina virtuale che interessa si ottiene con:
    xe vm-list
  3. Manipolare il numero di versione in modo tale che il client riconosca il server come XenServer 6.0.99. P
  4. UPDATE: se ci si vuole connettere alle VM senza usare XenCenter (ad esempio su un Mac) è necessario creare dei tunnel SSH in quanto VNC non è esposto ad ip esterni. Per farlo ci sono un paio di tutorial:
    Using VNC to Connect to a XenServer VM’s Console
    How to Set Up VNC Channels Using PuTTY

In aggiunta ho trovato anche molto utile questo post in cui viene presentato uno script che faccia partire una serie di macchine virtuali in automatico.  UPDATE: un’alternativa è quella di creare una vApp chiamata “autostart” e lanciare la vApp tramite rc.local con:

sleep 10 && UUID=`/opt/xensource/bin/xe appliance-list 
name-label="autostart" | /bin/grep uuid | /bin/awk '{ print $5 }'`
&& /opt/xensource/bin/xe appliance-start uuid=$UUID

(su unica riga)

Questa seconda alternativa presenta il vantaggio che tramite la configurazione della vApp è possibile determinare l’ordine di lancio e il delay di ogni VM.

Last but not least da linea di comando è possibile settare la priorità delle singole VM con i comandi:

xe vm-param-set uuid=<Template UUID> VCPUs-params:weight=100
xe vm-param-set uuid=<Template UUID> VCPUs-params:cap=100

Per ora, a differenza di Fedora, non mi sembra che si sia presentata la necessità di modificare le priorità di default di ogni singola VM se non tramite l’aggiustamento di numero di VCPU assegnatele.

Fatto un calcolo finale il “costo” dei workaround è simile al “costo” di tutta una serie di configurazioni aggiuntive da fare in Xen puro. In cambio XenServer/XCP offre la possibilità di creare snapshot delle macchine virtuali, cosa non disponibile in Xen se non tramite artifici non proprio perfetti.

Il mio giudizio finale è che XCP competa molto bene con VmWare ESXi: quest’ultimo è ricchissimo di feature non tutte decisamente utili a patto di un costo abbastanza elevato e il mancato supporto al VGA passthrough, indispensabile per il Cray1. E che sia una beta non lo si sente affatto.

UPDATE: un paio di altre informazioni utili su XCP/XenServer.

PARAVIRTUALIZZAZIONE: questi sono i comandi utili per configurare le macchine para-virtuali ed in particolare Solaris

xe vm-param-set uuid=... PV-kernel=<host path to 'unix'>
xe vm-param-set uuid=... PV-ramdisk=<host path to 'boot_archive'>
xe vm-param-set uuid=...
PV-args='/platform/i86xpv/kernel/amd64/unix -B console=ttya'
xe vm-param-set uuid=... HVM-boot-policy=
xe vm-param-set uuid=... PV-bootloader=

PCI/VGA-PASSTHROUGH: se si sceglie di configurare la scheda grafica virtuale tramite l’interfaccia grafica del client, i setting relativi al PCI-Passthrough verranno sovrascritti. Per supportare il passthrough di dispositivi PCI in combinazione con la scheda grafica è importante usare la riga di comando come specificato sopra.

UPDATE 2:

Una delle ultime cose che ho fatto è stata la personalizzazione degli splash screen (ce ne sono due). Il primo è embedded nel ramdisk. Per modificarlo basta editare il file /usr/share/citrix-splash/background.png, fare un backup di /boot/initrd-2.6.-xen.img e ricrearlo con il comandone:

mkinitrd --theme=/usr/share/citrix-splash --builtin=dm-mirror 
--builtin=dm-snapshot --builtin=dm-zero
--builtin=scsi_trasnport_fc –f /boot/initrd-2.6-xen.img `uname -r`

Il secondo splash screen, animato, è più abbordabile ed è contenuto nel folder /usr/share/splashy/themes/default. Una volta editato lo si setta come splash screen attivo tramite:

splashy_config -s default

L’immagine che mi son scelto l’è carina:

background

E questa dovrebbe essere l’ultima noiosissima ricetta della serie, serie che somiglia tantissimo al Cray 1 deployment document.

-quack

Xen recipes #3: guest OpenIndiana 151 para-virtualizzato

Feb 28, 2012 - 0 comments - Archiviato in: #Virtualizzazione

Questo post è obsoleto. 

Per installare Solaris (o qualsiasi derivato come Nexenta/OpenIndiana/ecc.) c’è bisogno di fare ricorso alla para-virtualizzazione. In questo caso il sistema operativo guest viene fornito di un kernel appropriato e il tutto si trasforma in un piccolo esercizio di ricorsione.XenFu

Sotto questa modalità l’hypervisore lancia ed esegue direttamente il kernel para-virtualizzato ed il problema è quello di estrarlo e copiarlo sul sistema operativo host insieme a qualche altro pezzo di sistema (nel caso di Solaris c’è bisogno anche del boot_archive). Ergo occorre:

  1. estrarre e copiare i file platform/i86xpv/kernel/amd64/unix e /platform/i86pc/amd64/boot_archive dall’iso in una directory sul sistema operativo host (ad es.: /xen/openindiana)
  2. creare un file di configurazione usando il seguente template:
    name='openindiana'
    memory = "2048"
    vif = [ "mac=FF:FF:FF:FF:FF:FF, bridge=br0” ]
    disk =  [
            "file:/xen/openindiana/oi.img,xvda,w",
            ]
    vcpus=2
    kernel = "/xen/openindiana/unix"
    ramdisk = "/xen/openindiana/boot_archive"
    extra = "/platform/i86xpv/kernel/amd64/unix -B console=ttya"
  3. lanciare la macchina virtuale ed eseguire l’installazione.

Terminata l’installazione, prima di spengere la macchina virtuale, vanno annotati il root dataset (comando “zfs list”; valore di ‘default’ rpool/ROOT/openindiana) e il nome del disco di avvio così come identificato dal sistema (comando “echo format”, dovrebbe restituire qualcosa come xdf@51712).

Successivamente, prima del primo riavvio, va modificata la linea evidenziata in modo da indirizzare il kernel appena installato verso il file system appena creato con la seguente:

extra = "/platform/i86xpv/kernel/amd64/unix -B zfs- 
bootfs=rpool/ROOT/openindiana,bootpath=/xpvd/xdf@51712:a"

(unica riga)

A questo punto il sistema guest si avvierà e comincerà a funzionare come da aspettative. Se si vuole usare openindiana come server SMB, bisogna avere l’accortenza di aggiungere questa riga al file di configurazione /etc/pam.conf altrimenti l’autenticazione SMB non funzionerà come ci si aspetta:

other [TAB] password required [TAB] pam_smb_passwd.so.1 [TAB] nowarn

([TAB] rappresenta il carattere di tabulazione).

Un’ultima importante osservazione è che alcune operazioni, come l’import di pool esistenti, tendono a modificare il file di ramdisk. Per cui, prima di riavviare per l’ultima volta potrebbe essere necessario forzare l’aggiornamento del ramdisk (che solitamente avviene durante l’operazione di shutdown) con:

bootadm update-archive -f

e sovrascrivere il ramdisk presente sul sistema operativo host con:

scp /platform/i86pc/amd64/boot_archive 
root@ip_host:/xen/openindiana

(unica riga)

Teoricamente si può bypassare questa necessità di tenere copie aggiornate di kernel e ramdisk sul sistema operativo host usando dei bootloader di guest alternativi come pygrub, però purtroppo l’ultima versione di pygrub non supporta l’ultima versione di ZFS per cui, fino a patch definitiva, quella di sincronizzare i file sull’host è una pratica necessaria.

Le performance di una macchina para-virtualizzata su XEN tendono ad essere significativamente superiori a quelle di una macchina fully virtualized; c’è infine da aggiungere che purtroppo le ultime versioni di Solaris non girano correttamente in maniera fully virtualized e pertanto la para-virtualizzazione rappresenta l’unica via di uscita.

-quack

Linkografia utile:

http://www.gossamer-threads.com/lists/xen/users/200909
http://docs.oracle.com/cd/E19082-01/820-2429/smbservertasks/index.html
http://tinyurl.com/89m4j8s
http://360is.blogspot.com/2010/03/paravirtualized-opensolaris-solaris-on.html

Prossima puntata le variazioni sul tema XCP 1.5, versione opensource di XenServer 6

LunedìQuìz–serie 2012 #2

Feb 20, 2012 - 0 comments - Archiviato in: #Codice

Implementare la seguente funzione:

bool SumExists(int[] data, int sum)

che restituisce true se esistono due elementi nell’array data la cui somma è sum e definirne la complessita in notazione O.

-quack

P.S. titolo leggermente alterato per arginare l’eventuale ondata spam

Inactive memory

Feb 16, 2012 - 0 comments - Archiviato in: #Apple

Una delle feature più chiacchierate e meno comprese di Windows, addirittura sin dai tempi di Vista, è quella di SuperFetch, una cache predittiva abbastanza evoluta. Usata anche a sproposito per spalare cacca su Windows.

In Apple hanno pensato di fare una cosa simile inventando la inactive memory:

Inactive memory

This information in memory is not actively being used, but was recently used.

For example, if you've been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. This Inactive memory is available for use by another application, just like Free memory.  However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading Mail from the slower hard disk.

Bella pentola, ma come al solito si sono scordati il coperchio:

that this memory may be freed at any moment. However in practice, it just keeps on accumulating until you run out of free memory. In this case a sane option for the OS would be freeing the inactive memory. Instead the OS X decides toswap the inactive memory on the disk. So when running out of free memory and having a 1,5 gigabytes of inactive memory left, your OS starts paging the unused inactive memory to disk instead of freeing it for applications to use. Not only this causes your computer to slow down, it also is counter-intuitive in the terms of the original idea of inactive memory: when it's on disk, it definitely is not made active quickly.

Interessante.

-quack

Beware of the doghouse

Feb 13, 2012 - 0 comments - Archiviato in: #Cazzate #Video

Visto che siamo ufficialmente a S. Valentino, un consiglio per i lettori che stanno ancora pensando al regalo per la morosa/fidanzata/moglie:

-quack

Lunedì quiz - serie 2012 #1

Feb 7, 2012 - 0 comments - Archiviato in: #Codice

Dato un albero binario (vedasi esempio figura)

image

si implementi la funzione:

TrovaAntenatoComune(node root, node first, node second)

che restituisce l’antenato comune più “vicino” ai due nodi o sollevi un’eccezione se uno dei due nodi non è raggiungibile dalla radice.

Esempio:

TrovaAntenatoComune(A, D, I) = B
TrovaAntenatoComune(A, P, F) = E

-quack

Creare un disco di installazione di Win7 UEFI

Feb 1, 2012 - 0 comments - Archiviato in: #Windows

Teoricamente su un sistema UEFI il disco di installazione di Windows 7 dovrebbe installarsi automaticamente in modalità UEFI; praticamente è anche molto probabile che qualche baco nel BIOS pregiudichi questa possibilità.

A che serve lanciare l’installazione di Win7 in modalità UEFI? A poter installare il sistema su un disco partizionato GPT anziché MBR (necessario ad esempio per dischi >2 TiB).

Ho provato ad utilizzare una delle tantissime guide che spiegano come installare TianoCore (un emulatore UEFI) ma non sono arrivato da nessuna parte.

La soluzione che funziona è questa:

  1. scaricare oscdimg.exe (sarà parte di qualche DDK, WWF, ecc.)
  2. inserire il disco di installazione nel lettore DVD-ROM (supponiamo D:)
  3. lanciare da riga di comando:
    oscdimg -w4 -os -lWin_7_x64_UEFI_ISO9660 -m -o -n -pEF –e 
    -bd:\efi\microsoft\boot\efisys.bin d:\ win7uefi.iso

Il risultato è un file ISO masterizzabile che, in presenza di una scheda madre che supporti UEFI, avvierà l’installazione in tale modalità senza passare dal BIOS.

-quack

Xen recipes #2: creazione di macchine virtuali

Jan 31, 2012 - 0 comments - Archiviato in: #Virtualizzazione

Una delle migliori feature di Xen, secondo mio modesto parere, è il supporto di due tipi di virtualizzazione. Quella più tradizionale, vera e propria emulazione di una macchina fisica, e quella che viene definita para-virtualizzazione.

La para-virtualizzazione è una variante della virtualizzazione in cui il sistema operativo host espone delle periferiche virtuali e non emulate al sistema operativo guest, il cui kernel deve essere scritto in modo appropriato per gestire queste periferiche (in parole povere il kernel para-virtualizzato sa di avere a che fare ad esempio con una VCPU anziché un processore vero). Questo kernel modificato è disponibile in quasi tutte le distro Linux ed in generale con sistemi operativi Unix based (Solaris, BSD, etc.). La para-virtualizzazione pertanto non può essere usata per far girare dei guest Windows.

Una macchina virtuale in XEN non è altro che un file di configurazione che elenca le proprietà e le periferiche emulate/passate nella macchina virtuale. Il template da usare, per

device_model = '/usr/lib/xen/bin/qemu-dm'
kernel = '/usr/lib/xen/boot/hvmloader'
builder = 'hvm'
memory = 4096
name = 'vm_name'
vif = [
        'type=ioemu, bridge=br0, mac=00:0b:27:1f:ed:75, model=e1000'
      ]
disk = [
        'phy:/dev/disk/by-id/scsi-SATA_SAMSUNG_HM640,ioemu:hda,w',
        'file:/xen/whs/install.iso,ioemu:hdc:cdrom,r'
]
pci = [
        '00:1d.0',  #front usb panel
]
boot = 'd'
vnc = 1
vncdisplay = 1
usb = 1
usbdevice = 'tablet'
vcpus = 4
localtime = 1

Le righe evidenziate sono quelle da modificare e che contengono il succo della configurazione della macchina virtuale.

Memory: quantità di RAM assegnata in MB
Name: nome della VM
Vif: contiene l’elenco delle schede di rete virtuali; è fondamentale settare correttamente il nome del bridge e creare un mac address ad hoc; se non si specifica il mac address ne verrà assegnato uno a caso diverso ad ogni avvio della macchina virtuale (Windows usa il mac address per l’attivazione)
Disk: l’elenco dei dischi fisici/virtuali da assegnare.
Pci: elenco delle schede PCI visibili al guest (richiede che il sistema supporti VT-d/IOMMU e che la scheda PCI sia sganciata dal sistema operativo host)
Vncdisplay: è la porta vnc da usare. 1 significa porta 5901, 2 significa 5902, ecc.
Vcpu: numero di CPU virtuali da assegnare

Prima di far partire la macchina virtuale bisogna però sganciare dal sistema host le periferiche PCI associate al guest. Per far ciò bisogna conoscere sia il PNP-id della periferica, sia l’indirizzo PCI associato.

Il secondo si ottiene usando il comando lspci che sul mio sistema sputa qualcosa del genere:

[…]
00:1d.0 USB Controller: Intel Series Chipset Family USB Enhanced
Host Controller #1
01:00.0 VGA compatible controller: [FirePro V5700]
01:00.1 Audio device: ATI Technologies Inc RV710/730
[…]

Per ottenere il PNP-id va usato la variante:

lspci -n

che restituisce nel caso in esempio:

00:1d.0 0c03: 8086:1c26 (rev 04)
01:00.0 0300: 1002:949e
01:00.1 0403: 1002:aa38

A questo punto si ha a disposizione sia il PCI-id sia il PNP-Id e si può chiedere all’host di sganciare la periferica con questa serie di comandi prontamente trascritta in un file .sh:

echo "8086 1c26" >/sys/bus/pci/drivers/pci-stub/new_id
echo "0000:00:1d.0" >/sys/bus/pci/devices/0000:00:1d.0/driver/unbind
echo "0000:00:1d.0" >/sys/bus/pci/drivers/pci-stub/bind

La macchina virtuale poi può essere fatta partire via terminale sudato con:

xm create nome-file-configurazione

Una volta partita ci si può collegare usando un qualsiasi client VNC usando l’indirizzo IP della macchina host e la porta specificata nel file di configurazione. Nel caso in esempio poi tutte le periferiche USB collegate al controller PCI verranno viste nativamente dal sistema operativo guest (nel mio caso una stampante e una scheda audio USB).

Il passthru della scheda grafica richiede qualche piccola operazione dal lato client: vanno dapprima installati i driver della scheda grafica “fisica” assegnata, che verrà prontamente rilevata e riconosciuta dal sistema operativo guest, e in seguito va disabilitata la scheda grafica emulata tramite device manager. A causa di qualche problema di instabilità, il file di configurazione di Windows 7 contiene queste ulteriori due righe:

timer_mode = 2
viridian = 1

Last but not least l’uso di driver para-virtualizzati (firmati) disponibili a questa pagina può portare a qualche interessante miglioramento in termini di prestazioni delle periferiche ‘emulate’ (scheda di rete e hard drive).

Sulla necessità della seconda non sono però molto sicuro. E questo è quanto è necessario per ottenere ‘o miracol di una workstation completamente virtualizzata

Il prossimo appuntamento sarà dedicato alla para-virtualizzazione di Solaris.

-quack

Economia applicata uan-o-uan

Jan 30, 2012 - 0 comments - Archiviato in: #Seattle e dintorni

Cosa si può fare per trasformare il traffico su un ponte galleggiante di 640 metri da così:

bridgetraffic

a così:

520vc00241?

Basta introdurre un pedaggio dal costo che va di un minimo di 1.60$ ad un massimo di 5.00$ per singola traversata (0.78 centesimi al metro, probabilmente tra i più cari del mondo). Il tutto per finanziare il nuovo progetto di allargamento dello stesso ponte. Il sistema di pedaggio automatico, tra i più avanzati al mondo, ha richiesto diverse iterazioni e rinvii ma è stato finalmente “battezzato” lo scorso 29 dicembre e compiva ieri il suo primo mese di vita.

La leggenda narra di colleghi in preda alla sindrome di astinenza da traffico che dichiarano di attraversare il ponte ad oltre 100mph (per intenderci altra leggenda narra che colti in fragrante oltre i 90mph ci sia l’arresto).

-quack

P.S. sono totalmente favorevole al sistema di tassazione “a consumo”, solo che per ovvie ragioni le tariffe parrebbero elevate. O si lascia intervenire la legge della domanda e dell’offerta oppure (molto più probabile) si introduce un pedaggio sul ponte cugino e parallelo.

Al lupo

Jan 30, 2012 - 0 comments - Archiviato in: #Software #Trusted Computing

Altre due parole sulla questione secure boot.

Riflettevo alla periodicità di certi allarmismi:

C’è stato allarmismo quando è stato imposto l’utilizzo di driver firmati per Windows x64.

C’è stato tantissimo allarmismo quando Windows Vista ha aggiunto il supporto al TPM.

Oggi c’è tantissimo allarmismo per l’introduzione del supporto, in alcuni casi obbligatorio, del secure boot.lupooooo

In realtà da sempre l’introduzione di una nuova piattaforma (x64 allora, ARM oggi) è sempre occasione per ripensare a cosa si poteva fare meglio. I driver firmati sono un passo avanti a tanta robaccia che prima installava pezzi di codice in kernel mode. Ma il salto è stato possibile solo con il cambio di piattaforma in virtù delle qualità di backward compatibility dell’ecosistema Windows, qualità più uniche che rare.

Anche allora si gridava all’anatema: ma oggi, la mancanza di driver non firmati per WinX64 la sente davvero qualcuno?

-quack

Xen recipes #1: HW e software di base

Jan 24, 2012 - 0 comments - Archiviato in: #Virtualizzazione

Ingredienti fondamentali per riprodurre ‘o miracolo.

  1. Scheda madre Intel che supporti VT-d. Ci sono altri produttori che supportano VT-d nei loro modelli ma il tutto è abbastanza fumoso. La mia scelta è andata per una DQ67OW
  2. Processore compatibile VT-d. Ho scelto lo XEON E3-1260L per via della scheda grafica integrata, delle prestazioni (4 core, 8 thread) e dei consumi (45W TDP).
  3. Una sheda grafica supportata, la mia scelta è andata per una FirePro V5700 tra l’altro poco costosa a causa del crash da bitcoin mining (vedasi).

Il bios della scheda madre è alquanto antipatico ed oltre a quello non sono riuscito a configurare l’opzione di default di GRUB: cioé sono riuscito a impostarla, ma il bootloader semplicemente la ignora, per cui ho scelto la via più semplice. Installare GRUB su una chiavetta USB e fare il boot da quella.

Dei tre componenti HW quello più delicato sembra essere la scheda grafica: la percentuale di successo con schede grafiche NVidia o non FirePro è decisamente bassa mentre la V5700 è indicata tra le schede testate (e spero supportate).

UPDATE: ho testato e verificato il funzionamento della ATI 5670 e ATI 5450. Quest’ultima è diventata la scheda grafica che sto usando in quanto silenziosissima per via del raffreddamento passivo e estremamente conveniente (prezzo/prestazioni)

Dopo di che ho installato Fedora 16 in versione x64.
Xen si installa via terminale sudato con

yum install xen

Fin qui la parte facile, descritta anche in questa pagina Wiki.

Più complicato è stato creare il network bridge necessario per la connettività dei vari sistemi virtualizzati. Le istruzioni della pagina Wiki di cui sopra a tal riguardo sono incomplete. Nella directory /etc/sysconfig/network-scripts vanno creati due file.

File ifcfg-br0:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=NO

File ifcfg-em1:

DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
NM_CONTROLLED=NO
BRIDGE=br0

Per chi vuole spolparsi il manuale, la documentazione riguardo questi interface configuration files è linkata qui. Il nome del bridge (nel caso di cui sopra è br0) è importante per la configurazione delle macchine (para)virtuali. Dopo di che va disabilitato il servizio NetworkManager (che non supporta i bridge) e abilitato il servizio network al suo posto:

systemctl disable NetworkManager.service
systemctl stop NetworkManager.service
systemctl enable network.service
systemctl start network.service

Come ultima fase del setup iniziale ho creato un folder /xen e ho abilitato la condivisione dei file via SMB usando le istruzioni che ho trovato qui.

Ho creato una nuova installazione di grub su chiavetta USB usando:

grub2-install --force --no-floppy --root-directory=/mnt/USB /dev/sdx

laddove /mnt/USB è la directory su cui è montata la chiavetta USB e /dev/sdx è il file associato al dispositivo che si ottiene usando il comando lsscsi. Ho poi copiato e alleggerito il file di configurazione grub da /boot/grub2/grub.cfg a /mnt/USB/boot/grub2/grub.cfg.

UPDATE:

Ho reinstallato Fedora, non per fun ma in quanto ho notato qualche freeze di troppo possibilmente imputabile all’HD di sistema, e ho messo alla prova quanto scritto. Effettivamente mancano un po’ di passi di cui non avevo preso nota in precedenza.

1. FONDAMENTALE: disabilitare SeLinux editando il file /etc/sysconfig/selinux Nella configurazione da me creata non serve ad un pazzo (oserei dire che molto più in generale SeLinux, alla pari dell’Hardening di Windows Server, non serve ad un emerito pazzo).

2. Se ci si vuole connettere ai vari server VNC da altri client è necessario editare il file /etc/xen/xend-config.sxp modificando la linea che contiene vnc-listen in

(vnc-listen '0.0.0.0')

3. È buona norma spegnere il firewall durante la configurazione iniziale.

4. Disabilitare la shell grafica modificando il run level (vedasi):

rm /etc/systemd/system/default.target 
ln -sf /lib/systemd/system/multi-user.target
/etc/systemd/system/default.target

Last but not least non sono riuscito a trovare un buon sistema per fare un boot affidabile se non cancellando le linee indesiderate da /boot/grub2/grub.conf

Il passo successivo è la creazione di macchine virtuali.

Xensolidation

Jan 3, 2012 - 0 comments - Archiviato in: #Virtualizzazione

Tempo fa mi son posto una domanda che non saprei qualificare: ma se invece di avere un laptop, una workstation e un server creassi un super-computer che ne faccia le veci e sostituissi il laptop con un tablet più consono alla lettura di PDF e CBR?

A pensarci la tecnologia per farlo c’è. Ad esempio VT-d, sigla con cui Intel indica la capacità di virtualizzare, ovvero assegnare fisicamente ad un sistema operativo guest, intere periferiche: controller SATA, controller di RETE, controller USB, porte PCI-*, ecc. Teoricamente si potrebbe assegnare un’intera scheda grafica ed un controller USB ad un sistema operativo desktop che emulerebbe completamente l’esperienza di una macchina desktop pur girando su un hypervisore in compagnia di Solaris per ZFS, WHS per il backup e per servizi .Net, un Windows XP per esperimenti da usa e getta, ecc. (AMD offre una tecnologia equivalente, ma la mia familiarità con i loro prodotti è decisamente scarsa).

Il problema è che sembra che questo scenario interessi veramente a pochi esseri umani in tutto il globo relativisticamente parlando: il supporto della virtualizzazione della scheda grafica è a livello di leggenda ma posso dire, visto che sto scrivendo dalla workstation virtuale, che con un po’ di sforzo è possibile farcela. Ci son voluti mesi, dal punto di vista puramente economico è un discorso completamente in perdita se non si considera la conoscenza derivante avere un valore. Ho provato tante soluzioni: ESXi, 4.x e 5.0, non funziona. XenServer 6.0 sulla carta supporta lo scenario ma non sono riuscito ad installarlo e quindi ho deciso di propendere per la strada più contorta, ovvero XEN.Book of Xen

Devo dire che se avessi fatto l’esperimento un anno fa avrei fallito miseramente: in un anno grossi pezzi di XEN sono diventati parte del kernel ufficiale di Linux per cui oggi tutto è estremamente più semplice o in una parola sola possibile.

Va aggiunto che XEN è uno dei progetti peggio documentati che esistano per cui navigare a vista è impossibile e si sopravvive solo grazie alla Bibbia opportunamente integrata da vagonate di ricerche su Google.

Io sono partito da Ubuntu 11.10, a causa della totale disinformazione a riguardo, che mi ha lasciato intendere che l’Oniric fosse una delle poche distro a supportare XEN come Dom0. L’esperimento ha avuto però alcuni risvolti positivi, ovvero mi ha dato la possibilità di verificare che era possibile sostituire il mio setup basato su ESXi 4.x con uno pseudo-equivalente basato su XEN (improvvisamente VMWare a causa della Netflixizzazione è diventata estremamente antipatica).

Nel frattempo è stato aggiornato il Wiki con una pagina dedicata a Fedora 16 che ne esplicitava la compatibilità completa come Dom0. La sostituzione di Ubuntu con Fedora è stata pressoché indolore (un eufemismo nel mondo Linux).

L’ultimo pezzo del puzzle è stato quello di verificare la virtualizzazione della scheda grafica che seppur parziale (ovvero non funziona durante la fase di boot ma solo dalla schermata di login in poi) è risultata funzionale abbastanza da completare il mio sogno di nuvola personale. C’è ancora qualche asperità da limare (ad esempio cambiare i parametri di default di grub2 che sono complicati) ma il risultato è soddisfacente e consiste in un super-computer, prontamente battezzato Cray1, così configurato:

  • WHS che gira con il suo hard-disk dedicato e un controller USB assegnato (la scheda madre ne ha due e per fortuna uno dei due controlla le USB “frontali”, l’altro le USB “posteriori”). In tal modo ho potuto assengare una scheda audio USB ed un lettore di SD al server per il “servizio rippatutto e senza click” a cui dedicherò uno dei prossimi post.
  • Windows 7 che gira con il suo SSD dedicato e l’altro controller USB per tastiera, mouse e tutto il resto (ció però lascia il sistema Host completamente senza controller USB e per ora non mi sembra rappresenta un problema: nel caso peggiore una scheda PCI-e con qualche porta USB colmerebbe la lacuna)
  • Windows XP che gira in maniera completamente virtuale
  • Solaris, nell’incarnazione made in Nexenta, che gestisce in paravirtualizzazione i 4 dischi dati
  • Linux Fedora 16 a fare da host puro; volendo è possibile controllarlo tramite SSH o via VNC.

Per completare l’opera dal punto di vista prettamente “materiale” ho dovuto hackerare un “comodino” IKEA in piedistallo per il nuovo server accorciandolo in due dimensioni su tre e farcelo stare comodamente all’interno dell’angolo cottura.

Mi aspetto che il futuro, con il rilascio di XCP 1.5, sarà sempre più friendly verso questo tipo di progetti.

-quack

Buone feste 2012!

Dec 20, 2011 - 0 comments - Archiviato in: #Cazzate

Dedicato ai più nostalgici, perché le feste di oggi non sono più quelle di una volta (verissimo!).

Auguri andergraund

-quack

Dotti medici e sapienti

Dec 9, 2011 - 0 comments - Archiviato in: #Cazzate

dotti_medici_sapientiICI e Vaticano: mettiamo da parte completamente il fatto di chiedersi se sia giusto o meno che la Chiesa paghi, quando paghi e per cosa paghi, sarebbe un argomento politico e questo un luogo di perdizione.

Parliamo invece di quei dotti, medici e sapienti che di fronte alla parola esclusivamente ci hanno spiegato che ma no, non è così, ecc. ecc.

Qualcuno ha introdotto il discorso con “io non sono cattolico, ecc., però, … blah blah blah voglio fare informazione blah blah blah, ecc. il trucchetto della cappella non è possibile… blah blah blah”. Per spiegarci che questa storia fondata sull’esclusivamente è tutta una favola. Come se non essere cattolici fosse condizione necessaria e sufficiente sull’uso imparziale della ragione.

Il tutto ovviamente è dal punto di vista logico, inteso come termine esclusivamente scientifico, estremamente debole.

Se l’esclusivamente-cappella è una favola, di cosa vuol discutere oggi il cardinale Bagnasco? Non si capirebbe.

Se l’esclusivamente-cappella è una favola, perché il capo del Governo Italiano ha detto che “non si è posto il problema” visto che il problema, per l’appunto, non dovrebbe essere neppur esistente?

Se l’esclusivamente-cappella  è una favola, non sarebbe più facile dimostrare che l’albergo delle brigidine in Piazza Farnese a Roma paga l’ICI come tutti gli altri alberghi o in alternativa che si tratta di un luogo di culto dove la gente si ferma a dormire dopo tanto pregare?

Ripeto, non mi interessa cosa sia giusto o meno. Mi interessa capire una cosa: di cosa stanno parlando questi dotti, medici e sapienti? Così, usando la Logos aristotelica per contrappasso.

-quack

Come vincere al totocalcio

Dec 5, 2011 - 0 comments - Archiviato in: #Cazzate

In un’estate di tanti anni fa, in vacanza a Milano (?!) ebbi la fortuna dicomevincerealtotocalcio_lores leggere questo libro la cui prima edizione risale addirittura al 1968. Presentai ai miei amici di comitiva il concetto ivi contenuto di “sistema a correzione di errore”, giocammo una schedina in società (dieci quote da mille lire ciascuna, il prezzo di una colonna credo che fosse cinquecento lire), sviluppai il sistema a mano su schedine a lettura ottica fresche di introduzione e facemmo dodici grazie ad un errore nello sviluppo acchiappando circa 125mila lire, che diviso dieci fecero dodicimilacinquecento lire caduno.

Non avessi fatto quell’errore avremmo fatto undici; a fini storici le dodicimila e cinquecento lire furono spese in altri sistemi ovviamente meno fortunati di quello di partenza.

Ma tanto bastò per farmi appassionare alla “sistemistica” che altro non è che una branca della matematica combinatoria con risvolti decisamente interessanti. Quello più interessante riguarda il concetto di sistema ridotto perfetto, ovvero sistemi che garantiscono la “vincita di seconda categoria” (es. il dodici) a fronte di un costo sensibilmente minore. In alcuni casi il ridotto perfetto è possibile, in quanto il numero di colonne integrale è un multiplo esatto del numero di colonne a scarto uno proprio del sistema. Ad esempio, un sistema di 4 triple integrale garantisce una colonna da prima categoria + 4 x 2 colonne da seconda categoria (per ogni tripla basta sostituire il segno buono, con i due non buoni). Ovvero in 4 triple ci sono 9 colonne buone. Siccome quattro triple integrali equivalgono ad uno sviluppo integrale di 81 colonne che è un multiplo di nove, la riduzione perfetta potrebbe esistere, ed in realtà esiste. Uno sviluppo ridotto (ce ne sono tantissimi dovuti a possibili permutazioni e sostituzioni) è quello indicato qui sotto che cito a memoria in quanto ha una certa simmetria estetica non trascurabile

                                             1 X 2   1 X 2   1 X 2
                                             1 X 2   X 2 1   2 1 X
                                             1 X 2   2 1 X   X 2 1
                                             1 1 1   X X X   2 2 2

Qualsiasi quadrupla dell’alfabeto {1, X, 2} è contenuta con uno scarto di al massimo un simbolo nello sviluppo ridotto sopra indicato.

Un altro sistema che permette la riduzione perfetta è, incidentalmente, quello di tredici triple in quanto le colonne papabili sono ventisette e l’eventuale sviluppo ridotto porterebbe a 59049 colonne.

La matematica nel frattempo ha fatto grandi passi dal 1968, per non parlare della forza bruta dell’informatica. Sull’argomento, che ha affinità con i codici a correzione d’errore, è disponibile un testo “sacro” chiamato Covering Codes.

È da un po’ che mi cimento a tempo perso e l’obiettivo non è sistemistico ma puramente matematico. Non si rischia di vincere niente… semmai il Nobel per la matematica!

-quack

Organizational Charts

Nov 23, 2011 - 0 comments - Archiviato in: #Vignette

Girava un po’ di tempo fa, però visto che l’argomento è tornato in voga…

2011.06

(fonte)

-quack

Understanding Linux

Nov 21, 2011 - 0 comments - Archiviato in: #Linux

Ieri sera tardi, anche se non tardissimo, dopo l’ennesima lotta con Xen e il boot di Nexenta (la variante Solaris che ho deciso di utilizzare per ZFS), sono arrivato ad una conclusione, volendo persino banale, magari opinabile, ma che non mi pare di aver letto finora altrove.

L’episodio scatenante è stato questo: volevo utilizzare un metodo diverso per fare il boot della macchina virtuale su cui gira Nexenta (non per pura voglia di perdere tempo) utilizzando l’utility pygrub e rincuorato dal fatto che ci fosse una soluzione di backup migliore (pv-grub) a sostegno della riuscita dell’esperimento. Alla terza difficoltà, armato di bibbia, ho cercato di usare Pv-Grub ma non riuscivo a trovare “l’eseguibile” che pure è parte del pacchetto Xen standard. Ravanando su Google si scopre che siccome Debian “non compila XYZ in quanto ha dipendenze esterne” allora il pacchetto in questione manca. Ovviamente è possibile generarlo se ci si vuole avventurare nei percorsi compilativi.

Linux non è una piattaforma su cui far girare le applicazioni. Le applicazioni ci sono, non sono poche ma non sono neanche tante abbastanza per farne una piattaforma, ma questo non basta. Linux è una scatola di montaggio per piattaforme più o meno incomplete: a Debian manca questo, ad OpenSuse manca quest’altro, ecc. In Linux non esiste l’equivalente di “eseguibile” in quanto un “eseguibile” si presume abbia dipendenze binarie molto forti. Mentre in una piattaforma il contratto binario è basato su regole molto rigide, in Linux tutto è basato più o meno sui sorgenti. Chi gestisce il repository poi fa un lavoro più o meno buono di impacchettamento di sorgenti in bit ridistribuibili ma la varietà di scelta è tale che il lavoro dell’impacchettatore tende ad essere sempre sotto la sufficienza. Ad esempio nei vari kernel aggiornati di Ubuntu non è attivo il flag “CONFIG_XEN_PCIDEV_BACKEND=m” che non ha nessun effetto collaterale aggiuntivo (tolto qualche piccolo KB di occupazione di memoria) ma che porta a richiedere una ricompilazione ad hoc per chi come me ne ha bisogno.

È ovviamente possibile generare ottime piattaforme usando Linux come è il caso di Android (parlo ovviamente della piattaforma, non di tutto il resto che può avere qualità opinabili). Però nell’accezione generale d’uso la cosa è molto meno che ottimale in quanto un protocollo basato su codice sorgente è molto meno efficace di un protocollo binario: per lo meno è necessario un passo in più e purtroppo la compilazione è un processo meno deterministico di quanto si possa pensare.

-quack

Stato dell’unione - 2011

Nov 16, 2011 - 0 comments - Archiviato in: #Microsoft

Ieri c’è stata l’assemblea degli azionisti Microsoft. Alla sessione Q&A sono stati assegnati 15 minuti non prolungabili né prolungati che ha lasciato scontenti tutti gli azionisti. In molti stanno cominciare a chiedere lo scalpo di Ballmer, raggiunta la massa critica il processo diventerà inarrestabile. Uno dei commenti più rappresentativi:

"We drove through the snow to get here. He (Ballmer) is talking about tablets and phones as if it were a new thing. Apple's had these things for years. My granddaughters don't even know what Microsoft does. They should treat the owners better than they do."

Cioè. Benvenuti nell’era post-Gates.

I quindici minuti non sono bastati a contenere le fesserie di Ballmer (we are bringing Windows 8 to the phones) e per la prima volta in tredici anni la nuova versione di Windows la vedo nerissima.

<lamentazioni>

Cominciamo dal menu start che è scomparso ed è stato sostituito dalla modern shell. Modern una cippa e scusate il francesismo: prima pigliavo una applicazione e il menù scompariva, adesso mi ritrovo con questa cosa enorme a tutto schermo e che su tre schermi è l’apoteosi del ridicolo. Ho dovuto chiedere, per la prima volta in tredici anni, al mio dev-manager, che non avendo un pazzo da fare è nel dogfooding dalle prime ore, come lanciare una applicazione non listata. Mi dicono dalla regia che secondo qualcuno in alto la mia frustrazione nasce dal fatto che la discoverability è considerate secondaria (è poi la stessa persona che ha rivoluzionato l’interfaccia di Office dicendo che la discoverability è tutto). Clicco su un link in MetroTwitter e anziché aprirsi in IE si apre in IE-Mosh. Bachi a parte (IE-Mosh qualche volta non “raccoglie” il passaggio al volo) rimango perplesso su come si chiude questo nuovo IE: pare resistente persino a ALT-F4. Risultato finale: ho il vero terrore di cliccare il pulsante Start, che sin da Windows 95 era mio amico. Faccio di tutto per evitarlo (Windows+R se ricordo il nome dell’eseguibile; pinno tutto l’indispensabile e meno sulla taskbar).

</lamentazioni>

Allora fatemi capire un po’: bisogna creare una piattaforma per il mondo tablet e scegliamo Windows, scelta discutibile ma alla fine accettabile. Così invece di creare una shell aggiuntiva stile MCE come quando si è trattato di entrare nei salotti delle case, si infila giù per la gola la nuova shell anche a chi non serve perché non ha uno schermo touch, perché è felice con le applicazioni legacy, e per tanti altri motivi. Eppure nel caso di MCE forzare la shell doveva essere la scelta giusta per fare in modo che l’esperienza OOB create dagli OEM fosse quanto più vicina possibile ad un elettrodomestico come per il TiVò, ma in quel caso nisba. Adesso invece esattamente l’opposto.

Per fortuna agli azionisti non hanno fatto provare Win8 e spero caldamente e vivamente che ci sia un cambio repentino e che l’attuale prodotto diventi una SKU (Windows 8 tablet).

Se così non fosse nei prossimi dieci anni, se Ballmer rimane ancora alla guida, ecco quello che succederà:

  • l’enterprise snobberà Win8 come OS per via dell’attrito nell’esperienza utente; sarà peggio di Vista perché Vista era un male necessario per disinfettare la piattaforma dalle applicazioni scritte alla pazzo di pane
  • per la prima volta le enterprise che possono permettersi di scrivere e riscrivere le proprie applicazioni guarderanno altrove (hint: Android). Scrivere per WinRT è leggermente meno complicato che scrivere per Android per una azienda tradizionalmente Windows based. Però non è detto che una azienda debba riutilizzare lo stesso capitale umano, basterà assumere nuovi addetti con esperienza Android alle spalle
  • le applicazioni legacy verranno fatte girare su computer massicci ed eseguite in RDP su questi terminali semi-intelligenti. Ho l’impressione che siamo ad un punto di flesso, che l’HW sta cominciando a diventare troppo potente per l’home/aziendal-desktop computing. Le nuove schede grafiche sono utilizzate già troppo spesso per compiti poco grafici e molto super-computing, vedasi alla voce bitcoin mining. Ovviamente fatte salve le solite eccezioni verticali
  • le aziende grossissime si troveranno a scegliere tra un OS che gira sull’hardware più disparato possibile, open source e quindi apertissimo a vera e propria sartoria informatica e tutto il resto
  • Microsoft diventerà meno rilevante nel settore enterprise come già successo ad IBM, quando gli AS/400 hanno ceduto il passo ai ridicoli PC con MS-DOS

Cosa può fare MS per tornare ad essere rilevante prima di raggiungere il punto di non ritorno? Innanzitutto licenziare Ballmer ed assumere un tecnico: magari un Faggin, un Gates o un Allen qualsiasi. Il tempo stringe, nel frattempo mi godo l’extra garantito dalla volatilità flat delle azioni aziendali.

Racing the beam

Nov 11, 2011 - 0 comments - Archiviato in: #Recensioni

Ho sempre considerate l’Atari 2600 un oggetto di culto vero e proprio. A leggerne le specifiche si rischia di sentire veri e propri brividi scorrere lungo la schiena, soprattutto se ci si mette nei panni di chi ha scritto videogiochi per la piattaforma.230-7[1]

Innanzitutto girava su 6507, una versione “tagliata” del 6502 a cui erano state decurtate 3 linee dall’address bus (quindi si potevano indirizzare solo 8K in tutto) e la completa assenza di interrupt. In tutto c’erano solo 128 byte a disposizione di RAM, tutto il resto era solo ROM e tral’altro dominava l’assenza di frame buffer. Il videogioco gestiva la schermata video direttamente a schermo pilotando il pennello elettronico linea per linea.

Ciononostante, dei signori programmatori, ci hanno regalato dei capolavori come Pitfall!.

La storia interessante è contenuta in un libro intitolato “Racing the beam” e pubblicato da MIT Press. Dopo aver dedicato un paio di dozzine di minuti al libro mi son sentito molto più rincuorato in versione pascolatore di bit. Solo trentanni fa la dimensione di una challenge era di qualche ordine di grandezza diversa.

Il libro è ovviamente caldissimamente consigliato.

-quack