<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
	"../../../share/xml/freebsd45.dtd">

<!--
    The FreeBSD Documentation Project
    The FreeBSD French Documentation Project

    $FreeBSD$
    Original revision: 1.2
-->

<article lang="fr">

  <articleinfo>
    <title>Introduction &agrave; NanoBSD</title>

    <authorgroup>
      <author>
	<firstname>Daniel</firstname>
	<surname>Gerzo</surname>
	<!-- 14 March 2006 -->
      </author>
    </authorgroup>

    <copyright>
      <year>2006</year>
      <holder>The FreeBSD Documentation Project</holder>
    </copyright>

    <legalnotice id="trademarks" role="trademarks">
      &tm-attrib.freebsd;
      &tm-attrib.general;
    </legalnotice>

    <pubdate>$FreeBSD$</pubdate>

    <releaseinfo>$FreeBSD$</releaseinfo>

    <abstract>
      <para>Ce document fournit des informations &agrave; propos des
	outils <application>NanoBSD</application>, qui peuvent
	être utilisés pour créer des images du
	système &os; pour des applications embarquées,
	adaptées pour utiliser comme support une carte Compact
	Flash (ou tout autre support de stockage).</para>
        &trans.a.tignon;
    </abstract>
  </articleinfo>

  <sect1 id="intro">
    <title>Introduction &agrave; NanoBSD</title>

    <indexterm><primary>NanoBSD</primary></indexterm>

    <para><application>NanoBSD</application> est un outil actuellement
      développé par &a.phk;.  Il permet de créer
      une image du système &os; pour des applications
      embarquées, pouvant utiliser une carte Compact Flash
      comme support (ou un autre support de stockage)</para>

    <para>Il peut être utilisé pour créer des
      images d'installation spécialisées, conçues
      pour une installation et une maintenance aisées de
      systèmes communément appelés
      <quote>appliances</quote>.  Les appliances ont leur
      matériel et leur logiciel intégrés dans le
      produit, ce qui signifie que toutes les applications sont
      pré-installées.  L'appliance est connectée
      &agrave; un réseau existant et peut entrer en fonction
      (presque) immédiatement.</para>

    <para>Les fonctionnalités de
      <application>NanoBSD</application> incluent:</para>

    <itemizedlist>
      <listitem>
	<para>Les logiciels portés et les paquetages
	  fonctionnent comme sous &os; &mdash; Chaque application peut
	  être installée et utilisée dans une
	  image <application>NanoBSD</application>, de la même
	  façon que sous &os;.</para>
      </listitem>

      <listitem>
	<para>Aucune fonctionnalité ne manque &mdash; S'il est
	  possible de faire quelque chose avec &os;, il sera possible
	  de faire la même chose avec
	  <application>NanoBSD</application>, sauf si la
	  fonctionnalité spécifique ou des
	  fonctionnalités ont été explicitement
	  supprimées de l'image
	  <application>NanoBSD</application> lors de sa
	  création.</para>
      </listitem>

      <listitem>
	<para>Tout est en lecture seule pendant l'exécution
	  &mdash; Débrancher le cordon d'alimentation est sans
	  danger.  Il n'est pas nécessaire d'exécuter
	  &man.fsck.8; après un arrêt inopiné du
	  système.</para>
      </listitem>

      <listitem>
	<para>Facile &agrave; créer et &agrave; personnaliser
	  &mdash; A l'aide d'une seule procédure et d'un
	  fichier de configuration il est possible de créer des
	  images personnalisées et de taille réduite
	  répondant &agrave; n'importe quel type de
	  besoin.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="howto">
    <title>Comment utiliser NanoBSD</title>

    <sect2 id="design">
      <title>L'organisation de NanoBSD</title>

      <para>Une fois que l'image est présente sur le support,
	il est possible de démarrer
	<application>NanoBSD</application>.  Le
	périphérique de stockage est divisé en
	trois parties par défaut:</para>

      <itemizedlist>
	<listitem>
	  <para>Deux partitions image: <literal>code#1</literal>
	    et <literal>code#2</literal>.</para>
	</listitem>

	<listitem>
	  <para>La partition de configuration, qui peut être
	    montée sur le répertoire <filename
	    class="directory">/cfg</filename> &agrave;
	    l'exécution.</para>
	</listitem>
      </itemizedlist>

      <para>Ces partitions sont normalement montées en lecture
	seule.</para>

      <para>Les répertoires <filename
	class="directory">/etc</filename> et <filename
	class="directory">/var</filename> sont des disques &man.md.4;
	(malloc).</para>

      <para>La partition de configuration est montée sur le
	répertoire <filename class="directory">/cfg</filename>.
	Elle contient les fichiers du répertoire <filename
	class="directory">/etc</filename> et est brièvement
	montée en lecture seule juste après le
	démarrage du système, par conséquent il
	est nécessaire de recopier les fichiers modifiés
	de <filename class="directory">/etc</filename> vers le
	répertoire <filename class="directory">/cfg</filename>
	si l'on souhaite que les changements soient encore effectifs
	après le redémarrage du système.</para>

      <example>
	<title>Apporter des changements permanents &agrave;
	  <filename>/etc/resolv.conf</filename></title>

	<screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
