Page 1 sur 1

Ne pas perdre sa conf pendant les mises à jour

Publié : 29 mai 2015, 01:26
par Loubrix
Bonsoir,

normalement, quand on personnalise son système, on essaie de ne modifier que des fichiers qui ne seront pas remplacés en cas de mise à jour (pour éviter de recommencer à chaque fois); par exemple, au lieu de toucher à /etc/yaourtrc, on crée un ~/.yaourtrc.

seulement parfois, on n'a pas le choix: soit le logiciel n'est pas conçu pour lire ses fichiers de conf dans le home (logiciels utilisables que par Root), soit on touche à un fichier qui n'était pas prévu pour.
par chance, certains fichiers de conf sont notés dans le paquet comme étant possiblement modifiés, et si Pacman voit que c'est effectivement le cas, il placera le fichier en y ajoutant une extension *.pacnew et ne touchera pas à celui qu'on a modifié; c'est notamment le cas pour les fichiers qui sont forcément modifiés, comme /etc/passwd (liste des utilisateurs), /etc/group (liste des groupes), ou /etc/shadow (mots de passe): heureusement que Pacman ne modifie pas ces fichiers !

oui, mais tous les fichiers de conf ne bénéficient pas de ce traitement, et beaucoup seront écrasés à la mise à jour, même s'ils sont modifiés...

ce qui m'amène à ces petites options sympathiques que l'on peut utiliser dans le /etc/pacman.conf; elles y sont déjà, il faut juste les dé-commenter (enlever le #) et les modifier à ses besoins.

-on connaissait déjà celles qui permettent de ne pas mettre à jour un paquet ou un groupe:

IgnorePkg = <nom du paquet>
IgnoreGroup = <nom du groupe de paquets>


-il y avait aussi celle qui permet d'empêcher la suppression d'un paquet; on y trouve déjà pacman et glibc, mais on peut ajouter d'autres paquets dont on estime qu'il ne faut pas les désinstaller:

HoldPkg  = pacman glibc <autre paquet>


-ce qui nous intéresse aujourd'hui, une option qui dit à Pacman de ne pas toucher un fichier, et de mettre sa mise à jour sous forme de *.pacnew, exemple ici avec yaourtrc:

NoUpgrade = etc/yaourtrc

attention, ce n'est pas une coquille, il ne faut pas mettre le premier "/" dans le chemin du fichier: c'est bien "etc/yaourtrc", et non pas "/etc/yaourtrc".
on peut aussi vouloir faire l'inverse, parce que Pacman est trop zélé, et qu'il nous colle un *.pacnew alors qu'on avait pas modifié le fichier (suffit d'un espace qui s'est perdu (*) ), et donc on lui demande de remplacer le fichier même s'il a été modifié, avec un point d'exclamation devant le nom du fichier:

NoUpgrade = !etc/lightdm/lightdm.conf

ceci remet Lightdm d'origine.
et bien sûr, ça induit qu'il faut penser à s'occuper de ses *.pacnew...

-une dernière qui peut servir aussi, et qui dit à Pacman de ne carrément pas installer un fichier du paquet; par exemple, on utilise "index.php" sur son serveur, et on voudrait ne pas avoir le fichier "index.html" quand on met à jour ou installe Apache:

NoExtract = var/www/index.html

cette option a les mêmes règles que la précédente, y compris le point d'exclamation.

et voilà... ;)

*) Pacman se sert de la somme de contrôle du fichier pour savoir s'il a été modifié, donc même un simple commentaire dans le fichier peut lui faire considérer qu'il n'est pas d'origine.

Re: Ne pas perdre sa conf pendant les mises à jour

Publié : 29 mai 2015, 07:44
par andson
:bien
Pour la piqure de rappel ... :merci:

Re: Ne pas perdre sa conf pendant les mises à jour

Publié : 29 mai 2015, 08:26
par Loubrix
au passage, petit rappel de ce qui se passe avec les pacnew...
-quand Pacman met à jour un paquet, il lit le fichier .PKGINFO de ce paquet, et dedans, il trouve ces lignes:

packager = Dave Reisner <dreisner@archlinux.org>
size = 9216
arch = x86_64
license = GPL
group = base
backup = etc/fstab
backup = etc/crypttab
backup = etc/group
backup = etc/hosts
backup = etc/ld.so.conf
backup = etc/passwd
backup = etc/shadow
backup = etc/gshadow[...]

les fichiers marqués par "backup" sont ceux qui ne faut pas remplacer s'ils ont changé dans l'installation.
-pour savoir s'ils ont changé, il regarde dans le fichier "mtree" du paquet, où il y a les sommes MD5 de tous les fichiers du paquet et il compare ces sommes avec celles du paquet déjà installé, qui se trouvent dans /var/lib/pacman/local/<nom du paquet>/files

%BACKUP%
etc/fstab   693c97f2c9a519bb97a17008e92c2b74
etc/crypttab   f0a5071f50d8864d2810c44e23eb00cc
etc/group   4d7417d2bf8872665c0907f09ae37c34
etc/hosts   7bc65f234dfb6abf24e7c3b03e86f4ff
etc/ld.so.conf   6e488ffecc8ba142c0cf7e2d7aeb832e
etc/passwd   a998d1e6c7cc5791a7f4a2b49b2d10ce
etc/shadow   1ec1b16e2a71fad63ab8f147069a5d97
etc/gshadow   69e460404f45bdb7288d1de662e56dd9
etc/resolv.conf   6f48288b6fcaf0065fcb7b0e525413e0
etc/motd   d41d8cd98f00b204e9800998ecf8427e
etc/nsswitch.conf   9e4533df61f0c82d6b2e2371f7376282
etc/shells   22518e922891f9359f971f4f5b4e793c
etc/host.conf   f28150d4c0b22a017be51b9f7f9977ed
etc/securetty   4c4540eeb748bf1f71d631b8c1dcf0b3
etc/profile   0b6f835598c7640184e476057b3c7722
etc/issue   7813c481156f6b280a3ba91fc6236368

-à ce stade, si la somme est différente, Pacman renomme le fichier en lui ajoutant l'extension *.pacnew avant de l'extraire, comme le nom est différent, le fichier original n'est pas remplacé; et bien sûr, Pacman signale l'opération dans le log

warning: /etc/passwd installed as /etc/passwd.pacnew


tout ça pour dire que l'opération est d'une grande simplicité, puisque Pacman ne regarde même pas le contenu du fichier; par contre, cette méthode implique que même un simple espace ou un retour chariot modifie la somme MD5 du fichier, et que donc ce fichier peut être considéré comme modifié alors qu'il ne l'est pas...

tout ça me donne une idée sur un utilitaire qui gère les pacnew, mais je suis un peu limite en programmation pour y arriver... :desole: