Page suivantePage précédenteTable des matières

5. Bonus : démarrer depuis un cdrom

La plupart des opérations ci-dessus sont valables pour démarrer depuis un cdrom. Comme je voulais également documenter cette façon de booter, je le précise ici pour éviter de taper trop de choses une seconde fois.

Pourquoi démarrer depuis un cdrom ? C'est surtout intéressant partout où l'on veut faire tourner une application spécifique comme un kiosque, une base de données de bibliothèque ou un cyber-café, et qu'on n'a pas de réseau ou de serveur pour utiliser root par NFS.

5.1 Principe de base

C'est simple : démarrer avec un cdrom en tant que racine. Pour que ce soit possible, nous utiliserons l'extension rockridge pour graver un système de fichiers unix et l'extension eltorito pour rendre le cd amorçable.

Les choses ne peuvent être si simples...

Bien sûr cette configuration soulève quelques problèmes. Ils sont à peu près les mêmes que précédemment :

  1. Nous avons besoin d'accès en écriture sur : /dev, /var et /tmp.
  2. Certaines applications ont besoin d'un accès à /home en écriture.
  3. /etc/mtab doit être accessible en écriture :

5.2 Créer une configuration de test

  1. Pour commencer, prenez une des machines que vous allez utiliser et mettez dedans un gros disque et un graveur de cd.
  2. Installez la distribution de votre choix et laissez une partition de 650 Mo pour le test. Cette installation servira à créer l'image iso et à graver le cd, aussi il faut installer les outils necessaires. Elle servira également à recommencer en cas de problème.
  3. Sur la partition de 650 Mo, installez la distribution de votre choix avec la configuration que vous voudrez avoir sur le cd. Ce sera la configuration de test.
  4. Démarrez sur la configuration de test.
  5. Compilez le noyau comme décrit dans la section 3.1, en suivant toutes les étapes. Les modifications pour devfs doivent être faites ici aussi. A l'étape 3, ajoutez ce qui suit :
  6. Configuration de la partition de test :
  7. Vérifiez que la configuration démarre correctement sous l'application et que tout fonctionne bien.
  8. Redémarrez sur l'installation principale et montez la partition de 650 Mo sur /test.
  9. Mettez ce qui suit dans un fichier /test/etc/rc.d/rc.iso (il sera exécuté au début de rc.sysinit pour créer /var) :
    #/var
    echo Creating /var ...
    mke2fs -q -i 1024 /dev/ram1 1024
    mount /dev/ram1 /var -o defaults,rw
    cp -a /lib/var /
    #restore devfs settings, needs proc
    mount -t proc /proc /proc
    /etc/rc.d/rc.devfs restore /etc/sysconfig
    umount /proc
    

  10. Editez /test/etc/rc.sysinit en commentant les lignes où / est remonté en lecture-écriture et ajoutez les 2 lignes suivantes après l'initialisation de la variable PATH :
    #to boot from cdrom
    . /etc/rc.d/rc.iso
    

  11. Copiez ce qui suit dans un script et exécutez-le : cela va créer un répertoire modèle pour /var et des liens pour /tmp et /etc/mtab.
    #!/bin/sh
    echo tmp
    rm -fR /test/tmp
    ln -s var/tmp /test/tmp
    ###
    echo mtab
    touch /test/proc/mounts
    rm /test/etc/mtab
    ln -s /proc/mounts /test/etc/mtab
    ###
    echo var
    mv /test/var/lib /test/lib/var-lib
    mv /test/var /test/lib
    mkdir /test/var
    ln -s /lib/var-lib /test/lib/var/lib
    rm -fR /test/lib/var/catman
    rm -fR /test/lib/var/log/httpd
    rm -f /test/lib/var/log/samba/*
    for i in `find /test/lib/var/log -type f`; do cat /dev/null > $i; done
    rm `find /test/lib/var/lock -type f`
    rm `find /test/lib/var/run -type f`
    

  12. Enlevez la création de /etc/issue* de /test/etc/rc.local (ça planterait à coup sûr).
  13. Maintenant, démarrez sur la partition de test : elle sera en lecture seule comme un cdrom. Si quelque chose ne fonctionne pas, redémarrez sur la partition de travail et réparez puis réessayez. On peut aussi remonter / en lecture-écriture, réparer puis redémarrer directement sur la partition de test. Pour remonter / :
    mount -o remount,rw /

5.3 Créer le cd

Créer une image de démarrage (image de boot)

D'abord, démarrer sur la partition de travail. Pour créer un cd amorçable, nous aurons besoin d'une image d'une disquette de démarrage. Mais copier par dd une zimage ne suffit pas parce que, au tout début du chargement de celle-ci, un pseudo lecteur de disquette est créé et le chargeur du système ne s'y retrouve plus dans le cas d'un cd amorçable. Donc nous utiliserons plutôt syslinux.

  1. récupérer boot.img sur un cdrom redhat
  2. monter boot.img quelque part par loopback en tapant :
    mount boot.img somewhere -o loop -t vfat
  3. enlever tout ce qui est dans boot.img sauf :
  4. copier le noyau de la partition de test vers boot.img
  5. editer syslinux.cfg pour ajouter ce qui suit, en remplaçant zImage par le nom d'image approprié :
    default linux
    label linux
    kernel zImage
    append root=/dev/<insert your cdrom device here>
    

  6. démonter boot.img :
    umount somewhere
  7. Si /etc/mtab est un lien vers /proc/mounts, le démontage ne va pas automatiquement libérer /dev/loop0 donc il faut le libérer en tapant :
    losetup -d /dev/loop0

Créer l'image iso

Maintenant que nous avons l'image de boot et une installation qui peut démarrer sur un montage en lecture seule, il est temps de créer une image iso du cd :

  1. copier boot.img sur /test
  2. aller dans le répertoire ou vous voulez stocker l'image (en prenant garde qu'il y ait assez de place sur la partition)
  3. générer l'image :
    mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test

Vérifier l'image iso

  1. monter l'image en loopback en tapant :
    mount boot.iso somewhere -o loop -t iso9660
  2. vérifier que le contenu est correct
  3. démonter boot.iso :
    umount somewhere
  4. si /etc/mtab est un lien sur /proc/mounts, libérer /dev/loop0 :
    losetup -d /dev/loop0

Graver le cd

Si cdrecord est installé et configuré :

cdrecord -v speed=<desired writing speed> dev=<path to your writers generic scsi device> boot.iso

5.4 Démarrer sur le cd et le tester

Hé bien le titre de ce paragraphe a tout dit ! ;)


Page suivantePage précédenteTable des matières