Como excluo pacotes específicos da instalação com o apt-get?

12

Gostaria de excluir pacotes específicos da instalação com apt-get, ou seja, instalar um metapacote sem a lista de pacotes específicos, preferencialmente com uma chamada de apt-get.

Por exemplo, na linha de comando do Ubuntu 14.04 LTS, estou instalando o ambiente de desktop MATE. No 14.04 LTS MATE não é um sabor oficial, então estou adicionando um PPA:

sudo apt-get install software-properties-common # need them for 'apt-add-repository'
sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
sudo apt-get update

depois instalando:

sudo apt-get install xorg mate-core --no-install-recommends

Mesmo sem os extras recomendados, mate-coreinstala 3 emuladores de terminal: xterm, uxterme mate-terminal , o último falta fontes apropriadas enquanto instalado nesta configuração mínima.

Suponha que eu decida que 3 programas de terminal seriam muitos e gostaria de instalar xorge mate-core sem xterm e mate-terminal. eu poderia fazer

sudo apt-get install xorg mate-core --no-install-recommends
sudo apt-get purge xterm mate-terminal

mas é possível fazer isso de uma só vez? Existe alguma sintaxe como

sudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov
fonte
Tem certeza de que pode remover xterme mate-terminal? No 15.04, mate-terminalé uma dependência difícil de mate-desktop-environment-core, que é uma dependência difícil mate-core, e suponho que o PPA mate-terminalnão forneça x-terminal-emulator(o que o pacote no 15.04 fornece).
muru
Talvez você esteja certo , a menos que um asterisco ao lado dos nomes dos pacotes signifique algo especial aqui. Além disso, surpreendentemente pouco espaço será liberado. De qualquer forma, a minha pergunta é sobre a remoção de tudo o que pode ser removido, por exemplo, XTerme talvez UXTerm(não tenho a certeza que o nome do pacote para o último é)
Nickolai Leschov
1
É isso que você está procurando? askubuntu.com/questions/75895/…
Seth
@Seth Não é bem assim: Eu gostaria se haveria alguma sintaxe comosudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov
Se você usar aptitude(ou algum gerenciador gráfico de pacotes), poderá (des) selecionar quais pacotes instalar e, se resultar em uma dependência quebrada, será dada uma explicação (geralmente).
Saiarcot895

Respostas:

7

Então, companheiro-core depende em mate-desktop-environment-coreque por sua vez depende em mate-terminal. Uma dependência não pode ser quebrada facilmente. Nem apt-getnem aptitudesuporta um --withoutou --excludeopção e "exploração" dos pacotes não ajuda:

$ echo "retenção do terminal do parceiro" | sudo dpkg --set-selections
$ sudo apt-get install mate-core
[...]
Não foi possível instalar alguns pacotes ...
Os seguintes pacotes têm dependências não atendidas:

Claro, pode-se usar dpkg --force-dependspara instalar um pacote, mas talvez não seja isso que você deseja.

Uma possibilidade seria preencher a Depends:bandeira com um pacote fictício:

$ sudo apt-get equivs de instalação
$ equivs-control mate-terminal
$ vi-terminal-mate
Seção: misc
Prioridade: opcional
Versão-padrões: 3.9.2
Pacote: mate-terminal
Versão: 1.8.0
Descrição: Pacote fictício para terminal mate
: x

$ equivs-build mate-terminal
$ sudo dpkg -i mate-terminal_1.8.0_all.deb

Agora mate-coredeve poder instalar sem mate-terminal. Repita o mesmo para outros pacotes a serem excluídos.

É certo que este é um esforço e uma --withoutopção seria legal. Talvez um bug da lista de desejos possa ser aberto para fornecer essa funcionalidade no futuro, mas, de alguma forma, duvido que isso seja implementado.

No entanto, uma opção mais realista seria solicitar ao proprietário do PPA que forneça outro meta pacote para o MATE com Dependspacotes menores .

ckujau
fonte
4

Se você usar aptitudeou um gerenciador de pacotes gráficos (Synaptic, etc.), poderá desmarcar quais pacotes devem ser instalados , desde que não causem problemas de dependência.

No caso de aptitude, antes de instalar um pacote (na visualização gráfica), ele mostrará por que um pacote dependente está sendo instalado. No meu caso, eu uso o KDE e, portanto, não tenho nenhum pacote MATE. Se eu pedir para instalar mate-core, obtenho o seguinte:

insira a descrição da imagem aqui

Observe que mate-coreestá marcado como sendo instalado manualmente e muitos outros pacotes estão sendo instalados. Para o mate-terminalpacote, na parte inferior, diz: " mate-desktop-environment-core[universo] depende de mate-terminal(> = 1.0.0)". Indo para a entrada para mate-desktop-environment-core,

insira a descrição da imagem aqui

" mate-core[universo] depende de mate-desktop-environment-core(> = 1.8.0 + 9)". É por isso que mate-terminalestá sendo instalado.

Se, em vez disso, um pacote recomendado estiver sendo instalado (em vez de algo dependente de outro pacote), aptitudevocê será avisado e você poderá dizer-lhe para não instalar esse pacote sem nenhuma dependência quebrada. Por exemplo:

insira a descrição da imagem aqui

saiarcot895
fonte
2

Outro método

Baixe o pacote principal que depende do outro. Extraia o pacote, remova as dependências indesejadas e reembale-o. Agora abra o novo pacote com o instalador do pacote gdebi . Ele instalará novas dependências para você.

  • A lista de representações pode ser encontrada em DEBIAN / control -> depende
  • Para obter ajuda sobre como substituir deb, veja minha resposta sobre como criar um PPA
totti
fonte
0

Há uma aptsintaxe especial para cenários como este: anexar um hífen (sinal de menos) a um pacote irá remover / não instalá-lo, portanto, o mais próximo de você sudo apt-get install xorg mate-core --without xterm mate-terminal é sudo apt-get install xorg mate-core xterm- mate-terminal- (localizado em /ubuntu//a/1011439/182923 )

Não ajudará neste caso, pois você encontrará

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

mas parece ser a resposta para sua pergunta específica. Então, para referência, este post cruzado.

eMPee584
fonte