7. Mettez à jour /etc

Recompiler le système ne met pas à jour certains répertoires (en particulier, /etc, /var et /usr) pour y installer des fichiers de configuration nouveaux ou modifiés. Il vous faudra le faire à la main, à vue, et en utilisant à bon escient la commande diff.

Vous ne pouvez pas vous contenter de copier les fichiers de /usr/src/etc dans /etc pour que cela marche. Certains de ces fichiers doivent d'abord être “installés”. En effet le répertoire /usr/src/etc n'est pas une simple copie de ce que devrait contenir votre répertoire/etc. De plus, il y a des fichiers qui doivent être dans /etc et ne sont pas dans /usr/src/etc.

La façon la plus simple de procéder est d'installer les fichiers dans un nouveau répertoire, puis de passer en revue les différences.

Sauvegardez vos fichiers actuels dans /etc : Bien qu'en principe rien ne sera modifié automatiquement dans ce répertoire, prudence est mère de sûreté. Copiez donc votre répertoire /etc dans un endroit sûr. Quelque chose du genre:

# cp -Rp /etc /etc.old

fera l'affaire (-R fait une copie récursive, -p conserve la date, les autorisations des fichiers et ainsi de suite).

Vous devez créer un jeu de répertoires provisoires pour y installer les fichiers de /etc et autres. En général, je les mets dans /var/tmp/root; il y a un certain nombre de sous-répertoires à créer. Pour ce faire, exécutez:

# mkdir /var/tmp/root
# cd /usr/src/etc
# make DESTDIR=/var/tmp/root distrib-dirs distribution
qui va créer l'arborescence nécessaire et y installera les fichiers. Un grand nombre des sous-répertoires créés dans /var/tmp/root seront vides et devront être supprimés. La façon la plus simple de le faire est:
# cd /var/tmp/root
# find -d . -type d | /usr/bin/perl -lne \
  'opendir(D,$_);@f=readdir(D);rmdir if $#f == 1;closedir(D);'
qui fait une recherche en profondeur, examine chaque répertoire, et s'il ne contient que 2 fichiers (“1” n'est pas une faute de frappe dans la procédure), i.e. “.” et “..” supprime le répertoire.

/var/tmp/root contient maintenant tous les fichiers à installer à l'endroit requis sous /. Vous devez ensuite examiner chacun de ces fichiers pour voir en quoi ils diffèrent de vos propres fichiers.

Notez que certains des fichiers qui ont été installés dans /var/tmp/root commencent par un “.” Au moment où j'écris ceci, les seuls fichiers concernés sont les fichiers d'initialisation des interpréteurs de commandes dans /var/tmp/root/ et /var/tmp/root/root/, mais il pourrait y en avoir d'autres (cela dépend de quand vous lirez ces lignes). Assurez-vous d'utiliser ls -a pour ne pas les oublier.

La manière la plus simple de procéder est d'utiliser la commande diff pour comparer deux fichiers.

Par exemple:

# diff /etc/shells /var/tmp/root/etc/shells
vous indiquera les différences entre votre fichier /etc/shells et le nouveau fichier /etc/shells. A partir de là, décidez si vous allez reporter les modifications que vous y avez apportées ou si vous allez simplement recopier le nouveau fichier.

http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/dircmp.pl est une petite procédure Perl (Perl 4.036, qui est installé par défaut à partir de la version 2.0 de FreeBSD) qui compare les fichiers de deux répertoires (/etc et /var/tmp/root/etc par défaut) et liste les fichiers absents ou différents dans les deux répertoires.

Donnez au nouveau répertoire (/var/tmp/root) un nom qui inclue une date, pour pouvoir facilement comparer différentes versions : Si vous recompilez fréquemment votre système, vous devrez aussi souvent mettre à jour /etc, ce qui peut devenir une vrai corvée.

Vous pouvez accélérer le processus en gardant une copie du dernier jeu de fichiers reportés dans /etc. La procédure suivante vous suggère comment faire.

  1. Recompilez le système comme d'habitude. Au moment de mettre à jour /etc et les autres répertoires, donnez au répertoire cible un nom basé sur la date du jour. Si vous faisiez cela le 14 Février 1998, vous pouviez procéder comme suit:

    # mkdir /var/tmp/root-980214
    # cd /usr/src/etc
    # make DESTDIR=/var/tmp/root-980214 \
        distrib-dirs distribution
    
  2. Reportez les modifications depuis ce répertoire comme décrit plus haut.

    Ne supprimez pas le répertoire /var/tmp/root-980214 quand vous aurez terminé.

  3. Quand vous chargerez la version la plus récente des sources et la recompilerez, faites de même. Vous aurez alors un nouveau répertoire, /var/tmp/root-980221 par exemple (si vous faites une mise à jour chaque semaine).

  4. Vous pouvez maintenant voir les modifications intervenues d'une semaine à l'autre avec quelque chose comme:

    # cd /var/tmp
    # diff -r root-980214 root-980221
    
    qui vous donnera les différences entre tous les fichiers des deux répertoires.

    Typiquement, il y aura beaucoup moins de différences qu'entre /var/tmp/root-980221/etc et /etc. Comme il y a beaucoup moins de différences, il est beaucoup plus facile de les reporter dans le répertoire /etc.

  5. Vous pouvez maintenant supprimer le plus ancien des deux répertoires /var/tmp/root-*:

    # rm -rf /var/tmp/root-980214
    


  6. Répétez l'opération chaque fois que vous devez reporter des modifications dans /etc.

Vous pouvez utiliser la commande date(1) pour automatiser la génération des noms de répertoires. Par exemple:

# mkdir /var/tmp/root-`date "+%y%m%d"`
crée un répertoire dont le nom dépend de l'année, du mois et du jour.

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.