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

при использовании этого сниппета (inline shell provisioner):

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

в результате:

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

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

26
задан 030
11.01.2023 13:53 Количество просмотров материала 2515
Распечатать страницу

5 ответов

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

может быть, вам это просто не нужно, но вы можете попробовать и использовать его, если он работает для вас.

Как вы можете видеть в строке комментария выше-команда laravel предотвратила" mesg: ttyname failed неуместный ioctl для устройства". Спасибо за вот этот!

большинство разработчиков хотели бы избежать ошибок / предупреждений, когда мы занимаемся разработкой, поэтому кажется, что исправление (возможное исправление) нам нужно.

важное примечание: Я не тестировал это решение слишком много, но коробка начинается без "mesg: ttyname не удалось несоответствующее ioctl для устройства" ошибка! Вы можете попробовать, и если у вас возникнут какие-либо проблемы, просто оставьте комментарий, чтобы сэкономить время кого-то другого!

11
отвечен Minister 2023-01-12 21:41

1) открыть / root/.профиль

2) удалить наступательную линию

3) замените его на:

tty-s && mesg n

счастливого linuxing и счастливого Нового года.

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

6
отвечен George Hart 2023-01-12 23:58

похоже, что это вызвано взаимодействием между значением по умолчанию настройки бродяга на config.ssh.shell на bash -l (который имитирует оболочку входа, таким образом обрабатывая файлы конфигурации, связанные с входом, такие как .profile) со строки /root/.profile файл по крайней мере на некоторых дистрибутивах Linux (включая, например, тот, что в ubuntu / xenial64 бродяга box), который имеет:

mesg n || true

лучший вариант для этой строки в этом файле, вероятно, будет чтобы он сказал:

test -t 0 && mesg n

... и, учитывая, что это трудно изменить как отдельный пользователь vagrant, более непосредственное решение-отказаться от -l опция из конфигурации vagrant, например с (в пределах Vagrantfile):

config.ssh.shell="bash"

(предупреждение: возможно, что это изменение может иметь потенциально негативные побочные эффекты. Казалось, отлично работает для меня, хотя, с некоторыми основными provisioners оболочки, например, с apt-get update и так далее.)

4
отвечен lindes 2023-01-13 02:15

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

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

обратите внимание, что перед обновлением, как упоминал @Minister, скрипт выполнялся без проблем. Он просто выводил сообщение" ttyname failed", которое создавало впечатление, что произошла ошибка, когда на самом деле сценарий подготовки выполнен успешно.

1
отвечен kvjava1 2023-01-13 04:32

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

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

0
отвечен G-Man 2023-01-13 06:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх