web-dev-qa-db-fra.com

paquet ubuntu en développement essayant d'écraser la configuration d'un autre paquet

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.

1
IHopeLinux

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:

  1. Votre debian/rules aura:

    %:
        dh $@ --with config-package
    
  2. Vos fichiers de configuration se terminent par .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.
  3. 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.

  4. 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
    
2
muru