Как мне использовать .local имена хостов с Arch Linux?

18

Если я использую Ubuntu или Linux Mint (только два варианта, которые я пробовал и знаю наверняка, работают), я могу запустить что-то вроде этого:

wayne@myhost$ ssh wayne@otherhost.local

И имя автоматически разрешается в зависимости от того, какой IP-адрес другого хоста находится в моей локальной сети.

Я решил начать разветвляться на другие дистрибутивы, и у меня на ноутбуке работает Arch - но если я попытаюсь использовать предыдущую команду, я получу Could not resolve hostname otherhost.local: Name or service not known

Что нужно для того, чтобы добиться такого рода автоматического разрешения имен (?)?

Уэйн Вернер
источник
5
Вы должны установить, avahiа также nss-mdns- для более подробной информации взгляните на Arch Wiki
Ульрих Дангел

Ответы:

15

Собственный ответ Уэйна к настоящему времени уже устарел. С тех пор Arch переключился на использование systemd вместо сценариев инициализации. Страница Avahi Arch wiki обновлена ​​и содержит подробную информацию о том, почему необходимы следующие шаги. Вкратце: Avahi - это инструмент zeroconf, то есть сам по себе не требует настройки для работы после установки на всех компьютерах вашей локальной сети, но вы должны сконфигурировать оставшуюся часть программного обеспечения, чтобы он действительно запрашивал информацию у Avahi.

Запустите их как пользователь root или добавьте их, sudoесли необходимо, в терминале и замените nanoвыбранным редактором.

  1. pacman -S avahi nss-mdns Устанавливает демон служб Avahi и распознаватель многоадресной DNS.
  2. nano /etc/nsswitch.conf Этот файл сообщает библиотеке C, как получить информацию службы имен.
  3. Измените строку hosts: files dns myhostnameна hosts: files mdns_minimal [NOTFOUND=return] dns myhostname, сохраните и выйдите.
  4. systemctl start avahi-daemon Запускает службу Avahi вручную, так как мы уже загружены. Ищите ошибки)
  5. systemctl enable avahi-daemon Включает службу Avahi при загрузке.

Я только что выполнил эти шаги на ноутбуке Arch, и не было необходимости перезапускать какие-либо другие службы или интерфейс Wi-Fi, чтобы мои другие машины обнаружили его в течение нескольких секунд, и чтобы мой ноутбук обнаружил их службы.

Поскольку я пока не могу комментировать ответ ggg, я просто хотел бы указать здесь, что нет необходимости делать это в скрипте запуска - для этого и нужна поддержка сервиса в systemd. Сделай это один раз и забудь об этом.

TwoD
источник
3
Вы даже можете объединить пункты 4 и 5: systemctl enable avahi-daemon --now. Он запускает и активирует сервис немедленно, вместо ожидания следующего запуска.
Джонатан Комар
11

Благодаря указателю на статью Arch Wiki об Avahi от Ульриха Дангела, я сделал следующее:

  1. Установите avahi и nss-mdns $ sudo pacman -S avahi nss-mdns
  2. Добавить /etc/rc.d/avahi-daemon startв конецrc.local
  3. Так как я бегу dhcpcd, /etc/dhcpcd.confя закомментировал noipv4llстроку.
  4. Я тоже побежал $ sudo /usr/sbin/avahi-autopid -D wlan0. Поскольку я не люблю перезапуск, я не уверен, был ли необходим шаг 3.
  5. В /etc/nsswitch.confI установить линию для чтения hosts: files mdns4_minimal dns mdns4.
  6. Затем я побежал, $ sudo /etc/rc.d/dbus restartчтобы перезапустить dbus.

После этого просто заниматься ssh wayne@other.localпросто получалось.

Уэйн Вернер
источник
1
Относительно вашего второго замечания: вы также можете просто добавить «avahi-daemon» в строку DAEMONS в /etc/rc.conf
Wieland
Я думал об этом, но вики указала, что у некоторых людей были проблемы с тем, что он запускался слишком быстро в rc.conf и в результате приводил к сбою, и что это было исправлено.
Уэйн Вернер
2

Я не думаю, что нам нужно avahi-daemonбегать, чтобы использовать .local. Вот то, что я имею в моем сценарии запуска. Это намного проще по сравнению с методом Arch Wiki.

systemctl enable avahi-daemon
avahi-set-host-name $(hostname)
systemctl disable avahi-daemon
ггг
источник