Le LiveCD est un système qui ne nécessite aucune installation. C’est l’outil idéal pour démarrer un ordinateur pour y faire des tests de compatibilité pour une future installation, effectuer des tâches d’administration sans modification du système d’exploitation installé ou même faire du client léger en utilisant un client RDP.
Pour la création de ce LiveCD, nous allons utiliser les scripts mis à disposition par lea projet FreeSBIE. L’ensemble des étapes à suivre pour la création du LiveCD se fera sur un sytème FreeBSD 6.2 (qui devra être installé au préalable) et des sources FreeSBIE.
Introduction à FreeSBIE
FreeSBIE est le fruit de l’effort du BUG (BSD user group) italien GUFI. Ce projet met à disposition un LiveCD et une " boîte à outils " permettant de créer son propre LiveCD. Suite à des limitations dues à la conception, en 2005 au SOC, a été proposée une réécriture complète de l’ensemble des scripts, ce qui a donné au final FreeSBIE 2. Cette dernière version est très proche sur le mode fonctionnement à la compilation du système FreeBSD en utilisant l’outil make et aussi la possibilité de créer ses propres plugins. Bien entendu, FreeSBIE est sous licence BSD.
Pré-requis
Avant de s’attaquer à la création du LiveCD, il faut, dans un premier temps, récupérer les sources FreeBSD qui contiennent l’ensemble des commandes du système de base et du noyau. L’ensemble des sources est disponible. La méthode que nous allons utiliser pour télécharger les sources est CVSUP.
Note
Dans la suite de cet article, les fichiers de configuration de FreeSBIE seront stockés dans le répertoire de l’utilisateur root.
La commande csup(1) qui est une réécriture de cvsup en C est incluse dans le système de base depuis FreeBSD 6.2. Autrement, si vous n’avez pas suivi les recommandations de l’auteur et que vous utilisez une version FreeBSD 6.0 ou 6.1, vous devrez installer csup via le système de ports. Csup(1) utilise un fichier de paramètres que nous appellerons stable-supfile et qui doit contenir ceci :
*default host=cvsup.fr.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_6_2 *default delete use-rel-suffix src-all
Pour plus d’informations sur ces paramètres, veuillez consulter la page de manuel csup(1). Ce qu’il faut retenir de ce fichier de configuration est le tag=RELENG_6_2 qui correspond à la version des fichiers de FreeBSD 6.2-RELEASE.
Maintenant que le fichier de configuration est prêt, la récupération des sources se fait avec la commande suivante :
csup stable-supfile [beaucoup de lignes]
A la fin de cette commande, vous devriez avoir les sources dans le répertoire /usr/src.
Il ne reste plus qu’à récupérer FreeSBIE 2. Contrairement à la méthode utilisée pour récupérer les sources de FreeBSD à l’aide de csup(1), nous allons utiliser cvs(1). La commande cvs(1) est disponible dans le système de base et ne nécessite aucun fichier de configuration. Avant de continuer, un répertoire de travail est nécessaire :
mkdir ~/livecd
Puis, pour récupérer les sources :
cd ~/livecd cvs -d :pserver:anonymous@cvs.freesbie.org:/cvs login [pas de mot passe, tapez juste entrée] cvs -z3 -d :pserver:anonymous@cvs.freesbie.org:/cvs co -P freesbie2
À la suite de ces commandes, le répertoire freesbie2 sera créé et contiendra l’ensemble des fichiers nécessaires.
Pour effectuer une mise à jour, vous devrez vous placer dans le répertoire ~/livecd/freesbie2 et exécuter cette commande :
cvs -z3 update -dP
Maintenant que nous avons ce qu’il nous faut, passons à la configuration de FreeSBIE 2.
Architecture
Avant d’aller plus loin dans la configuration, il convient de décrire brièvement l’architecture.
FreeSBIE est composé de trois répertoires principaux :
conf/contient les fichiers de configuration de FreeSBIE et du kernel (i386 ou amd64) ;extra/contient des plugins commeadduserqui permet d’ajouter un utilisateurfreesbie;scripts/contient les différents scripts shell permettant de créer le LiveCD (comme effectuer une compilation du système de base ou créer la future image ISO à graver de notre LiveCD).
Comme nous l’avons décrit dans l’introduction, FreeSBIE 2 utilise la commande make(1). Cette commande lit le fichier Makefile, qui est le pivot du système. Ce fichier décrit le fonctionnement, ce qui doit être exécuté. Par la suite, nous utiliserons des cibles pour la création du LiveCD.
Il y a deux types de cibles, principales (que nous utiliserons) et indirectes. Les cibles principales lancent les cibles indirectes. Plus tard, nous utiliserons la cible principale iso qui lancera plusieurs cibles indirectes dont buildworld, buildkernel, installworld, installkernel et bien d’autres. On retrouve des cibles similaires à celles utilisées par FreeBSD pour la compilation et recompilation.
Voici un récapitulatif des cibles principales et de leur utilisation :
iso: création d’un fichier ISO à graver ;flash: installation de FreeBSD sur une clef USB ;img: création d’un fichier IMG à copier sur une clef USB ;pkgselect: permet de sélectionner les paquets à copier avec une interface typecurseendialog(1);clean: suppression des fichiers de travail FreeSBIE ;cleandir: suppression du répertoire du futur système (par défaut :/usr/local/freesbie-*).
Configuration
FreeSBIE utilise un fichier de configuration qui est freesbie2/conf/freesbie.conf. Il doit être créé. Toutes les options par défaut sont dans freesbie2/conf/freesbie.default.conf (qu’il ne faut surtout pas modifier !).
La syntaxe de ce fichier est la suivante : NOM_OPTION=valeur.
Voici une liste et une description des options dont nous allons avoir besoin par la suite :
SRCDIR: répertoire contenant les sources de FreeBSD (/usr/src) ;PORTSDIR: répertoire contenant l’arbre des ports FreeBSD (/usr/ports, qu’il faudra au préalable récupérer : voir l’article " Gestion avancée des ports dans FreeBSD " paru dans le hors-série n° 29) ;MAKE_CONF: chemin vers le fichiermake.conf, utilisé pour activer ou désactiver certaines fonctions du système de base, ce fichier est également utilisé pour la compilation des ports ;EXTRA: permet d’activer les plugins à utiliser.
Voici une liste des plugins dont nous allons avoir besoin :
customroot: permet d’ajouter des fichiers dans le futur système, par défaut les fichiers situés dansfreesbie2/extra/customroot;customscripts: permet d’exécuter des scripts shell (ayant l’extension .sh) situés dansfreesbie2/extra/customscriptsdans l’environnement du futur système (à l’aide dechroot(8)), nous l’utiliserons pour modifier les mots de passe ;installports: permet d’installer des ports dans le futur système, nécessite l’optionINSTALL_PORTS(voir ci-dessous) ;l10n: permet de configurer la localisation du système comme le clavier en français ;rootmfs: permet de créer un espace en mémoire pour/root;rtcmfs: permet de créer un espace en mémoire pour/etcet/usr/local/etc;varmfs: permet de créer un espace en mémoire pour/var;adduser: permet de créer un utilisateur freesbie et de créer un espace mémoire pour/home.
Option pour le plugin installports :
INSTALL_PORTS: contient la liste des ports à installer sous la forme suivante " catégorie/nom ".
Fonctionnement du plugin l10n :
- Un fichier
l10nsera créé dans le futur système, dans le répertoire/etc/rc.d. Ce script lira une variable d’environnement kernel (kenv) nomméefreesbie.lang, configurée dans le fichier /boot/loader.conf. C’est là qu’intervient le modulecustomroot! Il suffira de créer un répertoireboot/dansfreesbie2/extra/customrootet d’y créer le fichierloader.confavecfreesbie.lang=frpour avoir le système en français.
ATTENTION
Il faut respecter l’ordre des plugins ! L’exécution se fera dans le même ordre que celui listé dans l’option EXTRA.
Création de notre LiveCD
À partir de maintenant, nous avons de solides bases pour faire notre propre LiveCD aux petits oignons.
Voici un fichier freesbie2/conf/freesbie.conf :
SRCDIR=/usr/src PORTSDIR=/usr/ports MAKE_CONF="/root/livecd/freesbie2/conf/make.conf" EXTRA="customroot installports adduser customscripts l10n rootmfs etcmfs varmfs" INSTALL_PORTS="sysutils/screen irc/irssi"
Pour le bon fonctionnement du plugin l10n, nous devons créer le fichier loader.conf :
mkdir freesbie2/extra/customroot/boot echo "freesbie.lang=\"fr\"" >> freesbie2/extra/customroot/boot/loader.conf
Nous aurons aussi besoin d’un fichier resolv.conf pour le plugin installports. Ce plugin utilise la fonction chroot et, s’il n’y pas ce fichier, rien ne pourra être téléchargé.
mkdir freesbie2/extra/customroot/etc cp /etc/resolv.conf freesbie2/extra/customroot/etc
Grâce au plugin customscripts, nous allons enlever le fichier resolv.conf, car il est inutile sur le LiveCD et ne conviendra pas dans la plupart des situations. Créer un fichier resolv.sh dans freesbie2/extra/customscripts avec ceci :
#!/bin/sh rm /etc/resolv.conf
Créons également un script permettant de modifier le mot de passe pour root et l’utilisateur freesbie, nous l’appellerons passwrd.sh :
#!/bin/sh echo h4ck3r | pw usermod -h 0 -n root echo livecd | pw usermod -h 0 -n freesbie
Créer aussi un fichier make.conf dans ~/livecd/freesbie2/conf (celui existant ne correspond pas à nos besoins).
echo "BATCH=YES" > freesbie2/conf/make.conf
Ce paramètre permet d’utiliser les options par défaut pour l’installation d’un port sans devoir choisir avec une interface Curses d’activer ou de désactiver une option. Si par la suite une option est nécessaire, il suffira de l’ajouter dans make.conf.
Tout est configuré pour créer un LiveCD avec le système de base complet et avec screen et irssi installés.
Lancement de la création du LiveCD :
cd ~/livecd/freesbie2 make iso [beaucoup de lignes] #### Building bootable ISO image for i386 #### Saving mtree structure... Running mkisofs... ISO created: -rw-r--r-- 1 root wheel  106M Jan 3 16:45 /usr/obj/FreeSBIE.iso
Suivant votre machine, cette étape peut prendre un certain temps. Le statut de chaque cible est stocké dans le répertoire /usr/obj/root/livecd/freesbie2/.tmp_cible, par exemple pour voir le statut de la cible installworld en direct :
tail -f /usr/obj/root/livecd/freesbie2/.tmp_buildworld
Dès qu’elle sera terminée, le fichier .tmp_buildworld sera renommé en .done_buildworld et ainsi de suite pour chaque cible.
Test
Avant de graver l’ISO et gâcher un CD-R après s’être souvenu de rajouter l’application obligatoire, nous allons utiliser le logiciel Gemu (disponible dans les ports emulators/qemu) pour la tester. La commande suivante permettra de lancer une machine virtuelle et de démarrer à partir de l’ISO :
qemu -boot d -cdrom /usr/obj/FreeSBIE.iso
Tuning
Sachant que le fichier de configuration freesbie.conf sera lu par un script shell, il devient très simple de rajouter des fonctionnalités conviviales comme la création de plusieurs ISO différentes suivant un paramètre en ligne de commande. Voici un exemple concret d’un fichier freesbie.conf avec la création de deux ISO possibles :
 #options globales
