Tive que baixar e instalar uma versão de uma biblioteca de seu repositório de código-fonte. O problema é que outros pacotes do gerenciador de pacotes Kubuntu exigem que esta biblioteca seja instalada. No momento estou trabalhando com ffmpeg, mas já tive que fazer isso antes (por exemplo, OpenCV) e estou procurando a melhor maneira de fazer isso no futuro...
Então o que estou tentando fazer é criar um pacote debian que eu possa instalar com o dpkg usando checkinstall. Desde então, descompactei o arquivo deb para modificá-lo, tentando fazê-lo funcionar corretamente
O problema é que o ffmpeg é dividido em vários pacotes no gerenciador de pacotes e não quero ter que escrever os pacotes 5/6 para substituir cada um deles, se não for necessário. Certifiquei-me de que ele esteja compilado corretamente com tudo o que é necessário para todos esses pacotes.
Tenho tentado usar "Requer" e "Substitui", mas parece que não funciona corretamente. Quando tento instalar o VLC posteriormente, ele pede para instalar todos os do gerenciador de pacotes. Também verifiquei se o número da versão é posterior aos do gerenciador de pacotes.
Aqui está o que está escrito no meu arquivo de controle deb. Pelo que posso ver, tudo isso é reconhecido no gerenciador de pacotes muon.
Package: ffmpeg
Priority: extra
Section: checkinstall
Installed-Size: 172216
Maintainer: root@skund
Architecture: amd64
Version: 8:1.2.1-git-2
Provides: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Replaces: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Description: Package created with checkinstall 1.6.2
E aqui está instalado no gerenciador de pacotes:
Alguém tem alguma idéia de como fazer isso funcionar?
Responder1
Bem, por um lado, Provides:
não funciona com dependências que especificam uma versão. DeManual de Políticas Debian, "Pacotes Virtuais - Fornece":
Se um campo de relacionamento tiver um número de versão anexado, apenas pacotes reais serão considerados [...]. Em outras palavras, se um número de versão for especificado, esta é uma solicitação para ignorar todos os Provides para aquele nome de pacote e considerar apenas pacotes reais.
As dependências de bibliotecas quase sempre são versionadas. Então isso simplesmente não vai funcionar.
Em vez disso, você poderia:
- Baixe o pacote Debian (
apt-get source PACKAGE
) e atualize-o para o ffmpeg mais recente (e, de fato, você pode até enviar os patches necessários para o rastreador de bugs do Debian). Claro que você precisará atualizar os nomes das bibliotecas (aposto que a ABI mudou) e provavelmente reconstruir muitas coisas que dependem do ffmpeg. Parte disso pode exigir alterações na fonte se a API for alterada. - Ou a maneira mais fácil: instale-o no
/usr/local
. Você pode construir um.deb
desses e dar a ele um nome de pacote diferente (por exemplo,local-ffmpeg
). Você pode então instalá-lo junto com o ffmpeg fornecido pelo Debian e não se preocupar com tudo isso. Você também pode usarstow
para instalá-lo em/usr/local
.