ubuntu o pacote está sendo desenvolvido tentando sobrescrever a configuração de outro pacote

1

Eu construo um pacote debian customizado com shuold sobrescrevendo configs de lightdm (autologin). Meu script de instalação (debian / install) contém as seguintes linhas:

lightdm/* /etc/lightdm/lightdm.conf.d/

Mas recebo o seguinte erro ao instalar meu pacote personalizado:

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)

Eu sei que posso usar o param -force-overwrite para instalar o pacote via dpkg. Mas eu quero instalá-lo como dependência de um outro pacote. Então, como posso permitir que meu pacote sobrescreva os arquivos de configuração de outros pacotes?

Eu tentei isso, mas não funciona (debian / rules):

#!/usr/bin/make -f

%:
   dh $@

override_dh_command:
   dh_command -- --force-overwrite

override_dh_installdeb:
   dh_installdeb -- --force-overwrite

Eu entendi. Há apenas na coisa esquerda. Agora eu posso desviar o arquivo conf original. Mas o checksums do meu DEBIAN / conffile é inválido, então eu deletei. Meu arquivo debian / rules:

overrider dh_installdeb:
    dh_installdeb
    rm debian/mypackage-name/DEBIAN/conffiles

Eu recebo o seguinte aviso:

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] ?

Como posso remover a mensagem de aviso?

Este é o conteúdo do meu arquivo 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

Conteúdo do meu arquivo debian / install:

lightdm/* /etc/lightdm/lightdm.conf.d/

Conteúdo debian / rules:

#!/usr/bin/make -f

%:
    dh $@

override_dh_builddeb:
    dh_builddeb -- -z1

overrider dh_installdeb:
    dh_installdeb
    rm debian/mypackage-name/DEBIAN/conffiles

Obrigado.

    
por IHopeLinux 15.02.2015 / 22:29

1 resposta

2

Você não faz. Você desviar eles. Por conveniência, o que eu faço é usar um pacote de ajuda como config-package-dev . Com config-package-dev , você fornece alguns nomes específicos aos seus arquivos de configuração, e a instalação fará automaticamente o desvio necessário.

Por exemplo, se o seu pacote tiver o nome foo-bar , então:

  1. Seu debian/rules terá:

    %:
        dh $@ --with config-package
    
  2. Seus arquivos de configuração terminam com .foo (por exemplo, lightdm/20-lubuntu.conf.foo é criado pelo processo de criação do pacote) - a primeira palavra do nome do seu pacote é usada para essa extensão.
  3. Você tem config-package-dev como um Depend de compilação no seu debian/control . Por exemplo:

    Build-Depends: debhelper (>= 7.0.0~), config-package-dev (>= 5.0)
    

    Isso significa que config-package-dev precisa ser instalado antes de você tentar construir o pacote, mas não para instalá-lo.

  4. Além do arquivo debian/install , crie um arquivo displace listando cada arquivo que precisa ser desviado. Por exemplo, ele conteria:

    /etc/lightdm/lightdm.conf.d/20-lubuntu.conf.foo
    
por muru 15.02.2015 / 22:48