Как решить `tytname не удалось: Неуместный ioctl для устройства` в Vagrant?

При использовании этого фрагмента (инлайн-предоставщик оболочки):

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

это приводит к:

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

Похоже, что другие люди нашли этот вопрос. Кто-нибудь знает, как это решить?

Комментарии к вопросу (3)
  1. открыть / root / .profile

  2. убрать наступательную линию

  3. заменить его на:

tty -s & & mesg n

Счастливого линукса и веселого нового года.

Джордж Харт, ЛГУ

Комментарии (2)

Похоже, что это вызвано взаимодействием между значением по умолчанию 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"
  • (Caveat: Возможно, что это изменение может иметь потенциально отрицательные побочные эффекты. Казалось, это отлично работает для меня, хотя, с некоторыми основными средствами обеспечения оболочки, например,. с apt-get update и так далее.) *
Комментарии (1)
Решение

Я заметил, что даже это сообщение было показано как ошибка (красным цветом), сценарий был успешно выполнен! Несколько дней спустя я увидел возможное исправление и я разместил ответ на 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»! Вы можете попробовать это, и если у вас возникнут какие-либо проблемы, просто оставьте комментарий, чтобы сэкономить чужое время!

Комментарии (2)

Какие версии Vagrant и VirtualBox вы используете?

Я столкнулся с этой проблемой вчера, когда использовал Vagrant 1.8.5 с VirtualBox 5.1.4 (с Ubunty 16.04). Однако после того, как я обновился до Vagrant 1.9.2 и VirtualBox 5.1.14 сегодня, проблема исчезла.

Обратите внимание, что до обновления, как также упомянул @Minister, сценарий выполняется без проблем. Это было просто вывод этого сообщения «tyname fail», которое создавало впечатление, что произошла ошибка, когда фактически сценарий предоставления успешно выполнен.

Комментарии (0)

У меня была эта проблема, которая начиналась в установке Vagrant, которую я использовал годами и время от времени обновлял. Я обновился до последнего Vagrant (1.9.1 -> 2.0.3), и проблема исчезла. (это также устранило некоторые другие причудливые вещи, которые проникли в его работу)

Не уверен, что это была новая версия, которая исправила это, или что существующие файлы / конфигурации были освежены в процессе обновления или их комбинации.

Комментарии (0)

Похоже, что это работает только в 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

Комментарии (0)