Sommaire |
Dans le cadre du projet easyneuf, nous souhaitons mettre en place des clefs d'extensions (dongle) embarquant des applicatifs pour étendre les fonctionnalités de la gate.
Nous nous situons dans une démarche commerciale et les contraintes suivantes doivent être respectées :
L'idée de base est de placer à la racine du système de fichier contenu dans la première partition du dongle un fichier nommé easykey.cfg (ou tout autre nom arbitraire) permettant :
L'intégration au système est principalement effectuée par minihal et l'environnement utilisé. Deux hypothèses sont possibles:
Un système simple de clefs/valeurs est à privilégier. L'idée étant de séparer les différents applicatifs pour faciliter la mise à jour se retrouve dans la structure de ce fichier:
[easykey] id = games1 name[fr] = Extension de jeux icon = games.svg version = 1 [application1] id = termulous file = applications/tremulous.desktop version = 1 [application2] ...
Des fichiers .desktop seront utilisés pour intégrer le logiciel au système. Notamment, on pourra modifier 9panel et ajouter un argument supplémentaire pour aller chercher les fichiers .desktop dans le répertoire de la clef USB.
Inutile pour les jeux mais pour les applications futures, le programme /usr/bin/mime-handle devra prendre en compte les fichiers .desktop de la clef et éventuellement les mémoriser afin de demander à l'utilisateur d'insérer la clef si elle n'est pas présente.
Les dongles doivent être auto-contenants et ne pas utiliser de ressources sur le système. Ainsi, nous proposons que tous les applicatifs d'un dongle soient exécutés dans un chroot auto-contenu. Pour permettre l'intégration avec le système comme la sauvegarde des scores ou les fichiers de configuration, nous proposons de monter le répertoire */home/$USER* et le répertoire */var/games* (par exemple) contenant les hi-scores globaux de la gate ou autre...
Nous proposons l'organisation suivante pour chaque dongle:
o--+-- easykey.cfg
|
+-- icons/
|
+--+ applications/
| |
| +-- *.desktop
|
+--+ system/
| |
| +-- lib/
| |
| +-- bin/
|
+--+ components/
|
+--+ tremulous/
| |
| +-- bin/
| |
| +-- usr/share/...
| |
| +-- ...
|
+--+ wesnoth/
|
+-- bin/
|
+-- usr/share/...
|
+-- ...
L'exécution de chaque application se fera par l'invocation d'un script placé sur le *système*. Il sera donc nécessaire d'avoir une gate à jour pour exécuter des applications sur le dongle (la mise à jour doit donc être prévue avant commercialisation de la clef). La configuration de l'exécution de chacune des applications sera faite par le biais des fichiers .desktop contenus sur le dongle.
Exemple de fichier .desktop
[application] id=tremulous name=Tremulous program=/bin/tremulous description[fr]=Jeu de latte aliens contre marines
Ainsi, on utilisera un script semblable au suivant (disclaimer: non testé) à qui on passera en argument le fichier .destkop. Par exemple: /usr/bin/run-app.sh /path/to/dongle/applications/tremulous.desktop.
#!/bin/sh application_program=`grep -i '^Exec=' $1 | sed -e 's/^.*= *//g'` application_id=`grep -i '^id=' $1 | sed -e 's/^.*= *//g'` mount --bind /home/$USER /path/to/dongle/home/$USER mount --bind /path/to/dongle/$application_id /path/to/dongle/system/$application_id chroot /path/to/dongle/system $application_program [...] # Vérification que l'exécution programme s'est bien déroulée umount /path/to/dongle/home/$USER umount /path/to/dongle/system/$application_id
L'idée est d'avoir un utilitaire de mise à jour de clefs dans la gate qui est exécuté par l'utilisateur manuellement. Idéalement, on télécharge un ensemble de fichiers .tar qu'on décompacte dans les répertoires des composants de la clef.
Signature par openssl (un certificat doit être présent sur le système pour vérification). Ce certificat aura une durée de vie assez longue pour permettre une rotation par mise à jour de gate le jour où il expirera.