RSS: Blog | Wiki | Forum

Dongle jeux

Un article de Easyneuf.

Sommaire

[modifier] Introduction

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 :

  • intégration au système
  • auto-contenance
  • compatibilité ascendante
  • facilité d'utilisation
  • mise à jour envisageable

[modifier] Intégration au système

[modifier] Principe

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 :

  • par sa présence de considérer la clef comme une clef d'extension et donc d'effectuer un traitement supplémentaire comme changer l'icône de la clef sur le bureau ;
  • de spécifier tous les paramètres relatifs au dongle.

L'intégration au système est principalement effectuée par minihal et l'environnement utilisé. Deux hypothèses sont possibles:

  • soit le démon d'observation minihal reconnaît la présence de ce fichier d'index et envoi un signal spécifique à l'environnement (easy3d ou minidesk) par le biais d'une socket UNIX
  • soit l'environnement, qui reçoit par minihal un événement générique de montage de périphérique détecte la présence de ce fichier d'index et effectue le traitement spécifique (changement d'icône, autostart, etc...)


[modifier] Exemple de fichier d'index

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.


[modifier] Gestion MIME

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.

[modifier] Auto-contenance

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


[modifier] Organisation de la clef

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/...
         |
         +-- ...
       

[modifier] Exécution de programmes

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

[modifier] Mise à jour envisageable

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.


[modifier] Sécurité

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.