Bug 37459

Summary: После обновления перестал работать mdns
Product: Sisyphus Reporter: Fr. Br. George <george>
Component: iputilsAssignee: 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
george@inspiron:~> rpmquery --queryformat "%{version}\n" libavahi
0.6.32
george@inspiron:~> ping -c1 whiteball.local
PING whiteball.local (192.168.100.6) 56(84) bytes of data.
64 bytes from 192.168.100.6 (192.168.100.6): icmp_seq=1 ttl=64 time=102 ms

--- whiteball.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 101.974/101.974/101.974/0.000 ms
...
обновление
...
george@inspiron:~> rpmquery --queryformat "%{version}\n" libavahi
0.7
george@inspiron:~> ping -c1 whiteball.local
ping: whiteball.local: Неизвестное имя или служба

Если поставить все avahi-пакеты версии 0.6.32, работа возодновляется
Попытка порбисектить методом подкладывания указала на libavahi, но я могу ошибаться,
Comment 1 Sergey Bolshakov 2019-12-03 12:25:20 MSK
ping очень сложная программа, давайте попробуем по частям:
- resolve whiteball.local выдаёт то же ?
- нет ли при этом сообщений вида 'Received non-local unicast query from host ..'   на стороне avahi-server ?
Comment 2 Fr. Br. George 2019-12-05 19:46:49 MSK
(В ответ на комментарий №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 ?
Нет.
Comment 3 Fr. Br. George 2019-12-05 20:16:51 MSK
(В ответ на комментарий №1)
> ping очень сложная программа, давайте попробуем по частям:
> - resolve whiteball.local выдаёт то же ?
> - нет ли при этом сообщений вида 'Received non-local unicast query from host
> ..'   на стороне avahi-server ?

По совету @shaba собрал новый libnss-mdns, resolve заработал, ping нет, но сейчас пезерагружу ещё.
Comment 4 Fr. Br. George 2019-12-05 20:48:14 MSK
(В ответ на комментарий №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... не наблюдаю
Comment 5 Fr. Br. George 2019-12-05 21:11:53 MSK
И ещё, 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/?
Comment 6 Сергей Трусов 2020-02-10 19:20:28 MSK
Столкнулся с обсуждаемой проблемой при настройке сетевых принтеров (Сизиф 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/
Comment 7 Сергей Трусов 2020-02-12 13:43:20 MSK
(Ответ для 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, а у Вас в системе сокет сразу где надо имеется?
Comment 8 Fr. Br. George 2020-04-21 22:07:53 MSK
(Ответ для Сергей Трусов на комментарий #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 делаю после каждого включения компьютера.
Comment 9 Repository Robot 2020-04-22 12:32:15 MSK
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)
Comment 10 Vitaly Lipatov 2020-10-29 02:36:02 MSK
У меня та же история:
$ 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, а у Вас в системе сокет
> сразу где надо имеется?

Вопрос остался открытым.
Comment 11 Anton Farygin 2020-11-16 18:07:38 MSK
У меня и на сизифе он не работает ;(
Comment 12 Vitaly Lipatov 2020-11-18 01:32:43 MSK
(Ответ для Anton Farygin на комментарий #11)
> У меня и на сизифе он не работает ;(
Путём strace -f ping host.local
у себя я выяснил, что у меня не выровнены /run и /var/run (сокет не находился).
После исправления и update_chrooted all, чтобы сокет попал и туда, заработал и ping.
Comment 13 Vitaly Lipatov 2020-11-18 01:34:53 MSK
(Ответ для 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
Comment 14 Anton Farygin 2020-11-18 07:36:22 MSK
Да ping работает (не работает под рутом), у меня теперь не работает печать на принтер.
Comment 15 Vitaly Lipatov 2021-09-14 05:09:11 MSK
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
Comment 16 Sergey Bolshakov 2021-09-17 18:32:44 MSK
как видно, все сходятся на том, что ping не работает.
зачем же нам такой ping, что не может резолвить имена
хостов через добрую половину nss-модулей (помимо nss-mdns есть
и nss-resolve и др.)