OpenBSD : noyau bsd.rd personnalisé
Un article de Projet de documentation fug-fr .
Vous trouverez sa version la plus récente sur fmrObsd.
[modifier] Introduction
Le noyau bsd.rd possède un petit disque mémoire (ramdisk, rd) incluant par défaut les divers scripts et commandes nécessaires à l'installation ou à la mise à jour d'OpenBSD. Il peut donc aussi servir de petite trousse de secours pour réparer un système ou encore à tout autre chose.
Ce qui suit présente diverses informations permettant de personnaliser ce noyau ou plus exactement la version RAMDISK_CD pour i386. Ces informations sont issues d'essais réalisés dans le cadre d'un bricolage de PIM (programme d'installation en mémoire) nommé fmrObsd concernant à ce jour OpenBSD 4.6 et 4.7. Elles sont données pour ce qu'elles sont, ni plus ni moins, ou si vous préférez elles représentent ce que je pense savoir à ce jour et non des "vérités vraies".
Tous les chemins indiqués sont implicitement préfixés par /usr/src où l'on considère que sont installées les sources (sys.tar.gz pour le noyau et src.tar.gz pour les sources texte). Il est aussi implicitement convenu que vous prenez toutes les précautions élémentaires, comme par exemple la sauvegarde de l'original d'un fichier (configuration ou noyau) avant sa modification ou son remplacement.
[modifier] Développement
Le noyau bsd.rd ne pourra être construit que si /distrib/special est d'abord compilé et installé. Il nous faut donc premièrement nous rendre dans ce répertoire, entrer éventuellement un make clean, puis simplement un make && make install. Ceci fait nous pouvons maintenant nous intéresser de plus près à RAMDISK_CD.
Le répertoire de ce fichier de configuration du noyau est /sys/arch/i386/conf. Rendez-vous donc dans celui-ci et modifiez RAMDISK_CD selon vos besoins. Dans quelle mesure peut-il être modifié ? En fait très largement puisque pour divers essais j'utilise les fichiers GENERIC et GENERIC.MP. Par exemple pour adapter un noyau GENERIC (qu'il faut alors renommer en RAMDISK_CD bien sûr) la principale modification utilisée consiste en :
#config bsd swap generic option RAMDISK_HOOKS option MINIROOTSIZE=3800 config bsd root on rd0a swap on rd0b and wd0b and sd0b pseudo-device rd 1
Après avoir ainsi adapté le noyau proprement dit, nous pouvons aussi adapter le disque mémoire qu'il contient. Là aussi, dans quelle mesure ? Assez largement également, voici pour ce faire quelques fichiers concernés.
/distrib/miniroot/dot.profile : ce fichier est exécuté juste après le chargement du noyau. Dans sa version originale, c'est lui qui, entre autre, affiche le menu (I)nstall, (U)pgrade or (S)hell? et selon la réponse appelle le script install ou upgrade ou le shell ksh. Dans sa version modifiée il fera ce que vous lui demanderez de faire, dans la limite des commandes et de leurs options incluses dans le disque mémoire. Une des façons les plus simples de tester les possibles consiste tout simplement à démarrer sur un noyau bsd.rd (d'origine ou déjà personnalisé) et à appeler un shell. Notez enfin qu'il semble tout de même nécessaire que ce script fasse tout d'abord au moins une chose, monter la racine du disque mémoire avec par exemple :
mount /dev/rd0a /
/distrib/miniroot/mtree.conf : ce fichier permet de créer ou modifier l'arborescence originelle du disque mémoire. Je ne vois pas grand chose à en dire ; l'arborescence pouvant de toute façon aussi être modifiée après coup par les commandes classiques.
/distrib/i386/common/list : ce fichier constitue la liste des commandes et fichiers présents dans le disque mémoire. De façon un peu simplifiée si l'on souhaite supprimer une commande, il suffit de la mettre en commentaire mais, hélas, il ne suffit pas d'en inscrire une pour que la réciproque soit vraie. Mes principaux essais d'insertion ont à ce jour porté sur mount_mfs et s'il est bien possible d'ajouter cette commande, je n'ai jamais réussi à la faire fonctionner : ni montage, ni message d'erreur. Supprimer ou ajouter des scripts est beaucoup plus facile, il suffit par exemple de s'inspirer de ce qui est fait pour /distrib/miniroot/install* ou upgrade.
Après avoir modifié ces fichiers, et peut-être d'autres, comme bon vous semble, vous pouvez maintenant procéder à la compilation de votre noyau bsd.rd. S'il existe déjà allez dans le répertoire /sys/arch/i386/compile/RAMDISK_CD et entrez un make clean. Rendez-vous ensuite dans le répertoire /distrib/i386/ramdisk_cd, entrez si nécessaire un make clean puis un make. Après quelques minutes vous devriez trouver entre autres dans ce répertoire votre bsd.rd.
[modifier] Conclusion
Vous en apprendrez bien plus en consultant les fichiers concernés et en faisant vos propres essais. Ce ne sont là que quelques pistes. De façon très générale et assez évidente, si vous n'avez que peu modifié les fichiers originaux, il y a de forte chance pour que la compilation réussisse et que votre nouveau noyau fonctionne exactement comme vous le souhaitiez. Dans le cas contraire, il est fort possible que vous rencontriez quelques difficultés à un moment ou à un autre, lors de la compilation ou de l'utilisation du noyau... il faut alors voir au cas par cas, à moins que tout simplement vous n'en sachiez bien plus que moi sur la question.

