A Ovest Di Paperino

Welcome to the dark side.

Xen recipes #3: guest OpenIndiana 151 para-virtualizzato

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