web-dev-qa-db-ja.com

フロントエンドを初期化できません:ssh使用時のダイアログ

Rootとして、テスト環境でsshを介して次のコマンドを実行しています。

ssh <remote_srv> "apt-get autoremove"

Sshd_configに「PermitRootLogin without-password」があり、ルートのid_rsa.pubをリモートサーバー上のauthorized_keysファイルに追加しました。

それにもかかわらず、私は次のエラーを受け取ります:

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

私はこれをsshのde manページで調べましたが、疑似用語とttyの説明を思い浮かべることができませんでした。

上記のエラーを説明できる人はいますか?私はそれが欠落しているオプションだと思いますが、どれですか?

どちらのプラットフォームもUbuntu 14.04 LTSです。

50
twan163

apt-get autoremoveが非対話型シェルで実行されているという事実と関係があると思います。 dockerでインストールするときにダイアログの質問に答えることは可能ですか? を参照してください

解決策は、コマンドの前にDEBIAN_FRONTEND=noninteractiveを付けることです。

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
61
Alex

アレックスのソリューションはエラーを抑制し、原因をほぼ正しましたが、質問に答えることはできません(答えを事前にシードしてスクリプトから実行している場合は問題ありませんが、新しいパッケージを試す場合は本当に迷惑です) )。中心的な問題は、sshとdebconfのさまざまなフロントエンドによって行われた仮定間の相互作用です。

Sshから始めましょう。 sshは、リモートコマンドを指定しない場合、リモートエンドでptyが必要であり、リモートを指定しないことを前提としています(これは、このコマンドだけでなく、90%の時間で非常にうまく機能します)。これは、ptyを強制する-tオプション、またはptyを強制しない-Tオプション(または対応する構成ファイルオプション)でオーバーライドできます。さらに、ptyを使用すると、TERM環境変数がコピーされます(詳細については、完成した詳細および公式の懸賞エントリフォームのチェックドキュメントが適用される場合があります)。また、-xオプションはX11転送を無効にし、-Xはそれを有効にします。

Debconf自体には(設計上)対話性の要件はありませんが、さまざまなフロントエンドにはあり、それぞれに異なる要件があります。

最高のフロントエンドはgnomeであると思います(私が動作しなかったフロントエンドもあります)。 gnomeフロントエンド(およびkdeフロントエンド)には、デフォルト以外のライブラリとX11サーバーが必要です。そのため、gnomeフロントエンドを強制するコマンドライン(適切なライブラリがインストールされたら)は次のようになります。

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

または、kdeを好む場合

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

ダイアログフロントエンド(デフォルト)には、TERM変数で指定された最小レベルの機能を備えたptyと端末が必要です(実際には、これはダム以外の完全なterminfo記述を持つものです)。

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

または

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

readlineフロントエンドの要件はそれほど厳しくなく、ダム端末で動作しますが、ptyが必要です。

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

エディターフロントエンドは、エディターに依存する特定の要件を持つエディターに依存します。

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"

非対話型のフロントエンドには要件はありませんが、質問はしません(必要な場合もそうでない場合もあります)。

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"
13
hildred