ignore-depends opções passadas do apt-get não se comportando como esperado

0

Um pacote que está sendo instalado com o apt-get tem uma dependência no java que eu quero ignorar.

$ apt-cache depends some-package
some-package
  PreDepends: <java7-runtime-headless>
    default-jre-headless
    openjdk-7-jre-headless
  PreDepends: unzip
  ...

$ sudo apt-get install some-package -o Dpkg::Options::='--ignore-depends=default-jre-headless,openjdk-7-jre-headless,java7-runtime-headless'

The following extra packages will be installed:
ca-certificates-java fontconfig-config fonts-dejavu-core java-common
libasyncns0 libcups2 libflac8 libfontconfig1 libjpeg-turbo8 libjpeg8
liblcms2-2 libnspr4 libnss3 libnss3-nssdb libogg0 libpulse0 libsctp1
libsndfile1 libvorbis0a libvorbisenc2 lksctp-tools openjdk-7-jre-headless
tzdata-java

Eu fui com uma abordagem shotgun no parâmetro ignore-depends para tentar abranger vários pacotes, mas openjdk-7-jre-headless parece ser sempre extraído. Também tentei adicionar o PreDepends para excluir.

Como posso evitar que o openjdk seja instalado?

editar parece que a instalação está sendo acionada pelo predepends :

De Qual é a diferença entre dependências e pré-depende

Pre-Depends

This field is like Depends, except that it also forces dpkg to 
complete installation of the packages named before even starting the
installation of the package which declares the pre-dependency

link discute uma maneira de contornar isso:

Você pode alterar as dependências de um pacote deb assim:

  1. Descompacte deb: ar x golden-linux.deb (criará, por exemplo, três arquivos: debian-binary control.tar.gz data.tar.gz)
  2. Descompactar arquivo de controle: tar xzf control.tar.gz (criará: postinst postrm preinst prerm controle md5sums)
  3. Corrigir dependências no controle (use um editor de texto)
  4. Repack control.tar.gz: tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz
  5. Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz

Então, estou assumindo que isso é algo que eu precisaria fazer para que isso funcionasse ...

    
por Brett 23.05.2016 / 17:27

1 resposta

0

A resposta curta, de acordo com o comentário de David-Foerster - It's not possible to install a package without its pre-dependencies because they're required to install the package. In contrast, regular dependencies are required to use the package

Mais informações:

De Dependências binárias nos pacotes Debian

Pre-Depends

This field is like Depends, except that it also forces dpkg to 
complete installation of the packages named before even starting the
installation of the package which declares the pre-dependency

Esta solução alternativa discute 1 abordagem modificando Pre-Depends de um pacote deb:

  1. Descompacte deb: ar x some-package-ver.deb (criará arquivos, por exemplo: debian-binary control.tar.gz data.tar.gz). Você pode pegar o arquivo com apt-get download some-package
  2. Descompactar o arquivo de controle: FILES=$(tar xzvf control.tar.gz | egrep -v '^./$) (criará: postinst posttrm preinst prerm control etc, mas excluirá ./ que pode estar listado em alguns arquivos)
  3. Corrigir dependências no controle (por exemplo, excluir Pre-Depends line - sed -r -i '/^Pre-Depends:.+/d control )
  4. Repack control.tar.gz: tar zcf control.tar.gz $FILES
  5. Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
  6. Instale sem Pre-Depends : dpkg -i newpackage.deb .
  7. Se houver dependências regulares que você queira resolver do pacote, você poderá resolvê-las e instalá-las depois disso usando o apt-get: apt-get install -f , se tiver fornecido opções para pular estas opções.

Descobri que a transferência da dependência do Java de Pre-Depends para Depends me permitiu instalar o pacote com ignore-depends usando dpkg, mas se eu executasse um apt-get install depois disso, as dependências ainda seriam resolvidas e instaladas numa fase posterior.

    
por Brett 25.05.2016 / 09:22