Prima di abbandonare al loro destino queste macchine che Apple ha deciso di non tenere più in produzione, voglio dare qualche indicazione su come ne ho recuperata una e l’ho messa al lavoro in modo interessante e un po diverso dal solito.

La macchina era un vecchio server web/ftp che nel momento di maggior gloria ha servito anche 200 domini. Da allora sono passati alcuni anni e i domini sono migrati in un server web Linux per una serie di motivi, tra i quali ha pesato molto l’assenza di un pannello di configurazione e deploy di clienti/servizi/utenti ecc come ne esistono invece in ambito Linux (Plesk, cPanel).
Abbiamo quindi ritirato la macchina dal Data Center nel quale era ospitata per decidere che farne.
La macchina e’ un XServe Late 2006, primissima versione Intel (codice Apple 1,1), con alimentazione ridondata (doppio alimentatore), un doppio Xeon 2,0 GHz dual core, 6GB di Ram, e sopra vi era installato un vetusto OsX Server 10.4.11.
Non abbiamo provato ad utilizzare un MacPro della stessa generazione (codice 1,1) in produzione dal 2006 al 2008, ma TEORICAMENTE dovrebbe funzionare in quanto si tratta di hardware analogo.
Avevamo davanti alcune possibilità: rimetterla in piedi con un Os Apple aggiornato e riutilizzarla come server Apple, oppure installarci Debian e poi inserirla nel Cluster Proxmox che abbiamo gia in funzione nel nostro Data Center. Opzione finale: una triste rottamazione…

Prima di decidere, mi sono occupato di creare un ambiente di test e valutare la fattibilità del progetto.
I problemi da affrontare sono stati molteplici:

  1. Superare il blocco firmware dell’EFI che su queste macchine non prevede lo startup da sistemi alternativi a OsX
  2. Valutare se Linux (Debian v. 5.0.8, “Lenny”) riconosce la maggior parte dell’hardware, a cominciare dai controller dei dischi, le schede ethernet ecc.
  3. Una volta installato linux, verificare il supporto di KVM e OpenVZ, le tecnologie di virtualizzazione su cui si basa Proxmox e installare Proxmox dai repository
  4. Inserire la macchina nel cluster e testare le funzionalità

Come prima cosa e’ stato necessario installare un firmware alternativo open source[1]: rEFIt che permette l’installazione di sistemi Win o Linux su questi vecchi Apple Intel (Bootcamp infatti non e’ supportato).

Il problema di questo software e’ che richiede una partizione sul disco rigido anche piccola, HFS+ nel quale essere installato, questo comporta alcuni problemi secondari poi per la gestione del bootloader di Linux che non può essere installato nel Master Boot Record (MBR), pena il mancato startup della macchina.
In alternativa è possibile installare rEFIt in un dongle USB visto che questa macchina supporta lo startup da USB ed è la strada che seguiremo per questo articolo.

Lo si trova a questo indirizzo: ed e’ dotato di un installer “amichevole”.
Basta scaricare la versione Mac disk image (o iso) e poi utilizzare l’installer.
Per installare invece su una chiavetta USB e’ necessario qualche passaggio in più:

  • Scaricare il disco immagine (.dmg o .cdr)
  • Formattare il dongle USB in HFS+ (con Disk Utility)
  • Copiare la cartella “efi” nel primo livello della chiave USB
  • “Benedire” la cartella come disco di avvio (blessing): aprire il terminale e digitare:
cd /Volumes/nomediscousb/efi/refit
./enable.sh

Questo passaggio e’ necessario ma non e’ ancora sufficiente a far partire Debian, infatti Debian non supporta EFI su piattaforme 64 bit. Ps. la versione di Debian che ci interessa e’ la Lenny, 5.x [2]
Quello che ci serve e’ produrre un grub2 come loader da installare in rEFIT. E’ possibile crearlo direttamente in Linux seguendo queste istruzioni: http://grub.enbug.org/TestingOnMacbook l’unica cosa a cui dobbiamo prestare attenzione e’ che la macchina in oggetto (XServe 1,1 2006) ha la caratteristica unica di utilizzare un EFI a 32 Bit nonostante la piattaforma sia a 64 Bit. Questo non e’ un problema, il linux che metteremo sarà pienamente 64 Bit [3], ma dovremo utilizzare un Grub2 che sia a 32 Bit.

L’operazione non e’ banalissima, ma grazie al lavoro svolto da Martijn Broeders nel suo Blog (finalizzato a installare Fedora 11 sulla stesso tipo di macchina), abbiamo  a disposizione un grub gia pronto da utilizzare. Potete seguire la sua guida, oppure i passi seguenti:

Una volta scaricati il file grub.zip, decomprimetelo e piazzate i files ‘grub-dumpbios‘ e la cartella ‘grubefi-karmic‘ nella cartella ‘efi‘ che si trova nella radice del disco di avvio sul quale abbiamo installato rEFIt. Efi riconoscerà automaticamente questi files.
A questo punto apriamo ‘grub.cfg‘ nella cartella  ‘grubefi-karmic‘ con un editor di testo, troveremo dentro un sacco di roba…

Eliminiamo tutta la parte che segue l’entry del fake bios lasciando intatte le entry relative al CD di Debian Lenny e al reboot e allo startup in modo che il nostro file diventi questo:

[dirtycode]

# grub.cfg pxw 20090316

timeout=20
default=0

set F1=ctrl-x
set F2=ctrl-c
set color_normal=yellow/blue

menuentry “0-testfakebios” {
# for debugging set debug=efi
hexdump -s 0xc0000 (mem)
fakebios
hexdump -s 0xc0000 (mem)
# deliberate error to get wait for key
xxx
}

menuentry “Debian-Lenny-CD” {
fakebios
root=cd0
linux /install.amd/vmlinuz nomodeset
initrd /install.amd/initrd.gz
}
menuentry “REBOOT” {
reboot
}
menuentry “SHUTDOWN” {
shutdown
}

[/dirtycode]

Una volta salvato il file possiamo finalmente avviare la macchina e ottenere all’avvio la schermata di rEFIt che ci consentirà di avviare il server con il CD di Debian precedentemente masterizzato.
L’installazione di Debian non sarà trattata in questo articolo ma è semplicissima, basta seguire le informazioni dell’installer con queste uniche accortezze:

  • Partizionare tutto il disco interno accettando i valori di default o scegliere un partizionamento  customizzato LVM (non trattato in questo articolo)
  • Installare soltanto il sistema base, senza interfaccia grafica o altre ozpioni, scegliere eventualmente solo SSH se la versione lo consente.
  • Installare il grub nell’MBR

A questo punto abbiamo installato Debian nel nostro Xserve!!!
Ma la macchina non può ancora partire perchè manca l’entry nel grub del dongle USB.
Eseguiamo quindi uno spegnimento della macchina [shutdown -h now], prendiamo la nostra chiave USB e andiamo a modificare di nuovo il file  grub.cfg’ nella cartella  ‘grubefi-karmic’ aggiungendo questa entry:

menuentry "Debian-Lenny" {
fakebios
root=hd1,1
linux /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sdb1 ro nomodeset
initrd /boot/initrd.img-2.6.26-2-amd64
}

Il posizionamento della root e’ hd1,1 se si tratta del primo alloggiamento dell’Xserve, eventualmente cambiare i parametri in base alle proprie esigenze.

Il file intero risultante e’ il seguente (basatevi su questo per il grub.cfg):

[dirtycode]

# grub.cfg pxw 20090316

timeout=20
default=0

set F1=ctrl-x
set F2=ctrl-c
set color_normal=yellow/blue

menuentry “0-testfakebios” {
# for debugging set debug=efi
hexdump -s 0xc0000 (mem)
fakebios
hexdump -s 0xc0000 (mem)
# deliberate error to get wait for key
xxx
}

menuentry “Debian-Lenny-CD” {
fakebios
root=cd0
linux /install.amd/vmlinuz nomodeset
initrd /install.amd/initrd.gz
}
menuentry “Debian-Lenny” {
fakebios
root=hd1,1
linux /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sdb1 ro nomodeset
initrd /boot/initrd.img-2.6.26-2-amd64
}
menuentry “REBOOT” {
reboot
}
menuentry “SHUTDOWN” {
shutdown
}

[/dirtycode]

Una volta salvato il file sul dongle USB saremo in grado di avviare l’XServe da HD con la debian appena installata. Modificate i timeout in secondi per l’avvio della macchina (sia per il rEFIT che per il grub) a vostro piacimento.
Debian riconosce la maggior parte dell’hardware e permette di utilizzare la macchina come un vero e proprio server Linux.
Nota: Non abbiamo provato ad utilizzare un MacPro della stessa generazione (codice 1,1) in produzione dal 2006 al 2008, ma TEORICAMENTE dovrebbe funzionare in quanto si tratta di hardware analogo.

