Gewusst wie: `ttyname failed: Unangemessenes ioctl für device` in Vagrant?


21

Bei Verwendung dieses Snippets (Inline Shell Provisioner):

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

es fuehrt zu:

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

Es sieht so aus, als hätten auch andere Leute dieses Problem gefunden . Weiß jemand, wie man es löst?


Mir ist aufgefallen, dass auch diese Meldung als Fehler angezeigt wurde, das Skript wurde erfolgreich ausgeführt! Ein paar Tage später sah ich eine mögliche Lösung und ich habe hier eine Antwort gepostet . Vielleicht brauchen Sie es einfach nicht, aber Sie können es ausprobieren und verwenden, wenn es für Sie funktioniert.
Minister

@ Minister Danke. Es löst das Problem. Könnten Sie die Antwort von SO entfernen und auf SuperUser posten? Bei Stackoverflow geht es um Programmierung.
030

Ich bin froh, dass die Lösung auch für Sie funktioniert! Vielen Dank für Ihre schnelle Bestätigung! Ich habe gerade eine Antwort hier gepostet, bin mir aber nicht sicher, ob ich meine Antwort von SO entfernen muss oder ob ein Moderator die Frage von SO hier auf SU verschieben soll. Ich bin in Ordnung, wenn jemand mit den entsprechenden Berechtigungen meine Antwort dort bearbeitet / löscht, aber es kann jemand anderem helfen, also lasse ich sie "wie sie ist" und stelle fest, dass es sich um eine Art Duplikat handelt (wie die Frage scheint). ..
Minister

Antworten:


10

Mir ist aufgefallen, dass auch diese Meldung als Fehler angezeigt wurde (in roter Farbe), das Skript wurde erfolgreich ausgeführt! Ein paar Tage später sah ich eine mögliche Lösung und schrieb eine Antwort auf SO . Das "Update" ist:

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

Vielleicht brauchen Sie es einfach nicht, aber Sie können es ausprobieren und verwenden, wenn es für Sie funktioniert.

Wie Sie in der Kommentarzeile oben sehen können, wurde die Meldung "mesg: ttyname failed Inquate ioctl for device" vom Laravel-Team verhindert. Danke für diesen einen!

Die meisten Entwickler möchten Fehler / Warnungen bei der Entwicklung vermeiden, daher scheint es so, als ob die von uns benötigte Korrektur (eine mögliche Korrektur) vorliegt.

Wichtiger Hinweis: Ich habe diese Lösung nicht zu oft getestet, aber die Box startet ohne den Fehler "mesg: ttyname failed Inappropriate ioctl for device"! Sie können es ausprobieren und wenn Sie Probleme haben, schreiben Sie einfach einen Kommentar, um die Zeit eines anderen zu sparen!


1
Beachten Sie, dass dies zu brechen scheint vagrant ssh -c '...'. Eventuell als Argumente angegeben werden ignoriert.
Skeen

Dies scheint nur diesen Fehler für mich zu verbergen, aber es funktioniert immer noch nicht
OZZIE

16

1) öffne /root/.profile

2) Entfernen Sie die Angriffslinie

3) Ersetzen Sie es durch:

tty -s && mesg n

Frohes Linuxen und ein frohes neues Jahr.

George Hart, LSU


5
Seufzer. Wenn nur die Ubuntu (und andere?) Distribution (en) dies im Standard beheben würden /root/.profile... Unter man ttyMacOS heißt es jedoch: "Die Option -s wird zugunsten des Befehls` `test -t 0 '' nicht mehr empfohlen." , so könnte ein besserer Ersatz seintest -t 0 && mesg n
lindes

1
Um dies zu automatisieren, können Siesed -i -e 's/mesg n .*true/tty -s \&\& mesg n/g'
Gogowitsch

11

Es sieht so aus, als ob dies durch eine Interaktion zwischen der vagranten Standardkonfiguration von " config.ssh.shellto" bash -l(die eine Anmeldeshell simuliert und somit anmeldebezogene Konfigurationsdateien verarbeitet, z. B. .profile) und einer Zeile in der /root/.profileDatei auf mindestens einigen Linux-Distributionen verursacht wird (einschließlich: zB die in der Ubuntu / Xenial64-Vagrant-Box ), die hat:

mesg n || true

Eine bessere Option für diese Zeile in dieser Datei wäre wahrscheinlich, dass sie lautet:

test -t 0 && mesg n

... und angesichts der Tatsache, dass dies als einzelner Benutzer von Vagrant nur schwer zu ändern ist, besteht eine unmittelbarere Lösung darin, die -lOption aus der Vagrant-Konfiguration zu streichen, z. B. mit (innerhalb Vagrantfile):

config.ssh.shell="bash"

(Vorbehalt: Es ist denkbar, dass diese Änderung potenziell negative Nebenwirkungen haben könnte. Bei einigen grundlegenden Shell-Provisionern, z. B. bei apt-get updateund so weiter, schien sie jedoch eine gute Lösung für mich zu sein .)


Vielen Dank dafür! Meine Einstellung: Override /root/.profile github.com/felixhummel/saltstates/blob/debian9/warts/bash/…
felixhummel

1

Welche Versionen von Vagrant und VirtualBox verwenden Sie?

Ich war gestern mit diesem Problem konfrontiert, als ich Vagrant 1.8.5 mit VirtualBox 5.1.4 (mit Ubunty 16.04) verwendete. Nachdem ich heute ein Upgrade auf Vagrant 1.9.2 und VirtualBox 5.1.14 durchgeführt hatte, verschwand das Problem.

Beachten Sie, dass das Skript vor dem Upgrade, wie auch bei @Minister erwähnt, ohne Probleme ausgeführt wurde. Es wurde nur die Meldung "ttyname failed" ausgegeben, die den Eindruck erweckte, dass ein Fehler aufgetreten ist, als das Bereitstellungsskript tatsächlich erfolgreich ausgeführt wurde.


0

Dieses Problem trat in einer Vagrant-Installation auf, die ich seit Jahren verwende und von Zeit zu Zeit auch aktualisiert hatte. Ich habe ein Upgrade auf den neuesten Vagrant (1.9.1 -> 2.0.3) durchgeführt und das Problem ist behoben. (Es wurden auch einige andere skurrile Dinge beseitigt, die sich in seinen Betrieb eingeschlichen hatten.)

Ich bin mir nicht sicher, ob es die neue Version war, die das Problem behoben hat, oder ob vorhandene Dateien / Konfigurationen während des Aktualisierungsprozesses oder einer Kombination aus beiden aktualisiert wurden.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.