Refaire votre monde (avec ``make world'')
Précédent |  | Suivant

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

Précédent | Sommaire | Suivant
Recompilez les sources et installez le nouveau système |  | Mettez à jour `/dev`

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