La prossima parte dell’articolo  riguarda l’installazione ed il setup di Proxmox su Debian. A chi interessava installare solo Debian e basta può senz’altro fermarsi qui.

L’installazione di Proxmox è un passo piuttosto facile, quello che a questo punto è importante, è attivare le estensioni Intel VT dei processori che sono un set di istruzioni dedicate alla virtualizzazione e che KVM [4] sfrutta nativamente (come altri software di virtalizzazione).
Ovviamente tanto per semplificarci la vita (!) su Apple XServe le estensioni Intel VT sono disattive di default.
Sulle macchine dotate di Bios si deve operare direttamente nel Bios per attivarle, con le macchine Apple basate su EFI la procedura e’ diversa. Alcune indicazioni in rete mi hanno messo sulla strada giusta, bisogna fare così[5]:

  1. Riavviare il server e premere “alt” o aspettare la schermata di rEFIt
  2. Selezionare la voce rEFIt tra le icone ed entrare nel menu di comando rEFIT
  3. Nel menu di rEFIT scegliere “console”
  4. Al prompt digitare il comando
    fs0:
  5. Digitare
    ls
  6. Se a questo punto si ottiene un codice di errore vuol dire che il volume di root non e’ listato, provare a incrementare il “volume number” per esempio “fs1:” e tornare al passo precedente, e così via.
  7. Se non si ottiene errore, al comando “ls” dovrebbe seguire l’elenco dei files presenti nel disco (Users, Volumes, etc, match, private, var, usr ecc)
  8. Digitare:
    cd efi
  9. Inserire il comando:
    cd vmx
  10. Inserire il comando:
    vmx-var-set.efi
  11. Se non c’e’ nessun errore la procedura e’ andata a buon fine e si può uscire dalla console con il comando: “exit“, altrimenti se sulla console compare un errore, qualcosa e’ andata storto e bisogna ripartire daccapo nella procedura…
  12. Spegnere e lasciare il Mac spento per almeno 10 secondi (togliere i cavi di alimentazione per sicurezza) e poi riavviare.

A questo punto si potrà verificare l’avvenuta abilitazione delle Intel VT extensions direttamente da Proxmox [6], oppure da Debian La guida per l’installazione di Proxmox la si trova direttamente nel sito ufficiale, la riassumiamo per completezza [7]:

  1. Installare il repository di Proxmox (modifica del file sources.list):
  2. nano /etc/apt/sources.list

    Aggiungere i repository in modo che il contenuto sia:

    deb http://ftp.debian.org/debian lenny main
    # PVE packages provided by proxmox.com
    deb http://download.proxmox.com/debian lenny pve
    # security updates
    deb http://security.debian.org/ lenny/updates main
  3. Aggiungere la chiave per il repository:
  4. wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -
  5. Aggiornare il repository nel sistema:
  6. aptitude update
  7. Installare Proxmox:
  8. aptitude upgrade
  9. Installare Il Kernel:
  10. aptitude install pve-kernel-2.6.32-4-pve

A questo punto basta comunicare al file grub.cfg qual’è il nuovo kernel di avvio. Quindi una volta finita l’installazione, facciamo lo shutdown della macchina[8] e andiamo a modificare di nuovo il file grub.cfg nella nostra chiave USB che si trova in /Volumes/nomediscousb/efi/grubefi-karmic aggiungendo questa parte:

menuentry "Debian-Proxmox" {
fakebios
root=hd1,1
linux /boot/vmlinuz-2.6.32-4-pve root=/dev/sdb1 ro nomodeset
initrd /boot/initrd.img-2.6.32-4-pve
}

In modo che tutto il nostro file diventi [9]:

[dirtycode]

# grub.cfg pxw 20090316

timeout=20
default=0

set F1=ctrl-x
set F2=ctrl-c
set color_normal=yellow/blue

menuentry “0-testfakebios” {
# for debugging set debug=efi
hexdump -s 0xc0000 (mem)
fakebios
hexdump -s 0xc0000 (mem)
# deliberate error to get wait for key
xxx
}

menuentry “Debian-Proxmox” {
fakebios
root=hd1,1
linux /boot/vmlinuz-2.6.32-4-pve root=/dev/sdb1 ro nomodeset
initrd /boot/initrd.img-2.6.32-4-pve
}
menuentry “Debian-Lenny-CD” {
fakebios
root=cd0
linux /install.amd/vmlinuz nomodeset
initrd /install.amd/initrd.gz
}
menuentry “REBOOT” {
reboot
}
menuentry “SHUTDOWN” {
shutdown
}

[/dirtycode]

Non è necessario modificare il bootloader di Linux perchè viene completamente bypassato dai parametri che sono nel rEFIt visto che e’ rEFIt il bootloader principale.

Se e’ andato tutto bene al riavvio della macchina loggatevi su linux e digitate:

uname -a

Dovreste ottenere la versione di Linux e il Kernel giusto (Linux 2.6.32-4-pve)

A questo punto è necessario installare i pacchetti che costituiscono il cuore della console di comando di Proxmox:

aptitude install proxmox-ve-2.6.32 ntp ssh lvm2

OK!, abbiamo praticamente FINITO: collegatevi all’indirizzo IP da una macchina in rete, preceduto da https://

https://youripaddress

Dovreste a questo punto arrivare alla pagina di configurazione, loggatevi come root ei giochi sono praticamente fatti…

Un ultimo passo per chi e’ interessato a costituire un cluster con due Proxmox:

La procedura di inizializzazione di un cluster è descritta qui, ed è piuttosto semplice anche se servono alcune accortezze:

  1. Innanzitutto la procedura la si esegue solo via terminale
  2. Secondariamente e’ necessario che i due cluster abbiamo hostname diversi
  3. E’ molto importante che siano sincronizzati via NTP per evitare errori, visto che il cluster e’ sincronizzato anche come data e ora…

La procedura prevede la promozione di un Host a Master e uno o più di uno definiti come “nodi”.

Loggarsi sull’host principale e creare il master:

pveca -c

Controllare lo status del cluster:

pveca -l

Loggarsi sul secondo Host per promuoverlo a nodo, fare attenzione a che non ci siano già VM attive o se ci sono che non abbiamo ID che possano andare in conflitto con le VM eventualmente presenti sul Master:

pveca -a -h IP-ADDRESS-MASTER

Controllare lo status del cluster:

pveca -l

Se tutto e’ OK si dovrebbe vedere una schermata simile:

pveca -l
CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---ROOT---DATA
 1 : 192.168.7.104   M     A    5 days 01:43   0.54    20%     1%     4%
 2 : 192.168.7.103   N     A    2 days 05:02   0.04    26%     5%    29%

Potete controllare il cluster direttamente nell’interfaccia Web (attiva su entrambi gli IP dei nodi) e fare prove anche di migrazione a caldo di VM tra un nodo e l’altro!!!

ABBIAMO FINITO!!!

Ringrazio Martijn Broeders e il suo splendido lavoro che mi ha consentito di procedere lungo il percorso, dandomi indicazioni utilissime, e anche tutte le risorse citate nell’articolo.
Ci tengo a precisare che si tratta di un caso reale e che questa macchina funziona regolarmente in un cluster Proxmox attivo presso il nostro principale data center.

Chi e’ registrato sul Blog può scaricare la versione in PDF di tutto l’articolo, ottimizzato per la stampa!

  1. [1]L’approccio che seguiremo permetterà di far partire e funzionare la versione 1.1 di XServe, per chi fosse interessato alle versioni successive di Xserve Intel (2,1 e 3,1) dovrà seguire un altra strada; a maggior ragione chi volesse installare linux su macchine PPC (G4 e G5) che richiedono software specifico per quella piattaforma.
  2. [2] E’ necessaria questa versione se vogliamo installare Proxmox
  3. [3] E’ necessario per sfruttare appieno le possibilità di virtualizzazione, utilizzare un sistema a 64 Bit, nel caso di Debian il codice versione e’ Amd64
  4. [4]una tecnologia di virtualizzazione utilizzata da Proxmox
  5. [5]Dopo l’inserimento di ogni comando premere “invio”
  6. [7]Basterà entrare sulla console di amministrazione di Proxmox e provare a creare una virtualizzazione KVM: se proxmox lo consente vuol dire che le estensioni Intel VT sono attive, altrimenti si otterrà un errore specifico Bisogna digitare il comando:

    grep --color vmx /proc/cpuinfo

    Se nell’output c’e’ il flag “vmx” allora il processore ha le Intel VT abilitate e possiamo procedere ad installare Proxmox.

  7. [7]E’ necessario che Debian sia installata e funzionante ecollegata in rete ed è fortemente consigliato che sia installato SSH server/client ed NTP per la sincronizzazione dell’ora
  8. [8]shutdown -h now 
  9. [9]Nel file seguente ho tolto l’entry relativa allo startup “normale” di Debian che diventa inutile