<HTML> <HEAD> <TITLE>Le chargeur <CODE>aboot</CODE></TITLE> </HEAD> <BODY> <A NAME="aboot"></A> <H1>3. <A NAME="s3"></A>Le chargeur <CODE>aboot</CODE></H1> <P> <A HREF="SRM-HOWTO.html#toc3">Contenu de cette section</A></P> <P> Si vous utilisez le <EM>firmware</EM> SRM, <CODE>aboot</CODE> est la meilleure façon de démarrer Linux. Il supporte :</P> <P> <UL> <LI> démarrage direct depuis divers systèmes de fichiers (<CODE>ext2</CODE>, <CODE>ISO9660</CODE>, et <CODE>UFS</CODE>, le système de fichiers de Digital Unix),</LI> <LI> lancement de fichiers objets exécutables (ELF et ECOFF),</LI> <LI> lancement de noyaux compressés,</LI> <LI> démarrage par réseau (en utilisant le protocole <CODE>bootp</CODE>),</LI> <LI> table de partitions au format Digital Unix (compatible avec les tables de partitions de BSD),</LI> <LI> démarrage interactif et configurations par défaut des consoles SRM qui n'acceptent pas les longues chaînes d'option. </LI> </UL> </P> <P></P> <P></P> <H2>3.1 <A NAME="ss3.1"></A> Se procurer et installer <CODE>aboot</CODE></H2> <P> Les codes sources les plus récents d'<CODE>aboot</CODE> sont disponibles à l'adresse <A HREF="ftp://ftp.azstarnet.com/pub/linux/axp/aboot">ftp://ftp.azstarnet.com/pub/linux/axp/aboot</A> . La description de ce manuel s'applique à <CODE>aboot</CODE> pour les versions 0.5 et suivantes.</P> <P></P> <P> Une fois que vous avez téléchargé et extrait l'archive <CODE>tar</CODE>, jetez un oeil aux fichiers <CODE>README</CODE> et <CODE>INSTALL</CODE> pour lire les directives d'installation. En particulier, assurez vous que les variables, dans les fichiers <CODE>Makefile</CODE> et <CODE>include/config.h</CODE> sont correctes vis-à-vis de votre environnement . Normalement, vous ne devriez pas avoir à changer quoi que ce soit pour compiler sous Linux, mais c'est toujours une bonne chose de vérifier. Si la configuration vous convient, tapez simplement <CODE>make</CODE> pour lancer la compilation (si vous n'effectuez pas cette opération sous Linux, sachez que <CODE>aboot</CODE> requiert GNU <CODE>make</CODE>).</P> <P>Après l'exécution de <CODE>make</CODE>, le répertoire <CODE>aboot</CODE> devrait contenir les fichiers suivants :</P> <P> <DL> <DT><B>aboot</B><DD><P>L'exécutable réel (fichier objet ECOFF ou ELF),</P> <DT><B>bootlx</B><DD><P>Comme ci-dessus, mais ce fichier ne contient que les segments text, data et bss (ce fichier n'est pas un fichier objet),</P> <DT><B>sdisklabel/writeboot</B><DD><P>Un utilitaire pour installer <CODE>aboot</CODE> sur un disque dur,</P> <DT><B>tools/e2writeboot</B><DD><P>Un utilitaire pour installer <CODE>aboot</CODE> sur un système de fichiers ext2 (n'est en général utilisé que pour les disquettes),</P> <DT><B>tools/isomarkboot</B><DD><P>Un utilitaire pour installer <CODE>aboot</CODE> sur un système de fichiers iso9660 (utilisé par les distributeurs de CD-ROM),</P> <DT><B>tools/abootconf</B><DD><P>Un utilitaire pour configurer <CODE>aboot</CODE> s'il est installé.</P> </DL> </P> <P></P> <H2>3.2 <A NAME="ss3.2"></A> Installation sur disquette</H2> <P> Le lanceur peut être installé sur une disquette en utilisant la commande <CODE>e2writeboot</CODE> (note : ceci ne peut se faire sur un Jensen car son <EM>firmware</EM> n'implante pas le démarrage depuis une disquette). Cette commande nécessite que le disque ne soit pas trop fragmenté car elle a besoin de trouver suffisament de secteurs contigus pour stocker l'image entière de <CODE>aboot</CODE> (actuellement, environ 90Ko). Si <CODE>e2writeboot</CODE> échoue à cause de ça, reformatez la disquette et réessayez (par ex., avec <CODE>fdformat(1)</CODE>). Par exemple, la procédure suivante installe <CODE>aboot</CODE> sur une disquette en supposant que la disquette est dans le lecteur correspondant à <CODE>/dev/fd0</CODE> :</P> <P> <BLOCKQUOTE><CODE> <PRE> fdformat /dev/fd0 mke2fs /dev/fd0 e2writeboot /dev/fd0 bootlx </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <H2>3.3 <A NAME="ss3.3"></A> Installation sur disque dur</H2> <P> Sachant que la commande <CODE>e2writeboot</CODE> peut échouer sur un disque hautement fragmenté et comme le reformattage d'un disque dur ne se fait pas sans peine, il est généralement plus sûr d'installer <CODE>aboot</CODE> sur un disque dur en utilisant la commande <CODE>swriteboot</CODE>. <CODE>swriteboot</CODE> nécessite que les premiers secteurs soient réservés aux procédures de démarrage. Nous suggérons que le disque soit partitionné de manière à ce que la première partition commence à une adresse correspondant à 2048 secteurs. Cela laisse 1Mo d'espace ibre pour stocker <CODE>aboot</CODE>. Sur un disque partitionné de cette façon , il est alors possible d'installer <CODE>aboot</CODE> comme décrit ci-dessous (en supposant que le disque correspond à <CODE>/dev/sda</CODE>.) :</P> <P> <BLOCKQUOTE><CODE> <PRE> swriteboot /dev/sda bootlx </PRE> </CODE></BLOCKQUOTE> </P> <P>Sur un Jensen, vous devrez laisser un peu plus d'espace, sachant que vous devrez également stocker le noyau à cet endroit - 2Mo devraient suffire en utilisant une image compressée. Utilisez <CODE>swriteboot</CODE> comme décrit à la section <A HREF="#booting">booting</A> pour écrire <CODE>bootlx</CODE> avec le noyau Linux.</P> <P></P> <H2>3.4 <A NAME="ss3.4"></A> Installation sur CD-ROM</H2> <P> Pour construire un CD-ROM amorçable avec SRM, construisez simplement <CODE>aboot</CODE> comme décrit ci-dessus. Assurez-vous ensuite que le fichier <CODE>bootlx</CODE> est présent sur le système de fichiers iso9660 (e.g., copiez <CODE>bootlx</CODE> dans le répertoire où est monté le système de fichiers) , et lancez <CODE>mkisofs</CODE> sur ce répertoire). Après cela, la seule chose restant à faire est de marquer le système de fichiers comme amorçable avec SRM. Cela est réalisé grâce à une commande de la forme :</P> <P> <BLOCKQUOTE><CODE> <PRE> isomarkboot filesystem bootlx </PRE> </CODE></BLOCKQUOTE> </P> <P>La commande ci-dessus nécessite que <CODE>filesystem</CODE> est un fichier contenant le système de fichiers iso9660 et que <CODE>bootlx</CODE> a été copié dans la racine de ce système de fichiers. C'est tout !</P> <P></P> <P></P> <A NAME="Building Linux"></A> <H2>3.5 <A NAME="ss3.5"></A> Construire un noyau Linux</H2> <P> Un noyau Linux amorçable peut être construit par les étapes suivantes. Durant le <CODE>make config</CODE>, assurez-vous de répondre "oui" (<EM>"yes"</EM>) à la question concernant le lancement du noyau par SRM.</P> <P> <BLOCKQUOTE><CODE> <PRE> cd /usr/src/linux make config make dep make boot </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <P> La dernière commande construira le fichier <CODE>arch/alpha/boot/vmlinux.gz</CODE> qui peut alors être copié sur le disque à partir duquel vous désirez démarrer. Dans notre exemple précédent concernant la disquette, cela donnerai :</P> <P> <BLOCKQUOTE><CODE> <PRE> mount /dev/fd0 /mnt cp arch/alpha/boot/vmlinux.gz /mnt umount /mnt </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <P></P> <A NAME="booting"></A> <H2>3.6 <A NAME="ss3.6"></A> Démarrer Linux</H2> <P> Avec le <EM>firmware</EM> SRM et <CODE>aboot</CODE> installé, le démarrage de Linux s'effectue généralement avec une commande de la forme :</P> <P> <BLOCKQUOTE><CODE> <CODE>boot</CODE> <I>devicename</I> <CODE>-fi</CODE> <I>filename</I> <CODE>-fl</CODE> <I>flags</I> </CODE></BLOCKQUOTE> </P> <P></P> <P> Les arguments <I>filename</I> et <I>flags</I> sont optionels. S'ils ne sont pas spécifiés, SRM utilise les valeurs par défaut contenues dans les variables d'environnement <CODE>BOOT_OSFILE</CODE> et <CODE>BOOT_OSFLAGS</CODE>. La syntaxe et la signification de ces deux arguments est décrite plus en détail ci-dessous.</P> <P></P> <H3>Nom du fichier boot </H3> <P> L'argument <EM>filename</EM> est de la forme : <BLOCKQUOTE> [<EM>n</EM>/]<EM>filename</EM> </BLOCKQUOTE> </P> <P><EM>n</EM> est un simple nombre dans l'intervalle 1..8 qui donne le numéro de la partition de démarrage. <EM>filename</EM> est le chemin d'accés au fichier à lancer. Par exemple, pour démarrer depuis la deuxième partition du sixième disque SCSI, vous entreriez :</P> <P> <BLOCKQUOTE><CODE> <PRE> boot dka600 -file 2/vmlinux.gz </PRE> </CODE></BLOCKQUOTE> </P> <P>Ou, pour démarrer depuis le premier lecteur de disquette :</P> <P> <BLOCKQUOTE><CODE> <PRE> boot dva0 -file vmlinux.gz </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <P> Si un disque n'a pas de table des partitions, <CODE>aboot</CODE> considère que le disque contient une partition <CODE>ext2</CODE> commençant au premier bloc du disque. Cela permet de démarrer depuis une disquette.</P> <P></P> <P> Le numéro de partition 0 est utilisé pour demander le démarrage depuis un disque qui ne contient pas (encore) de système de fichiers. Si l'on spécifie le numéro de "partition" 0, <CODE>aboot</CODE> considère que le noyau Linux suit directement l'image de <CODE>aboot</CODE>. Une telle chose peut être réalisée avec la commande <CODE>swriteboot</CODE>. Par exemple, pour configurer un démarrage sans système de fichiers depuis <CODE>/dev/sda</CODE>, on pourrait utiliser la commande :</P> <P> <BLOCKQUOTE><CODE> <PRE> swriteboot /dev/sda bootlx vmlinux.gz </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <P> Démarrer un système de cette façon n'est pas obligatoirement nécessaire. La raison d'être de cette fonctionnalité est de permettre l'installation de Linux sur un système qui ne peut démarrer depuis une disquette (e.g., le Jensen).</P> <P></P> <H3>Drapeaux de démarrage </H3> <P>Plusieurs drapeaux de démarrage peuvent être spécifiés. La syntaxe en est : <BLOCKQUOTE><CODE> <PRE> -flags "options..." </PRE> </CODE></BLOCKQUOTE> </P> <P>Où "options..." est une combinaison des options suivantes (séparées par des espace). Il y a encore plus d'options, en fonction des pilotes que le noyau a installé. Les options listées ci-après ne sont là que pour illustrer l'idée générale :</P> <P> <DL> <P></P> <DT><B>load_ramdisk=1</B><DD><P>Copie le système de fichiers racine depuis une disquette vers un disque virtuel en mémoire avant de lancer le système. Ce disque virtuel sera utilisé en lieu et place du périphérique racine. Ceci est utile pour démarrer Linux sur une machine qui ne possède qu'un lecteur de disquettes.</P> <P></P> <DT><B>floppy=<EM>str</EM></B><DD><P></P> <DT><B>root=<EM>dev</EM></B><DD><P>Sélectionne le périphérique <EM>dev</EM> comme système de fichiers racine. Le périphérique peut être spécifié comme la combinaison des numéros <EM>major/minor</EM> du fichier de périphérique en hexadécimal (e.g., 0x802 pour /dev/sda2) ou un nom de fichier de périphérique (e.g.,<CODE>/dev/fd0</CODE>, <CODE>/dev/sda2</CODE>).</P> <P></P> <DT><B>single</B><DD><P>Lance le système en mode mono-utilisateur.</P> <P></P> <DT><B>kgdb</B><DD><P>Autorise <EM>kernel-gdb</EM> (ne fonctionne que si <CODE>CONFIG_KGDB</CODE> est activé ; un deuxième système Alpha doit être connecté par voie série pour que cela fonctionne).</P> <P></P> </DL> </P> <P></P> <P> Quelques implémentations de SRM (e.g., celle du Jensen) sont limitées et n'autorisent que les chaînes d'options de courte longueur (e.g., au plus 8 caractères). Dans ce cas là, <CODE>aboot</CODE> peut être démarré avec le drapeau de démarrage "i". Avec ce drapeau, <CODE>aboot</CODE> demandera à l'utilisateur d'entrer une chaîne d'options pouvant atteindre 256 caractères. Par exemple :</P> <P> <BLOCKQUOTE><CODE> <PRE> boot dka0 -fl i aboot> 3/vmlinux.gz root=/dev/sda3 single </PRE> </CODE></BLOCKQUOTE> </P> <P>Comme démarrer de cette façon devient rapidement pénible , <CODE>aboot</CODE> autorise l'utilisateur à définir des raccourcis pour les lignes de commande fréquemment utilisées. En particulier, une option donnée par un chiffre -- option --> (0-9) demande à <CODE>aboot</CODE> d'utiliser l'option correspondante dans le fichier <CODE>/etc/aboot.conf</CODE>. Un exemple de fichier <CODE>aboot.conf</CODE> est donné ci-dessous :</P> <P> <BLOCKQUOTE><CODE> <PRE> # # aboot default configurations # 0:3/vmlinux.gz root=/dev/sda3 1:3/vmlinux.gz root=/dev/sda3 single 2:3/vmlinux.new.gz root=/dev/sda3 3:3/vmlinux root=/dev/sda3 8:- root=/dev/sda3 # fs-less boot of raw kernel 9:0/vmlinux.gz root=/dev/sda3 # fs-less boot of (compressed) ECOFF kernel - </PRE> </CODE></BLOCKQUOTE> </P> <P>Avec ce fichier, la commande</P> <P> <BLOCKQUOTE><CODE> <PRE> boot dka0 -fl 1 </PRE> </CODE></BLOCKQUOTE> </P> <P>correspond exactement à la commande de démarrage donnée ci-dessus. Il est cependant facile d'oublier la correspondance entre les numéros et les chaînes d'options. Pour éviter ce problème, démarrez avec l'option "h" et <CODE>aboot</CODE> affichera le contenu de <CODE>/etc/aboot.conf</CODE> avant d'afficher l'invite demandant la chaîne d'option entière.</P> <P>En conclusion, même si <CODE>aboot</CODE> demande l'entrée d'une chaîne d'options, il est possible d'entrer un simple caractère ("i", "h", ou "0"-"9") pour obtenir le même résultat que si le drapeau avait été spécifié sur la ligne de commande de démarrage. Par exemple, vous pouvez démarrer avec le drapeau "i", taper ensuite "h" (suivi par entrée) pour vous rappeler le contenu de <CODE>/etc/aboot.conf</CODE></P> <P></P> <H3>Sélectionner la partition de /etc/aboot.conf</H3> <P> Quand <CODE>aboot</CODE> est installé sur un disque dur, il a besoin de savoir sur quel partition il lui faut chercher le fichier <CODE>/etc/aboot.conf</CODE>. Nouvellement compilé, <CODE>aboot</CODE> cherchera sur la deuxième partition (<CODE>/dev/sda2</CODE>). Comme il serait contraignant d'avoir à recompiler <CODE>aboot</CODE> uniquement pour changer le numéro de la partition, <CODE>abootconf</CODE> autorise à directement modifier <CODE>aboot</CODE> déjà installé. Par exemple, si vous désiriez changer <CODE>aboot</CODE> afin qu'il utilise la <EM>troisième</EM> partition du disque <CODE>/dev/sda</CODE>, vous utiliseriez la commande :</P> <P> <BLOCKQUOTE><CODE> <PRE> abootconf /dev/sda 3 </PRE> </CODE></BLOCKQUOTE> </P> <P>Vous pouvez vérifier le réglage courant simplement en omettant le numéro de partition. Alors, <CODE>abootconf /dev/sda</CODE> affichera la partition actuellement sélectionnée. Notez que <CODE>aboot</CODE> être déjà installé pour que cette commande réussisse. Aussi, lors de l'installation d'un nouvel <CODE>aboot</CODE>, le numéro de partition redeviendra celui par défaut (i.e., il sera nécessaire de relancer <CODE>abootconf</CODE>).</P> <P>Depuis la version 0.5 de <CODE>aboot</CODE>, il est également possible de sélectionner la partition contenant le fichier <CODE>aboot.conf</CODE> depuis la ligne de commande de démarrage. Cela peut être fait avec une ligne de commande de la forme <I>a</I><CODE>:</CODE><I>b</I> où <I>a</I> est le numéro de la partition contenant <CODE>/etc/aboot.conf</CODE> et <I>b</I> est une option d'une lettre comme décrit plus haut (<CODE>0</CODE>-<CODE>9</CODE>, <CODE>i</CODE>, ou <CODE>h</CODE>). Par exemple, si vous tapez <CODE>boot -fl "3:h" dka100</CODE> le système démarre depuis SCSI ID 1, charge <CODE>/etc/aboot.conf</CODE> depuis la troisième partition, affiche son contenu à l'écran et attend que vous entriez les options de démarrage.</P> <P></P> <A NAME="Network Booting"></A> <H2>3.7 <A NAME="ss3.7"></A> Démarrage réseau</H2> <P> Deux étapes préliminaires sont nécessaires avant que Linux puisse démarrer par un réseau. Premièrement, vous devrez positionner les variables d'environnement de SRM pour permettre le démarrage <EM>via</EM> le protocole <CODE>bootp</CODE> et deuxièmement vous devrez configurer une autre machine comme serveur de démarrage. Reportez-vous à la documentation de SRM fournie avec votre machine pour toute information sur la mise en place de <CODE>bootp</CODE>. Configurer le serveur de démarrage dépend étroitement du système d'exploitation de cette machine, mais typiquement cela nécessite de lancer le programme <CODE>bootpd</CODE> en tâche de fond après avoir configuré le fichier <CODE>/etc/bootptab</CODE>. Le fichier <CODE>bootptab</CODE> possède une entrée par machine cliente autorisée à démarrer depuis le serveur. Par exemple, si vous voulez démarrer la machine <CODE>myhost.cs.arizona.edu</CODE>, une entrée de la forme suivante serait nécessaire :</P> <P> <BLOCKQUOTE><CODE> <PRE> myhost.cs.arizona.edu:\ :hd=/remote/:bf=vmlinux.bootp:\ :ht=ethernet:ha=08012B1C51F8:hn:vm=rfc1048:\ :ip=192.12.69.254:bs=auto: </PRE> </CODE></BLOCKQUOTE> </P> <P>Cette entrée considère que l'adresse Ethernet de la machine est <CODE>08012B1C51F8</CODE> et que son adresse IP est 192.12.69.254. L'adresse Ethernet peut être trouvée grâce à la commande <CODE>show device</CODE> de la console SRM ou, si Linux est lancé, avec la commande <CODE>ifconfig</CODE>. L'entrée précise également que si le client ne déclare pas le contraire, le fichier qui sera lancé sera le fichier <CODE>vmlinux.bootp</CODE> du répertoire <CODE>/remote</CODE>. Pour plus d'informations sur la configuration de <CODE>bootpd</CODE>, reportez-vous à sa page de manuel.</P> <P>Ensuite, construiser <CODE>aboot</CODE> grâce à la commande <CODE>make netboot</CODE>. Assurez-vous que le noyau que vous désirez lancer a déjà été construit. Par défaut, le <CODE>Makefile</CODE> du programme <CODE>aboot</CODE> utilise le noyau <CODE>/usr/src/linux/arch/alpha/boot/vmlinux.gz</CODE> (éditez le <CODE>Makefile</CODE> si vous désirez utiliser un autre chemin d'accés). Le résultat de <CODE>make netboot</CODE> est un fichier nommé <CODE>vmlinux.bootp</CODE> contenant <CODE>aboot</CODE> <EM>et</EM> le noyau Linux, prêt pour le démarrage par réseau.</P> <P>Enfin, copiez <CODE>vmlinux.bootp</CODE> dans le répertoire du serveur de démarrage. Dans l'exemple plus haut, vous l'auriez copié dans le répertoire <CODE>/remote/</CODE>. Ensuite, allumez la machine client et démarrez la, en spécifiant l'adaptateur Ethernet comme périphérique de démarrage. SRM nomme typiquement le premier adaptateur Ethernet <CODE>ewa0</CODE>, donc, pour démarrer depuis ce périphérique, vous utiliserez la commande :</P> <P> <BLOCKQUOTE><CODE> <PRE> boot ewa0 </PRE> </CODE></BLOCKQUOTE> </P> <P>Les options <CODE>-fi</CODE> et <CODE>-fl</CODE> sont utilisable comme d'habitude. En particulier, vous pouvez demander à <CODE>aboot</CODE> d'attendre l'entrée d'arguments pour le noyau Linux en spécifiant l'option <CODE>-fl i</CODE>.</P> <P></P> <HR> <P> Chapitre <A HREF="SRM-HOWTO-4.html">suivant</A>, Chapitre <A HREF="SRM-HOWTO-2.html">Précédent</A> <P> Table des matières de <A HREF="SRM-HOWTO.html#toc3">ce chapitre</A>, <A HREF="SRM-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="SRM-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>