如何解决“ ttyname失败:Vagrant中的设备不正确的ioctl”?


21

使用此代码段(嵌入式Shell配置程序)时:

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移至此处?如果具有适当权限的人在此处编辑/删除我的答案,我可以,但是它可能会对其他人有所帮助,所以我现在将其“按原样”保留,意识到它有点重复(问题似乎是这样)。 ..
部长

Answers:


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'"

也许您只是不需要它,但可以尝试并使用它(如果它适合您)。

如您在上面的注释行中所看到的-laravel团队已阻止“消息:ttyname失败,设备的不适当ioctl”。谢谢这个!

大多数开发人员在进行开发时都希望避免错误/警告,因此看来我们需要此修复程序(可能的修复程序)。

重要说明:我尚未对此解决方案进行过多的测试,但此框开始时没有出现“消息:ttyname失败设备的不适当ioctl”错误!您可以随意尝试,如果遇到任何问题,只需发表评论以节省别人的时间!


1
注意,这似乎中断了vagrant ssh -c '...'。可能会因为提供的参数而被忽略。
Skeen

这似乎只是为我隐藏了此错误,但仍然
无法解决

16

1)打开/root/.profile

2)删除进攻线

3)替换为:

tty -s &&消息n

祝您Linux愉快,新年快乐。

路易斯安那州立大学乔治·哈特


5
叹。如果仅ubuntu(及其他?)发行版可以在标准中解决此问题/root/.profile……尽管,man tty在MacOS上,“不赞成使用-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.shellbash -l(其模拟登录shell,从而处理登录相关的配置文件,如.profile)与在一条线上/root/.profileLinux上的至少一些分布(包括文件,例如,在ubuntu / xenial64 vagrant框中的那个),其中包含:

mesg n || true

该文件中此行的一个更好的选择可能是让它说:

test -t 0 && mesg n

...,而且鉴于作为单个流浪者用户很难更改,因此,更直接的解决方案是-l从流浪者配置中删除该选项,例如,(在中Vagrantfile):

config.ssh.shell="bash"

(注意:可以想象,此更改可能会带来潜在的负面影响。不过,对于一些基本的shell配置程序,例如with apt-get update等等,它对我来说非常有用。)


非常感谢您!我的看法:覆盖/root/.profile github.com/felixhummel/saltstates/blob/debian9/warts/bash/...
felixhummel

1

您正在使用什么版本的Vagrant和VirtualBox?

我昨天在将Vagrant 1.8.5与VirtualBox 5.1.4(与Ubunty 16.04结合使用)一起使用时遇到了此问题。但是,今天我升级到Vagrant 1.9.2和VirtualBox 5.1.14之后,问题就消失了。

请注意,在升级之前(如@Minister所述),脚本执行没有问题。它只是输出“ ttyname failed”消息,给人的印象是,实际上供应脚本执行成功时发生了错误。


0

我已经在多年使用的Vagrant安装中开始出现此问题,并且不时进行了升级。我升级到最新的Vagrant(1.9.1-> 2.0.3),问题消失了。(它也消除了那些开始运作的其他古怪的事物)

不确定是修复了它的新版本还是在升级过程中更新了现有文件/配置,还是两者结合。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.