lundi, juillet 12, 2010

Installation de FreeBSD «headless» (utilisation du port console comme clavier/écran)

Je souhaitai installer FreeBSD sur une «vieille» unité centrale qui n'avait plus d'écran: Il me fallait utiliser le port série comme console principale.
Ce n'est pas très compliqué: Il suffit de modifier l'image ISO de FreeBSD pour forcer l'usage du port série.
Une fois téléchargé l'image, on la monte (l'ensemble des exemples utilisent tcsh comme shell):

set MD=`mdconfig -a -t vnode -f FreeBSD-8.1-RC2-amd64-disc1.iso`
mount -t cd9660 /dev/$MD /mnt/

Vous obtenez une image montée en lecture seule (normal pour un ISO)… Ne reste plus qu'à la modifier et re-générer un fichier ISO.
Pour cela, on peux vous conseiller de recopier l'intégralité de l'image disque et ensuite de modifier votre copie comme ceci:

mkdir /tmp/isotmp
cd /mnt
tar cf - * | ( cd /tmp/isotmp; tar xfp - )

Mais comme cette méthode est lente et consomme de la place sur votre disque, voici une méthode plus intelligente utilisant unionfs:

mkdir /tmp/isotmp
mount -t unionfs -o noatime /tmp/isotmp/ /mnt/

Désormais le point de montage original (/mnt) est accessible en écriture :-)
Modifions le boot/loader.conf pour forcer l'usage du port série:
J'utilise une vitesse de 38400 baud pour que ca ne soit pas trop désagréable.
Attention à l'utilisation de unionfs qui ne gère pas la fusion du contenus de deux fichiers identiques, il faut utiliser une copie pour ne pas écraser l'ancien:

cat /mnt/boot/loader.conf > /mnt/boot/loader.conf.new
echo 'comconsole_speed="38400"' >> /mnt/boot/loader.conf.new
echo 'console="comconsole"' >> /mnt/boot/loader.conf.new
echo 'boot_serial="-h"' >> /mnt/boot/loader.conf.new
mv /mnt/boot/loader.conf.new /mnt/boot/loader.conf

Ne reste plus qu'a régénérer une ISO:

cd /mnt
mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/FreeBSD-8.1-headless-.iso .

Puis à démonter (2 fois) votre image, détruire le md et effacer votre dossier temporaire:

cd /
umount /mnt
umount /mnt
mdconfig -d -u $MD
rm -rf /tmp/isotmp

Mais ne partez pas si vite ! Il reste juste un tout petit détail qui a son importance…
Une fois l'installation de FreeBSD terminé, et avant de re-démarrer:

N'oubliez pas de modifier le /etc/ttys en lui déclarant l'usage du port série!
Dans sysinstall: configure system ttys.
Il va ouvrir le fichier /etc/ttys dans un éditeur de texte, il faut remplacer la ligne suivante:

# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0   "/usr/libexec/getty std.9600"   dialup  off secure

Par ceci:

# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0   "/usr/libexec/getty std.38400"   vt100  on secure

Personnellement, avant de graver le CD, je vérifie la procédure par l'excellentissime[1] qemu:

qemu-img create fbsd-test.img 4G
kldload kqemu.ko
kldload aio.ko
qemu-system-x86_64 -kernel-kqemu -nographic -cdrom FreeBSD-8.1-headless.iso -hda fbsd-test.img -boot d
qemu-system-x86_64 -kernel-kqemu -nographic -hda fbsd-test.img

Article original m'ayant fortement inspiré: FreeBSD Headless install
[1] Essayez d'en faire autant en si peux de lignes de commande avec VirtualBox !

Aucun commentaire: