Vagrantで「ttynameが失敗した:デバイスの不適切なioctl」を解決する方法は?


21

このスニペット(インラインシェルプロビジョニングツール)を使用する場合:

config.vm.provision "shell" do |s|
  s.inline = <<-SHELL
    <shell code>
  SHELL
end

結果は次のとおりです。

==> default: mesg: 
==> default: ttyname failed
==> default: : 
==> default: Inappropriate ioctl for device

他の人もこの問題を見つけているようです。誰もそれを解決する方法を知っていますか?


このメッセージがエラーとして表示されても、スクリプトが正常に実行されたことに気付きました!数日後、修正の可能性があり、ここに回答を投稿しました。だから多分あなたはそれを必要としないだけかもしれませんが、あなたはそれを試して、それがあなたのために働くならそれを使うことができます。
大臣

@大臣ありがとうございます。問題を解決します。SOから回答を削除して、SuperUserに投稿できますか?Stackoverflowはプログラミングに関するものです。
030

解決策があなたにも役立つことをうれしく思います!迅速なご確認ありがとうございます!ここに回答を投稿しましたが、SOから回答を削除する必要があるのか​​、それともSUでモデレーターがSOから質問を移動する必要があるのか​​わかりません。適切なアクセス許可を持つ人が回答を編集/削除しても問題ありませんが、他の人に役立つ可能性があります。 ..
大臣、

回答:


10

このメッセージがエラーとして(赤色で)表示されていても、スクリプトは正常に実行されました。数日後、修正の可能性を見つけ、SOに回答を投稿しました。「修正」は次のとおりです。

# Prevent TTY Errors (copied from laravel/homestead: "homestead.rb" file)... By default this is "bash -l".
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"

たぶん、あなたはそれを必要としないだけかもしれませんが、あなたがそれを試して、それがあなたのために働くならば、それを使うことができます。

上記のコメント行を見るとわかるように、「mesg:ttyname failed inappropriate ioctl for device」はlaravelチームから防止されています。これをありがとう!

ほとんどの開発者は、開発時にエラー/警告を回避したいので、必要な修正(可能な修正)のようです。

重要な注意:このソリューションをあまりテストしていませんが、「mesg:ttyname failed Inappropriate ioctl for device」エラーなしでボックスが起動します!自由に試してみてください。問題が発生した場合は、他の人の時間を節約するためにコメントをドロップしてください。


1
注、これは壊れてvagrant ssh -c '...'いるようです。提供された引数はおそらく無視されます。
スケーン

これは私にとってこのエラーを隠しているように見えますが、それでも動作しません
-OZZIE

16

1)/root/.profileを開きます

2)攻撃的なラインを削除する

3)次のものに置き換えます:

tty -s && mesg n

ハッピーlinuxingと陽気な新年。

ジョージ・ハート、LSU


5
はぁ。ubuntu(および他の?)ディストリビューションだけがこれを標準で修正する場合/root/.profile...しかし、man ttyMacOSでは、「-sオプションは「test -t 0」コマンドを支持して廃止される」と述べています。ので、より良い交換があるかもしれないtest -t 0 && mesg n
lindes

1
これを自動化するには、使用できますsed -i -e 's/mesg n .*true/tty -s \&\& mesg n/g'
-Gogowitsch

11

これはデフォルトの間の相互作用によって引き起こされるように見えます浮浪者の構成config.ssh.shellされるようにbash -l(これなどのログイン関連の設定ファイルの処理、ログインシェルをシミュレート.profile内の行を含む)/root/.profileを含む、Linuxのうちの少なくともいくつかのディストリビューション(上のファイルを、たとえば、ubuntu / xenial64 vagrant boxにあるもの)には、次のものがあります。

mesg n || true

そのファイルのこの行のより良いオプションは、おそらくそれを言うことです:

test -t 0 && mesg n

...そして、個々のVagrantユーザーとして変更するのが難しいことを考えると、より迅速な解決策は-l、たとえば(within Vagrantfile)を使用してVagrant構成からオプションを削除することです。

config.ssh.shell="bash"

(注意:この変更により、潜在的に負の副作用が生じる可能性があると考えられます。ただし、いくつかの基本的なシェルプロビジョニングツール(例:apt-get updateなど)を使用すると、うまく機能するように思えました。)


本当にありがとうございました!私のテイク:オーバーライド/root/.profileの github.com/felixhummel/saltstates/blob/debian9/warts/bash/...
felixhummel

1

VagrantとVirtualBoxのどのバージョンを使用していますか?

VirtualBox 5.1.4(Ubunty 16.04)でVagrant 1.8.5を使用しているときに、昨日この問題に直面していました。しかし、今日Vagrant 1.9.2およびVirtualBox 5.1.14にアップグレードすると、問題はなくなりました。

アップグレードの前に、@ Ministerが述べたように、スクリプトは問題なく実行されたことに注意してください。プロビジョニングスクリプトが実際に正常に実行されたときに、「ttyname failed」メッセージが出力されただけで、エラーが発生したという印象を与えました。


0

この問題は、長年使用していたVagrantのインストールで発生し始め、時々アップグレードしていました。最新のVagrant(1.9.1-> 2.0.3)にアップグレードすると、問題はなくなりました。(また、その操作に忍び込んだ他のいくつかの風変わりなものも排除しました)

それを修正したのが新しいバージョンなのか、既存のファイル/構成がアップグレードプロセスで更新されたのか、またはその2つの組み合わせなのかはわかりません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.