Gentoo Logo

Guide de migration de Baselayout et OpenRC

Table des matières :

1.  Contexte

Qu'est-ce que baselayout ?

Baselayout fournit un ensemble de fichiers de base nécessaires au bon fonctionnement de tout système, comme le fichier /etc/hosts. Il fournit également le schéma du système de fichiers de base utilisé par Gentoo (i.e. les répertoires /etc, /var, /usr et /home).

Qu'est-ce que OpenRC ?

OpenRC est un système rc basé sur les dépendances qui fonctionne quelque soit l'init fourni par le système, habituellement /sbin/init. Toutefois, il ne constitue pas un remplaçant de /sbin/init. L'init par défaut utilisé par Gentoo Linux est sys-apps/sysvinit, tandis que Gentoo/FreeBSD utilise l'init FreeBSD fourni par sys-freebsd/freebsd-sbin.

Pourquoi migrer ?

À l'origine, le système rc de Gentoo était fait avec baselayout-1 et écrit entièrement en bash. Cela a conduit à plusieurs limitations. Par exemple, certains appels système ont besoin d'être accessibles durant le démarrage, ce qui nécessite l'ajout de déclarations en C. Ces fonctions étaient donc liées statiquement, rendant rc de plus en plus lourd.

De plus, avec le portage de Gentoo à d'autres plateformes telles que Gentoo/FreeBSD et Gentoo Embedded, il devenait impossible de garder un système rc basé sur bash. Cela a conduit au développement de baselayout-2, écrit en C et ne nécessitant qu'un shell aux standards POSIX. Pendant le développement de baselayout-2, il s'est révélé que le meilleur choix serait que baselayout ne fournisse que les fichiers de base et le schéma de système de fichiers pour Gentoo, et que le système rc soit séparé dans son propre paquet. Ce qui a conduit à OpenRC.

OpenRC est développé principalement par Roy Marples et supporte toutes les variations actuelles de Gentoo (i.e. Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded, et Gentoo Vserver) et d'autres plateformes comme FreeBSD et NetBSD.

2.  Migration vers OpenRC

La migration vers OpenRC est assez simple ; elle se fera dans le cadre de vos mises à jour régulières par votre gestionnaire de paquets. L'étape la plus importante vient en réalité après l'installation des paquets du nouveau =sys-apps/baselayout-2 et de sys-apps/openrc. Il est indispensable que vous exécutiez dispatch-conf et que vous vous assuriez que le contenu de votre /etc est à jour avant de redémarrer la machine. Si vous ne le faites pas, vous ne pourrez plus démarrer votre ordinateur, ce qui vous obligera à utiliser un LiveCD Gentoo pour effectuer les étapes ci-dessous afin de réparer votre système.

Une fois que vous avez fini de mettre à jour vos fichiers de configuration, il y a quelques petites choses à vérifier avant de redémarrer.

/etc/conf.d/rc

/etc/conf.d/rc est devenu obsolète et les paramètres que vous y avez placés devront être migrés à l'endroit approprié dans le fichier /etc/rc.conf. Veuillez donc examiner /etc/rc.conf et /etc/conf.d/rc pour y placer correctement ces paramètres. Une fois que cela est fait, supprimez /etc/conf.d/rc.

Modules du noyau

Habituellement, quand vous voulez que certains modules du noyau soient chargés automatiquement au démarrage, vous les placez dans /etc/modules.autoload.d/kernel-2.6 avec les paramètres que vous désirez leur passer. Avec baselayout-2, ce fichier n'est plus utilsé. À la place de cela, les modules chargés automatiquement et leurs paramètres sont placés dans un nouveau fichier, /etc/conf.d/modules, qu'importe la version du noyau.

Voilà un exemple de l'ancien mode de configuration :

Exemple de code 2.1 : /etc/modules.autoload.d/kernel-2.6

ivtv
cx88_dvb video_br=2

Et voici sa conversion dans le nouveau mode :

Exemple de code 2.2 : /etc/conf.d/modules

# Modules chargés automatiquement au démarrage
modules_2_6="ivtv cx88_dvb"
# Paramètres des modules
module_cx88_dvb_args_2_6="video_br=2"