[...]
&prompt.root; <userinput>mount /cfg</userinput>
&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
&prompt.root; <userinput>umount /cfg</userinput></screen>
      </example>

      <note>
	<para>La partition qui abrite <filename
	  class="directory">/cfg</filename> doit être
	  montée uniquement au démarrage et lors de la
	  copie des fichiers de configuration.</para>

	<para>Garder <filename class="directory">/cfg</filename>
	  monté en permanence n'est pas une bonne idée,
	  en particulier si le système
	  <application>NanoBSD</application> tourne sur un
	  périphérique de stockage qui peut être
	  endommagé par un grand nombre d'écritures sur
	  la partition (c'est &agrave; dire quand le contenu des
	  tampons de données est transféré sur
	  les disques).</para>
      </note>
    </sect2>

    <sect2>
      <title>Créer une image NanoBSD</title>

      <para>Une image <application>NanoBSD</application> est
	créée &agrave; l'aide d'une simple
	procédure <filename>nanobsd.sh</filename>, qui peut
	être trouvée dans le répertoire <filename
	class="directory"><replaceable>/usr</replaceable>/src/tools/tools/nanobsd</filename>.
	Ce programme crée une image, qui peut être
	copiée sur le support de stockage &agrave; l'aide de
	&man.dd.1;.</para>

      <para>Les commandes nécessaires &agrave; la
	création d'une image <application>NanoBSD</application>
	sont:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co id="nbsd-cd"/>
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co id="nbsd-sh"/>
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co id="nbsd-cd2"/>
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co id="nbsd-dd"/></screen>

      <calloutlist>
	<callout arearefs="nbsd-cd">
	  <para>Se placer dans le répertoire de base du
	    programme de création de
	    <application>NanoBSD</application>.</para>
	</callout>

	<callout arearefs="nbsd-sh">
	  <para>Démarrer le processus de
	    création.</para>
	</callout>

	<callout arearefs="nbsd-cd2">
	  <para>Se placer dans le répertoire où les
	    images ont été créees.</para>
	</callout>

	<callout arearefs="nbsd-dd">
	  <para>Installer <application>NanoBSD</application> sur le
	    support de stockage.</para>
	</callout>
      </calloutlist>
    </sect2>

    <sect2>
      <title>Personnaliser une image NanoBSD</title>

      <para>C'est probablement la fonctionnalité la plus
	importante et la plus intéressante de
	<application>NanoBSD</application>.  C'est aussi l&agrave;
	où vous passerez le plus de temps lors de vos
	développements avec
	<application>NanoBSD</application>.</para>

      <para>L'invocation de la commande suivante va obliger
	<filename>nanobsd.sh</filename> &agrave; lire sa configuration
	dans le fichier <filename>myconf.nano</filename> situé
	dans le répertoire courant:</para>

      <screen>&prompt.root; <userinput>sh nanobsd.sh -c myconf.nano</userinput></screen>

      <para>La personnalisation est effectuée de 2
	façons:</para>

      <itemizedlist>
	<listitem>
	  <para>&agrave; l'aide d'options de configuration</para>
	</listitem>

	<listitem>
	  <para>&agrave; l'aide de fonctions de
	    personnalisation</para>
	</listitem>
      </itemizedlist>

      <sect3>
	<title>Les options de configuration</title>

	<para>Grace aux paramètres de configuration, il est
	  possible de configurer des options qui sont passées
	  aux étapes <literal>buildworld</literal> et
	  <literal>installworld</literal> du processus de compilation
	  de <application>NanoBSD</application>, ainsi que des options
	  internes qui sont passées au processus principal de
	  compilation de <application>NanoBSD</application>.  A l'aide
	  de ces options, il est possible de diminuer la taille du
	  système, de façon &agrave; ce qu'il tienne
	  dans 64Mo.  Vous pouvez utiliser les options de
	  configuration pour réduire encore plus &os;,
	  jusqu'&agrave; ce qu'il ne consiste plus qu'en un noyau et 2
	  ou 3 fichiers dans le système de base.</para>

	<para>Le fichier de configuration consiste en une série
	  d'options de configuration, qui surchargent les valeurs par
	  défaut.  Les directives les plus importantes
	  sont:</para>

	<itemizedlist>
	  <listitem>
	    <para><literal>NANO_NAME</literal> &mdash; Nom de
	      compilation (utilisé pour créer le nom des
	      répertoires de travail).</para>
	  </listitem>

	  <listitem>
	    <para><literal>NANO_SRC</literal> &mdash; Chemin de
	      l'arbre des sources utilisé pour construire
	      l'image.</para>
	  </listitem>

	  <listitem>
	    <para><literal>NANO_KERNEL</literal> &mdash; Nom du
	      fichier de configuration utilisé pour compiler le
	      noyau.</para>
	  </listitem>

	  <listitem>
	    <para><literal>CONF_BUILD</literal> &mdash; Options
	      passées &agrave; la phase
	      <literal>buildworld</literal> de la compilation.</para>
	  </listitem>

	  <listitem>
	    <para><literal>CONF_INSTALL</literal> &mdash; Options
	      passées &agrave; la phase
	      <literal>installworld</literal> de la
	      compilation.</para>
	  </listitem>

	  <listitem>
	    <para><literal>CONF_WORLD</literal> &mdash; Options
	      passées aux étapes
	      <literal>buildworld</literal> et
	      <literal>installworld</literal>.</para>
	  </listitem>

	  <listitem>
	    <para><literal>FlashDevice</literal> &mdash;
	      Définit le type de support &agrave; utiliser.
	      Consulter le fichier
	      <filename>FlashDevice.sub</filename> pour plus de
	      détails.</para>
	  </listitem>
	</itemizedlist>
      </sect3>

      <sect3>
	<title>Les fonctions de personnalisation</title>

	<para>Il est possible d'optimiser
	  <application>NanoBSD</application> en utilisant des
	  fonctions d'interpréteur de commandes dans le fichier
	  de configuration.  L'exemple suivant présente la
	  trame de base des fonctions de personnalisation:</para>

	  <programlisting>cust_foo () (
	echo "bar=topless" &gt; \
		&dollar;{NANO_WORLDDIR}/etc/foo
)
customize_cmd cust_foo</programlisting>

	<para>Un exemple plus utile de fonction de personnalisation
	  est le suivant, qui change la taille par défaut du
	  répertoire <filename class="directory">/etc</filename>
	  de 5Mo &agrave; 30Mo:</para>

	<programlisting>cust_etc_size () (
	cd &dollar;{NANO_WORLDDIR}/conf
	echo 30000 &gt; default/etc/md_size
)
customize_cmd cust_etc_size</programlisting>

	<para>Il existe par défaut quelques fonctions de
	  personnalisation prédéfinies et prêtes
	  &agrave; être utilisées:</para>

	<itemizedlist>
	  <listitem>
	    <para><literal>cust_comconsole</literal> &mdash;
	      Désactive &man.getty.8; sur les consoles VGA (les
	      périphériques
	      <filename>/dev/ttyv*</filename>) et paramètre la
	      console système sur le port série
	      COM1.</para>
	  </listitem>

	  <listitem>
	    <para><literal>cust_allow_ssh_root</literal> &mdash;
	      Autorise l'ouverture de sessions
	      <username>root</username> via &man.sshd.8;.</para>
	  </listitem>

	  <listitem>
	    <para><literal>cust_install_files</literal> &mdash;
	      Installe les fichiers du répertoire <filename
	      class="directory">nanobsd/Files</filename>, qui contient
	      des programmes utiles pour l'administration
	      système.</para>
	  </listitem>
	</itemizedlist>
      </sect3>

      <sect3>
	<title>Exemple de fichier de configuration</title>

	<para>Un exemple complet de fichier de configuration pour
	  créer une image <application>NanoBSD</application>
	  personnalisée peut être:</para>

	<programlisting>NANO_NAME=custom
