Ignorando dependências específicas não atendidas com o aptitude?

1

Esta é a minha situação: Eu instalei um programa chamado ipe "forçably" através de um pacote deb; A razão para isso é que ipe depende de texlive-latex-base , no entanto, eu já mantive uma instalação separada de latex via tlmgr . Não há nenhum problema com esse tipo de instalação de ipe , no entanto, desde que eu me lembre de executá-lo a partir de um terminal, o que me convém bem.

O problema é que essa dependência quebrada agora não me permite instalar pacotes que são completamente não relacionados - neste caso, dropbox:

$ sudo apt-get install dropbox
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 ipe : Depends: texlive-latex-base but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Agora, se eu tentar -f install , isso tentará corrigir a ipe install, que é o que eu não quero.

Acontece que aptitude parece oferecer uma maneira de ignorar / ignorar essa dependência:

$ sudo aptitude install dropbox
The following NEW packages will be installed:
  dropbox 
The following partially installed packages will be configured:
  ipe{b} 
0 packages upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 93,0 kB of archives. After unpacking 410 kB will be used.
The following packages have unmet dependencies:
  ipe: Depends: texlive-latex-base but it is not going to be installed.
The following actions will resolve these dependencies:

     Remove the following packages:
1)     ipe                         



Accept this solution? [Y/n/q/?] 1
Action "1": Removing ipe

Package: ipe
State: unpacked
Automatically installed: no
Version: 7.0.10-2
Priority: optional
...

This action was selected because ipe depends upon texlive-latex-base.

Enter "r 1" to prevent this action from appearing in new solutions.
Enter "a 1" to require that new solutions include this action if possible.

Accept this solution? [Y/n/q/?] r 1
Rejecting the removal of ipe
The following actions will resolve these dependencies:

     Remove the following packages:
1) R   ipe                         



Accept this solution? [Y/n/q/?] y
The following NEW packages will be installed:
  dropbox 
The following packages will be REMOVED:
  ipe{a} 
0 packages upgraded, 1 newly installed, 1 to remove and 1 not upgraded.
Need to get 93,0 kB of archives. After unpacking 5.034 kB will be freed.
Do you want to continue? [Y/n/?] n
Abort.

O mais estranho é: mesmo se eu especificar r 1 - e o programa realmente confirma que com " Rejecting the removal of ipe " - eu ainda recebo " The following packages will be REMOVED " no final, que é Eu o que eu especificamente faço não quero fazer? (Btw, eu também tentei a 1 , e os resultados finais são completamente os mesmos, "... será REMOVIDO", embora essa seja a ação que eu esperaria para essa escolha).

Onde estou indo errado? Eu estou entendendo mal o que eles querem dizer com "novas soluções"? E existe uma maneira de o sistema apt / aptitude saber, que eu prefiro ignorar as dependências não satisfeitas de (neste caso) ipe ?

    
por sdaau 21.01.2014 / 13:29

1 resposta

1

EDIT: Ok, como mencionado abaixo, a coisa "rejeitando a remoção ..." em aptitude não funciona - foi isso que funcionou para mim, embora ...

Enquanto procura, digamos, Package: ipe , pode-se acessar arquivos como:

$ grep -r 'Package: ipe' /var/lib/apt/lists/
...
/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_universe_binary-i386_Packages:Package: ipe
...
/var/lib/apt/lists/old-releases.ubuntu.com_ubuntu_dists_natty_universe_binary-i386_Packages:Package: ipe
...

... no entanto, isso não está certo - aparentemente, as informações de tempo de execução para apt-get etc. são armazenadas em /var/lib/dpkg/status (via Como faço para corrigir um" problema com MergeList "ou" arquivo de status não pôde ser analisado "erro ao tentar fazer uma atualização? ).

Então, eu abri o arquivo via sudo nano /var/lib/dpkg/status , procurei "Package: ipe" e tentei comentar a porção texlive-latex-base de "Depends:" - primeiro colocando-a em uma linha separada, comentando com um sinal de número / hash # . Observe que isso não funciona - primeiro você obterá erros como:

dpkg: error: parsing file '/var/lib/dpkg/status' near line 8140 package 'ipe':
 field name '#,' must be followed by colon
E: Sub-process /usr/bin/dpkg returned an error code (2)

... então, se você tentar adicionar esses dois pontos, como em #: , você verá:

dpkg: error: parsing file '/var/lib/dpkg/status' near line 8141 package 'ipe':
 user-defined field name '#' too short
E: Sub-process /usr/bin/dpkg returned an error code (2)

Aparentemente, esses arquivos não usam comentários; e eles parecem estar documentados no Manual de Normas Debian - Arquivos de controle e seus campos . Então eu encontrei:

# 353040 - [DPKG-DEB] não seja tão barulhento sobre campos definidos pelo usuário em DEBIAN / control - Registros do relatório de erros do Debian

  

O caminho certo para incluir um campo no .deb é usar   campos chamados "XB - *".

... então, basicamente, em vez de usar um caractere de comentário para "comentar" - eu usei um campo definido pelo usuário, que eu chamei arbitrariamente de XB-Ignore: ; então essa porção de /var/lib/dpkg/status acabou parecendo assim:

