Tidak dapat menginisialisasi frontend: dialog saat menggunakan ssh

52

Saya menjalankan perintah berikut melalui ssh di lingkungan pengujian, sebagai root:

ssh <remote_srv> "apt-get autoremove"

Dalam sshd_config saya, saya memiliki "PermitRootLogin tanpa-kata sandi" dan saya telah menambahkan id_rsa.pub root ke file otor_keys di server jauh.

Meskipun demikian saya mendapatkan kesalahan berikut:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

Saya telah melihat ini di halaman manual ssh, tetapi tidak bisa membungkus pikiran saya di sekitar penjelasan tentang istilah-istilah palsu dan ttys.

Adakah yang bisa menjelaskan kesalahan di atas? Saya kira itu pilihan yang hilang, tetapi yang mana?

Kedua platform adalah Ubuntu 14.04 LTS.

twan163
sumber

Jawaban:

62

Saya percaya ini ada hubungannya dengan fakta yang apt-get autoremovedijalankan dalam shell non-interaktif. Lihat Apakah mungkin untuk menjawab pertanyaan dialog saat menginstal di bawah buruh pelabuhan?

Solusinya adalah dengan mengawali perintah dengan DEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Alex
sumber
12
Ini terjadi ketika menggunakan apt-get saat memasang buruh pelabuhan, menambahkan awalan, bekerja dengan baik
Neil McGill
Terima kasih atas komentarnya Neil. Saya merasa seperti tersesat, tetapi saya mengalami masalah yang sama ketika menggunakan apt-get saat menginstal docker.
Qcom
13

Solusi Alex benar-benar menekan kesalahan, dan ia hampir benar penyebabnya, tetapi itu tidak memungkinkan Anda untuk menjawab pertanyaan apa pun (yang baik-baik saja ketika Anda telah memperkirakan jawaban dan menjalankan dari skrip, tetapi sangat menjengkelkan ketika Anda mencoba paket baru ). Masalah inti adalah interaksi antara asumsi yang dibuat oleh berbagai front ssh dan debconf.

Mari kita mulai dengan ssh. ssh mengasumsikan bahwa ketika Anda tidak menentukan perintah jarak jauh Anda ingin pty pada ujung jarak jauh dan bahwa Anda menentukan jarak jauh Anda tidak (yang bekerja dengan sangat baik 90% dari waktu, hanya saja tidak satu ini). Ini dapat ditimpa oleh -topsi yang memaksa pty atau -Topsi yang tidak memaksa pty (atau opsi file konfigurasi yang sesuai). Lebih lanjut ketika menggunakan pty TERMvariabel lingkungan disalin (pengecualian mungkin berlaku memeriksa dokumentasi untuk rincian lengkap dan formulir entri undian resmi). Juga perhatikan bahwa -xopsi menonaktifkan penerusan X11 dan -Xmengaktifkannya.

Debconf sendiri tidak memiliki persyaratan interaktivitas (sesuai desain), tetapi berbagai frontend melakukannya, dan masing-masing memiliki persyaratan yang berbeda.

Saya percaya bahwa tampilan terbaik adalah gnome (ada juga ujung depan ked yang saya tidak dapat bekerja). Frontend gnome (dan juga kde) memerlukan pustaka non-default dan server X11, oleh karena itu baris perintah untuk memaksa frontend gnome (setelah pustaka yang sesuai diinstal) akan menjadi

ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"

atau jika Anda lebih suka KDE

ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"

Frontend dialog (default) memerlukan pty dan terminal dengan tingkat fungsionalitas minimum yang ditentukan dalam variabel TERM (dalam praktiknya ini adalah apa saja dengan deskripsi terminfo lengkap kecuali bodoh).

ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"

atau

ssh -t <remote_srv> "apt-get autoremove"

frontend readline memiliki persyaratan yang kurang ketat dan akan bekerja dengan terminal bodoh, tetapi akan membutuhkan pty.

ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"

Frontend editor tergantung pada editor yang akan memiliki persyaratan khusus tergantung pada editor.

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"

Frontend noninteraktif tidak memiliki persyaratan tetapi tidak mengajukan pertanyaan (yang mungkin atau mungkin tidak seperti yang Anda inginkan).

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
Hildred
sumber
"frontend readline memiliki persyaratan yang kurang ketat dan akan bekerja dengan terminal bodoh, tetapi akan membutuhkan pty." Bisakah Anda menjelaskan bagaimana saya bisa menetapkan pty?
linuxatico
@linuxatico, ssh -tuntuk detail lebih lanjut dan opsi lain lihat halaman manual ssh. Baca kembali paragraf kedua dari jawaban ini.
Hildred