NANO_SRC=/usr/src
NANO_KERNEL=MYKERNEL
NANO_IMAGES=2

CONF_BUILD='
NO_KLDLOAD=YES
NO_NETGRAPH=YES
NO_PAM=YES
'

CONF_INSTALL='
NO_ACPI=YES
NO_BLUETOOTH=YES
NO_CVS=YES
NO_FORTRAN=YES
NO_HTML=YES
NO_LPR=YES
NO_MAN=YES
NO_SENDMAIL=YES
NO_SHAREDOCS=YES
NO_EXAMPLES=YES
NO_INSTALLLIB=YES
NO_CALENDAR=YES
NO_MISC=YES
NO_SHARE=YES
'

CONF_WORLD='
NO_BIND=YES
NO_MODULES=YES
NO_KERBEROS=YES
NO_GAMES=YES
NO_RESCUE=YES
NO_LOCALES=YES
NO_SYSCONS=YES
NO_INFO=YES
'

FlashDevice SanDisk 1G

cust_nobeastie() (
	touch &dollar;{NANO_WORLDDIR}/boot/loader.conf
	echo "beastie_disable=\"YES\"" &gt;&gt; &dollar;{NANO_WORLDDIR}/boot/loader.conf
)

customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>Mettre &agrave; jour NanoBSD</title>

      <para>Le processus de mise &agrave; jour de
	<application>NanoBSD</application> est relativement
	simple:</para>

      <procedure>
	<step>
	  <para>Créer une nouvelle image
	    <application>NanoBSD</application>, comme
	    d'habitude.</para>
	</step>

	<step>
	  <para>Télécharger la nouvelle image dans une
	    partition inutilisée d'une appliance
	    <application>NanoBSD</application>
	    opérationnelle.</para>

	  <para>La différence la plus importante de cette
	    étape par rapport &agrave; l'installation initiale
	    de <application>NanoBSD</application> est que maintenant
	    au lieu d'utiliser le fichier
	    <filename>_.disk.full</filename> (qui contient une image
	    de la totalité du disque), l'image
	    <filename>_.disk.image</filename> est installée
	    (qui contient seulement l'image d'une seule partition
	    système).</para>
	</step>

	<step>
	  <para>Redémarrer le système sur la nouvelle
	    partition.</para>
	</step>

	<step>
	  <para>Si tout s'est bien passé, la mise &agrave; jour
	    est terminée.</para>
	</step>

	<step>
	  <para>Si quelque chose s'est mal passé,
	    redémarrez de nouveau sur la partition
	    précédente (qui contient l'ancienne image,
	    fonctionnelle celle-ci), pour remettre le système
	    en état de marche le plus rapidement possible.
	    Corriger les problèmes de la nouvelle image, et
	    répéter le processus.</para>
	</step>
      </procedure>

      <para>Pour installer la nouvelle image sur le système
	<application>NanoBSD</application> opérationnel, il est
	possible d'utiliser la procédure
	<filename>updatep1</filename> ou <filename>updatep2</filename>
	située dans le répertoire <filename
	class="directory">/root</filename>, en fonction de la partition
	qui est en cours d'utilisation sur le système.</para>

      <para>En fonction des services disponibles sur la machine qui
	dispose de la nouvelle image
	<application>NanoBSD</application> et du type de transfert qui
	est préféré, il est possible d'utiliser
	une de ces trois méthodes:</para>

      <sect3>
	<title>Utiliser &man.ftp.1;</title>

	<para>Si la vitesse de transfert est la priorité,
	  utiliser cet exemple:</para>

	<screen>&prompt.root; <userinput>ftp myhost
