Construction des images ISO et updates

Cette page explique comment le projet Univnautes est techniquement construit.

Base de travail pfSense 2.0

Nous utilisons http://www.pfsense.org/ dans sa version 2.0.x téléchargée depuis github.

Modification apportées à pfSense 2.0

L'idée générale est qu'UnivNautes ajoute des choses à pfSense en modifiant le minimum de code de pfSense.

La description des patches est ici :

Les patches sont ici : https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/patches

Logiciel pffedportal (pfSense federation portal)

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.

Lorsqu'un IdP a accepté un utilisateur, pffedportal lance la commande (script PHP ̀cp_allow qui appelle des fonctions de pfSense) qui ouvre le portail captif pour la machine client (adresse MAC + adresse IP + nom de l'utilisateur).

pffedportal est un SP écrit en Django avec Authentic2 (http://dev.entrouvert.org/projects/authentic).

Sources : https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pffedportal

Logiciel pfidp

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é).

pfidp est un IdP écrit en Django avec Authentic2 (http://dev.entrouvert.org/projects/authentic).

Sources : https://dev.entrouvert.org/projects/portail-captif/repository/revisions/master/show/virtualenv/pfidp

Création de l'image ISO

Nous utilisons le système de construction fourni par pfsense : https://github.com/bsdperimeter/pfsense-tools

Pour inclure univnautes, nous avons adapté la procédure de création de l'image ISO. Les scripts adaptés sont sur https://dev.entrouvert.org/projects/portail-captif/repository :

  • Makefile : contient les commandes pour simplifier la construction

  • builder : les outils pour construire l'image ISO proprement dite, basés sur ceux fournis dans pfsense-tools

    • build.sh : le script principal, lancé pour obtenir la création des images

      • 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)

      • clean.sh : script de nettoyage complet avant reconstruction

    • pfsense-build.conf : les paramètres de configuration des images

    • univnautes_ports.sh : contient des fonctions vraiment spécifiques à univnautes (appelée dans setup_overlay ou build_iso)

Voici les modifications principales :

  • 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 pkg_add

  • nous ajoutons également la bibliothèque LASSO depuis http://packages.univnautes.entrouvert.com/ (la version fournie par FreeBSD 8.1 étant bien trop ancienne)

  • nous créons un virtualenv Python dans /var/tmp/univnautes. Le processus de création de ce virtualenv est dans le répertoire virtualenv : c'est le script build_virtualenv.sh qui fait le travail :

    • installation des modules python : flup django django-authopenid django-registration django-profiles django_authopenid nécessaires à authentic2

    • installation de authentic2 (dernière version, obtenue par git)

    • installation de la configuration locale de pffedportal (config.xml)

    • ajout du package pfSense univnautes permettant la configuration des paramètres spécifiques à univnautes

    • 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

  • ce virtualenv est copié sur l'image de pfSense dans /usr/local/univnautes, et un script postinst 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 :

    • il installe les scripts de démarrage dans /usr/local/etc/rc.d

    • il modifie (patche) des fichiers de pfSense afin d'en modifier le comportement dans le cadre d'univnautes :

      • la seule modification indispensable concerne deux lignes du fichier /etc/inc/captiveportal.inc, afin que le portail captif de pfSense n'active pas son propre site web d'authentification, puisque celui-ci est remplacé par pffedportal

      • les autres modifications concernent l'adaptation de l'affichage des services et de la configuration du portail captif et de l'idp local

      • les patches sont visibles ici