Comment résoudre `ttyname a échoué: ioctl inapproprié pour périphérique` dans Vagrant?

21

Lors de l'utilisation de cet extrait (provisionneur de shell en ligne):

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

il en résulte:

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

Il semble que d'autres personnes aient également trouvé ce problème . Quelqu'un sait-il comment le résoudre?

030
la source
J'ai remarqué que même ce message était affiché comme une erreur, le script a été exécuté avec succès! Quelques jours plus tard, j'ai vu une solution possible et j'ai posté une réponse ici . Alors peut-être que vous n'en avez pas besoin, mais vous pouvez l'essayer et l'utiliser si cela fonctionne pour vous.
Ministre
@Minister Merci. Cela résout le problème. Pourriez-vous supprimer la réponse de SO et la publier sur SuperUser? Stackoverflow concerne la programmation.
030
Je suis content que la solution fonctionne aussi pour vous! Merci pour votre confirmation rapide! Je viens de poster une réponse ici, mais je ne sais pas si je dois supprimer ma réponse de SO ou un modérateur devrait déplacer la question de SO ici sur SU? Je suis d'accord si quelqu'un avec les autorisations appropriées modifie / supprime ma réponse là-bas, mais cela peut aider quelqu'un d'autre, donc je le laisse "tel quel" pour l'instant, réalisant que c'est une sorte de doublon (comme la question semble). ..
Ministre

Réponses:

10

J'ai remarqué que même ce message était affiché comme une erreur (en couleur ROUGE), le script a été exécuté avec succès! Quelques jours plus tard, j'ai vu un correctif possible et j'ai posté une réponse sur SO . Le "correctif" est:

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

Peut-être que vous n'en avez tout simplement pas besoin, mais vous pouvez l'essayer et l'utiliser si cela fonctionne pour vous.

Comme vous pouvez le voir dans la ligne commentée ci-dessus - le "mesg: ttyname a échoué ioctl inapproprié pour le périphérique" a été empêché par l'équipe laravel. Merci pour celui-ci!

La plupart des développeurs souhaitent éviter les erreurs / avertissements lors du développement, il semble donc que le correctif (un correctif possible) dont nous avions besoin.

Remarque importante: je n'ai pas trop testé cette solution, mais la boîte démarre sans l'erreur "mesg: ttyname a échoué ioctl inapproprié pour le périphérique"! Vous êtes libre de l'essayer et si vous rencontrez des problèmes, déposez simplement un commentaire pour gagner du temps à quelqu'un d'autre!

Ministre
la source
1
Remarque, cela semble casser vagrant ssh -c '...'. Peut-être que les arguments fournis sont ignorés.
Skeen
Cela semble cacher cette erreur pour moi mais cela ne fonctionne toujours pas
OZZIE
16

1) ouvrez /root/.profile

2) supprimer la ligne offensive

3) remplacez-le par:

tty -s && mesg n

Joyeux linuxing et bonne année.

George Hart, LSU

George Hart
la source
5
Soupir. Si seulement les distributions ubuntu (et autres?) Corrigeaient cela dans la norme /root/.profile... Cependant, man ttysur MacOS dit que "l'option -s est déconseillée au profit de la commande` `test -t 0 ''." , donc un meilleur remplacement pourrait êtretest -t 0 && mesg n
lindes
1
Pour automatiser cela, vous pouvez utilisersed -i -e 's/mesg n .*true/tty -s \&\& mesg n/g'
Gogowitsch
11

Il semble que cela soit dû à une interaction entre la configuration vagabonde par défaut de config.ssh.shellbe bash -l(qui simule un shell de connexion, traitant ainsi des fichiers de configuration liés à la connexion tels que .profile) avec une ligne dans le /root/.profilefichier sur au moins certaines distributions de Linux (y compris, par exemple, celui dans la boîte vagabonde ubuntu / xenial64 ), qui a:

mesg n || true

Une meilleure option pour cette ligne dans ce fichier serait probablement de lui faire dire:

test -t 0 && mesg n

... et, étant donné qu'il est difficile de changer en tant qu'utilisateur vagabond individuel, une solution plus immédiate consiste à supprimer l' -loption de la configuration vagabonde, par exemple avec (à l'intérieur Vagrantfile):

config.ssh.shell="bash"

(Mise en garde: il est concevable que ce changement puisse avoir des effets secondaires potentiellement négatifs. Il a semblé fonctionner très bien pour moi, cependant, avec certains approvisionneurs de shell de base, par exemple avec apt-get update, et ainsi de suite.)

lindes
la source
Merci beaucoup pour cela! Ma prise: remplacer /root/.profile github.com/felixhummel/saltstates/blob/debian9/warts/bash/…
felixhummel
1

Quelles versions de Vagrant et VirtualBox utilisez-vous?

J'étais confronté à ce problème hier lors de l'utilisation de Vagrant 1.8.5 avec VirtualBox 5.1.4 (avec Ubunty 16.04). Cependant, après la mise à niveau vers Vagrant 1.9.2 et VirtualBox 5.1.14 aujourd'hui, le problème a disparu.

Notez qu'avant la mise à niveau, comme @Minister l'a également mentionné, le script s'est exécuté sans problème. Il ne faisait que générer le message "ttyname failed", qui donnait l'impression qu'une erreur s'était produite, alors que le script de provisioning s'était en fait exécuté avec succès.

kvjava1
la source
0

Ce problème a commencé à se produire dans une installation Vagrant que j'utilisais depuis des années et que j'avais également mise à niveau de temps en temps. Je suis passé au dernier Vagrant (1.9.1 -> 2.0.3) et le problème a disparu. (il a également éliminé d'autres choses excentriques qui s'étaient glissées dans son fonctionnement)

Je ne sais pas si c'est la nouvelle version qui l'a corrigé ou si les fichiers / configurations existants ont été rafraîchis dans le processus de mise à niveau ou une combinaison des deux.

G-Man
la source
0

Il semble que cela ne fonctionne que dans VirtualBox v6.0.2 pour Mojave / Catalina! (+ vagabond 2.2.2 - pas sûr que ça compte!)

ÉDITER:

Cela m'a corrigé maintenant dans votre Mac hôte:

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

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

OZZIE
la source