ttyname failed : Vagrant에서 장치에 부적절한 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

다른 사람들 도이 문제 를 발견 한 것 같습니다 . 아무도 그것을 해결하는 방법을 알고 있습니까?


이 메시지가 오류로 표시되어 스크립트가 성공적으로 실행되었음을 알았습니다. 며칠 후 가능한 해결책을보고 여기에 답변을 게시했습니다 . 아마 당신은 그것을 필요로하지 않을 수도 있지만, 당신이 그것을 시도한다면 그것을 시도하고 그것을 사용할 수 있습니다.
장관

@Minister 감사합니다. 문제를 해결합니다. 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 장치에 부적절한 ioctl이 실패했습니다"는 라 라벨 팀에서 방지되었습니다. 이것에 감사드립니다!

대부분의 개발자는 개발할 때 오류 / 경고를 피하고 싶기 때문에 필요한 수정 (가능한 수정) 인 것 같습니다.

중요 사항 :이 솔루션을 너무 많이 테스트하지는 않았지만 "mesg : ttyname failed 장치에 부적절한 ioctl"오류없이 상자가 시작됩니다! 무료로 사용해 볼 수 있으며 문제가 발생하면 다른 사람의 시간을 절약하기 위해 의견을 남기십시오!


1
이것은 깨지는 것처럼 보입니다 vagrant ssh -c '...'. 제공된 인수가 무시 될 수 있습니다.
Skeen

이것은 저에게이 오류를 숨기는 것 같지만 여전히 작동하지 않습니다
OZZIE

16

1) /root/.profile을 엽니 다

2) 공격 라인을 제거

3) 다음과 같이 교체하십시오.

tty -s && 메시지 n

행복한 리눅스와 새해 복 많이 받으세요.

조지 하트, LSU


5
한숨. 우분투 (및 다른?) 배포판만이 표준 으로이 문제를 해결한다면 /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.shellbash -l(이와 같은 로그인 관련 구성 파일 처리, 로그인 쉘 시뮬레이션 .profile의 라인) /root/.profile을 포함 리눅스의 적어도 일부 분포 (에 파일을 예를 들어, 우분투 / xenial64 방랑 상자에있는 것 ) :

mesg n || true

해당 파일에서이 줄에 대한 더 나은 옵션은 아마도 다음과 같이 말할 것입니다.

test -t 0 && mesg n

... 개별 개인 사용자로 변경하기가 어렵다는 점을 고려할 때 더 즉각적인 해결책은 -l옵션을 다음과 같이 다음과 같이 구성 항목에서 삭제하는 것입니다 Vagrantfile.

config.ssh.shell="bash"

(주의 사항 :이 변경으로 인해 부정적인 부작용이있을 수 있습니다.하지만 일부 기본 셸 제공 업체 (예 : apt-get update등) 에서 나에게 큰 도움이되는 것처럼 보입니다 .)



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)로 업그레이드했는데 문제가 해결되었습니다. (또한 작동에 영향을 미치는 다른 기발한 것들도 제거했습니다)

새 버전으로 수정했는지 또는 업그레이드 과정에서 기존 파일 / 구성이 새로워 졌는지 또는 두 가지를 함께 사용했는지 확실하지 않습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.