Dlaczego `sudo apt-get install XXXX` czasami żąda potwierdzenia, a inne nie?

29

Ze względu na ciekawość, czasami podczas instalacji oprogramowania apt-get install software_nameterminal wyświetla monit o potwierdzenie „wpisz Tak lub Nie”, ale nie zawsze.

Nie mam na myśli pytania o hasło sudo, ale komunikat „Zostanie pobrany i skonfigurowany XXX Kb, kontynuować?” (lub coś podobnego)

Czemu?

Strae
źródło
2
Zasadniczo, jeśli trzeba zainstalować pakiety inne niż wymienione w argumentach, zapyta.
muru

Odpowiedzi:

24

Zazwyczaj zapyta Cię, czy istnieją sugerowane lub zalecane pakiety, które zależą od oprogramowania, które próbujesz zainstalować. Może to również zależeć od wielkości programu lub bezpieczeństwa repozytorium, z którego pobierasz.

Hellola
źródło
myślałem o tych samych motywacjach .. ale chcę mieć pewność, że odpowiedź będzie taka
Strae
Tak, ta odpowiedź jest poprawna. Dodam, że możesz (przydatne, jeśli próbujesz coś zautomatyzować) użyć -yflagi, jeśli nie chcesz otrzymywać monitu.
Umang
@Umang: dzięki za podpowiedź, ale w tej chwili nie muszę niczego automatyzować, to była tylko ciekawość;)
Strae
12

apt-get install new-package poprosi o potwierdzenie tylko wtedy, gdy instaluje również zależności danego pakietu.

Jeśli tylko określony pakiet zostanie zainstalowany bez żadnych dodatkowych elementów, pozostanie cichy, ponieważ już „potwierdziłeś”, że chcesz go mieć, wpisując go.
Ale jeśli są jakieś pakiety zależności, możesz zmienić zdanie i chcieć zatrzymać instalację (np. Ponieważ jeden z nich powodował wcześniej problemy), więc wyświetli się monit o tak / nie.

Teraz, jeśli chcesz zobaczyć, co się stanie, możesz wykonać próbę uruchomienia / symulacji polecenia instalacji. Ustawiasz ten przełącznik, dodając an -sdo argumentów. Przykład: instalacja pojedynczego pakietusudoku

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])

To pokazuje, co się stanie, ale nie to, jak duże będą pobrane pliki, tak jak w przypadku potwierdzenia.

Dlatego kolejny przełącznik może być używany --print-uris. Ten sam przykład:

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

--print-urisPrzełącznik nie tylko zablokować rzeczywisty zainstalować, ale pokazać pobrane i zainstalowane rozmiarów i dodatkowe informacje na temat pakietu (adres internetowy i md5sum).
Uwaga: Nie używaj --print-uris i -s razem. Będzie to wyglądało -stylko.
Zauważ też, że powinieneś dodać -yprzełącznik (= załóż tak na każde pytanie), jeśli chcesz przetworzyć dane wyjściowe, ponieważ to poprosi cię o potwierdzenie zgodnie z tymi samymi zasadami, co normalna instalacja bez przełączników.


Teraz, jeśli chcesz odfiltrować informacje o pobranych i zainstalowanych rozmiarach plików bez konieczności czytania wszystkich innych rzeczy, możesz użyć następującego polecenia, aby to osiągnąć (dzięki @terdon za pomoc). Ponownie z przykładem 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

Widzisz, że pierwszy wiersz wyniku to rozmiar pliku do pobrania, a drugi wiersz opisuje miejsce potrzebne do instalacji.

Ponieważ to polecenie nie jest łatwe do wpisania, a nawet trudniejsze do zapamiętania, skopiuj poniższe do pliku skryptu, np. O nazwie 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: /'

Nie zapomnij, chmod +x apt-install-checker.shzanim go wykonasz!

Przykładowe dane wyjściowe:

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

Skrypt wciąż w fazie rozwoju! Planowane funkcje: powinien zapytać, czy chcesz przeprowadzić instalację, a następnie kontynuować i uruchomić. Może jakieś inne fajne gadżety, które pojawią się jutro ...

Bajt Dowódca
źródło
Ale czy istnieje sposób, aby pytać cię za każdym razem? Nawet przez zmianę faktycznego kodu programu.
@Toroidal zmiana kodu programu jest tutaj nieco poza zakresem - być może będziesz musiał przekopać się do stron podręcznika aptlub apt-get, aby dowiedzieć się, jak zmienić preferencje, ponieważ możliwe jest już ustawienie, które możesz zmienić, aby je wymusić.
Thomas Ward
9

Z tego, co rozumiem, apt-get prosi o potwierdzenie tylko wtedy, gdy istnieją dodatkowe zależności do zainstalowania. Nie ma możliwości domyślnego wymuszenia potwierdzenia dla wszystkich pakietów.

Możliwe jest jednak wymuszenie potwierdzenia na dowolnej komendzie instalacyjnej podczas korzystania z aptitude.

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude
komputy
źródło
Lub, aby uzyskać aptitudemonit dotyczący określonego uruchomienia, użyj aptitude -P.
Eliah Kagan