Rozwiązanie Alexa eliminuje błędy i prawie ma właściwą przyczynę, ale nie pozwala ci odpowiedzieć na żadne pytania (co jest w porządku, gdy uprzedziłeś odpowiedzi i uruchamiasz się ze skryptu, ale naprawdę denerwujące, gdy próbujesz nowych pakietów ). Kluczowym zagadnieniem jest interakcja między założeniami poczynionymi przez ssh i różne nakładki debconf.
Zacznijmy od ssh. ssh zakłada, że jeśli nie podasz komendy zdalnej, potrzebujesz pty na zdalnym końcu i że podasz komendę, której nie robisz (która działa zadziwiająco dobrze przez 90% czasu, tylko nie ta). Można to zastąpić -t
opcją, która wymusza pty lub -T
opcją, która nie wymusza pty (lub odpowiednimi opcjami pliku konfiguracyjnego). Ponadto, przy użyciu pty, TERM
zmienna środowiskowa jest kopiowana (wyjątki mogą mieć zastosowanie do sprawdzenia dokumentacji w celu uzupełnienia szczegółów i oficjalnego formularza wejścia do loterii). Warto również zauważyć, że -x
opcja wyłącza przekazywanie X11 i -X
włącza go.
Sam Debconf nie ma wymagań dotyczących interaktywności (zgodnie z projektem), ale różne interfejsy mają, a każdy ma inne wymagania.
Uważam, że najlepiej wyglądającym frontendem jest gnome (jest też fronted ked, którego nie uruchomiłem). Interfejs gnome (a także kde) wymaga pewnych domyślnych bibliotek i serwera X11, dlatego linia poleceń do wymuszenia frontonu gnome (po zainstalowaniu odpowiednich bibliotek) byłaby
ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"
lub jeśli wolisz kde
ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"
Frontend okna dialogowego (domyślny) wymaga pty i terminala o minimalnym poziomie funkcjonalności określonym w zmiennej TERM (w praktyce jest to wszystko z pełnym opisem terminfo oprócz głupiego).
ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"
lub
ssh -t <remote_srv> "apt-get autoremove"
frontend readline ma mniej rygorystyczne wymagania i będzie działał z głupimi terminalami, ale będzie wymagał pty.
ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"
Nakładka edytora zależy od edytora, który miałby określone wymagania w zależności od edytora.
ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"
Nieinteraktywny interfejs użytkownika nie ma żadnych wymagań, ale nie zadaje żadnych pytań (które mogą, ale nie muszą być tym, czego chcesz).
ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"