Dans les exemples ci-dessus, les modules et leurs paramètres seront seulement utilisés avec les noyaux 2.6.x. La nouvelle configuration permet de contrôler finement les modules et les paramètres selon la version du noyau.

Voici un exemple plus détaillé :

Exemple de code 2.3 : Exemple détaillé de /etc/conf.d/modules

# Toujours charger ochi1394 et ieee1394, qu'importe la version du noyau
modules="ohci1394 ieee1394"
# Ne charger tun et usbserial que pour les noyaux 2.6.x
modules_2_6="tun usbserial"
# Ne charger cx88_dvb que pour les noyaux 2.6.23
modules_2_6_23="cx88_dvb"
# Ne charger ivtv que pour le noyau 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"

# Pour le noyau 2.6.23-gentoo-r5, passer le paramètre video_br=2 à cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# Pour les noyaux 2.6.x, toujours passer les paramètres vendor et product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Toujours passer le paramètre debug à ieee1394
module_ieee1394_args="debug" 

Note : Notez la différence entre module_ et modules_.

Niveau de démarrage « boot »

Le niveau de démarrage boot réalise quelques étapes importantes sur chaque machine. Par exemple, il s'assure que votre système de fichiers racine est monté en lecture/écriture, que votre système de fichiers est vérifié, que vos points de montage sont disponibles et que votre pseudo-système de fichiers /proc est lancé au démarrage.

Avec OpenRC, les services de gestion de disques pour vos périphériques de stockage ne sont plus lancés automatiquement au démarrage. Cela inclut lvm, raid, swap, device-mapper (dm), dm-crypt, evms, et similaires. Vous devez vous assurer que les scripts d'initialisation appropriés pour ces services sont dans le niveau de démarrage boot, sinon il est possible que votre système ne démarre pas !

Même si l'ebuild d'OpenRC s'occupera de cette migration pour vous, vous devriez vérifier qu'il migre tous les services de gestion de volumes correctement :

Exemple de code 2.4 : Affichage de tous les services du niveau de démarrage boot

# ls -l /etc/runlevels/boot/

Si vous ne voyez pas root, procfs, mtab, swap, et fsck dans cette liste, suivez les étapes suivantes pour les ajouter au niveau de démarrage boot :

Exemple de code 2.5 : Ajout des services critiques au niveau de démarrage 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

Si vous utilisez mdraid et lvm mais que vous ne les voyez pas dans la liste, vous devez les ajouter de la même manière :

Exemple de code 2.6 : Ajout de mraid et lvm au niveau de démarrage boot

# rc-update add mraid boot
# rc-update add lvm boot

Udev

OpenRC ne démarre plus udev par défaut, mais celui-ci doit être présent dans le niveau d'exécution sysinit pour être démarré. L'ebuild d'OpenRC devrait normalement détecter si udev était auparavant activé et l'ajouter au niveau d'exécution sysinit. Toutefois, pour plus de précaution, vérifiez que c'est bien le cas :

Exemple de code 2.7 : Vérification d'udev

# ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev

Si udev n'est pas listé, alors ajoutez-le manuellement au bon niveau d'exécution :

Exemple de code 2.8 : Ajout d'udev au niveau d'exécution sysinit

# rc-update add udev sysinit

Réseau

Avec la séparation de baselayout et de OpenRC en deux paquets différents, votre script d'initialisation net.eth0 peut disparaître durant le processus de mise à jour. Pour remplacer ce script, faites ceci :

Exemple de code 2.9 : Remettre le script manquant net.eth0

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

S'il vous manque d'autres scripts d'initialisation du réseau, suivez les mêmes instructions pour les ajouter de nouveau. Remplacez simplement eth0 par le nom du périphérique de votre choix.

Le fichier /etc/conf.d/net n'utilise plus les tableaux de style bash pour la configuration. Merci de consulter le fichier /usr/share/doc/openrc-<version>/net.example pour les instructions de configuration. La conversion devrait être assez simple, par exemple l'affectation d'une adresse IP statique devra se faire ainsi :

Exemple de code 2.10 : Ancienne configuration de /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" )

