Come installare ed utilizzare Ksplice

A differenza di un server Windows dove siamo ormai abituati a dover riavviare la macchina ad ogni aggiornamento di sistema, in un server linux questo accadra' raramente e le poche volte che sara' necessario effettuare quest'operazione sara' probabilmente per un aggiornamento del kernel.
Per un server in produzione dove l'uptime e' una prerogativa importante, un aggiornamento di questo tipo potrebbe generare non pochi problemi come ad esempio dover pianificare l'operazione in orario notturno con tutte le conseguenze che cio' comporterebbe. In questi casi e' vantaggioso utilizzare Ksplice,  un'applicazione che ci permette di applicare una patch al kernel senza dover riavviare il server!

Al momento l'ultima versione delle 'ksplice utilities' e' la 0.9.9. Sul sito del produttore sono disponibili sia i binari precompilati che il codice sorgente.

N.B. Gli utenti che utilizzano Ubuntu Linux possono scaricare 'ksplice uptrack', un sistema che consente di aggiornare il kernel tramite una pratica interfaccia grafica e senza dover effettuare nessuna delle seguenti operazioni.

Nel nostro esempio andiamo a scaricare  l'archivio contentenre i binary precompilati a 64bit.

Procediamo in questo modo utilizzando un utente non privileggiato:

Otteniamo le ksplice utilities:

wget http://www.ksplice.com/dist/ksplice-0.9.9-bin-x86_64.tar.gz

Scompattiamole

tar zxvf ksplice-0.9.9-bin-x86_64.tar.gz

Configuriamo ed installiamo

cd ksplice-0.9.9
./configure
make

Adesso come utente 'root' eseguiamo

make install

Tutti i binary sono stati copiati nelle rispettive directory e possiamo gia' dire addio ad un reboot post aggiornamento!

Ecco cosa fare in caso di aggiornamenti:

1) Nella directory contenente il sorgente del kernel avviato sul server creiamo una cartella chiamata 'ksplice'.

2) Copiamo la configurazione del kernel attivo nella directory appena creata rinominandola in '.config'.  Supponendo di avere la configurazione del kernel in /boot/config-2.6.26-1-amd64 ed il sorgente in /root/linux-source dovremo eseguire:

cp /boot/config-2.6.26-1-amd64 /root/linux-source/ksplice/.config

3) Adesso copiamo la System.map nella cartella ksplice. Ad esempio:

cp /boot/System.map-2.6.26-1-amd64 /root/linux-source/ksplice/System.map

4) Creiamo un link  chiamato 'build' nella cartella 'ksplice' facendolo puntare alla directory 'build' presente nei nostri header del kernel in esecuzione:

ln -s /lib/modules/2.6.26-1-amd64/build /root/linux-source/ksplice/build

5) Per applicare una patch al kernel adesso non ci rimane che eseguire questi due comandi (come utente root):

ksplice-create --patch=patch-da-applicare.patch /root/linux-source

Verra generato un archivio compresso, ad es. ksplice-612luer82.tar.gz

ksplice-apply ./ksplice-612luer82.tar.gz

Potete visualizzare in ogni momento la lista delle patch applicate con il comando "ksplice-view" ed eliminare una patch con "ksplice-undo" (nel nostro esempio "ksplice-undo 612luer82")