Xen recipes #3: guest OpenIndiana 151 para-virtualizzato

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

Pubblicato martedì 28 febbraio 2012 alle 2:43 AM - 6 commenti so far
Archiviato in: Virtualizzazione

LunedìQuìz–serie 2012 #2

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

Pubblicato lunedì 20 febbraio 2012 alle 6:05 PM - 11 commenti so far
Archiviato in: Codice

Inactive memory

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

Pubblicato giovedì 16 febbraio 2012 alle 1:37 AM - 12 commenti so far
Archiviato in: Apple

Beware of the doghouse

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

-quack

Pubblicato martedì 14 febbraio 2012 alle 12:19 AM - 0 commenti so far
Archiviato in: Cazzate, Video

Lunedì quiz - serie 2012 #1

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

Pubblicato martedì 7 febbraio 2012 alle 2:51 AM - 18 commenti so far
Archiviato in: Codice