J'ai construit un paquet Debian personnalisé avec des configurations d'écrasement shuold de lightdm (autologin). Mon script d'installation (debian/install) contient les lignes suivantes:
lightdm/* /etc/lightdm/lightdm.conf.d/
Mais j'obtiens l'erreur suivante lors de l'installation de mon package personnalisé:
dpkg: error processing /var/cache/apt/archives/AAA (--unpack):
trying to overwrite `/etc/lightdm/lightdm.conf.d/20-lubuntu.conf', which is also in package CCC
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
AAA E: Sub-process /usr/bin/dpkg returned an error code (1)
Je sais que je peux utiliser le paramètre --force-overwrite pour installer le paquet via dpkg. Mais je veux l'installer comme dépendance d'un autre paquet. Alors, comment puis-je permettre à mon package d'écraser les fichiers de configuration des autres packages?
J'ai essayé mais cela ne fonctionnera pas (debian/rules):
#!/usr/bin/make -f
%:
dh $@
override_dh_command:
dh_command -- --force-overwrite
override_dh_installdeb:
dh_installdeb -- --force-overwrite
J? ai compris. Il ne reste plus qu'une chose. Maintenant, je peux détourner le fichier de conf d'origine. Mais les sommes de contrôle de mon DEBIAN/conffile ne sont pas valides, je les ai donc supprimées. Mon fichier debian/rules:
overrider dh_installdeb:
dh_installdeb
rm debian/mypackage-name/DEBIAN/conffiles
Je reçois l'avertissement suivant:
Configuration file `/etc/lightdm/lightdm.conf.d/20-ubuntu.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a Shell to examine the situation
The default action is to keep your current version.
*** bash.bashrc (Y/I/N/O/D/Z) [default=N] ?
Comment puis-je supprimer le message d'avertissement?
Voici le contenu de mon fichier debian/preinst:
#!/bin/bash
dpkg-divert --add --package mypackage-name --rename --divert /etc/lightdm/lightdm.conf.d/20-lubuntu.conf.real /etc/lightdm/lightdm.conf.d/20-lubuntu.conf
Contenu de mon fichier debian/install:
lightdm/* /etc/lightdm/lightdm.conf.d/
Contenu debian/règles:
#!/usr/bin/make -f
%:
dh $@
override_dh_builddeb:
dh_builddeb -- -z1
overrider dh_installdeb:
dh_installdeb
rm debian/mypackage-name/DEBIAN/conffiles
Merci.
Non. Vous détournez eux à la place. Pour plus de commodité, ce que je fais est d'utiliser un package d'aide comme config-package-dev
. Avec config-package-dev
, vous donnez à vos fichiers de configuration des noms spécifiques et l'installation fera automatiquement le détournement requis.
Par exemple, si votre package est nommé foo-bar
, puis:
Votre debian/rules
aura:
%:
dh $@ --with config-package
.foo
(par exemple, lightdm/20-lubuntu.conf.foo
est créé par le processus de construction de votre package) - le premier mot de votre nom de package est utilisé pour cette extension.Vous avez config-package-dev
en tant que Build-Depends dans votre debian/control
. Par exemple:
Build-Depends: debhelper (>= 7.0.0~), config-package-dev (>= 5.0)
Cela signifie que config-package-dev
doit être installé avant d'essayer de créer le package, mais pas pour l'installation.
En plus de debian/install
fichier, créez un fichier displace
répertoriant chaque fichier à détourner. Par exemple, il contiendrait:
/etc/lightdm/lightdm.conf.d/20-lubuntu.conf.foo