कैसे हल करें 'ttyname विफल: 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 प्रोग्रामिंग के बारे में है।
0:30

मुझे खुशी है कि समाधान आपके लिए भी काम करता है! आपकी त्वरित पुष्टि के लिए धन्यवाद! मैंने अभी यहां एक उत्तर पोस्ट किया है, लेकिन मुझे यकीन नहीं है कि मुझे एसओ से अपना जवाब हटाना है या किसी संचालक को एसओ से प्रश्न को एसयू पर ले जाना चाहिए? मैं ठीक हूँ यदि कोई व्यक्ति उचित अनुमति के साथ मेरे उत्तर को संपादित / हटा देता है, लेकिन यह किसी और की मदद कर सकता है, इसलिए मैं इसे "जैसा है" के लिए छोड़ रहा हूं, यह महसूस करते हुए कि यह किसी तरह का एक डुप्लिकेट है (जैसा कि सवाल लगता है)। ..
मंत्री

जवाबों:


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

हो सकता है कि आपको इसकी आवश्यकता न हो, लेकिन आप इसे आज़मा सकते हैं और यदि यह आपके लिए काम करता है तो इसका उपयोग कर सकता है

जैसा कि आप ऊपर टिप्पणी की गई लाइन में देख सकते हैं - लार्वा टीम से "मेसग: टिटनामे असफल डिवाइस के लिए अनुपयुक्त आईओसीएल" को रोका गया है। इसके लिए धन्यवाद!

जब हम विकास करते हैं, तो अधिकांश डेवलपर्स त्रुटियों / चेतावनियों से बचना चाहते हैं, इसलिए ऐसा लगता है कि हमें जो फिक्स (एक संभावित फिक्स) चाहिए।

महत्वपूर्ण नोट: मैंने इस समाधान का बहुत अधिक परीक्षण नहीं किया है, लेकिन बॉक्स "मेसग: ttyname के बिना विफल हो जाता है! डिवाइस के लिए अनुचित ioctl" त्रुटि! आप इसे आज़माने के लिए स्वतंत्र हैं और यदि आप किसी भी समस्या का अनुभव करते हैं, तो किसी और के समय को बचाने के लिए एक टिप्पणी छोड़ दें!


1
ध्यान दें, यह टूटने लगता है vagrant ssh -c '...'। संभवतः प्रदान किए गए तर्कों को अनदेखा कर दिया जाता है।
स्कीन

यह मेरे लिए सिर्फ इस त्रुटि को छिपाने के लिए लगता है लेकिन यह अभी भी काम नहीं करता है
OZZIE

16

1) खुला /root/.profile

2) आक्रामक लाइन को हटा दें

3) इसे इसके साथ बदलें:

tty -s और& mesg n

हैप्पी linuxing और एक नया साल मुबारक हो।

जॉर्ज हार्ट, एलएसयू


5
आह। यदि केवल ubuntu (और अन्य?) Distro (s) इसे मानक में ठीक करेगा /root/.profile... हालांकि, man ttyMacOS पर कहता है कि "-s विकल्प को` `परीक्षण -t 0 '' कमांड के पक्ष में चित्रित किया गया है।" है, तो एक बेहतर प्रतिस्थापन हो सकता हैtest -t 0 && mesg n
lindes

1
इसे स्वचालित करने के लिए, आप उपयोग कर सकते हैंsed -i -e 's/mesg n .*true/tty -s \&\& mesg n/g'
गोगोविट्स्क

11

ऐसा लगता है कि यह डिफ़ॉल्ट योनि विन्यास के बीच बातचीत के कारण होता हैconfig.ssh.shell होने के लिए bash -l(है, जो एक लॉगिन खोल simulates इस प्रकार जैसे प्रवेश-संबंधी विन्यास फाइल प्रसंस्करण .profile) में एक लाइन के साथ /root/.profileलिनक्स कम से कम कुछ वितरण (सहित पर फ़ाइल, उदाहरण के लिए, ubuntu / xenial64 योनि बॉक्स में से एक ), जिसमें है:

mesg n || true

उस फ़ाइल में इस लाइन के लिए एक बेहतर विकल्प शायद यह कहना होगा:

test -t 0 && mesg n

... और, यह देखते हुए कि व्यक्तिगत योनि उपयोगकर्ता के रूप में बदलना मुश्किल है, एक और तत्काल समाधान ड्रॉप करना है -l योनि विन्यास से विकल्प है, जैसे (भीतर Vagrantfile):

config.ssh.shell="bash"

(कैविएट: यह बोधगम्य है कि इस बदलाव के संभावित-नकारात्मक दुष्प्रभाव हो सकते हैं। यह मेरे लिए बहुत अच्छा काम करने लगा, हालांकि, कुछ मूल शेल प्रोसैक्टरों के साथ apt-get update, उदाहरण के लिए , और इसके बाद।)


इसके लिए आपको बहुत धन्यवाद! मेरा लेना: Override /root/.profile github.com/felixhummel/saltstates/blob/debian9/warts/bash/…
felixhummel

1

Vagrant और VirtualBox के कौन से संस्करण आप उपयोग कर रहे हैं?

मैं कल इस मुद्दे का सामना कर रहा था जब वर्चुअलबॉक्स 5.1.4 के साथ वैगरेंट 1.8.5 (उबुन्टी 16.04 के साथ) का उपयोग कर रहा था। हालाँकि, मैंने Vagrant 1.9.2 और VirtualBox 5.1.14 को आज अपग्रेड करने के बाद, समस्या दूर हो गई।

ध्यान दें कि, @Minister के रूप में अपग्रेड करने से पहले, स्क्रिप्ट बिना किसी समस्या के निष्पादित की गई। यह केवल आउटपुट कर रहा था कि "ttyname विफल" संदेश, जिसने यह धारणा दी कि एक त्रुटि हुई, जब वास्तव में प्रावधान स्क्रिप्ट को सफलतापूर्वक निष्पादित किया गया था।


0

मेरे पास यह मुद्दा वैग्रंट इंस्टॉलेशन में होने लगा था जिसका उपयोग मैं वर्षों से कर रहा था और समय-समय पर अपग्रेड भी करता रहा था। मैंने नवीनतम वैग्रंट (1.9.1 -> 2.0.3) में अपग्रेड किया और समस्या दूर हो गई। (इसने कुछ अन्य विचित्र चीजों को भी समाप्त कर दिया, जो इसके संचालन में कमी थी)

निश्चित नहीं है कि यह नया संस्करण था जो इसे तय करता था या जो मौजूदा फाइलें / कॉन्फ़िगरेशन अपग्रेड प्रक्रिया या दो के संयोजन में नए सिरे से बनाया गया था।


0

ऐसा लगता है कि यह केवल Mojave / कैटालिना के लिए VirtualBox v6.0.2 में काम करता है! (योनि 2.2.2 - हालांकि यह मायने नहीं रखता है!)

संपादित करें:

यह अब मेरे लिए अपने मेजबान मैक में तय:

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.