[Index de La FAQ] [Section 4 - Guide d'Installation] [Section 6 - Mise en place du réseau]
,------o-----------o----X 3.8 Stable
| . .
| . ,------o---------o----X 3.9 Stable
| . | . .
| . | . ,----o----------o--> 4.0 Stable
| . | . | . .
| . | . | . ,-----o--> 4.1 Stable
| . | . | . | .
| . | . | . | .
-->3.8Rel----->3.9Rel----->4.0Rel----->4.1Rel----> Current
Time --->
-Current: La version courante pour laquelle le développement est réalisé, et qui deviendra la prochaine -release d'OpenBSD. Tous les six mois, lorsqu'une version d'OpenBSD est révisée, -current est tagguée, et devient -release : un point gelé dans l'histoire de l'arbre des sources. Chaque -release demeure inchangée; c'est pour cela qu'on la trouve sur les CDs et serveurs FTP.
-Stable est basée sur -release, et est une branche du chemin de développement principal d'OpenBSD. Quand des corrections très importantes sont faites sur -current, elles sont "backportées" (intégrées) aux branches -stable; à cause de celà, -stable est aussi connue sous le nom de branche patch. Dans l'illustration ci-dessus, la ligne verticale en pointillés symbolise les corrections de bogues incorporées aux branches -stable. Vous remarquerez aussi dans l'exemple ci-dessus que la branche 3.8-stable a été supprimée à la sortie de 4.0-release, et que la branche 3.9-stable a été supprimée à la sortie de 4.1-release -- les anciennes versions sont typiquement supportées durant deux "releases" au maximum. Le support d'anciennes versions nécessite des ressources et du temps, et alors que nous pourrions vouloir plutôt fournir un support continu pour les anciennes versions, nous préférerons nous concentrer sur les nouvelles fonctionnalités. La branche -stable est, par conception, très facile à construire à partir de -release de la même version (c'est à dire en allant de 4.1-release vers 4.1-stable).
La branche -stable est -release à laquelle on a ajouté les correctifs listés dans la page des errata, ainsi que quelques correctifs ne nécessitant pas d'erratum. Habituellement, le fonctionnement de -stable est le même que celui de -release sur laquelle elle est basée. Si les pages de manuel doivent être modifiées, il est très probable que ces modifications ne fassent pas partie de -stable. En d'autres termes, le support de nouveaux périphériques NE sera pas ajouté à - stable, et le support de nouvelles fonctionnalités sera très rarement ajouté sauf si cela est considéré comme très important.
Il est utile de préciser que le nom "-stable" ne signifie pas pour autant que -current est instable. -current change et évolue, alors que -stable ne change que très peu (tant aux niveau des APIs qu'au niveau opérationnel), et vous n'aurez pas à apprendre à nouveau votre système, à changer des fichiers de configuration ou à ajouter de nouvelles applications à votre système. En fait, notre préoccupation étant de faire continuellement évoluer OpenBSD, vous devriez trouver -current plus performante que -stable.
Attention : -current change tout le temps. Elle change pratiquement toutes les minutes. Bien que les développeurs travaillent sans cesse afin que le système se compile toujours et qu'il n'y ait pas de bogues majeurs, il est tout à fait possible de récupérer les sources de -current et que celles-ci ne soient pas compilables, alors que tout fonctionne correctement cinq minutes plus tard. Il y a aussi des "jours drapeau" et des changements majeurs du système que les développeurs gèrent avec des outils en un, mais qui empêchent une quelconque mise à jour basée sur les sources. Si vous n'êtes pas préparé à les traiter, rester à l'écart de -current.
La plupart des utilisateurs devraient utiliser -stable ou -release. Cela dit, plusieurs personnes utilisent -current sur des systèmes en production, et il est important que certaines personnes fassent cela pour identifier des bogues et tester les nouvelles fonctionnalités. Cependant, si vous ne savez pas comment décrire, diagnostiquer et gérer proprement un problème, ne vous dites pas (ou à quelqu'un d'autre) que vous être entrain d'"aider le projet" en utilisant -current. "Ça ne marche pas !" n'est pas un rapport de bogue utile. "Les changements récents dans le pilote pciide ont brisé la compatibilité avec mon interface IDE basée sur Slugchip, ci-joint le dmesg d'un système fonctionnel et un système ne fonctionnant pas..." peut être un rapport utile.
Des fois, les utilisateurs "normaux" veulent disposer des derniers développements et utiliser -current. La raison la plus commune de faire cela est que l'utilisateur possède un périphérique qui n'est pas supporté par -release (et donc, par -stable non plus), ou qu'il souhaite utiliser une nouvelle fonctionnalité de -current. Dans ce cas, soit l'utilisateur utilise -current soit il n'utilise pas le périphérique, et utiliser -current est peut-être l'option la plus logique. Cependant, il ne faut pas espérer que les développeurs vous tiennent la main.
Parfois, on demande s'il y a un moyen d'obtenir une copie exacte du code qui a servi à construire un snapshot. La réponse est non. Primo, il n'y a aucun intérêt. Secundo, les snapshots sont construits selon le souhait des développeurs, lorsque le planning le permet, et lorsque des ressources sont disponibles. Sur les plates-formes rapides, il est possible de créer plusieurs snapshots en un jour. Sur les plates-formes lentes, la création d'un snapshot peut durer une semaine ou plus. Fournir des balises ou des marques dans l'arborescence des sources pour chaque snapshot peut s'avérer peu pratique.
Une mise à jour majeure consiste à installer une nouvelle version
d'OpenBSD, qui inclut généralement de nouvelles fonctionnalités.
Par exemple, le passage d'une version 4.0 à une version 4.1 ou la mise à
jour d'un snapshot du 12 juin avec un snapshot du 24 juin sont
considérés comme mises à jour majeures.
Lors d'une mise à jour majeure, vous devez typiquement consulter Suivre la version de développement "-current" ou
le Guide de Mise à niveau d'OpenBSD (lors
du passage d'une version à une plus récente) pour effectuer les
modifications nécessaires au bon fonctionnement de la nouvelle version
d'OpenBSD.
Une mise à jour mineure consiste à appliquer des correctifs à un
système afin d'améliorer son fonctionnement SANS modification des
fonctionnalités de base ou de la compatibilité binaire.
Ceci est généralement effectué en suivant le processus
d'Application des correctifs sous
OpenBSD ou en suivant la procédure décrite dans le document intitulé
Maintenir son système à niveau par
rapport à -stable.
Quand vous effectuez une mise à jour mineure, votre système passe d'un
état -release à un état -stable (ou -release
corrigé) de la même version. Par exemple, de 4.1-release à 4.1-stable.
Vous pouvez ensuite effectuer une nouvelle mise à jour mineure vers un
-stable plus récent de la même version.
Le processus de mise à jour est généralement sans conséquence étant
donné que les fichiers /etc ou d'autres configurations système
n'ont pas besoin d'être modifiés.
Ainsi, vous pouvez installer un système (tel que 4.0-release) à partir du CD, puis vous pourrez le mettre à jour un certain nombre de fois en 4.0-stable et par la suite effectuer une mise à jour majeure vers 4.1-release et ainsi de suite.
Il faut aussi comprendre que le processus de mise à jour majeure est uniquement supporté dans une seule direction uniquement : de l'ancien au nouveau, et de -stable vers -current. Vous ne pouvez pas utiliser 4.1-current (ou un snapshot), puis décider que c'est trop dangereux, et revenir vers 4.1-stable. Vous ne pouvez compter que sur vous-même si vous choisissez un autre chemin que celui, supporté, consistant à réinstaller votre système proprement. Vous ne devez espérer aucune aide de la part de l'équipe de développement OpenBSD.
Oui, cela veut dire que vous devez prendre le temps de réfléchir avant d'utiliser -current.
Voici quelques raisons pour NE PAS compiler votre systèmes depuis les sources :
L'équipe OpenBSD réalise fréquemment des instantanés basés sur le code de -current pour toutes les plates-formes. Dans la plupart des cas, cela vous suffira pour utiliser -current.
La raison la plus courante de compiler depuis les sources est de suivre la branche -stable, pour laquelle la compilation depuis les sources est la seule issue supportée...
Vous êtes au | But | Mise à niveau binaire vers | ensuite ... |
Ancienne -release | Nouvelle release | Dernière release | C'est fait ! |
-release | -stable | Dernière release | Récupérer & compiler -stable |
Ancienne -stable | -stable | Nouvelle release | Récupérer & compiler -stable |
-release | -current | Dernier instantané | Récupérer (optionnel) & compiler -current |
Ancienne -current | -current | Dernier instantané | Récupérer (optionnel) & compiler -current |
Il est recommandé d'installer le binaire via l'option "Upgrade" du média d'installation. Si ce n'est pas possible, vous pouvez aussi décompacter les binaires comme décris ici. Vous pouvez faire le processus complet de mise à niveau sans soucis, incluant la création d'utilisateurs ou d'autres changements de répertoires de /etc.
Après avoir décidé quel Serveur AnonCVS vous allez utiliser, vous devez effectuer un "checkout" (récupération) de l'arbre des sources, que vous maintiendrez par la suite en lançant des "updates" (mises à jour), afin de récupérer les fichiers les plus récents dans votre arbre local.
La commande CVS(1) dispose de nombreuses options, certaines d'entre elles sont requises afin de récupérer et de mettre à jour un arbre. Les autres commandes peuvent résulter en un arbre cassé. Le fait de comprendre et de suivre les directions est ici important.
Suivis de -current
Dans ce cas, nous supposons que vous utilisez un serveur AnonCVS publique, anoncvs@anoncvs.example.org:/cvs. Nous supposons également que vous utilisez le shell sh(1), vous devrez dans le cas contraire ajuster certaines commandes.Suivis de -stablePour récupérer un arbre des sources CVS de -current, vous pouvez utiliser la commande suivante :
# cd /usr # export CVSROOT=anoncvs@anoncvs.example.org:/cvs # cvs -d$CVSROOT checkout -P src
Une fois l'arbre récupéré, vous pourrez plus tard le mettre à jour avec :
# cd /usr # export CVSROOT=anoncvs@anoncvs.example.org:/cvs # cvs -d$CVSROOT up -Pd
Si vous souhaitez récupérer une "branche" alternative de l'arbre, comme la branche -stable, vous devez utiliser le modificateur "-r" :# cd /usr # export CVSROOT=anoncvs@anoncvs.example.org:/cvs # cvs -d$CVSROOT checkout -rOPENBSD_4_1 -P src
Ceci aura pour effet de récupérer les fichiers sources de la branche OPENBSD_4_1, aussi connue sous le nom de "Branche patchée" ou "-stable". Vous pourrez mettre à jour le code de façon similaire :# cd /usr/src # export CVSROOT=anoncvs@anoncvs.example.org:/cvs # cvs -d$CVSROOT up -rOPENBSD_4_1 -Pd
CVS est vraiment agréable car il permet de suivre une balise dans les fichiers récupérés, vous n'avez ainsi pas à vous rappeler de la partie "-rOPENBSD_4_1" de la ligne de commande, ceci sera mémorisé jusqu'a ce que vous l'effaciez ou en spécifiez un autre via l'option "-A" de "update". Cependant, il est probablement plus correct de fournir trop d'infos que pas assez sur vos lignes de commande CVS.
L'arbre "src" ayant le seul à avoir été montré jusqu'a présent,
vous pouvez faire les mêmes étapes pour "XF4" et
"ports".
Toutes les parties d'OpenBSD devant être en synchronisation, tous les
arbres utilisés devraient être mis à jour en même temps.
Vous pouvez allier plusieurs récupérations sur une seule ligne
(-stable est montré) avec :
# cd /usr/src
# export CVSROOT=anoncvs@anoncvs.example.org:/cvs
# cvs -d$CVSROOT checkout -rOPENBSD_4_1 -P src ports XF4
Cependant, les mises à jour doivent être faites répertoire par
répertoire.
A ce niveau, que vous ayez suivi -stable ou -current vous devriez avoir un arbre des sources correct. Soyez attentif à ce que vous récupérez -- vous pourriez compiler -current en pensant compiler -stable.
Pour extraire l'arbre des sources à partir du CD vers /usr/src (en
supposant que le CD est monté dans /mnt) :
# cd /usr/src; tar xzf /mnt/src.tar.gz
# cd /usr; tar xzf /mnt/XF4.tar.gz
# tar xzf /mnt/ports.tar.gz
Les fichiers sources téléchargeables depuis les serveurs FTP sont
séparés en deux fichiers pour minimiser le temps nécessaire à leur
téléchargement pour les personnes souhaitant travailler avec telle ou
telle partie de l'arbre uniquement.
Ces deux fichiers sont sys.tar.gz, qui contient les fichiers
utilisés pour créer le noyau, et src.tar.gz qui contient toutes
les autres applications "userland", hormis l'arbre des ports et les
sources X11.
Cependant, et de manière générale, vous aurez besoin des deux.
En supposant que vous les ayez téléchargé src.tar.gz et
sys.tar.gz dans /usr :
# cd /usr/src
# tar xzf ../sys.tar.gz
# tar xzf ../src.tar.gz
# cd /usr
# tar xzf XF4.tar.gz
# tar xzf ports.tar.gz
L'extraction de toutes les parties de l'arbre source n'est pas obligatoire mais si on souhaite garder un système cohérent, il est conseillé de les extraire toutes.
Même chose pour l'option -d sur une commande 'update' -- elle crée les nouveaux répertoires ayant pu être ajoutés au dépôt depuis votre dernier "checkout".
Les utilisateurs de CVS expérimentés auront pu se demander pourquoi le CVSROOT est précisé et utilisé dans cet exemple, alors que cvs(1) enregistre la situation du serveur dans l'arbre ainsi obtenu. Ceci est correct, cependant, un utilisateur devra souvent outrepasser le serveur enregistré, et de nombreuses personnes recommandent de toujours spécifier le dépôt à utiliser. Il est aussi à noter que si la variable d'environnement CVSROOT peut être utilisée directement par cvs(1), elle est utilisée uniquement si rien ne viens la remplacer, et la spécification de la ligne de commande est prépondérante.
Dans cet exemple, notez que -Pd est utilisé comme paramètre de la commande up. Ceci est une autre de ces options REQUISES, elle permettra aux nouveaux répertoires qui n'existaient pas dans la récupération précédente d'être créés lors du processus de mise à jour.
Il est souvent utile d'utiliser un .cvsrc dans votre
répertoire home afin de spécifier les options par défaut.
Un fichier .cvsrc d'exemple :
$ more ~/.cvsrc
cvs -q -danoncvs@anoncvs.example.org:/cvs
diff -up
update -Pd
checkout -P
Ce fichier ordonnera à cvs(1) d'utiliser le serveur
anoncvs@anoncvs.example.org:/cvs, supprimant les sorties
souvent inutiles ("-q" pour "quiet", tranquille) pour toutes
les opérations, la commande "cvs up" utilisant par défaut -Pd,
la commande "cvs diff" réalisant par défaut des "diffs unifiés" suite à
l'option "-u", et un "cvs checkout" utilisera l'option
"-P".
Tandis que cela est confortable, si vous oubliez que ce fichier existe, ou si
vous essayez de lancer ces commandes auxquelles vous êtes habitué sans
ce fichier, vous rencontrerez des problèmes.
L'arbre des sources est constitué d'un grand nombre de petits fichiers. Il est donc conseillé d'activer soft updates sur la partition où se trouve cet arbre afin d'améliorer significativement les performances.
Evidemment, le noyau est un composant TRES dépendant du matériel du système. Les sources du noyau sont dans le répertoire /usr/src/sys. Certaines parties du code du noyau d'OpenBSD sont utilisées sans distinction de plate-forme, alors que d'autres sont très spécifiques à un processeur ou une architecture. Si vous regardez dans le répertoire /usr/src/sys/arch/, vous verrez certaines choses quelque peu intrigantes -- par exemple, il y a des répertoires mac68k, m68k et mvme68k. Dans ce cas, les systèmes mvme68k et mac68k utiliseront tous deux le même processeur, mais les machines sur lesquelles ils sont basés sont très différentes, et elles demandent ainsi un noyau très différent (il y a bien plus de choses qu'un processeur dans un ordinateur !). Cependant, certaines parties du noyau sont communes, elles demeurent dans le répertoire m68k. Si vous compilez simplement un noyau, les répertoires de l'architecture de base comme m68k ne sont pas un soucis, vous devriez travailler uniquement avec les répertoires de "l'architecture composant", comme mvme68k.
Les noyaux compilés sont basés sur les fichiers de configuration du noyau, qui se trouvent dans le répertoire /usr/src/sys/arch/<votre plate-forme>/conf. La compilation du noyau consiste à l'utilisation du programme config(8) pour créer et peupler un répertoire compile, qui se terminera dans /usr/src/sys/arch/<votre plate-forme>/compile/<nom du noyau>. Pour cet exemple, nous supposerons que vous utilisez la plate-forme i386 :
# cd /usr/src/sys/arch/i386/conf
# config GENERIC
# cd ../compile/GENERIC
# make clean && make depend && make
[...beaucoup de sortie...]
# make install
Remplacez "i386" sur la première ligne par le nom de votre
plate-forme.
La commande
machine(1)
peut vous donner le nom de la plate-forme sur laquelle vous êtes afin de
pouvoir utiliser "cd /usr/src/sys/arch/`machine`/conf" à la
place de la première ligne.
A ce stade, redémarrez votre machine afin d'activer le nouveau noyau. Notez que le nouveau noyau devrait être lancé avant l'étape suivante, ce que vous savez si vous avez suivis les explications ci-dessus sur la mise à niveau vers les instantanés les plus récents. Parfois, les APIs changent cependant, et l'ancien noyau sera dans l'incapacité de lancer de nouvelles applications, mais les nouveaux noyaux supportent en général les applications plus anciennes.
$ cd /somewhere
$ cp /usr/src/sys/arch/i386/conf/GENERIC .
$ config -s /usr/src/sys -b . GENERIC
$ make clean && make depend && make
... beaucoup de messages affichés ...
Remarquez que vous pouvez compiler un noyau sans accès root, mais vous
devez être root pour pouvoir l'installer.
# rm -rf /usr/obj/*
# cd /usr/src
# make obj
Remarquez que l'utilisation du répertoire /usr/obj est
obligatoire. Echouer à cette étape avant la compilation laissera votre
arbre src dans un mauvais état.
# cd /usr/src/etc && env DESTDIR=/ make distrib-dirs
# cd /usr/src
# make build
Ceci compile et installe tous les outils du "userland" dans un ordre
approprié.
Cette étape est très coûteuse en temps -- une machine très rapide
devrait la réaliser sous une heure, une machine très lente pourrait
mettre plusieurs jours.
Lorsque cette étape est terminée, vous avez donc de nouveaux binaires à
leurs places sur votre système.
Le processus de release utilise les binaires créés dans le répertoire /usr/obj lors du processus ci-dessus, vous devez donc accomplir celui-ci au préalable, et rien ne doit perturber le répertoire /usr/obj. Ceci peut être un problème si vous utilisez un disque mémoire pour /usr/obj avec de petites performances lors du processus de compilation, vous ne voudrez pas redémarrer l'ordinateur entre les étapes de compilations et de "release" !
Le processus de release requiert deux répertoires de travail, appelés DESTDIR et RELEASEDIR. Tous les fichiers faisant partie d'une installation OpenBSD "propre" seront copiés à l'endroit correct au sein de DESTDIR. Ils seront tar(1)és puis placés dans RELEASEDIR. A la fin du processus, RELEASEDIR arborera la release OpenBSD intégralement. Le processus de release utilisera aussi /mnt, ce point ne doit donc pas être utilisé par autre chose pendant le processus de release. A titre d'exemple, nous utiliserons DESTDIR à /usr/dest et RELEASEDIR à /usr/rel.
Deux utilitaires qui ne sont pas dans le système de base d'OpenBSD, crunch et crunchgen(1), sont utilisés pour créer un exécutable unique composé de plusieurs binaires. Le nom qui l'invoque détermine quel composant binaire est utilisé. C'est un peu comme si plusieurs fichiers de programmes individuels étaient concentrés sur un ramdisk noyau qui existe sur les disquettes et autres médias d'installation. Ces utilitaires doivent être traités lorsque le processus de release est lancé Ils n'ont besoin d'être installés qu'une seule fois, mais certaines personnes oublient parfois cette étape, et ces programmes sont compilés rapidement, certaines personnes optent pour compiler crunch et crunchgen à chaque fois qu'ils utilisent le script.
Vous devez avoir les privilèges root pour créer une release.
# cd /usr/src/distrib/crunch && make obj depend all install
A présent, définissons nos variables d'environnement DESTDIR et
RELEASEDIR :
# export DESTDIR=/usr/dest
# export RELEASEDIR=/usr/rel
Nettoyons DESTDIR et créons le répertoire :
# test -d ${DESTDIR} && mv ${DESTDIR} ${DESTDIR}.old && rm -rf ${DESTDIR}.old &
# mkdir -p ${DESTDIR} ${RELEASEDIR}
RELEASEDIR ne doit pas forcément être vide lors du lancement du
processus mais, cependant, s'il y a des changement dans les fichiers de
la release ou dans leurs noms, les anciens fichiers seront conservés.
Vous voudrez ainsi certainement effacer ce répertoire.
Passons à présent à la release elle-même :
# cd /usr/src/etc
# make release
Une fois la release construite, il peut être bon de la vérifier afin d'être
sûr que les fichiers tar reflètent bien le contenu de DESTDIR.
La sortie de cette étape devrait être très courte :
# cd /usr/src/distrib/sets
# sh checkflist
Vous avez à présent un jeu de fichiers complet et fonctionnel dans
RELEASEDIR. Ces fichiers peuvent être utilisés afin d'installer ou de
mettre à jour OpenBSD sur d'autres machines.
Les instructions faisant foi sur la création d'une release sont dans release(8).
Remarque : Si vous souhaitez distribuer les fichiers résultants par HTTP pour être utilisables par les scripts de mise à jour ou d'installation, vous aurez besoin d'ajouter un fichier "index.txt". Ce fichier contient la liste de tous les fichiers constituant votre release fraîchement créée.
# /bin/ls -1 >index.txt
i386 seulement : La plate-forme i386 nécessite l'installation des paquetages "tcl" et "tk" avant la compilation de X (ils se trouvent dans l'arbre des ports à /usr/ports/lang/tcl/8.4/ et /usr/ports/x11/tk/8.4/. L'installation du paquetage "tk" installera "tcl" en tant que dépendance). Comme d'habitude, l'installation qu'un paquetage est plus rapide que l'installation de ces applications depuis les sources. Un échec de l'installation de ces paquetages avant de compiler X est quelque chose de frustrant, car le système fonctionnera un certain temps sans afficher la moindre erreur.
Afin de compiler X en utilisant le "répertoire ombre" de /usr/Xbld (compiler et installer les nouveaux binaires dans les bons répertoires), suivez ces étapes :
# rm -rf /usr/Xbld
# mkdir -p /usr/Xbld
# cd /usr/Xbld
# lndir ../XF4
[...beaucoup de sortie...]
# make build
[...beaucoup de sortie...]
Pour cet exemple, nous utiliserons les DESTDIR et RELEASEDIR comme /usr/Xbld/dest et /usr/Xbld/rel, respectivement. Ceci doit être fait après le processus de compilation ci-dessus.
# export DESTDIR=/usr/Xbld/dest
# export RELEASEDIR=/usr/Xbld/rel
# cd /usr/Xbld
# rm -rf dest
# mkdir dest rel
# make release
Si vous prévoyez de faire à la fois une compilation et une release de X, vous pouvez utiliser une cible make(1) différente, "b-r", qui réalise à la fois la compilation et les étapes de release. La cible "b-r" suppose que DESTDIR et RELEASEDIR sont les sous-répertoires "rel" et "dest" au sein de votre sous-répertoire de compilation :
# rm -rf /usr/Xbld
# mkdir -p /usr/Xbld /usr/Xbld/dest /usr/Xbld/rel
# cd Xbld
# lndir ../XF4
[...beaucoup de sortie...]
# make b-r
[...beaucoup de sortie...]
En réalité, vous n'en avez très probablement pas besoin.
Un noyau sur mesure est un noyau construit à partir d'un fichier de configuration autre que GENERIC, le fichier de configuration fourni de base. Un noyau sur mesure peut se baser sur du code source -release, -stable ou -current comme c'est le cas pour le noyau GENERIC. Alors que la compilation de votre propre noyau GENERIC est supportée par l'équipe OpenBSD, la compilation de votre propre noyau sur mesure ne l'est pas.
Le fichier de configuration noyau OpenBSD standard (GENERIC) est conçu pour convenir à la plupart des utilisateurs. Bon nombre de personnes ont rendu leur système inopérant en essayant d'optimiser le noyau au lieu d'améliorer son fonctionnement. Il existe certaines personnes qui pensent qu'un noyau et un système d'exploitation doivent être taillés sur mesure pour obtenir des performances optimales. Ceci n'est pas vrai dans le cas d'OpenBSD. Seules les personnes très compétentes avec des applications très particulières doivent penser à faire un noyau et un système sur mesure.
Voici quelques raisons pour lesquelles vous devriez créer un noyau sur mesure :
Voici quelques raisons pour lesquelles vous ne devez pas compiler un noyau sur mesure :
La suppression de pilotes pourrait rendre plus rapide la phase de démarrage système. Cependant, elle peut compliquer la récupération suite à problème matériel. La suppression de pilotes est une tâche très souvent mal réalisée. La suppression de pilotes ne rendra pas votre système plus rapide de manière perceptible même si elle peut produire un noyau plus petit. La suppression des parties liées au déboguage et à la vérification d'erreurs peut améliorer les performances, mais rendra impossible l'analyse du système si quelque chose ne fonctionne plus ou pas.
Encore une fois, les développeurs ignorent d'habitude les rapports de bogue relatifs à des noyaux personnalisés, sauf si le problème peut être reproduit avec un noyau GENERIC. Vous aurez été prévenu.
La création d'un noyau OpenBSD est contrôlée par le biais de fichiers de configuration, se trouvant dans le répertoire /usr/src/sys/arch/<arch>/conf/ par défaut. Toutes les architectures possèdent un fichier, GENERIC, qui peut être utilisé pour générer un noyau OpenBSD standard pour une plate-forme donnée. Il peut aussi y avoir d'autres fichiers de configuration qui peuvent être utilisés pour créer des noyaux avec des objectifs différents tels que la minimisation de l'utilisation de la RAM, les stations de travail "diskless", etc.
Le fichier de configuration est traité par config(8), qui crée et peuple un répertoire de compilation situé sous ../compile. Pour une installation typique, le chemin absolu du répertoire serait situé sous /usr/src/sys/arch/<arch>/compile/. config(8) peut aussi créer un fichier Makefile, et d'autres fichiers requis pour créer avec succès un noyau.
Les options de configuration du noyau sont des options que vous ajoutez à la configuration de votre noyau pour activer certaines caractéristiques dans celui-ci. Ceci vous permet d'avoir exactement le support que vous voulez sans vous encombrer des pilotes inutiles. Il y a une multitude d'options qui vous permettront de personnaliser votre noyau. Veuillez consulter la page de manuel options(4) pour une liste complète des options. Vous pouvez aussi consulter les fichiers d'exemples de configurations qui sont disponibles pour votre architecture.
L'ajout, la suppression, ou la modification d'options dans votre noyau ne doivent être effectués que si vous avez une bonne raison pour le faire ! N'éditez pas le fichier de configuration GENERIC !! La seule configuration du noyau supportée par l'équipe OpenBSD est le noyau GENERIC, la combinaison d'options figurant dans les fichiers /usr/src/sys/arch/<arch>/conf/GENERIC et /usr/src/sys/conf/GENERIC tels que livrés par l'équipe OpenBSD (i.e. non édités). Emettre un rapport de bogue concernant un noyau personnalisé va dans la plupart des cas se résumer à une réponse vous demandant d'essayer de reproduire le problème avec un noyau GENERIC. Les options ne sont pas toutes compatibles entre elles, et plusieurs options sont nécessaires au bon fonctionnement du système. Il n'y a aucune garantie quant au fonctionnement d'un noyau personnalisé que vous avez réussi à compiler. Il n'y a aucune garantie sur le fait qu'un noyau pouvant être "config(8)uré" puisse être compilé.
Vous pouvez voir les fichiers de configuration spécifiques à une plate-forme donnée ici :
Si vous lisez attentivement ces fichiers, vous verrez une ligne comme :
include "../../../conf/GENERIC"
Cela signifie que l'on fait référence à un autre fichier de
configuration. Ce fichier comprend toutes les options qui ne sont pas
dépendantes de l'architecture. Donc quand vous créez votre fichier de
configuration, soyez sûr de regarder
/sys/conf/GENERIC pour voir ce que vous voulez.
Toutes les options ci-dessous doivent être placées dans le fichier de configuration du noyau avec le format :
option nomou
option nom=valeur
Par exemple, pour utiliser l'option "DEBUG" dans le noyau, il faut
mettre la ligne suivante :
option DEBUG
Les options dans le noyau OpenBSD sont traduites en tant qu'options du
préprocesseur, donc une option telle que DEBUG compilerait les sources
avec l'option -DDEBUG. Ce qui est équivalent à placer un #define
DEBUG à travers les sources du noyau.
Vous aurez peut-être parfois besoin de désactiver une option
précédemment définie dans le fichier "src/sys/conf/GENERIC"
typiquement. Bien entendu, vous pouvez modifier une copie de ce fichier,
mais une meilleure méthode consiste à utiliser la clause
rmoption. Par exemple, si vous souhaitiez vraiment désactiver le
débogueur intégré au noyau (non recommandé !), vous ajouteriez la
ligne suivante : rmoption DDB
à votre fichier de
configuration du noyau. option DDB est définie dans
src/sys/conf/GENERIC, mais la ligne rmoption ci-dessus
la désactive.
Encore une fois, veuillez consulter options(4) pour plus d'informations concernant les spécificités de ces options. Il est à noter que plusieurs options possèdent leurs propres pages de manuel -- il faut toujours lire toutes les informations disponibles au sujet d'une option avant de l'ajouter ou la supprimer de votre noyau.
include "arch/i386/conf/GENERIC"
boca0 at isa? port 0x100 irq 10 # BOCA 8-port serial cards
pccom* at boca? slave ?
Les deux lignes au regard des cartes boca(4) sont copiées depuis les
lignes commentées dans GENERIC, avec l'IRQ ajusté comme requis.
L'avantage d'utiliser ce fichier "wrapper" est que les changements
imprévus dans GENERIC sont automatiquement mis à jour comme lors de
toute mise à jour du code. L'inconvénient est qu'on ne peut supprimer un
périphérique (cependant, c'est en général une mauvaise idée).
Un autre moyen de générer un noyau personnalisé est de faire une copie du GENERIC standard, en lui donnant un autre nom, et en l'éditant selon les besoins. L'inconvénient est que les futures mises à jour du fichier de configuration GENERIC devront être fusionnés dans votre copie, ou vous devrez refaire votre fichier de configuration.
Dans un autre événement, après avoir fait votre fichier de configuration personnalisé, utilisez config(8) et construisez le noyau comme documenté ci-dessus.
Les instructions complètes pour la création de votre propre noyau sont dans la page de manuel afterboot(8).
Lorsque vous démarrez votre système il est possible que vous remarquiez que votre noyau trouve vos périphériques mais à la mauvaise IRQ. Et que vous aillez immédiatement besoin de ce périphérique. Sans recompiler votre noyau vous pouvez utiliser la configuration au démarrage de celui-ci. Cela vous permettra de corriger votre problème pour cette fois et uniquement pour cette fois. Si vous redémarrez le système il faudra recommencer la procédure. Il s'agit donc d'une méthode temporaire. Le problème devra être corrigé en utilisant config(8). De plus votre noyau à besoin de l'option BOOT_CONFIG dans la configuration du noyau. Le noyau GENERIC possède cette option.
Une grande partie de ce document peut-être trouvée dans la page de manuel boot_config(8).
Pour démarrer avec UKC (User Kernel Config), il faut spécifier l'option -c au démarrage.
boot> boot hd0a:/bsd -c
ou n'importe quel autre noyau que vous voulez démarrer. L'invite de
commandes UKC apparaîtra, et vous pourrez spécifier au noyau les
périphériques que vous désirez modifier, ceux que vous voulez activer ou
désactiver.
Voici un liste des commandes les plus utilisées dans UKC.
Une fois votre noyau configuré, utilisez quit ou exit et continuez le démarrage. Une fois votre système démarré, vous devriez rendre la modification permanente au niveau de votre binaire du noyau, tel que c'est décrit dans utilisation de config(8) pour changer le binaire du noyau
Les options -e et -u de config(8) peuvent être très utiles et vous évitent de perdre du temps à recompiler votre noyau. Le drapeau -e vous permet de rentrer en configuration UKC alors que le système fonctionne. Les changements prendront effets au prochain redémarrage. Le drapeau -u permet de voir si des changements ont été effectués au noyau pendant le démarrage, signifiant que vous avez utilisé boot -c pour entrer en configuration UKC.
Les exemples suivants montrent la désactivation des périphériques ep* dans le noyau. Pour plus de sécurité, il est préférable d'utiliser l'option -o qui écrira les changements dans un fichier spécifié. Par exemple : config -e -o bsd.new /bsd écrira les changements dans bsd.new. Les exemples n'utilisent pas l'option -o, mais les changements sont ignorés et ne sont pas écrits dans le binaire du noyau. Pour plus d'informations sur les messages d'erreur et autres avertissements, lisez la page de manuel config(8) .
$ sudo config -e /bsd
OpenBSD 4.1 (GENERIC) #1107: Sat Sep 16 19:15:58 MDT 2006
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
warning: no output file specified
Enter 'help' for information
ukc> ?
help Command help list
add dev Add a device
base 8|10|16 Base on large numbers
change devno|dev Change device
disable attr val|devno|dev Disable device
enable attr val|devno|dev Enable device
find devno|dev Find device
list List configuration
lines count # of lines per page
show [attr [val]] Show attribute
exit Exit, without saving changes
quit Quit, saving current changes
timezone [mins [dst]] Show/change timezone
nmbclust [number] Show/change NMBCLUSTERS
cachepct [number] Show/change BUFCACHEPERCENT
nkmempg [number] Show/change NKMEMPAGES
shmseg [number] Show/change SHMSEG
shmmaxpgs [number] Show/change SHMMAXPGS
ukc> list
0 audio* at sb0|sb*|gus0|pas0|sp0|ess*|wss0|wss*|ym*|eap*|eso*|sv*|neo*|cmpci*
|clcs*|clct*|auich*|autri*|auvia*|fms*|uaudio*|maestro*|esa*|yds*|emu* flags 0x0
1 midi* at sb0|sb*|opl*|opl*|opl*|opl*|ym*|mpu*|autri* flags 0x0
2 nsphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
3 nsphyter* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|
vr*|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep
*|ep*|ep* phy -1 flags 0x0
4 qsphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
5 inphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
6 iophy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
7 eephy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
8 exphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
[...snip...]
ukc> disable ep
67 ep0 disabled
68 ep* disabled
69 ep* disabled
155 ep0 disabled
156 ep0 disabled
157 ep* disabled
158 ep* disabled
210 ep* disabled
ukc> quit
not forced
Dans l'exemple ci-dessus, tous les périphériques ep* sont désactivés du noyau et ne seront donc pas testés. Dans certaines situations où vous aurez effectué ces changements au démarrage avec UKC et boot -c, il vous faudra les rendre définitifs. Pour ce faire, il faudra utiliser l'option -u. Dans l'exemple suivant, l'ordinateur a été démarré avec UKC et les périphériques wi(4) sont désactivés. Étant donné que les changements fait par boot -c ne sont pas permanents, ceux-ci doivent être écrits sur le disque. Cet exemple montre comment écrire les changements effectués par boot -c dans un nouveau noyau binaire bsd.new.
$ sudo config -e -u -o bsd.new /bsd
OpenBSD 4.1 (GENERIC) #1107: Sat Sep 16 19:15:58 MDT 2006
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Processing history...
105 wi* disabled
106 wi* disabled
Enter 'help' for information
ukc> quit
UKC> verbose
autoconf verbose enabled
UKC> quit
Vous aurez à présent une sortie très verbeuse au démarrage.
Les problèmes les plus courants sont :
La compilation d'OpenBSD et d'autres programmes à partir des sources est une tâche qui sollicite le matériel plus que la plupart des autres opérations, faisant un usage intensif du CPU, du disque et de la mémoire. Par conséquence, si votre matériel a des problèmes, ces derniers apparaîtront plus facilement durant une compilation. Les défaillances "Signal 11" sont typiquement causées par des problèmes matériel, et la plupart du temps à cause de problèmes de mémoire. Mais ces défaillances peuvent aussi causées par le CPU, la carte mère, ou des problèmes de surchauffe. Votre système peut d'ailleurs être stable la plupart du temps et connaître des défaillances lors de la compilation de programmes.
Il est recommandé de réparer ou remplacer les composants à l'origine des défaillances; les problèmes pouvant se manifester sous d'autres formes plus tard. Si vous avez du matériel que vous souhaitez utiliser et qui ne vous pose aucun problème, installez simplement un snapshot ou une "révision".
Pour plus d'informations, consultez la Faq Sig11.
# cd /usr/src
# find . -type l -name obj | xargs rm
# make cleandir
# rm -rf /usr/obj/*
# make obj
# umount /usr/obj
# newfs VotrePartitionObj
# mount /usr/obj
que de faire "rm -rf /usr/obj".
Note : il est de ce fait possible de compiler des systèmes cassés. Les résultats de cette option ne sont pas supportés par le projet OpenBSD.
Les snapshots peuvent être retirés lorsqu'ils deviennent anciens (ou obsolètes) ou lorsque la sortie d'une -release approche.
OpenBSD supporte désormais deux compilateurs dans l'arbre, gcc v3.3.5 par la plupart des plates-formes, et également gcc v2.95.3 utilisé par des plates-formes qui n'ont pas encore été converties, ou qui ne seront pas converties à cause des manques du support de gcc3 ou de ses performances pauvres.
Les deux compilateurs sont dans des parties différentes de l'arbre :
Parce que la mise à niveau du compilateur est un peu comme le problème
du poulet et de l'oeuf, les changements sur le compilateur intégré à
l'arbre demandent une attention toute particulière.
Vous devez construire le compilateur deux fois -- la première
construction produit un compilateur qui génère un nouveau code mais
utilise l'ancien code pour fonctionner, la deuxième construction
construit un nouveau compilateur intégralement.
En général, vous voudrez réaliser la procédure suivante :
Si votre plate-forme utilise gcc 2.95.3 :
# rm -r /usr/obj/gnu/egcs/gcc/*
# cd /usr/src/gnu/egcs/gcc
- ou -
Si votre plate-forme utilise gcc 3.3.5 :
# rm -r /usr/obj/gnu/usr.bin/gcc/*
# cd /usr/src/gnu/usr.bin/gcc
Procédure commune de compilation pour v3.3.5 ou v2.95.3
# make -f Makefile.bsd-wrapper clean
# make -f Makefile.bsd-wrapper obj
# make -f Makefile.bsd-wrapper depend
# make -f Makefile.bsd-wrapper
# make -f Makefile.bsd-wrapper install
# make -f Makefile.bsd-wrapper clean
# make -f Makefile.bsd-wrapper depend
# make -f Makefile.bsd-wrapper
# make -f Makefile.bsd-wrapper install
Puis lancer un make build classique.
En tant que politique, les logiciels dans l'arbre OpenBSD ne modifient pas de fichiers dans /etc automatiquement. Cela signifie que les modifications à réaliser incombent toujours à l'administrateur. Les mises à niveau n'y font pas exception. Pour mettre à jour les fichiers dans ces répertoires, déterminez tout d'abord les changements qui ont été opérés sur les fichiers de la base (distribution) et répétez manuellement ces changements.
Par exemple, pour voir les fichiers dans l'arbre qui ont changé
récemment, faîtes un :
# cd /usr/src/etc
# ls -lt |more
Pour voir tous les changements dans le répertoire /etc entre
des versions arbitraires d'OpenBSD, vous pouvez utiliser CVS.
Par exemple, pour voir les changements entre 4.0 et 4.1, faîtes un :
# cd /usr/src/etc
# cvs diff -u -rOPENBSD_4_0 -rOPENBSD_4_1
Pour voir les changements entre 4.1 et -current ("HEAD"),
utilisez :
# cd /usr/src/etc
# cvs diff -u -rOPENBSD_4_1 -rHEAD
Le script
/dev/MAKEDEV
n'est pas mis à jour automatiquement lors du processus de compilation,
mais il est cependant installé comme partie de la mise à jour binaire.
En règle générale, c'est une bonne idée que de copier (si besoin est) et
de lancer ce script depuis votre arbre des sources lors de la mise à
niveau :
# cd /dev
# cp /usr/src/etc/etc.`machine`/MAKEDEV ./
# ./MAKEDEV all
Une fois que vous avez identifié les changements, appliquez à nouveau ceci à votre arbre local, en préservant toute configuration que vous auriez pu faire.
Les changements typiques de /etc à considérer, entre les release concernent :
De temps en temps, des fichiers et répertoires sont ajoutés, ou supprimés dans le fichier hierarchy. Aussi, le possesseur de l'information pour les portions du système de fichiers peut changer. Un moyen facile de s'assurer que votre hiérarchie est à jour est d'utiliser l'outil mtree(8).
Tout d'abord, procurez vous les dernières sources, en faisant :
# cd /usr/src/etc/mtree
# install -c -o root -g wheel -m 600 special /etc/mtree
# install -c -o root -g wheel -m 444 4.4BSD.dist /etc/mtree
# mtree -qdef /etc/mtree/4.4BSD.dist -p / -u
Votre hiérarchie de fichiers devrait à présent être à jour.
Lorsque les développeurs créent le support d'une nouvelle plate-forme, l'un des premiers gros tests est la compilation native. Compiler le système depuis les sources augmente très fortement la charge de l'OS et de la machine, et permet de voir à quel point le système fonctionne correctement. Pour cette raison, OpenBSD réalise les compilations sur les plates-formes que la compilation concerne, ceci est appelé le "native building". Sans compilation native, il serait bien plus difficile de s'assurer que les différentes plates-formes sont stables et qu'elles ne font pas que booter.
[Index de La FAQ] [Section 4 - Guide d'Installation] [Section 6 - Le réseau]