SRCDIR=/usr/src
PORTSDIR=/usr/ports
MAKE_CONF="/root/livecd/freesbie2/conf/make.conf"
case ${PROFILS:-} in
       base)
               echo "Création de l'ISO base"
               EXTRA="customroot installports adduser
               customscripts l10n rootmfs etcmfs varmfs"
               INSTALL_PORTS="sysutils/screen irc/irssi"
               CUSTOMSCRIPTS="/root/livecd/base/customscripts"
               CUSTOMROOT="/root/livecd/base/customroot"
              ISOPATH=/usr/obj/FreeSBIE-base.iso
               BASEDIR=/usr/local/freesbie-base-fs
               CLONEDIR=/usr/local/freesbie-base-clone
       ;;
       xorg)
echo "Création de l'ISO xorg"
EXTRA="customroot installports adduser
customscripts l10n xconfig rootmfs etcmfs varmfs"
INSTALL_PORTS="sysutils/screen irc/irssi x11/xorg"
CUSTOMSCRIPTS="/root/livecd/xorg/customscripts"
CUSTOMROOT="/root/livecd/xorg/customroot"
ISOPATH=/usr/obj/FreeSBIE-xorg.iso
BASEDIR=/usr/local/freesbie-xorg-fs
CLONEDIR=/usr/local/freesbie-xorg-clone
;;
esac
Dans cet exemple, nous avons deux ISO possibles, la première, base, ne contient rien de plus que celle expliquée précédemment. Par contre, la deuxième, xorg, va nous permettre d’avoir une interface graphique. Nous allons même faire en sorte que le démarrage soit automatique.
Vous avez certainement remarqué l’apparition de nouvelles options :
- Le plugin
xconfigdans la liste EXTRA va générer un fichierxorg.confautomatiquement au lancement du LiveCD ; - Le paramètre
ISOPATHest explicite et contient le chemin où sera créée l’image ISO ainsi que son nom ; BASEDIRetCLONEDIRcontiennent respectivement le chemin où s’installeront les programmes et le répertoire temporaire utilisé durant la création d’une image (ISO ou IMG).
Pour que le démarrage de Xorg se fasse tout seul, il faut qu’un utilisateur se connecte automatiquement, par exemple freesbie. Pour effectuer cela, nous allons modifier les fichiers ttys et gettytab. Dans un premier temps, copiez ces fichiers dans ~/livecd/xorg/customroot/etc :
mkdir -p ~/livecd/xorg/customroot/etc cp /usr/src/etc/etc.i386/ttys ~/livecd/xorg/customroot/etc cp /usr/src/etc/gettytab ~/livecd/xorg/customroot/etc
Modifiez la ligne commençant par ttyv0 du fichier ttys en :
ttyv0 "/usr/libexec/getty freesbie" cons25 on secure
Rajouter ce bout de code à la fin du fichier gettytab :
freesbie:\ :al=freesbie:ht:np:sp#115200:
Il ne reste plus qu’à modifier le fichier .cshrc qui sera lu à la connexion :
mkdir -p ~/livecd/xorg/customroot/usr/home/freesbie cp /usr/src/share/skel/dot.cshrc ~/livecd/xorg/customroot/usr/home/freesbie/.cshrc
et à rajouter ce bout de code à la fin, pour que l’interface graphique soit lancée au démarrage :
if (( "$?DISPLAY" == "0" ) && ( "$?SSH_CLIENT" == "0" )) then startx endif
Si vous désirez avoir le réseau à partir d’un serveur DHCP et un serveur SSH démarré, rien de plus simple. Il suffit de créer un fichier rc.conf dans ~/livecd/xorg/customroot/etc avec ceci :
hostname="FreeSBIE.LiveCD" ifconfig_DEFAULT="DHCP" background_dhclient="YES" sshd_enable="YES"
FreeSBIE 2 peut récupérer les variables d’environnement grâce à env(1).
Maintenant que tout est prêt, nous pouvons lancer la création de l’ISO xorg :
env PROFILS=xorg make iso
Tips
- Pour éviter de recompiler à chaque fois le système de base et le kernel, il y a les options
NO_BUILDWORLD=YESetNO_BUILDKERNEL=YES;
- Pour " nettoyer " les fichiers de statut
.tmp*et.done*situés dans/usr/obj/root/livecd/freesbie2/:
make clean
Pour information, ces fichiers sont utilisés lorsqu’il y a eu un problème à une étape : en relançant la création de l’ISO, la dernière cible (en fonction du dernier fichier .tmp_*) sera relancée. Donc, en supprimant tous ces fichiers, on repart de zéro.
- Pour " nettoyer " la préparation de l’ISO, c’est-à -dire les répertoires
BASEDIRetCLONEDIR:
Conclusion
J’espère que cette introduction à FreeSBIE vous aura donné envie de découvrir ce projet. Toutes les fonctionnalités n’y sont pas décrites. Je vous invite donc à jeter un œil sur le site officiel. Sachez qu’il est très simple d’y contribuer. Avec de simples connaissances en shell, on peut créer ses propres plugins. Je l’ai moi-même fait en créant les plugins customscripts et pf.
Liens
Site officiel FreeSBIE : http://www.freesbie.org
Site officiel FreeBSD : http://www.freebsd.org


