Guida alla Migrazione di Baselayout e OpenRC Marcello Magaldi Questa guida illustra come migrare da baselayout-1 a baselayout-2 e OpenRC. 1.6 2008-04-15 Background
Cos'è baselayout?

Baselayout fornisce un insieme base di file che sono necessari per far funzionare adeguatamente tutti i sistemi, come ad esempio /etc/hosts. Fornisce anche il layout base del filesystem usato da Gentoo (ad es. le directory /etc, /var,/usr, /home).

Cos'è OpenRC?

OpenRC è un sistema rc basato sulle dipendenze che funziona con qualsiasi init fornito dal sistema, normalmente /sbin/init. Comunque, non è un sostituto per /sbin/init. L'init di default usato da Gentoo Linux è sys-apps/sysvinit, mentre Gentoo/FreeBSD utilizza l'init di FreeBSD fornito da sys-freebsd/freebsd-sbin.

Perché migrare?

Inizialmente il sistema rc di Gentoo è stato compilato dentro baselayout 1 e scritto interamente in bash. Questo porta a molte limitazioni. Per esempio, certe chiamate di sistema hanno bisogno di essere effettuate durante il boot e ciò ha richiesto l'aggiunta di chiamate basate su C. Ognuna di queste chiamate era linkata staticamente, facendo in modo che il sistema rc ci mettesse più tempo.

Inoltre, siccome Gentoo si è espansa ad altre piattaforme come Gentoo/FreeBSD e Gentoo Embedded, è diventato impossibile mantenere un sistema rc basato su bash. Questo ha portato allo sviluppo di baselayout 2, che è scritto in C e richiede unicamente una shell POSIX-compliant. Durante lo sviluppo di baselayout 2, è stato deciso che era più appropriato che baselayout avesse fornito meramente i file base e il layout del filesystem per Gentoo e il sistema rc fu spostato in un suo pacchetto. Sicché abbiamo OpenRC.

OpenRC è sviluppato principalmente da Roy Marples e supporta tutte le correnti variazioni di Gentoo (es. Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded, e Gentoo Vserver) e altre piattaforme come FreeBSD e NetBSD.

Migrazione a OpenRC

La migrazione a OpenRC è piuttosto diretta; sarà introdotta come parte del proprio processo di aggiornamento dal gestore dei pacchetti. Il passo più importante attualmente avviene dopo l'installazione dei nuovi pacchetti >=sys-apps/baselayout-2 e sys-apps/openrc. È fondamentale che si esegua dispatch-conf e che /etc sia aggiornato prima di riavviare. Un fallimento nel farlo produrrà un sistema non più avviabile e richiederà l'uso del Gentoo LiveCD per effettuare i passaggi seguenti per riparare il proprio sistema.

Una volta finito di aggiornare i propri file di configurazione, ci sono alcune cose da verificare prima di riavviare.

/etc/conf.d/rc

Il file /etc/conf.d/rc è stato deprecato e tutte le impostazioni in esso contenute avranno bisogno di essere trasferite alle impostazioni appropriate in /etc/rc.conf. Si prega di leggere interamente /etc/rc.conf e /etc/conf.d/rc e migrare le impostazioni. Una volta finito, cancellare /etc/conf.d/rc.

Moduli del Kernel

Normalmente, quando si vuole che certi moduli del kernel siano caricati all'avvio, li si mette in /etc/modules.autoload.d/kernel-2.6insieme ad ogni parametro che gli si vuole passare. Nel baselayout-2, questo file non è più utilizzato. Invece, i moduli caricati automaticamente e i loro parametri sono situati in un file, /etc/conf.d/modules, qualsiasi sia la versione del kernel.

Un esempio di configurazione vecchio stile sarebbe:

ivtv
cx88_dvb video_br=2

Convertire l'esempio precedente risulterà nel seguente:

# Moduli caricati automaticamente all'avvio
modules_2_6="ivtv cx88_dvb"
# Parametri dei Moduli
module_cx88_dvb_args_2_6="video_br=2"

Negli esempi precedenti, i moduli e i loro parametri saranno passati soltanto ai kernel della serie 2.6.x. La nuova configurazione permette un controllo più preciso sui moduli e sui parametri basato sulla versione del kernel.

Un esempio approfondito sarà:

# Carica sempre ochi1394 e ieee1394, per qualsiasi versione di kernel
modules="ohci1394 ieee1394"
# Carica tun e usbserial solo per i kernel della serie 2.6.x
modules_2_6="tun usbserial"
# Carica cx88_dvb solo per i kernel 2.6.23
modules_2_6_23="cx88_dvb"
# Carica ivtv solo per il kernel 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"

