Le problème

J'ai sous la main les données d'une base "Frontbase 3.3.36", que je souhaite pouvoir re-exploiter. Elles ont été produites par la commande "WRITE ALL" sous "Frontbase Server 3.6.36", et comportent :

  • un fichier "schema.sql" contenant les instructions SQL92 qui permettront de recréer la base
  • des fichiers de données "flat files", un par table.

Il est possible d'installer FrontBase gratuitement (ils se rémunèrent sur le support), donc une idée de l'installer sur mon poste de travail, et de recharger les données.

Un petit ennui, c'est que mon poste est sous Debian Lenny (stable), et que FrontBase pour Debian est une version assez ancienne qui dépende de pakages obsolètes (libreadline4 et libncurses4). Il y a de multiples possibilités (virtualisation, etc), Je choisis d'installer FrontBase dans un environnement Debian Sarge minimal "chrooté".

C'est quoi un environnement "chrooté" ?

Normalement, un processus "voit" tout l'arborescence des fichiers et répertoires. La commande

#  chroot  /un/répertoire  un-programme

lance le programme en décalant sa racine, qui correspond alors à /un/répertoire. L'idée, c'est que ça confine le programme dans une arborescence, et ça sert en général à protéger le système de méfaits éventuels du programme (si c'est un service qui se fait "hacker") qur le reste des fichiers de la machine.

Remarquez que si un programme est "chrooté", il ne va plus chercher ses bibliothèques dynamiques à l'endroit habituel (/lib), mais dans le sous-répertoire lib du répertoire où il est confiné. Ca rend bien service si, justement, on veut faire tourner un programme qui n'utilise pas les biliothèques normales : on lui prépare un répertoire séparé avec tout ce dont il a besoin, et ça ne risque pas de semer le bazar avec les bibliothèques "normales".

Donc pour résumer, deux usages

  • sécurité
  • disposer d'un environnement différent

Pour le second, c'est plus limité que la virtualisation, mais c'est plus économique en ressources. Ici, seul root utilise l'environnement sarge, et encore pour des besoins ponctuels, alors ça ira comme ça.

Récupérer Frontbase et sa licence

  • Voir sur www.frontbase.com
  • Le package debian s'appelle FrontBase-4.2.8.deb
  • il faut demander aussi une licence (gratuite). Sans licence, l'importation de données depuis des fichiers ne fonctionne pas.

La licence est liée, au choix, au numéro IP ou au numéro MAC. J'ai donné l'adresse MAC de ma carte réseau eth0. Penser à activer l'interface eth0 même si on est connecté par wifi, sinon FrontBase fonctionne en mode "sans licence"....

(J'aurais peut être dû demander une licence pour l'adresse IP "127.0.0.1")

Installer un environnement Sarge "chrooté"

On commence par repérer une partition assez grande pour pouvoir y installer un nouveau (petit) système. Ici, la partition racine va bien, il reste quelques gigas c'est plus que suffisant. En fait le système prendra 400 ou 500 mégas à tout casser, ce sont les données de la base qui prendront beaucoup de place (les fichiers de données + la base une fois qu'on les a chargés).

C'est parti. J'installe dans un répertoire /virtual/sarge, avec les bibliothèques nécessaires à FrontBase, et "jed", mon éditeur de textes de prédilection pour les petits systèmes :

# mkdir -p /virtual/sarge
# debootstrap --include=libncurses4,libreadline4,jed sarge /virtual/sarge http://archive.debian.org/debian

Quelques bricoles à configurer:

  • copier le fichier /etc/hosts
# cp /etc/hosts /virtual/sarge/etc/hosts
  • la machine virtuelle aura besoin de /proc
# echo "proc /virtual/sarge/proc  proc none 0 0" >> /etc/fstab
# mount /virtual/sarge/proc

et maintenant vous devez pouvoir faire

# chroot /virtual/sarge /bin/bash

pour ouvrir un dialogue interactif dans l'environnement sarge. On en ressort par

# exit

(si j'ai oublié quelque chose, n'hésitez pas à m'écrire, je complèterai !)

Partage des données

Pour partager les données, il y a la solution simple de les copier dans l'arborescence /virtual/sarge, mais ça a tendance à prendre de la place (il y en a plus d'un giga). On pourrait aussi faire des liens, par cp -al .....

Finalement, j'ai utilisé une option méconnue de la commande mount

mkdir -p /virtual/sarge/mnt/donnees 
mount --bind /home/michel/donnees /virtual/sarge/mnt/donnees

qui monte une partie d'une arborescence (/home/michel/donnees) à un autre endroit.

Les données seront donc visibles dans l'environnement Sarge, sous /mnt/donnees.

(juste un petit détail : comme je travaille sous compte root dans l'environnement sarge, les fichiers que le créerai dans /mnt/donnees appartiendront à root. A la fin, il faudra que je fasse un chown pour changer le propriétaire.

Installer le SGBD

Manoeuvre en deux temps : transférer le package FrontBase et l'installer. On va le mettre dans le répertoire /root de l'environnement Sarge

  • transfert (depuis l'environnement hôte)
# cp /quel/que/part/FrontBase-4.2.8.deb  /virtual/sarge/root
  • installation :
# chroot /virtual/sarge dpkg -i /root/FrontBase-4.2.8.deb

arrêt/démarrage du serveur FrontBase

L'installation du package lance le démarrage de FrontBase. Les autres fois, vous pourrez lancer

#  chroot /virtual/sarge /etc/init.d/frontbase start

et pour l'arrêter, devinez.

Troisième temps, installer la licence

La licence FrontBase va dans /usr/lib/FrontBase/LicenseString. Vous avez reçu deux chaines de caractères, que vous mettez sur une seule ligne, séparées par un caractère ':'. ça vous fait 81 caractères qui ressemblent à ça :

000F647A00:11:22:33:44:c8000000000000000Perpetual 1100043FFF160n:a1b2c3d4e5f60102

Utilisation de la commande sql92

sql92 est l'utilitaire interactif "en ligne" de FrontBase, un peu comme mysql.

Il y a un peu de documentation sur le site FrontBase, pour les premiers pas. Ça m'amuse encore moins de la recopier que vous de la lire, ne perdons pas de temps.

Récupération des données

Pas le temps de détailler aujourd'hui, mais il y a quelques précautions à prendre avant de lancer

script schema.sql ;

notamment désactiver les ALTER USER ... PASSWORD... qui donnent un mot de passe (que vous ignorez) à l'utilisateur _SYSTEM. Et ensuite vous ne pouvez même plus détruire la base de données parce que vous n'avez pas le mot de passe (très drôle)...



J'expliquerai ça plus en détail, ainsi que la manière de sortir les tables sous formes de fichiers XML bien formés. FrontBase sait presque le faire.