Triplo salto mortale carpiato senza rete (o quasi) perfettamente riuscito.

Problema: aggiornare un sistema da Mandrake Corporate 3 a Centos 5 riducendo al minimo l’impatto sugli utenti.

Visto che non era disponibile un hardware uguale o superiore a quello in produzione, non è stato possibile semplicemente installare una nuova macchina e migrare poco alla volta i servizi (cosa fatta alcuni mesi fa per un diverso cliente e riuscita senza grossi problemi). È stato quindi necessario ricorrere a un trucco da mago Silvan.
Ho installato Centos 5 su una macchina virtuale (il VMware Player è liberamente utilizzabile) e ho replicato tutti i servizi e le configurazioni presenti sulla macchina in produzione. Questo ha richiesto un bel po’ di tempo, ma ha reso la fase finale della migrazione estremamente semplice.

Finita la configurazione, ho avviato la macchina virtuale Centos con un live-cd Knoppix e ho fatto lo snapshot del sistema Centos usando tar; i puristi storceranno il naso, ma tar ha due enormi vantaggi: è semplice da usare e funziona (e poi Slackware ha funzionato per una vita con packaging basato su tar). L’accorgimento importante è di usare il flag –numeric-owner. In realtà non so se questo flag va usato solo in fase di salvataggio o di estrazione, ma per non sbagliare l’ho usato in entrambe le fasi. Lo svantaggio di tar è che non preserva gli hard links, portando ad alcune duplicazioni; ma siccome lo spazio disco costa poco…

In seguito, ho trasferito gli archivi tar (compressi con gzip, ovviamente) sul server Mandrake e ho estratto gli archivi in una sottocartella del root file system, sempre usando i flags –preserve –numeric-owner. A questo punto la situazione era la seguente:

bin
boot
dev
disk0
etc
home
initrd
lib
lost+found
mnt
opt
proc
root
ROOT_CENTOS
+- bin
+- boot
+- dev
+- etc
+- lib
+- media
+- misc
+- mnt
+- opt
+- proc
+- root
+- sbin
+- selinux
+- srv
+- sys
+- tmp
+- usr
+- var
sbin
sys
tmp
usr
var

Il nuovo sistema Centos è stato parcheggiato nella dir /ROOT_CENTOS. Sabato mattina, cellulare spento, ho riavviato il server con Knoppix e ho cambiato le carte in tavola; le cartelle di Madrake Corporate sono andate a finire in /ROOT_MDK e le cartelle di Centos sono state spostate nella root. Ecco il nuovo layout dopo lo spostamento:

bin
boot
dev
disk0
etc
home
lib
lost+found
media
misc
mnt
opt
proc
root
ROOT_MDK
+- bin
+- boot
+- dev
+- etc
+- initrd
+- lib
+- mnt
+- opt
+- proc
+- root
+- sbin
+- sys
+- tmp
+- usr
+- var
sbin
selinux
srv
sys
tmp
usr
var

Reboot ed il gioco è fatto. Grub è rimasto quello di Mandrake ma è comunque in grado di andare a leggere /boot/grub/menu.lst e caricare il kernel indicato da questo file. Ovviamente, il successo è dipeso dalla cura dei particolari:

  • le partizioni erano le stesse per il server di produzione e per la macchina virtuale;
  • Centos è stato riconfigurato per usare nomi di device invece delle partition labels usate di default;
  • tutti i dati erano confinati in una partizione separata montata sotto /home

Il primo riavvio, a runlevel 1, ha permesso di sistemare gli ultimi dettagli:

  • impostazione del modulo corretto per la scheda di rete;
  • disabilitazione dell’avvio di tutti i servizi;
  • importazione degli utenti e gruppi dai vecchi files /etc/{passwd,shadow,group}
  • cambio owner dei files che nei due sistemi presentavano UID e/o GID diversi. In teoria, si poteva forzare sul Centos lo stesso file passwd usato da Mandrake ma ho preferito aderire allo standard Centos e fare un po’ di lavoro in più

Altro riavvio, per essere certi che tutto funzioni e resto della giornata passato a riabilitare e controllare tutti i servizi.