get _.disk.image "| sh updatep1"</userinput></screen>
      </sect3>

      <sect3>
	<title>Utiliser &man.ssh.1;</title>

	<para>Si un transfert sécurisé est
	  préférable, considérer l'utilisation de
	  cet exemple:</para>

	<screen>&prompt.root; <userinput>ssh myhost cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
      </sect3>

      <sect3>
	<title>Utiliser &man.nc.1;</title>

	<para>Utiliser cet exemple si la machine distante n'utilise ni
	  &man.ftp.1; ni &man.sshd.8;:</para>

	<procedure>
	  <step>
	    <para>Tout d'abord, ouvrez un écouteur TCP sur la
	      machine qui dispose de l'image et faites-lui envoyer
	      l'image au client:</para>

	    <screen>myhost&prompt.root; <userinput>nc -l <replaceable>2222</replaceable> &lt; _.disk.image</userinput></screen>

	    <note>
	      <para>Assurez vous que le port utilisé n'est pas
		bloqué par un pare-feu afin de recevoir les
		connexions entrantes de la machine
		<application>NanoBSD</application>.</para>
	    </note>
	  </step>
	  <step>
	    <para>Se connecter &agrave; la machine qui dispose de la
	      nouvelle image et exécuter la procédure
	      <filename>updatep1</filename>:</para>

	    <screen>&prompt.root; <userinput>nc myhost <replaceable>2222</replaceable> | sh updatep1</userinput></screen>
	  </step>
	</procedure>
      </sect3>
    </sect2>
  </sect1>
</article>