Summary: | После обновления перестал работать mdns | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Fr. Br. George <george> |
Component: | iputils | Assignee: | Mikhail Efremov <sem> |
Status: | REOPENED --- | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P3 | CC: | ender, lav, mike, rider, sbolshakov, sem, sergei.a.trusov |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
Bug Depends on: | |||
Bug Blocks: | 39299 |
Description
Fr. Br. George
2019-11-08 21:17:28 MSK
ping очень сложная программа, давайте попробуем по частям: - resolve whiteball.local выдаёт то же ? - нет ли при этом сообщений вида 'Received non-local unicast query from host ..' на стороне avahi-server ? (В ответ на комментарий №1) > - resolve whiteball.local выдаёт то же ? root@inspiron:/home/george> resolve whiteball.local resolve: unable to resolve: whiteball.local: Unknown host > - нет ли при этом сообщений вида 'Received non-local unicast query from host > ..' на стороне avahi-server ? Нет. (В ответ на комментарий №1)
> ping очень сложная программа, давайте попробуем по частям:
> - resolve whiteball.local выдаёт то же ?
> - нет ли при этом сообщений вида 'Received non-local unicast query from host
> ..' на стороне avahi-server ?
По совету @shaba собрал новый libnss-mdns, resolve заработал, ping нет, но сейчас пезерагружу ещё.
(В ответ на комментарий №3) >собрал новый libnss-mdns, resolve заработал, ping нет, но > сейчас пезерагружу ещё. resolve работает только от рута root@gear:~> resolve NPIAF84DA.local IP address of NPIAF84DA.local: 10.4.129.60 george@gear:~> resolve NPIAF84DA.local resolve: unable to resolve: NPIAF84DA.local: Unknown host ping не работает вообще Received non-local unicast query... не наблюдаю И ещё, JFYK root@gear:~> v /var/resolv/var/avahi итого 8 158789 drwxrwx--x 2 root _avahi 4096 ноя 27 19:10 . 158494 drwxr-xr-x 5 root root 4096 ноя 27 19:10 .. 158443 srw-rw-rw- 1 root root 0 сен 11 14:32 socket root@gear:~> v /var/run/avahi-daemon/ итого 4 14746 drwxrwx--- 2 root _avahi 80 дек 5 20:35 . 2139 drwxr-xr-x 21 root root 840 дек 5 20:37 .. 12046 -rw-r--r-- 1 _avahi _avahi 5 дек 5 20:35 pid 14747 srw-rw-rw- 1 root root 0 дек 5 20:35 socket Так и надо, два сокета? И кому сказать, чтобы бит x выставили у /var/run/avahi-daemon/? Столкнулся с обсуждаемой проблемой при настройке сетевых принтеров (Сизиф Gnome). CUPS принтер находит, добавляет, но при печати выдаёт сообщение вида "host.local не найден". Соотвественно и # ping z1.local ping: z1.local: Неизвестное имя или служба Как решал. Описание примерное, по памяти, возможно, что-то упустил из виду. 1. В /etc/nsswitch.conf -hosts: files dns myhostname +hosts: files mdns4_minimal dns myhostname # в Сети есть варианты с mdns4_minimal [NOTFOUND=return] и т.д. 2. Установил пакет libnss-mdns с обработчиком mdns4_minimal. Этого было бы достаточно, но 3. в Альте оказался хитрый пакет chrooted-resolv, потребовалось его переустановить, что бы в /var/resolv/lib64 появилась библиотека libnss_mdns4_minimal.so.2 4. Теперь библиотека хочет сокет connect(5, {sa_family=AF_UNIX, sun_path="/var/avahi/socket"}, 110) = -1 ENOENT (Нет такого файла или каталога) Ну ладно, накостылил в /etc/fstab /run/avahi-daemon /var/resolv/var/avahi none bind,nofail 0 0 5. Однако выполняется это всё под пользователем iputils, а права на каталог у группы _avahi connect(5, {sa_family=AF_UNIX, sun_path="/var/avahi/socket"}, 110) = -1 EACCES (Отказано в доступе) 6. После usermod -a -G _avahi iputils принтер печатает, и работает под рутом # ping z1.local Однако, не работает под пользователем. $ ping z1.local Т.е. нужны права /var/run/avahi-daemon/ (Ответ для Fr. Br. George на комментарий #5) > И кому сказать, чтобы бит x выставили у > /var/run/avahi-daemon/? Вот эти изменения. http://git.altlinux.org/gears/a/avahi.git?p=avahi.git;a=blobdiff;f=avahi-daemon/main.c;h=84821d51c7f73dc2ac7ea4d0aac02eb31d34b73d;hp=2baf8980aa82bb82f5610ea52a1d116a57795f87;hb=de9cc4e573045f561b5114bf1ea7dca120357b2c;hpb=3f159c5e0653d305d27b0c4c568743fe9d0d0b39 http://git.altlinux.org/gears/a/avahi.git?p=avahi.git;a=blobdiff;f=avahi-daemon/main.c;h=84821d51c7f73dc2ac7ea4d0aac02eb31d34b73d;hp=10cb41e7ec469254d7c903b40142b3651d3d9a73;hb=de9cc4e573045f561b5114bf1ea7dca120357b2c;hpb=6242e5f0fe001b7de2ccaa9431db279b2ee76b83 В апстриме такого нет https://github.com/lathiat/avahi/blob/90604e89faf926b16f7edc93b854070c1d6022d4/avahi-daemon/main.c#L1417 Если отменить, должно работать, если правильно понял. > И ещё, JFYK > root@gear:~> v /var/resolv/var/avahi > итого 8 > 158789 drwxrwx--x 2 root _avahi 4096 ноя 27 19:10 . > 158494 drwxr-xr-x 5 root root 4096 ноя 27 19:10 .. > 158443 srw-rw-rw- 1 root root 0 сен 11 14:32 socket > root@gear:~> v /var/run/avahi-daemon/ > итого 4 > 14746 drwxrwx--- 2 root _avahi 80 дек 5 20:35 . > 2139 drwxr-xr-x 21 root root 840 дек 5 20:37 .. > 12046 -rw-r--r-- 1 _avahi _avahi 5 дек 5 20:35 pid > 14747 srw-rw-rw- 1 root root 0 дек 5 20:35 socket > Так и надо, два сокета? 2-й сокет в /run/avahi-daemon/ (/var/run/avahi-daemon/ это симлинк) создаёт avahi-daemon. 1-й сокет в /var/resolv/var/avahi нужен для работы резолвера (/lib64/libnss_mdns4_minimal.so), который запускается в chroot /var/resolv. Эффективный путь будет /var/avahi. Наколько понимаю механику, это должен быть один и тот же сокет. У меня тут другой вопрос: почему мне приходится делать mount, а у Вас в системе сокет сразу где надо имеется? (Ответ для Сергей Трусов на комментарий #7) > Вот эти изменения. > http://git.altlinux.org/gears/a/avahi.git?p=avahi.git;a=blobdiff;f=avahi- > daemon/main.c;h=84821d51c7f73dc2ac7ea4d0aac02eb31d34b73d; > hp=2baf8980aa82bb82f5610ea52a1d116a57795f87; > hb=de9cc4e573045f561b5114bf1ea7dca120357b2c; > hpb=3f159c5e0653d305d27b0c4c568743fe9d0d0b39 > http://git.altlinux.org/gears/a/avahi.git?p=avahi.git;a=blobdiff;f=avahi- > daemon/main.c;h=84821d51c7f73dc2ac7ea4d0aac02eb31d34b73d; > hp=10cb41e7ec469254d7c903b40142b3651d3d9a73; > hb=de9cc4e573045f561b5114bf1ea7dca120357b2c; > hpb=6242e5f0fe001b7de2ccaa9431db279b2ee76b83 > В апстриме такого нет > https://github.com/lathiat/avahi/blob/ > 90604e89faf926b16f7edc93b854070c1d6022d4/avahi-daemon/main.c#L1417 > Если отменить, должно работать, если правильно понял. Да. Вместо 770 нужен 771, иначе mdns не работает. Я до сих пор руками chmod делаю после каждого включения компьютера. avahi-0.7-alt3 -> sisyphus: Tue Apr 21 2020 Fr. Br. George <george@altlinux.ru> 0.7-alt3 - enable socket directory x bit to allow user mdns (closes: #37459) У меня та же история: $ strace resolve name.local openat(AT_FDCWD, "/lib64/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 3 connect(3, {sa_family=AF_UNIX, sun_path="/var/avahi/socket"}, 110) = -1 ECONNREFUSED (В соединении отказано) # ls /var/avahi/socket -l srw-rw-rw- 1 root root 0 сен 13 14:45 /var/avahi/socket # ls /var/run/avahi-daemon/ -l итого 4 -rw-r--r-- 1 _avahi _avahi 8 окт 29 02:09 pid srwxrwxrwx 1 _avahi _avahi 0 окт 29 02:09 socket # rpm -qf /var/avahi avahi-daemon-0.8-alt1.x86_64 Note: /var/avahi is link to /var/resolv/var/avahi (Ответ для Сергей Трусов на комментарий #7) ... > Наколько понимаю механику, это должен быть один и тот же сокет. У меня тут > другой вопрос: почему мне приходится делать mount, а у Вас в системе сокет > сразу где надо имеется? Вопрос остался открытым. У меня и на сизифе он не работает ;( (Ответ для Anton Farygin на комментарий #11) > У меня и на сизифе он не работает ;( Путём strace -f ping host.local у себя я выяснил, что у меня не выровнены /run и /var/run (сокет не находился). После исправления и update_chrooted all, чтобы сокет попал и туда, заработал и ping. (Ответ для Vitaly Lipatov на комментарий #12) > (Ответ для Anton Farygin на комментарий #11) > > У меня и на сизифе он не работает ;( > Путём strace -f ping host.local > у себя я выяснил, что у меня не выровнены /run и /var/run (сокет не > находился). > После исправления и update_chrooted all, чтобы сокет попал и туда, заработал > и ping. avahi-daemon-0.8-alt1.x86_64 libnss-mdns-0.14.1-alt1.x86_64 Да ping работает (не работает под рутом), у меня теперь не работает печать на принтер. p10 # strace -f resolve nun.local connect(3, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = 0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) fstat(3, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0 write(3, "RESOLVE-HOSTNAME-IPV4 nun.local\n", 32) = 32 read(3, "+ 2 0 nun.local 192.168.0.34\n", 4096) = 29 close(3) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x1f), ...}) = 0 write(1, "IP address of nun.local: 192.168"..., 38IP address of nun.local: 192.168.0.34 # strace -f ping nun.local connect(8, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = -1 ENOENT (Нет такого файла или каталога) # rpm -qf /var/resolv/var/avahi avahi-daemon-0.8-alt2.x86_64 внутри лежит socket (прошлогодний) После # mount --bind /var/run/avahi-daemon /var/resolv/var/run/avahi-daemon/ ping заработал p9 # strace -f ping nun.local connect(8, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = -1 ENOENT (Нет такого файла или каталога) Здесь пусто: # rpm -qf /var/resolv/var/avahi avahi-daemon-0.8-alt2.x86_64 как видно, все сходятся на том, что ping не работает. зачем же нам такой ping, что не может резолвить имена хостов через добрую половину nss-модулей (помимо nss-mdns есть и nss-resolve и др.) |