Skip to content

Ajouter la détection des bases de données zodb par file

13 septembre 2011

ZODB est la base de données utilisée par Zope (LE serveur d’application Python). file est un outil en ligne de commande Unix, quasiment aussi vieux qu’Unix lui-même : il existe depuis novembre 1973. Depuis, il a été amélioré et de nombreux formats de fichier ont été ajoutés. Malheureusement, les bases de données Zodb ne sont pasn’étaient pas encore prises en charge :

$ file db.fs 
db.fs: data

On sait uniquement que l’on est en présence d’un fichier binaire, ce qui est un peu vague… C’est tout de même assez ballot parce que c’est ce que nous utilisons au travail. Comment avoir une détection correcte ?

Nouvelle définition d’un type de fichier

file se base sur le début du fichier (les nombres magiques) pour en déduire son type et non sur l’extension du fichier. Il faut donc ajouter la définition suivante dans un fichier :
0 string FS21 Zope Database FileStorage (data)

L’insertion de cette ligne dans le fichier /etc/magic, permet d’obtenir automagiquement le résultat suivant pour l’ensemble des utilisateurs du système :

$ file db.fs
db.fs: Zope Database FileStorage (data)

Succinctement, le format attendu pour les définitions est :

  • l’emplacement dans le fichier, en octets (ici 0 parce que c’est tout au début du fichier) ;
  • le type de données attendu (ici string mais cela pourrait aussi être byte, long, etc.) ;
  • la valeur attendue (ici FS21) ;
  • et la description à afficher si la valeur correspond (ici Zope Database FileStorage (data)).

Le format de Zodb est très simple, donc la définition ajoutée est à son image mais magic permet aussi de tester plusieurs valeurs, à plusieurs emplacements. Pour plus de détails, lisez la page de manuel de magic(5).

Le terme « data » est ajouté à la description pour signaler le type de fichier d’un point de vue assez général. Les deux autres possibilités étant soit « text », soit « exécutable ». Il est important que l’un de ces mots-clef soit présent dans la description, quelque soit l’endroit à l’intérieur de la description. La page de manuel de file(1) insiste sur le fait de respecter cette convention en cas d’ajout de définitions.

Déploiement vers le reste du monde

Plutôt que de garder cette définition, pourquoi ne pas la diffuser pour que d’autres puissent en profiter ? Le plus logique est de contacter les développeurs de ZODB pour savoir s’il y aurait des détails qui n’auraient pas été pris en compte par ignorance.

(Note : la liste de diffusion ZODB-dev nécessite une inscription pour pouvoir envoyer des messages. Si ce n’est pas le cas, le robot de la liste ignore silencieusement le message posté. Inscrivez-vous avant tout envoi.)
Après proposition sur la liste de diffusion de ZODB-dev, Jim Fulton a proposé une meilleure description et suggéré d’ajouter les fichiers de cache pour ZEO.

Grâce à lui, la version finale suivante est obtenue :

# Database file for Zope (done by FileStorage)
0       string  FS21    Zope Object Database File Storage (data)

# Cache file for the database of Zope (done by ClientStorage)
0       string  ZEC3    Zope Object Database Client Cache File (data)

C’est cette version qui a été envoyé et accepté par Christos Zoulas, mainteneur de file. Si vous voulez bénéficier tout de suite de la détection de ces deux types de fichiers, il suffit de copier les lignes précédentes dans /etc/magic. Sinon, cela sera réalisé automatiquement lorsque la prochaine version de file sera publiée et intégrée sur votre système.

From → Python

Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :