При использовании этого фрагмента (инлайн-предоставщик оболочки):
config.vm.provision "shell" do |s|
s.inline = <<-SHELL
<shell code>
SHELL
end
это приводит к:
==> default: mesg:
==> default: ttyname failed
==> default: :
==> default: Inappropriate ioctl for device
Похоже, что другие люди нашли этот вопрос. Кто-нибудь знает, как это решить?
открыть / root / .profile
убрать наступательную линию
заменить его на:
tty -s & & mesg n
Счастливого линукса и веселого нового года.
Джордж Харт, ЛГУ
Похоже, что это вызвано взаимодействием между значением по умолчанию vagrant configuration config.ssh.shell
как bash -l
(которое имитирует оболочку входа в систему, таким образом обрабатывая файлы конфигурации, связанные с входом, такие как .profile
) с строкой в файле / root / .profile
по крайней мере в некоторых дистрибутивах Linux (включая, например,., тот, что в ubuntu / xenial64 vagrant box), который имеет:
mesg n || true
Лучшим вариантом для этой строки в этом файле, вероятно, будет сказать:
test -t 0 && mesg n
и, учитывая, что это трудно изменить как отдельного пользователя-бродяги, более непосредственным решением является удаление опции -l
из конфигурации-бродяги, например,... с (в пределах Vagrantfile
) :.
config.ssh.shell="bash"
apt-get update
и так далее.) *Я заметил, что даже это сообщение было показано как ошибка (красным цветом), сценарий был успешно выполнен! Несколько дней спустя я увидел возможное исправление и я разместил ответ на 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 не удалось» Неподходящий ioctl для устройства »был исключен из команды laravel. Спасибо за это!
Большинство разработчиков хотели бы избежать ошибок / предупреждений, когда мы делаем разработку, поэтому кажется, что исправление (возможное исправление) нам нужно.
Важное примечание: я не слишком много тестировал это решение, но поле начинается без ошибки «mesg: ttyname name Uncutive ioctl for device»! Вы можете попробовать это, и если у вас возникнут какие-либо проблемы, просто оставьте комментарий, чтобы сэкономить чужое время!
Какие версии Vagrant и VirtualBox вы используете?
Я столкнулся с этой проблемой вчера, когда использовал Vagrant 1.8.5 с VirtualBox 5.1.4 (с Ubunty 16.04). Однако после того, как я обновился до Vagrant 1.9.2 и VirtualBox 5.1.14 сегодня, проблема исчезла.
Обратите внимание, что до обновления, как также упомянул @Minister, сценарий выполняется без проблем. Это было просто вывод этого сообщения «tyname fail», которое создавало впечатление, что произошла ошибка, когда фактически сценарий предоставления успешно выполнен.
У меня была эта проблема, которая начиналась в установке Vagrant, которую я использовал годами и время от времени обновлял. Я обновился до последнего Vagrant (1.9.1 -> 2.0.3), и проблема исчезла. (это также устранило некоторые другие причудливые вещи, которые проникли в его работу)
Не уверен, что это была новая версия, которая исправила это, или что существующие файлы / конфигурации были освежены в процессе обновления или их комбинации.
Похоже, что это работает только в VirtualBox v6.0.2 для Мохаве / Каталина! (+ вогнутый 2.2.2 - не уверен, что это имеет значение, хотя!)
EDIT:
Это исправило это для меня сейчас на вашем хосте Mac:
vagrant halt
sudo ifconfig vboxnet0 down
sudo ifconfig vboxnet0 up
vagrant up
https://github.com/hashicorp/vagrant/issues/1941#issuecomment-42274573