Como instalar dois pacotes que escrevem o mesmo arquivo

14

Eu tenho dois pacotes que cada um cria / usr / bin / ffprobe. Um deles é o ffmpeg do repositório Deb Multimedia, enquanto o outro é o ffmbc 0.7-rc5 criado a partir da fonte. O manual é essencial para os negócios e costumávamos instalá-lo da fonte sempre que necessário. Só posso supor que isso atrapalharia o arquivo ffmpeg, e nunca houve efeitos negativos.

Em teoria, deve ser aceitável que nosso pacote ffmbc substitua o arquivo do pacote ffmpeg. A desvantagem é que uma atualização para o ffmpeg substituirá o binário do ffmbc. Existe alguma maneira fácil de conciliar isso?

Joel E Salas
fonte

Respostas:

12

Em sistemas baseados no Debian, o DPKG (abaixo do apt) pode ter desvios configurados usando o comando dpkg-desviar

O dpkg-desvio é o utilitário usado para configurar e atualizar a lista de desvios.

Os desvios de arquivos são uma maneira de forçar o dpkg (1) a não instalar um arquivo em seu local, mas em um local desviado. ... Os administradores de sistema também podem usá-lo para substituir o arquivo de configuração de algum pacote ou sempre que alguns arquivos (que não são marcados como 'conffiles') precisam ser preservados pelo dpkg, ao instalar uma versão mais recente de um pacote que contém esses arquivos .

Portanto, para o seu caso, você pode usar um comando como este para configurar um desvio. (Não testei, verifique a página de manual e verifique se isso parece correto.)

dpkg-divert --local --divert /usr/bin/ffprobe.ffmpeg --rename /usr/bin/ffprobe
Zoredache
fonte
8

Outra solução que encontrei foi mudar a forma como construí o pacote ffmbc. Geralmente, é possível transmitir um prefixo alternativo com o objetivo de alterar os caminhos finais dos arquivos instalados:

./configure --prefix=/usr/local

Para pacotes Debian, isso ocorre no arquivo $ {package} / debian / rules da seguinte maneira:

override_dh_auto_configure:
    ./configure --enable-gpl --prefix=/usr/local

Ao colocar os arquivos ffmbc /usr/local, posso manter os arquivos ffmpeg /usre permitir que cada pacote seja atualizado independentemente.

Joel E Salas
fonte
3
Os pacotes não devem instalar nada /usr/local- é uma violação da política. O objetivo /usr/localé manter os arquivos sob gerenciamento de pacotes e os arquivos instalados manualmente separadamente. Veja a seguinte discussão relacionada à ESF: unix.stackexchange.com/questions/30/…
Onlyjob
-1

Pacotes que fornecem o (s) mesmo (s) arquivo (s) devem entrar em conflito entre si - caso contrário, é um bug (considere relatar esses casos). Se você criar software a partir de fontes e instalar usando make install(ou similar), certifique-se de /usr/localque evita conflitos com o gerenciamento de pacotes.

Observe que o deb-multimedia.org é um repositório não oficial obsoleto, conhecido por causar conflitos com pacotes oficiais.

Se o software que você precisa não é embalado para Debian , então você pode enviar embalagem pedido RFP , mas por favor, verifique os pedidos existentes em primeiro lugar.

Onlyjob
fonte