Como faço para o apt-get ignorar algumas dependências? Por exemplo, eu queria instalar o mailx para poder usá-lo para enviar e-mail de scripts cron/ferramentas de geração de relatórios. No entanto, instalar o mailx também instala o exim4 e um monte de dependências (eu já tenho o Postfix instalado) eu realmente não preciso e acho que o mailx também pode viver sem.
Como ignoro algumas dependências, mas ainda uso o apt-get, pois é uma boa ferramenta?
Solução simples e fácil: basta especificar os pacotes indesejados com um extra
-
após cada um deles.Exemplo sem o
-
interruptor:Exemplo usando o switch para evitar a instalação
exim4-base
do . Observe-
no final:Como você pode ver,
apt-get
não tenta mais instalar oexim4-base
pacote, e não tenta instalar suas várias dependências (exim4-config
etc).E se você estava errado e precisava dessa
exim4-base
dependência, você podeapt-get install
fazer isso mais tarde!Você pode alterar as dependências de um pacote deb assim:
ar x golden-linux.deb
(irá criar três arquivos: debian-binary control.tar.gz data.tar.gz)tar xzf control.tar.gz
(irá criar: postinst postrm preinst prerm md5sums control)control
(use um editor de texto)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
(pedido importante! Veja [Nota] )[Nota]: o dpkg não seria capaz de ler os metadados de um pacote rapidamente se tivesse que procurar onde a seção de dados terminava!
Depois de instalar o pacote com a
--ignore-depends
opção, vá e edite o/var/lib/dpkg/status
arquivo e remova qualquer dependência que você achar que não seja necessária. Basta ter muito cuidado. Para pedir um dep. ser exigido, é mais do que provável que seja exigidoVocê pode tentar a
--nodeps
bandeira comapt-get
.Ou baixe o pacote e instale-o usando
dpkg
a opção--ignore-depends
.Por exemplo, se você deseja instalar o pacote
foo
sem dependênciabar
:Como você instalou o postfix a partir da fonte, você precisa instalar um pacote "fictício" que satisfaça a dependência mail-transport-agent do mailx (ou bsd-mailx). O pacote "equivs" no debian existe para criar um pacote fictício que você pode instalar para dizer ao dpkg "esta dependência está satisfeita"
A razão pela qual dizer ao dpkg para simplesmente ignorar dependências não é uma boa solução, é que você está apenas dizendo ao dpkg/apt para ignorá-lo para uma única transação, você não pode dizer a ele para ignorar dependências para sempre. Toda vez que você usa o apt ele verifica as dependências em todos os pacotes
Uma maneira alternativa de ajustar manualmente as dependências é:
Você pode baixar o pacote com o apt-get e depois instalá-lo com o dpkg, listando manualmente a dependência que você gostaria que fosse ignorada.
Por exemplo, se eu quiser baixar mypackage, mas depende da libperl5.14 e não quero instalar a libperl5.14, pois tenho uma versão diferente, posso ignorar essa dependência da seguinte maneira:
Eu tenho procurado essa opção em um servidor Ubuntu 12.04 executando o Xen. Em meus domínios eu uso o -virtual kernel, e o apt persistentemente tentou instalar o grub com cada atualização de pacote do kernel. O Grub, no entanto, não é necessário dentro do domU ao usar p[yv]grub.
Eu estive procurando a opção -nodeps para apt-get também, mas não funcionou, então acabei desinstalando/purgando o grub* após cada atualização do kernel.
Afinal, realmente ler uma página de manual ajuda às vezes - acontece que uma opção apt-get semelhante em 12.04 parece ser --no-install-recommends, que realmente funciona neste caso, já que o grub está listado como 'recomendado' no informações do pacote (eu acho que não é uma dependência "real"?).
Estou adicionando isso aqui porque no meu caso resolveu um problema semelhante, e a dica para '--no-install-recommends' ainda não foi mencionada.
No meu sistema debian, o bsd-mailx realmente depende
default-mta | mail-transport-agent
(você pode verificar do que um pacote dependeapt-cache show <pkg>
para qualquer coisa no arquivo oudpkg -s <pkg>
para pacotes instalados.Pode ser que seu pacote postfix não tenha,
Provides: mail-transport-agent
então o apt não percebe que você tem um MTA instalado. Valeria a pena registrar um bug para isso se for um pacote oficial.Para os propósitos disso, você poderia apenas instalar o nail que eu não acho que tenha essas dependências?