#!/bin/bash # Created by Ben Okopnik on Thu Mar 17 23:56:31 EST 2005 # # Many thanks to Fabian Franz, whose original script gave me the idea of # how it's all supposed to work. # # Ce script crée une disquette d'amorçage qui passe le contrôle à un lecteur de # mémoire USB contenant une image de cédérom Knoppix. Pas de cédérom, pas de problème ! # ############## Section de configuration utilisateur ##################### # Placer cette section dans le répertoire où réside l'image Knoppix ou spécifier # le répertoire en tant qu'argument en ligne de commande. KNOPPIX_DIR=${1:-/home/ben/tmp2} ############## Fin de section de la configuration utilisateur ############## abort() { printf "$@\n" exit 1 } clean_exit() { [ -d "$TMPDIR" ] && rm -rf $TMPDIR } # Tests de validation [ $UID -ne 0 ] && abort "Les privilèges root sont requis pour ce script." [ -d "$KNOPPIX_DIR" ] || abort "$KNOPPIX_DIR n'est pas un répertoire." [ -z "`ls $KNOPPIX_DIR|grep -i 'knoppix.*iso'`" ] && abort "Image Knoppix non trouvée dans $KNOPPIX_DIR." # Créer le répertoire temp et s'en débarrasser à la sortie TMPDIR=`mktemp -dp /tmp/ make_floppy.XXXXXX` trap "clean_exit" EXIT # Passer dans TMPDIR et le préparer pour les opérations à venir ORIG_DIR=$(pwd) cd $TMPDIR mkdir knoppix floppy miniroot old_miniroot # Choisir et monter l'image Knoppix printf "Choisissez l'une des images suivantes :\n" select choice in $KNOPPIX_DIR/K*.iso; do break; done mount $choice knoppix -o loop # Décompresser le miniroot depuis le répertoire de boot de l'image montée gunzip -c knoppix/boot/isolinux/minirt24.gz > minirt24 # "Sauvegarder" et monter le miniroot mv minirt24 minirt24.old mount -o loop minirt24.old old_miniroot # Créer le fichier qui contiendra le nouveau miniroot, le formater en DOS # et le monter dd if=/dev/zero of=minirt24 bs=4M count=1 mke2fs -L "KNOPPIX Miniroot" -b 1024 -N 8192 -O none -F -q -m 0 minirt24 mount -o loop minirt24 miniroot # Copier les modules relatifs à l'USB depuis l'ancien miniroot vers le nouveau mkdir -p miniroot/modules/scsi for n in `ls old_miniroot/modules/scsi|egrep 'usb|hci'` do cp old_miniroot/modules/scsi/"$n" miniroot/modules/scsi done # Tout copier sauf le répertoire "scsi" depuis l'ancien miniroot vers le nouveau rm -rf old_miniroot/modules/scsi cp -af old_miniroot/* miniroot/ # Démonter les deux umount old_miniroot umount miniroot # Compresser le miniroot à nouveau gzip -9 minirt24 # Créer un fichier de 1,44 Mo qui contiendra l'image d'amorçage, le formater en DOS # et le monter dd if=/dev/zero of=$TMPDIR/boot.img bs=1k count=1440 mkdosfs $TMPDIR/boot.img mount -t msdos boot.img floppy -o loop # Grrr... Une stupidité de "mount" qui exige une attente avant de le # remonter en lecture-écriture. Le mainteneur de "mount" devrait peut-être # recevoir un rapport de bogue ? sleep 2 mount floppy -o remount,rw # Copier les fichiers requis depuis le répertoire d'amorçage de Knoppix vers l'image # que nous nous sommes en train de construire FILES="boot.msg f2 f3 german.kbd isolinux.cfg linux24 logo.16" (cd knoppix/boot/isolinux/; cp -f $FILES $TMPDIR/floppy/) # Y copier le nouveau miniroot - nous y sommes presque ! cp minirt24.gz floppy/ # Renommer et affiner le fichier de config pour se conformer à l'usage # de SYSLINUX mv floppy/isolinux.cfg floppy/syslinux.cfg [ -n "$LANGUAGE" ] && perl -pi -e "s/lang=de/lang=$LANGUAGE/g" floppy/syslinux.cfg [ -n "$LANGUAGE" ] && perl -pi -e "s/lang=us/lang=$LANGUAGE/g" floppy/syslinux.cfg # Un peu de nettoyage... umount knoppix umount floppy # Rendre l'image amorçable ! Comme il ne s'agit pas d'un vrai périphérique, # "syslinux" va se plaindre. Mais nous pouvons tenir le choc. syslinux boot.img 2>/dev/null # Replacer l'image d'amorçage à l'endroit d'où nous sommes partis cp -i boot.img $ORIG_DIR printf "Nous pouvons créer la disquette d'amorçage avec 'dd if=boot.img of=/dev/fd0'.\n"