Gentoo Logo

Guida alla Migrazione di Baselayout e OpenRC

Indice:

1.  Introduzione

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 predefinito 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 a baselayout 1 e scritto interamente in bash. Questo introduce 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, con la conseguenza che il sistema rc ci metteva più tempo ad eseguire le proprie operazioni.

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 che segue lo standard POSIX. Durante lo sviluppo di baselayout 2, è stato deciso che era più appropriato che baselayout fornisse solamente i file base e il layout del filesystem per Gentoo, così il sistema rc venne racchiuso in un pacchetto a sè; per tale motivo è stato creato OpenRC.

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

2.  Migrazione a OpenRC

La migrazione a OpenRC è piuttosto lineare; 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 eseguire 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:

Codice 2.1: /etc/modules.autoload.d/kernel-2.6

ivtv
cx88_dvb video_br=2

Convertire l'esempio precedente risulterà nel seguente:

Codice 2.2: /etc/conf.d/modules

# 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à:

Codice 2.3: esempio dettagliato di /etc/conf.d/modules

# 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"

Nota: 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 provi a fare questa migrazione, si dovrà verificare la corretta migrazione di tutti i servizi di gestione di volume:

Codice 2.4: Mostrare tutti i servizi nel runlevel boot

# ls -l /etc/runlevels/boot/

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

Codice 2.5: Aggiungere servizi critici 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 initscript al runlevel boot:

Codice 2.6: Aggiungere raid e lvm 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 eseguire i seguenti comandi:

Codice 2.7: Riaggiungere lo script net.eth0 mancante

# 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. Si prega di consultare /usr/share/doc/openrc/net.example per le istruzioni di configurazione. La conversione dovrebbe essere relativamente semplice, per esempio un assegnamento statico di IP cambierà in questo modo:

Codice 2.8: Vecchio stile di /etc/conf.d/net

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

Codice 2.9: Nuovo stile di /etc/conf.d/net

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 fuso orario (timezone). Si prega di controllare entrambi questi file per assicurarsi della loro correttezza.

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

Codice 2.10: /etc/timezone

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 in modo predefinito, quindi bisognerà modificare /etc/env.d/90xsession.

Importante: 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 in modo predefinito in /etc/profile. Se necessario si dovrebbero cambiare tali variabili nel proprio file ~/.bashrc (o equivalente) o creare /etc/env.d/99editor e impostare l'impostazione predefinita del sistema in esso.

Importante: 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 è riavviare. Questo è necessario perchè le informazioni di stato del sistema non sono preservate durante l'aggiornamento, quindi bisognerà fornirle con un nuovo riavvio.



Stampa

Aggiornato il 15 aprile 2008

Oggetto: Questa guida illustra come migrare da baselayout-1 a baselayout-2 e OpenRC.

Doug Goldstein
Autore

Joshua Saddler
Autore

Roy Marples
Collaboratore

Marcello Magaldi
Traduzione

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.