Catégorie : Distribution     Tags :      0 Commentaire

    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 comme adduser qui permet d’ajouter un utilisateur freesbie ;
    • 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 type curse en dialog(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 fichier make.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 dans freesbie2/extra/customroot ;
    • customscripts : permet d’exécuter des scripts shell (ayant l’extension .sh) situés dans freesbie2/extra/customscripts dans l’environnement du futur système (à l’aide de chroot(8)), nous l’utiliserons pour modifier les mots de passe ;
    • installports : permet d’installer des ports dans le futur système, nécessite l’option INSTALL_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 /etc et /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 l10n sera créé dans le futur système, dans le répertoire /etc/rc.d. Ce script lira une variable d’environnement kernel (kenv) nommée freesbie.lang, configurée dans le fichier /boot/loader.conf. C’est là qu’intervient le module customroot ! Il suffira de créer un répertoire boot/ dans freesbie2/extra/customroot et d’y créer le fichier loader.conf avec freesbie.lang=fr pour 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 xconfig dans la liste EXTRA va générer un fichier xorg.conf automatiquement au lancement du LiveCD ;
    • Le paramètre ISOPATH est explicite et contient le chemin où sera créée l’image ISO ainsi que son nom ;
    • BASEDIR et CLONEDIR contiennent 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=YES et NO_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 BASEDIR et CLONEDIR :

    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

    Posté par (La rédaction) | Signature : Par Dominique « DomiX » Gonçalves (GCU) | Article paru dans Creative Commons License

    Laissez une réponse

    Vous devez avoir ouvert une session pour écrire un commentaire.