<page xmlns="http://projectmallard.org/1.0/"
      type="topic" style="task"
      id="construction" xml:lang="fr">

<info>
  <link type="guide" xref="index" group="construction"/>
  <desc>Principe de construction du logiciel et des images (ISO et updates).</desc>
  <revision pkgversion="20120605" version="1.0" date="10-06-2012" status="final"/>
  <credit type="author">
    <name>Thomas Noël</name>
    <email>tnoël@entrouvert.com</email>
  </credit>
  <credit type="maintainer">
    <name>Pierre Cros</name>
    <email>pcros@entrouvert.com</email>
  </credit>
</info>

<title>Construction des images ISO et updates</title>

<p>Cette page explique comment le projet Univnautes est techniquement construit.</p>


<section id="base">
  <title>Base de travail pfSense 2.0</title>
  <p>Nous utilisons <link href="http://www.pfsense.org/">http://www.pfsense.org/</link> dans sa version 2.0.x téléchargée depuis <em>github</em>.</p>
</section>

<section id="modification">
  <title>Modification apportées à pfSense 2.0</title>
  <p>L'idée générale est qu'UnivNautes ajoute des choses à pfSense en modifiant le minimum de code de pfSense.</p>
  <p>La description des patches est ici  : </p>
  <p>Les patches sont ici : <link href="https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/patches">https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/patches</link></p>
</section>

<section id="pffed">
  <title>Logiciel pffedportal (pfSense federation portal)</title>
  <p>Il s'agit d'un fournisseur de service (SP) SAML 2.0 utilisant la fédération. C'est vers ce site que sont faites les redirections de flux IP pour les machines qui ne sont pas encore reconnues par le portail captif.</p>
  <p>Lorsqu'un IdP a accepté un utilisateur, pffedportal lance la commande (script PHP ̀<code>cp_allow</code> qui appelle des fonctions de pfSense) qui ouvre le portail captif pour la machine client (adresse MAC + adresse IP + nom de l'utilisateur).</p>
  <p>pffedportal est un SP écrit en Django avec Authentic2 (<link href="http://dev.entrouvert.org/projects/authentic">http://dev.entrouvert.org/projects/authentic</link>).</p>
  <p>Sources : <link href="https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pffedportal">https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pffedportal</link></p>
</section>

<section id="pfidp">
  <title>Logiciel pfidp</title>
  <p>C'est le pendant IdP de pffedportal. Il utilise les comptes créés dans pfSense (via le script pf_auth qui sait renvoyer les informations sur un compte donné).</p>
  <p>pfidp est un IdP écrit en Django avec Authentic2 (<link href="http://dev.entrouvert.org/projects/authentic">http://dev.entrouvert.org/projects/authentic</link>).</p>
  <p>Sources : <link href="https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pfidp">https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pfidp</link></p>
</section>

<section id="iso">
  <title>Création de l'image ISO</title>
  <p>Nous utilisons le système de construction fourni par pfsense : <link href="https://github.com/bsdperimeter/pfsense-tools">https://github.com/bsdperimeter/pfsense-tools</link></p>
  <p>Pour inclure univnautes, nous avons adapté la procédure de création de l'image ISO. Les scripts adaptés sont sur <link href="https://dev.entrouvert.org/projects/portail-captif/repository">https://dev.entrouvert.org/projects/portail-captif/repository</link> :</p>
  <list>
    <item><p>Makefile : contient les commandes pour simplifier la construction</p></item>
    <item><p>builder : les outils pour construire l'image ISO proprement dite, basés sur ceux fournis dans pfsense-tools</p>
    <list>
      <item><p>build.sh : le script principal, lancé pour obtenir la création des images</p>
      <list>
        <item><p>build_iso.sh et build_updates : script de construction de l'image ISO et de l'archive d'updates (de fait, lancés à la fin de build.sh)</p></item>
        <item><p>clean.sh : script de nettoyage complet avant reconstruction</p></item>
      </list>
      </item>
      <item><p>pfsense-build.conf : les paramètres de configuration des images</p></item>
      <item><p>univnautes_ports.sh : contient des fonctions vraiment spécifiques à univnautes (appelée dans setup_overlay ou build_iso)</p></item>
    </list>
    </item>
  </list>
  <p>Voici les modifications principales :</p>
  <list>
    <item><p>une fois l'image pfSense créée, nous ajoutons des paquets FreeBSD 8.1 nécessaires à pffedportal (copiés depuis Ôhttp://packages.univnautes.entrouvert.com/). Cela est fait avec la commande <code>pkg_add</code></p></item>
    <item><p>nous ajoutons également la bibliothèque LASSO depuis <link href="http://packages.univnautes.entrouvert.com/">http://packages.univnautes.entrouvert.com/</link> (la version fournie par FreeBSD 8.1 étant bien trop ancienne)</p></item>
    <item><p>nous créons un <em>virtualenv</em> Python dans <cmd>/var/tmp/univnautes</cmd>. Le processus de création de ce <link href="https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv">virtualenv</link> est dans le répertoire virtualenv : c'est le script <cmd>build_virtualenv.sh</cmd> qui fait le travail :</p>
  <list>
    <item><p>installation des modules python : <em>flup django django-authopenid django-registration django-profiles django_authopenid</em> nécessaires à authentic2</p></item>
    <item><p>installation de <em>authentic2</em> (dernière version, obtenue par <code>git</code>)</p></item>
    <item><p>installation de la configuration locale de <em>pffedportal</em> (config.xml)</p></item>
    <item><p>ajout du package pfSense <em>univnautes</em> permettant la configuration des paramètres spécifiques à univnautes</p></item>
    <item><p>installation des différents scripts : mise à jour des metadata de la fédération (univnautes-update-metadata.sh), de la whitelist, arret/démarrage des services (rc.d/...), etc</p></item>
  </list>
  </item>
  <item><p>ce <em>virtualenv</em> est copié sur l'image de pfSense dans <cmd>/usr/local/univnautes</cmd>, et un script <em>postinst</em> est lancé quand la création du système pfSense est terminée, juste avant de construire l'image ISO ou l'archive d'update :</p>
  <list>
    <item><p>il installe les scripts de démarrage dans /usr/local/etc/rc.d</p></item>
    <item><p>il modifie (patche) des fichiers de pfSense afin d'en modifier le comportement dans le cadre d'univnautes :</p>
     <list>
       <item><p>la seule modification indispensable concerne deux lignes du fichier <em>/etc/inc/captiveportal.inc</em>, afin que le portail captif de pfSense n'active pas son propre site web d'authentification, puisque celui-ci est remplacé par <em>pffedportal</em></p></item>
       <item><p>les autres modifications concernent l'adaptation de l'affichage des services et de la configuration du portail captif et de l'idp local</p></item>
       <item><p>les patches sont <link href="https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/patches">visibles ici</link></p></item>
     </list>
    </item>
  </list>
  </item>
  </list>
  
</section>

</page>
