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


52

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のマニュアルページで調べましたが、疑似用語とttyについての説明を心に留めることができませんでした。

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

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

回答:


62

apt-get autoremove非対話型シェルで実行されているという事実と関係があると思います。参照は、それがドッキングウィンドウの下にインストールする際に、ダイアログの質問に答えるためにpossibeですか?

解決策は、コマンドの前にDEBIAN_FRONTEND=noninteractive

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

12
これは、Dockerのインストール中にapt-getを使用してプレフィックスを追加するとうまく機能する場合に発生します
ニールマクギル

コメントニールをありがとう。道に迷ったように感じましたが、Dockerのインストール中にapt-getを使用すると、同じ問題に遭遇しました。
Qcom

13

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

sshから始めましょう。sshは、リモートコマンドを指定しない場合、リモートエンドでptyが必要であり、リモートを指定しないことを前提としています(これは、このコマンドではなく、90%の時間で非常にうまく機能します)。これは-t、ptyを強制する-Tオプションまたはpty を強制しないオプション(または対応する構成ファイルオプション)でオーバーライドできます。さらに、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"

「readlineフロントエンドの要件はそれほど厳しくなく、ダム端末で動作しますが、ptyが必要になります。」どのようにptyを設定できますか?
linuxatico

@linuxatico、ssh -t詳細およびその他のオプションについては、ssh manページを参照してください。この回答の2番目の段落も読み直してください。
16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.