Exemple de code 2.11 : Nouvelle configuration de /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"

Horloge

Les paramètres de l'horloge situés auparavant dans /etc/conf.d/clock ont été placés dans l'outil natif de configuration de l'horloge pour votre système. Cela signifie que pour Linux ce sera dans le fichier /etc/conf.d/hwclock et pour FreeBSD ce sera dans /etc/conf.d/adjkerntz. Les systèmes qui n'ont pas de puce d'horloge temps réel (N.d.T : « Real time clock », RTC) doivent utiliser /etc/init.d/swclock qui permet de paramétrer l'horloge système grâce au mtime d'un fichier qui est créé lorsque le système s'éteint. Les scripts d'initialisation dans /etc/init.d/ ont également été renommés selon ce schéma, donc assurez-vous que le script approprié pour votre système appartient au niveau de démarrage « boot ».

De plus, la variable TIMEZONE n'est plus utilisé dans ce fichier. Son contenu est à présent placé dans le fichier /etc/timezone. S'il n'existe pas, vous devrez bien sûr le créer avec votre fuseau horaire. Merci de vérifier ces fichiers pour vous assurer de leur exactitude.

La valeur à mettre dans ce fichier correspond au chemin relatif de votre fuseau horaire par rapport à /usr/share/zoneinfo. Par exemple, pour une personne vivant à Paris en France, voici ce qui devrait être placé :

Exemple de code 2.12 : /etc/timezone

Europe/Paris

XSESSION

La variable XSESSION n'est plus située dans /etc/rc.conf. À la place de cela, vous pouvez renseigner la variable XSESSION par utilisateur dans le fichier ~/.bashrc (ou équivalent), ou de façon globale dans le fichier /etc/env.d/.

Voici un exemple de la définition de XSESSION de façon globale :

Exemple de code 2.13 : Définition de XSESSION de façon globale

# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession

Important : Vous devez lancer env-update après avoir créer un fichier dans /etc/env.d, puis vous identifiez de nouveau pour que cela prenne effet. Si vous avez renseigné la variable dans le fichier ~/.bashrc (ou équivalent), vous pouvez recharger le fichier avec source ~/.bashrc.

Les variables EDITOR et PAGER

La variable EDITOR n'est plus située dans /etc/rc.conf. Par défaut les variables EDITOR et PAGER sont maintenant situées dans /etc/profile. Vous pouvez modifier celles-ci selon vos besoins avec votre fichier ~/.bashrc (ou équivalent) ou bien créer le fichier /etc/env.d/99editor pour placer le paramètre par défaut du système.

Important : Vous devez lancer env-update après avoir créer un fichier dans /etc/env.d, puis vous identifiez de nouveau pour que cela prenne effet. Si vous placez une variable dans votre fichier ~/.bashrc, vous pouvez recharger le fichier avec source ~/.bashrc.

Journal de démarrage

Auparavant, vous pouviez enregistrer les messages de démarrage en utilisant app-admin/showconsole. Avec OpenRC, tout est géré en interne, ce n'est donc pas la peine de bricoler avec showconsole. Vous pouvez sereinement le désinstaller. Pour enregistrer les messages de démarrage, configurer les variables appropriées dans /etc/rc.conf. Les messages seront écrits dans /var/log/rc.log.

Exemple de code 2.14 : Activer le journal de démarrage dans /etc/rc.conf

rc_logger="YES"

Pour finir

Une fois que vous avez terminé la mise à jour de tous vos fichiers de configuration et de vos scripts d'initialisation, la dernière chose à faire est un reboot. Cela est nécessaire parce que l'état du système d'informations n'est pas conservé durant la mise à niveau, donc vous aurez besoin de lui founir par un nouveau démarrage.



Imprimer

Dernière mise à jour le 29 novembre 2009

La version originale de cette traduction n'est plus maintenue

Résumé : Ce guide vous montre comment migrer depuis baselayout-1 vers baselayout-2 et OpenRC.

Doug Goldstein
Auteur

Joshua Saddler
Auteur

Roy Marples
Contributeur

Marion Agé
Traducteur

Donate to support our development efforts.

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