Por que o `sudo apt-get install XXXX` às vezes solicita confirmação, outros não?

29

Apenas por curiosidade, às vezes durante a instalação do software pelo apt-get install software_nameterminal solicita uma confirmação "digite Sim ou Não", mas não sempre.

Não quero dizer o prompt da senha do sudo, mas a mensagem "Será baixado e configrado XXX Kb, continua?" (ou algo semelhante)

Por quê?

Strae
fonte
2
Essencialmente, se pacotes diferentes dos mencionados nos argumentos precisarem ser instalados, será solicitado.
19715 muru

Respostas:

24

Normalmente, ele pergunta se há pacotes sugeridos ou recomendados que dependem do software que você está tentando instalar. Também pode depender do tamanho do programa ou da segurança do repositório do qual você está baixando.

Hellola
fonte
Eu pensei que as mesmas motivações .. mas eu quero estar seguro da resposta
Strae
Sim, esta resposta está correta. Acrescentarei que você pode (útil se estiver tentando automatizar alguma coisa) usar a -ysinalização se não desejar ser avisado.
Umang
@Umang: Obrigado pela dica, mas eu não necessidade de automatizar nada no momento, foi apenas uma curiosidade;)
Strae
12

apt-get install new-package solicitará confirmação apenas se também instalar dependências do pacote especificado.

Se apenas o pacote que você especificou for instalado sem nenhum material adicional, ele permanecerá quieto, pois você já "confirmou" que deseja ter esse tipo digitando-o.
Porém, se houver alguns pacotes de dependência, você pode mudar de idéia e querer interromper a instalação (por exemplo, porque um deles já causou problemas antes), por isso solicita o y / n.

Agora, se você quiser ver o que ele fará, poderá executar uma simulação a seco / do comando install. Você define essa opção adicionando um -saos argumentos. Exemplo: Instalação do Pacote Únicosudoku

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku -s
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])
Conf sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])

Isso mostra o que acontecerá, mas não o tamanho dos downloads, como faria o prompt de confirmação.

Portanto, outra opção pode ser usada --print-uris,. O mesmo exemplo:

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku --print-uris
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.4 kB of archives.
After this operation, 106 kB of additional disk space will be used.
'http://ftp.uni-stuttgart.de/ubuntu/pool/universe/s/sudoku/sudoku_1.0.1-5_i386.deb' sudoku_1.0.1-5_i386.deb 28426 MD5Sum:ecd0e3cd4fc1e4e4edfe6c59d1c54847

O --print-urisswitch não apenas bloqueia a instalação real, mas mostra os tamanhos baixados e instalados e informações adicionais sobre o pacote (endereço da Web e MD5Sum).
Atenção: Não use --print-uris e -s junto. Vai parecer -sapenas.
Observe também que você deve adicionar a -yopção (= assumir sim a todas as perguntas) se desejar processar a saída, porque esta solicitará sua confirmação seguindo as mesmas regras da instalação normal sem as opções.


Agora, se você deseja filtrar as informações de tamanho de arquivo baixadas e instaladas apenas sem precisar ler todas as outras coisas, use o seguinte comando para conseguir isso (obrigado a @terdon pela assistência). Novamente com o exemplo sudoku:

bytecommander@AlkaliMetal:~$ LANG=C sudo apt-get -y --print-uris install sudoku | grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? '
28.4 kB
106 kB

Você vê que a primeira linha da saída é o tamanho do download e a segunda linha descreve o espaço necessário para a instalação.

Como esse comando não é fácil de digitar e ainda mais difícil de lembrar, copie o seguinte em um arquivo de script, por exemplo, chamado apt-get-install-checker.sh:

#! /bin/bash

LANG=C sudo apt-get install -y --print-uris $* |
grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? ' |
sed '1,1s/^/Download size: /;2,2s/^/Installed size: /'

Não esqueça chmod +x apt-install-checker.shantes de executá-lo!

Exemplo de saída:

bytecommander@AlkaliMetal:~/bin$ ./apt-install-checker.sh sudoku
Download size: 28.4 kB 
Installed size: 106 kB 

Script ainda em desenvolvimento! Recursos planejados: deve perguntar se você deseja executar a instalação e, em seguida, continuar e executá-la. Talvez alguns outros gadgets legais que me vêm à mente amanhã ...

Byte Commander
fonte
Mas existe uma maneira de fazê-lo perguntar sempre? Mesmo alterando o código real do programa.
@Toroidal alterar o código do programa é um pouco fora do escopo aqui - você pode ter que cavar aptou apt-get's manpages para descobrir como alterar as preferências, como é possível já existe uma configuração que você pode mudar para forçá-lo.
Thomas Ward
9

Pelo que entendi, o apt-get pede confirmação apenas quando houver dependências adicionais a serem instaladas. Não há como forçar a confirmação por padrão para todos os pacotes.

No entanto, é possível forçar a confirmação de qualquer comando de instalação ao usar o aptitude.

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude
komputes
fonte
Ou, para aptitudesolicitar uma execução específica, use aptitude -P.
Eliah Kagan