Vous venez d'effectuer une mise à jour complète de votre système et, même si vous avez été suffisamment prévoyant en sauvegardant vos données personnelles (répertoires /home et certains de /usr), vous découvrez que toutes les bases de données ont disparu car les serveurs les rangent à des emplacements imprévisibles qui sont effacés pendant la mise à jour du système. L'installation d'une nouvelle version de LXR peut aussi entraîner l'obligation de tout reconfigurer par perte de lxr.conf. C'est vraiment pénible quand vous gérez plus de 10 arbres. La tâche est sujette à erreur, longue et n'apporte aucune valeur ajoutée. Heureusement, la procédure peut être automatisée.

Le script recreatedb.pl accompagne LXR 1.0 et ultérieur.

Sauvegarde requise

Le minimum nécessaire à la reconstruction du serveur LXR est le fichier principal de configuration lxr.conf.

Pour réduire le risque d'incohérence, sauvegardez aussi le fichier de contexte lxr.ctxt situé dans le répertoire custom.d/.

Idéalement, sauvegardez intégralement le répertoire custom.d/, surtout si vous avez indexé un noyau et utilisé le script kernel-vars-grab.sh pour rassembler les noms d'architecture. Toutefois l'étape d'énumération peut être effectuée très rapidement si vous n'avez pas tout sauvegardé.

Après la mise à jour

La configuration de LXR et la création des bases de données sont remplacées par la procédure suivante.

  1. Rechargement des fichiers sauvegardés

    Comme mentionné ci-dessus, vous avez besoin au moins du fichier principal de configuration lxr.conf et du fichier de contexte lxr.ctxt. Placez-les dans le répertoire custom.d/.

    Si vous avez oublié de sauvegarder lxr.ctxt, il peut être reconstitué à partir de questions spécifiques. Mais, ATTENTION, si vos réponses ne correspondent pas au contexte initial, vous risquez d'aboutir à un serveur LXR inopérant. Dans ce cas, recommencez la procédure avec des réponses différentes.
  2. Lancez le script recreatedb.pl IMPORTANT! Le script est conçu pour être lancé depuis le répertoire racine de LXR. Tapez éventuellement la commande: $ cd /repertoire/racine/LXR $ ./scripts/recreatedb.pl --verbose custom.d/lxr.conf *** LXR DB initialisation reconstruction (version: 1.1) *** LXR root directory is /home/myself/lxr Configuration read from custom.d/lxr.conf Initial context custom.d/lxr.ctxt is reloaded Your DB engine was: MySQL Configuration file custom.d/lxr.conf loaded *** scanning global configuration section *** *** scanning /lxr/tree1 tree configuration section *** *** scanning /lxr/tree2 tree configuration section *** *** scanning /lxr/tree3 tree configuration section ***

    recreatedb.pl écrit un script custom.d/initdb.sh contenant les instructions SQL permettant de reconstruire les bases de données correspondant aux arbres décrits dans le fichier principal de configuration.

  3. Création des bases de données $ ./custom.d/initdb.sh Voir les notes concernant ce script dans l'étape de configuration .
  4. Éventuellement, énumération des architectures du noyau

    Si l'un de vos arbres concerne le noyau Linux, relancez l'énumération des architectures du noyau avec ce script.

    Cette étape est facultative si vous avez sauvegardé custom.d/ et que vous n'avez pas modifié l'arbre-source du noyau.
  5. Chargement des bases de données $ ./genxref --allurls C'est le seul cas où l'option --allurls est recommandée (ou plutôt tolérée). Dans des circonstances mal définies, la réindexation d'arbres sous PostgreSQL peut échouer. Dans ce cas, interrompez le genxref actif avec control-C et relancez des genxref indiviuels à partir de l'arbre en erreur: $ ./genxref --url=... --reindexall L'option --reindexall n'est réellement nécessaire que sur l'arbre en erreur pour forcer une base de données correcte.

La configuration du serveur web est effectuée comme d'habitude. Voir ici.

Usage avancé

Emploi hors cas par défaut

Utilisez l'option --help et expérimentez.

Sauvegarde incomplète

Sauvegarde incomplète signifie ici que lxr.ctxt n'a pas été sauvegardé.

Le script recreatedb.pl est capable de reconstituer un contexte manquant (mais ne le sauvegarde pas pour éviter de créer une incohérence permanente). Ceci passe par un ensemble de questions:

$ ./scripts/recreatedb.pl --verbose custom.d/lxr.conf ERROR: configuration context file custom.d/lxr.ctxt does not exist! *** LXR DB initialisation reconstruction (version: 1.1) *** LXR root directory is /home/myself/lxr Configuration read from lxr.conf WARNING: could not reload context file custom.d/lxr.ctxt! You may have deleted the context file or you moved the configuration file out of the custom.d user-configuration directory without the context companion file custom.d/lxr.ctxt. You can now 'quit' to think about the situation or try to restore the parameters by answering the following questions (some clues can be gathered from reading configuration file lxr.conf). WARNING: inconsistent answers can lead to LXR malfunction. Do you want to quit or manually restore context? [QUIT/restore] >

Choisissez la réponse par défaut Q pour éventuellement ajouter une option --lxr-ctx= désignant un fichier de contexte existant à un emplacement inhabituel. Répondez R pour entrer dans le dialogue interactif suivant:

The following questions are intended to rebuild the global databases options (which may be overridden in individual trees). Answer with the choices you made previously, otherwise your DB will not be what LXR expects. Default database engine? [MYSQL/oracle/postgres/sqlite] > Configured for single/multiple trees? [s/M] > The safest option is to create one database per tree. You can however create a single database for all your trees with a specific set of tables for each tree (though this is not recommended). How did you setup the databases? [PER TREE/global] > All databases can be accessed with the same username and can also be described under the same names. Have you shared database characteristics? [YES/no] > Did you use the same username and password for all DBs? [YES/no] > --- DB user name? [lxr] > --- DB password ? [lxrpw] > Did you give the same prefix to all tables? [YES/no] > --- Common table prefix? [lxr_] >

Après ce dialogue, recreatedb.pl poursuit comme précédemment.

Notez que le mode par défaut est ici multiple car tenter de reconstruire des bases de données n'a de sens que lorsqu'il y en a plusieurs. Si vous ne gérez qu'un arbre, il est beaucoup plus sûr de reconfigurer selon la procédure d'installation normale.