Package: ipe
...
Depends: libc6 (>= 2.4), libcairo2 (>= 1.2.4), libgcc1 (>= 1:4.1.1), libipe7.0.10, liblua5.1-0, libqtcore4 (>= 4:4.6.$
XB-Ignore: , texlive-latex-base, gsfonts
...

Com essa alteração salva, consegui executar a instalação usando apt-get diretamente, sem problemas:

$ sudo apt-get install dropbox
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  python-gpgme
The following NEW packages will be installed:
  dropbox
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
1 not fully installed or removed.
Need to get 0 B/93,0 kB of archives.
After this operation, 410 kB of additional disk space will be used.
Selecting previously deselected package dropbox.
...
Setting up dropbox (1.6.1) ...
Processing triggers for menu ...

Eu apenas observo que /var/lib/dpkg/status não é um arquivo persistente - na verdade, logo após o apt-get install , se você verificar o arquivo novamente, Depends: e XB-Ignore: não estarão mais nas linhas vizinhas ( como eram originalmente, como mostrado no trecho acima)!

Enquanto a questão sobre ignorar a dependência não satisfeita ainda está aberta indicada - acontece que eu fiz interpreto mal essas "novas soluções": são as escolhas que você é oferecido por aptitude se você responder "não" ao "Aceitar esta solução?" pergunta:

...
The following packages have unmet dependencies:
  ipe: Depends: texlive-latex-base but it is not going to be installed.
The following actions will resolve these dependencies:

     Remove the following packages:
1)     ipe                         


Accept this solution? [Y/n/q/?] r 1
Rejecting the removal of ipe
The following actions will resolve these dependencies:

     Remove the following packages:
1) R   ipe                         


Accept this solution? [Y/n/q/?] n                      # <==== here not accepting above solution
The following actions will resolve these dependencies: # <==== new solution offered here:

      Install the following packages:           
1)      lmodern [2.004.1-3 (natty)]             
2)      luatex [0.65.0-1ubuntu3 (natty)]        
3)      tex-common [2.09 (natty)]               
4)      texlive-base [2009-11 (natty)]          
5)      texlive-binaries [2009-8ubuntu2 (natty)]
6)      texlive-common [2009-11 (natty)]        
7)      texlive-doc-base [2009-2 (natty)]       
8)      texlive-latex-base [2009-11 (natty)]    
9)      texlive-latex-base-doc [2009-11 (natty)]
10)     texlive-luatex [2009-11 (natty)]        

Accept this solution? [Y/n/q/?] r 1
Rejecting the installation of lmodern version 2.004.1-3 (natty)
The following actions will resolve these dependencies:

      Install the following packages:           
1)  R   lmodern [2.004.1-3 (natty)]             
2)      luatex [0.65.0-1ubuntu3 (natty)]        
...

Accept this solution? [Y/n/q/?] r 10
Rejecting the installation of texlive-luatex version 2009-11 (natty)
The following actions will resolve these dependencies:

      Install the following packages:           
1)  R   lmodern [2.004.1-3 (natty)]             
2)  R   luatex [0.65.0-1ubuntu3 (natty)]        
3)  R   tex-common [2.09 (natty)]               
4)  R   texlive-base [2009-11 (natty)]          
5)  R   texlive-binaries [2009-8ubuntu2 (natty)]
6)  R   texlive-common [2009-11 (natty)]        
7)  R   texlive-doc-base [2009-2 (natty)]       
8)  R   texlive-latex-base [2009-11 (natty)]    
9)  R   texlive-latex-base-doc [2009-11 (natty)]
10) R   texlive-luatex [2009-11 (natty)]        


Accept this solution? [Y/n/q/?] n
*** No more solutions available ***

The following actions will resolve these dependencies:

      Install the following packages:           
1)  R   lmodern [2.004.1-3 (natty)]             
2)  R   luatex [0.65.0-1ubuntu3 (natty)]        
3)  R   tex-common [2.09 (natty)]               
4)  R   texlive-base [2009-11 (natty)]          
5)  R   texlive-binaries [2009-8ubuntu2 (natty)]
6)  R   texlive-common [2009-11 (natty)]        
7)  R   texlive-doc-base [2009-2 (natty)]       
8)  R   texlive-latex-base [2009-11 (natty)]    
9)  R   texlive-latex-base-doc [2009-11 (natty)]
10) R   texlive-luatex [2009-11 (natty)]        


Accept this solution? [Y/n/q/?] y
The following NEW packages will be installed:
  dropbox lmodern{a} luatex{a} tex-common{a} texlive-base{a} texlive-binaries{a} texlive-common{a} 
  texlive-doc-base{a} texlive-latex-base{a} texlive-latex-base-doc{a} texlive-luatex{a} 
The following partially installed packages will be configured:
  ipe 
0 packages upgraded, 11 newly installed, 0 to remove and 1 not upgraded.
Need to get 87,4 MB of archives. After unpacking 181 MB will be used.
Do you want to continue? [Y/n/?] n
Abort.

Então, sim - se eu continuar rejeitando todas as soluções, no final eu vou pegar "*** Sem mais soluções disponíveis ***", e aptitude pode ir com essas soluções, ou abortar - mas infelizmente não pode ignorá-los com esta técnica ...

    
por sdaau 21.01.2014 / 13:47