# Solo per il kernel 2.6.23-gentoo-r5, passa come argomento video_br=2
# a cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# Per i kernel della serie 2.6.x passa sempre vendor e product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Passa sempre debug a ieee1394
module_ieee1394_args="debug" 
Prego notare la differenza tra module_ e modules_.
Runlevel di Boot

Il runlevel di boot esegue molti passi importanti per ogni macchina. Per esempio, assicurarsi che il proprio filesystem root sia montato in lettura/scrittura, che i propri filesystem siano controllati, che i propri mountpoint siano disponibili, e che lo pseudo-filesystem /proc sia avviato al boot.

Con OpenRC, i servizi di gestione del volume per i propri dispositivi a blocchi non sono più avviati automaticamente al boot. Questo include lvm, raid, swap, device-mapper (dm), dm-crypt, evms, e il like. Bisogna assicurarsi che l'initscript appropriato per questi servizi nel runlevel di boot, altrimenti sarà possibile che il proprio sistema non si avvii!

Sebbene l'ebuild di OpenRC proverà a fare questa migrazione, si dovrà verificare che migri tutti i servizi di gestione di volume correttamente:

# ls -l /etc/runlevels/boot/

Se non si vede root, procfs, mtab, swap e fsck con il precedente comando, effettua le seguenti istruzioni per aggiungerli al runlevel boot:

# rc-update add root boot
# rc-update add procfs boot
# rc-update add mtab boot
# rc-update add fsck boot
# rc-update add swap boot

Se si utilizza mdraid e lvm ma non li si vede sopra, si dovranno eseguire le seguenti istruzioni per aggiungere gli initscripts al runlevel boot:

# rc-update add raid boot
# rc-update add lvm boot
Rete

Siccome baselayout e OpenRC sono stati divisi in due pacchetti differenti, il proprio initscript net.eth0 può scomparire durante il processo di aggiornamento. Per sostituire questo initscript si eseguano i seguenti comandi:

# cd /etc/init.d
# ln -s net.lo net.eth0

Se manca qualsiasi altro initscript di rete, seguire le istruzioni menzionate sopra per riaggiungerlo. Semplicemente si sostituisca eth0 con il nome del proprio dispositivo di rete.

Inoltre, /etc/conf.d/net non utilizza più gli array stile bash per la configurazione. Prego consultare /usr/share/doc/openrc/net.example per le istruzioni di configurazione. La conversione dovrebbe essere relativamente diretta, per esempio un assegnamento statico di IP cambierà in questo modo:

config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" )
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100"
Orologio

Le impostazioni dell'orologio sono state rinominate da /etc/conf.d/clock al proprio strumento di impostazione di orologio nativo di sistema. Questo significa che in Linux sarà /etc/conf.d/hwclock e in FreeBSD sarà /etc/conf.d/adjkerntz. L'initscript in /etc/init.d/ è anch'esso stato rinominato conseguentemente, quindi assicurarsi che sia nel runlevel appropriato.

Inoltre, la variabile TIMEZONE non è più in questo file. I suoi contenuti sono invece nel file /etc/timezone. Se non esiste, bisognerà certamente crearlo con il proprio timezone. Prego controllare entrambi questi file per assicurarsi della loro correttezza.

Il valore appropriato per questo file è il path relativo al proprio timezone a partire da /usr/share/zoneinfo. Per esempio, per quelli che vivono nella costa orientale degli Stati Uniti, l'impostazione corretta sarà:

America/New_York
XSESSION

La variabile XSESSION non si trova più in /etc/rc.conf. Il pacchetto x11-apps/xinit ora fornisce /etc/env.d/90xsession, che può essere usato per impostare la variabile XSESSION.

Questa variabile NON sarà migrata di default, quindi bisognerà modificare /etc/env.d/90xsession.

Bisogna eseguire env-update dopo aver creato un file in /etc/env.d, e successivamente effettuare il logout e poi il login perché abbia effetto.
EDITOR / PAGER

La variabile EDITOR non si trova più in /etc/rc.conf. Sia EDITOR che PAGER sono impostati di default in /etc/profile. Si dovrebbe cambiare ciò se se ne ha bisogno nel proprio file ~/.bashrc (o equivalente) o creare /etc/env.d/99editor e impostare l'impostazione di default del sistema in esso.

Bisogna eseguire env-update dopo aver creato un file in /etc/env.d, e successivamente effettuare il logout e poi il login perché abbia effetto. Se si è impostato la variabile in ~/.bashrc, si può rifare il source del file con source ~/.bashrc.
Finalizzare

Una volta terminato e aggiornato i propri file di configurazione e gli initscript, l'ultima cosa da fare è reboot. Questo è necessario perchè le informazioni di stato del sistema non sono preservate durante l'aggiornamento, quindi bisognerà fornirle con un nuovo riavvio.