วิธีการแก้ปัญหา `ttyname ล้มเหลว: ioctl ที่เหมาะสมสำหรับอุปกรณ์ 'ใน Vagrant?


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 หรือผู้ดำเนินรายการควรย้ายคำถามจาก SO ที่นี่บน SU หรือไม่ ฉันตกลงถ้าคนที่มีสิทธิ์ที่เหมาะสมแก้ไข / ลบคำตอบของฉันที่นั่น แต่มันอาจช่วยคนอื่นได้ดังนั้นฉันจึงทิ้งคำว่า "ตามที่เป็น" ไว้ในตอนนี้โดยตระหนักว่ามันซ้ำซ้อน (เหมือนคำถามที่ดูเหมือน) ..
รัฐมนตรีว่าการกระทรวง

คำตอบ:


10

ฉันสังเกตว่าแม้ข้อความนี้จะแสดงเป็นข้อผิดพลาด (เป็นสีแดง) สคริปต์ก็ทำงานได้สำเร็จ! ไม่กี่วันต่อมาผมเห็นการแก้ไขที่เป็นไปได้และผมโพสต์คำตอบดังนั้น "แก้ไข" คือ:

# 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 ล้มเหลว ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์" ได้รับการป้องกันจากทีม laravel ขอบคุณสำหรับสิ่งนี้!

นักพัฒนาส่วนใหญ่ต้องการหลีกเลี่ยงข้อผิดพลาด / คำเตือนเมื่อเราทำการพัฒนาดังนั้นดูเหมือนว่าการแก้ไข (แก้ไขที่เป็นไปได้) ที่เราต้องการ

หมายเหตุสำคัญ: ฉันยังไม่ได้ทดสอบโซลูชันนี้มากเกินไป แต่กล่องเริ่มโดยไม่มีข้อผิดพลาด "mesg: ttyname ล้มเหลว ioctl สำหรับอุปกรณ์" ไม่ถูกต้อง! คุณมีอิสระที่จะลองและถ้าคุณประสบปัญหาใด ๆ เพียงแค่ใส่ความคิดเห็นเพื่อประหยัดเวลาของคนอื่น!


1
vagrant ssh -c '...'หมายเหตุนี้ดูเหมือนว่าจะทำลาย อาจจะเป็นข้อโต้แย้งที่มีให้จะถูกละเว้น
Skeen

ดูเหมือนว่าจะซ่อนข้อผิดพลาดนี้ให้ฉัน แต่ก็ยังใช้งานไม่ได้
OZZIE

16

1) เปิด / รูท / โปรไฟล์

2) ลบแนวรุก

3) แทนที่ด้วย:

tty -s && mesg n

linuxing มีความสุขและสุขสันต์วันปีใหม่

George Hart, LSU


5
ถอนหายใจ ถ้าเฉพาะอูบุนตู (และอื่น ๆ ) distro (s) จะแก้ไขปัญหานี้ในมาตรฐาน/root/.profile... แม้ว่าman ttyใน MacOS บอกว่า "ตัวเลือก -s ถูกคัดค้านคำสั่ง` `ทดสอบ -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ไฟล์บนอย่างน้อยบางส่วนกระจายของลินุกซ์ (รวมถึง เช่นหนึ่งในกล่องubuntu / xenial64 คนจรจัด ) ซึ่งมี:

mesg n || true

ตัวเลือกที่ดีกว่าสำหรับบรรทัดนี้ในไฟล์นั้นอาจเป็นไปได้ว่า:

test -t 0 && mesg n

... และเนื่องจากว่ายากที่จะเปลี่ยนแปลงในฐานะผู้ใช้คนจรจัดแต่ละรายโซลูชันที่เร่งด่วนมากขึ้นคือการวางตัว-lเลือกจากการตั้งค่าผู้คนจรจัดเช่นด้วย (ภายในVagrantfile):

config.ssh.shell="bash"

(Caveat: เป็นไปได้ว่าการเปลี่ยนแปลงนี้อาจมีผลข้างเคียงที่อาจเป็นลบได้ แต่มันก็ใช้งานได้ดีสำหรับฉัน แต่กับตัวสำรองเชลล์ขั้นพื้นฐานบางตัวเช่นกับapt-get updateและอื่น ๆ )


ขอบคุณมากสำหรับสิ่งนี้! เวลาของฉัน: แทนที่ / รูท /.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 ล้มเหลว" ซึ่งให้การแสดงผลที่เกิดข้อผิดพลาดเมื่อจริง ๆ แล้วสคริปต์การจัดสรรดำเนินการเรียบร้อยแล้ว


0

ฉันมีปัญหานี้เกิดขึ้นในการติดตั้ง Vagrant ที่ฉันใช้มาหลายปีและได้รับการอัปเกรดเป็นครั้งคราวเช่นกัน ฉันอัปเกรดเป็น Vagrant ล่าสุด (1.9.1 -> 2.0.3) และปัญหาหายไป (นอกจากนี้ยังกำจัดสิ่งแปลก ๆ อื่น ๆ เช่นกันที่พุ่งเข้าไปในการทำงานของมัน)

ไม่แน่ใจว่าเป็นรุ่นใหม่ที่แก้ไขหรือว่าไฟล์ / config ที่มีอยู่ได้รับการทำให้สดใหม่ในกระบวนการอัพเกรดหรือการรวมกันของทั้งสอง


0

ดูเหมือนว่าจะใช้ได้เฉพาะใน VirtualBox v6.0.2 สำหรับ Mojave / Catalina! (+ คนจรจัด 2.2.2 - ไม่แน่ใจว่ามันสำคัญ!)

แก้ไข:

นี้แก้ไขให้ฉันตอนนี้ในโฮสต์ Mac ของคุณ:

vagrant halt
sudo ifconfig vboxnet0 down
sudo ifconfig vboxnet0 up
vagrant up

https://github.com/hashicorp/vagrant/issues/1941#issuecomment-42274573

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.