Bug 33053

Summary: Не отвечает на запросы при запуске через SysVInit
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: dhcp-serverAssignee: Mikhail Efremov <sem>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P3 CC: aen, cas, glebfm, lav, mike, rider, sem, snejok, stalker
Version: unstable   
Hardware: all   
OS: Linux   

Description Anton Farygin 2017-01-26 15:09:25 MSK
После обновления до 4.3.3-alt4 перестаёт отвечать на запросы.
Откат до alt3 сразу лечит это поведение.

Запускается при этом нормально, конфигурация самая простая.
Аналогично сломано и в p8, где было и поймано.
Comment 1 Andrey Cherepanov 2017-01-26 15:31:15 MSK
Запускается нормально, но не выходит.
Comment 2 Anton Farygin 2017-01-26 15:50:11 MSK
Да, ещё и не выходит.
На системах с SysVInit запускается, но не отвечает на запросы. При этом завершает свою работу нормально. На системах с systemd - запускается и работает, но на SIGTERM не реагирует.
если просто из консоли запустить как dhcpd -d на sysvinit запускается и работает
Comment 3 Anton Farygin 2017-01-26 16:08:20 MSK
Разница в том, что на sysvinit не используется опция -f
Comment 4 stalker 2017-01-26 16:17:43 MSK
[root@stlk system]# systemctl start dhcpd
[root@stlk system]# netstat -nap | grep :67
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               6820/dhcpd          
[root@stlk system]# ps -aux | grep dhc
dhcpd     6820  0.0  0.1  97000 21272 ?        Ssl  16:14   0:00 /usr/sbin/dhcpd -4 -f --no-pid eth0 br0;

На p8 не отвечает.
А самое интересное..если руками запустить ровно с теми же опциями - всё работает.

через systemd ещё и завершается 1,5 минуты

time systemctl stop dhcpd
0.00user 0.00system 1:30.14elapsed 0%CPU (0avgtext+0avgdata
3552maxresident)k
0inputs+0outputs (0major+292minor)pagefaults 0swaps
Comment 5 Anton Farygin 2017-01-26 16:23:55 MSK
У меня на P8 под systemd работает.
Не работает под SysVinit, т.к. тут форкается сам dhcpd.
На systemd dhpcd не форкается, поэтому и работает.
Comment 6 stalker 2017-01-26 16:51:17 MSK
У меня даже после отката, если руками запустить
/usr/sbin/dhcpd -4 -f --no-pid eth0 br0;

то работает,а если через systemd нет
Comment 7 stalker 2017-01-26 16:58:16 MSK
в трейсе при этом

epoll_wait(4, [{EPOLLIN, {u32=8, u64=8}}], 64, -1) = 1
epoll_ctl(4, EPOLL_CTL_DEL, 8, 0x7ffef6fcf740) = 0
recvfrom(8, "\1\1\6\0007\t\354$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0RT\0?"..., 1540, 0, {sa_family=AF_INET, sin_port=htons(68), sin_addr=inet_addr("0.0.0.0")}, [16]) = 300
epoll_ctl(4, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=8, u64=8}}) = 0
epoll_wait(4, [{EPOLLIN, {u32=8, u64=8}}], 64, -1) = 1
epoll_ctl(4, EPOLL_CTL_DEL, 8, 0x7ffef6fcf740) = 0
recvfrom(8, "\1\1\6\0007\t\354$\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0RT\0?"..., 1540, 0, {sa_family=AF_INET, sin_port=htons(68), sin_addr=inet_addr("0.0.0.0")}, [16]) = 300
epoll_ctl(4, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=8, u64=8}}) = 0
epoll_wait(4, [{EPOLLIN, {u32=8, u64=8}}], 64, -1) = 1
epoll_ctl(4, EPOLL_CTL_DEL, 8, 0x7ffef6fcf740) = 0
recvfrom(8, "\1\1\6\0007\t\354$\0\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0RT\0?"..., 1540, 0, {sa_family=AF_INET, sin_port=htons(68), sin_addr=inet_addr("0.0.0.0")}, [16]) = 300
epoll_ctl(4, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=8, u64=8}}) = 0
epoll_wait(4,
Comment 8 Mikhail Efremov 2017-01-26 22:03:29 MSK
Что-то изменилось в библиотеках нового bind, похоже dhcpd уходит в deadlock.
Попробую для начала просто обновить его до актуальной версии.
Comment 9 Mikhail Efremov 2017-01-27 19:08:52 MSK
При ближайшем рассмотрении обновление dhcpd несколько более трудозатратная задача, чем я думал, так что отложим до лучших времен.
Проверьте dhcpd из #177232.
Comment 10 Anton Farygin 2017-01-27 19:39:01 MSK
Для проверки нужен таск для P8.
Comment 11 Mikhail Efremov 2017-01-27 19:44:43 MSK
> Проверьте dhcpd из #177232.

Только там решалась проблема с завершением dhcpd. Чинить работу под sysvinit я пока даже не пытался.
Comment 12 Anton Farygin 2017-01-27 21:27:22 MSK
т.е. - с -f всё ещё не работает ?
Comment 13 Mikhail Efremov 2017-01-27 22:09:36 MSK
Наоборот, не работает без. Это две разные проблемы.
С новой libbind у нас не только bind стал многопоточным, но и dhcpd. И к этому он оказался совершенно не готов.
Comment 14 Anton Farygin 2017-01-28 07:12:53 MSK
Ясно, ждём.
Comment 15 Lenar Shakirov 2017-01-28 12:20:06 MSK
Простите, увидел коммент про "многопоточность" и вспомнил про патч для другой баги, в котором фигурируют слова про "THREADS" :-)

http://git.altlinux.org/people/snejok/packages/bind.git?p=bind.git;a=commitdiff;h=1d72b684c5cbe2df95312d4f2d432c040c4c3c75

вот кстати бага:
https://bugzilla.altlinux.org/show_bug.cgi?id=31158
Comment 16 Dmitry V. Levin 2017-01-28 12:28:07 MSK
(In reply to comment #15)
> Простите, увидел коммент про "многопоточность" и вспомнил про патч для другой
> баги, в котором фигурируют слова про "THREADS" :-)
> 
> http://git.altlinux.org/people/snejok/packages/bind.git?p=bind.git;a=commitdiff;h=1d72b684c5cbe2df95312d4f2d432c040c4c3c75
> 
> вот кстати бага:
> https://bugzilla.altlinux.org/show_bug.cgi?id=31158

Объясните, пожалуйста, почему вы считаете, что тот патч ещё актуален.
Comment 17 Lenar Shakirov 2017-01-28 13:36:20 MSK
(В ответ на комментарий №16)
> Объясните, пожалуйста, почему вы считаете, что тот патч ещё актуален.

С новой версией bind в Sisyphus и p8 еще не проверял.
В ближайшее время проверю.
Comment 18 Mikhail Efremov 2017-01-31 01:36:17 MSK
Мне удалось получить похожие на рабочие сервер и dhcreley, но я сломался на dhclient. После чего посмотрел внимательно, наконец, как это собирают в Федоре. Они собирают с библиотеками от bind-9.9.9. И с ними dhcp работает, даже если библиотеки собраны с --enable-threads (Многопоточность в dhcp там не включается, хотя глядя на код я пока не понял почему, он не выглядит сильно другим. Впрочем, я не читал его целиком, так что отличие все же есть, очевидно).
Короче говоря, я думаю надо делать как в Федоре: собирать отдельно библиотеки от старого bind и собирать dhcp с ними.
Comment 19 Dmitry V. Levin 2017-01-31 11:46:22 MSK
(In reply to comment #18)
> Мне удалось получить похожие на рабочие сервер и dhcreley, но я сломался на
> dhclient. После чего посмотрел внимательно, наконец, как это собирают в Федоре.
> Они собирают с библиотеками от bind-9.9.9. И с ними dhcp работает, даже если
> библиотеки собраны с --enable-threads (Многопоточность в dhcp там не
> включается, хотя глядя на код я пока не понял почему, он не выглядит сильно
> другим. Впрочем, я не читал его целиком, так что отличие все же есть,
> очевидно).
> Короче говоря, я думаю надо делать как в Федоре: собирать отдельно библиотеки
> от старого bind и собирать dhcp с ними.

Если в федоре не осилили, это не основание опускать руки.
Comment 20 Mikhail Efremov 2017-01-31 15:08:01 MSK
(In reply to comment #18)
> библиотеки собраны с --enable-threads (Многопоточность в dhcp там не
> включается, хотя глядя на код я пока не понял почему, он не выглядит сильно
> другим. Впрочем, я не читал его целиком, так что отличие все же есть,
> очевидно).

Ну, в целом ясно. Dhcp собирался с *-export библиотеками, в которых потоки были
выключены. В bind-9.10 *-export библиотек больше нет и теперь с патчем Большакова dhcp собирается с библиотеками, в которых потоки включены. В результате все dhcp* хозяйство стало многопоточным, чего апстрим не предполагал, они просто написаны без поддержки подобного варианта.

(In reply to comment #19)
> > Короче говоря, я думаю надо делать как в Федоре: собирать отдельно библиотеки
> > от старого bind и собирать dhcp с ними.
> 
> Если в федоре не осилили, это не основание опускать руки.

Зато не переписывать dhcp с поддержкой многопоточности - вполне основание, на мой взгляд. Нам так нужны многопоточные dhcp сервер и клиент?
Есть еще вариант добавить в библиотеки bind поддержку runtime-выбора включения/выключения многопоточности, но я не уверен, что оно того стоит.
Если даже при этом dhcp будет работать с текущими библиотеками bind, нет никаких гарантий, что будет работать со следующей. Австрим ведь ведь хоронит dhcp и заменяет его Kea, насколько я понимаю.
Думаю лучше уж сразу собирать dhcp с теми библиотеками, с которыми он должен работать, а не с теми, с которыми апстрим никогда не предполагал его работу.
Comment 21 Dmitry V. Levin 2017-01-31 15:34:51 MSK
(In reply to comment #20)
> (In reply to comment #18)
> > библиотеки собраны с --enable-threads (Многопоточность в dhcp там не
> > включается, хотя глядя на код я пока не понял почему, он не выглядит сильно
> > другим. Впрочем, я не читал его целиком, так что отличие все же есть,
> > очевидно).
> 
> Ну, в целом ясно. Dhcp собирался с *-export библиотеками, в которых потоки были
> выключены. В bind-9.10 *-export библиотек больше нет.

export-библиотеки это чисто федорное изобретение. Может, вернём их?
Вернуть export-библиотеки от bind-9.9 проще, конечно, чем от текущей версии.

Хотя в https://fedorahosted.org/fpc/ticket/502 они пишут, что dhcp не работает с библиотеками от bind-9.10, складывается ощущение, что если эти библиотеки просто собрать с --disable-threads, то dhcp будет нормально с ними работать.
Comment 22 Mikhail Efremov 2017-01-31 16:13:38 MSK
(In reply to comment #21)
> (In reply to comment #20)
> > (In reply to comment #18)
> > > библиотеки собраны с --enable-threads (Многопоточность в dhcp там не
> > > включается, хотя глядя на код я пока не понял почему, он не выглядит сильно
> > > другим. Впрочем, я не читал его целиком, так что отличие все же есть,
> > > очевидно).
> > 
> > Ну, в целом ясно. Dhcp собирался с *-export библиотеками, в которых потоки были
> > выключены. В bind-9.10 *-export библиотек больше нет.
> 
> export-библиотеки это чисто федорное изобретение. Может, вернём их?

Нет, это было в апстриме. В Федоре только отрывали bundled bind в релизе dhcp и собирали с системным. Эти патчи и у нас, конечно.

> Вернуть export-библиотеки от bind-9.9 проще, конечно, чем от текущей версии.

От текущей версии - это именно то, чего в Федоре не осилили
https://bugzilla.redhat.com/show_bug.cgi?id=1181562#c5
Но похоже есть надежда, что апстрим сделает версию dhcp, рабочую с bind-9.10. Хоть и нет гарантий. В Федоре, собственно, и решили переждать на старых библиотеках.

> Хотя в https://fedorahosted.org/fpc/ticket/502 они пишут, что dhcp не работает
> с библиотеками от bind-9.10, складывается ощущение, что если эти библиотеки
> просто собрать с --disable-threads, то dhcp будет нормально с ними работать.

https://lists.isc.org/pipermail/bind-users/2015-February/094640.html
Еще нужно --disable-epoll, тогда почти работает. На сигналы все равно не реагирует, но тут поможет мой патч как раз.
Comment 23 Mikhail Efremov 2017-02-01 18:09:23 MSK
Я пока соберу dhcp с библиотеками bind-9.9.9. Надо его починить, наконец, а то он и в p8 сломан.
Далее уже без спешки можно экспериментировать с его сборкой на Сизифе.
Comment 24 Repository Robot 2017-02-01 22:29:34 MSK
dhcp-1:4.3.3-alt5 -> sisyphus:

* Wed Feb 01 2017 Mikhail Efremov <sem@altlinux> 1:4.3.3-alt5
- Use _unpackaged_files_terminate_build.
- Build with bind-9.9.9 libraries (closes: #33053).
Comment 25 Anton Farygin 2017-02-01 23:07:05 MSK
Миша, спасибо. Завтра проверю.
Comment 26 stalker 2017-02-02 20:20:50 MSK
Следующие НОВЫЕ пакеты будут установлены:
  libisc-export-dhcp
4 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B/2168kB архивов.
После распаковки потребуется дополнительно 2114kB дискового пространства.
Продолжить? [Y/n] y
Совершаем изменения...  
Preparing...                                    ################################################################################################### [100%]
file /usr/lib64/libirs-export.so.91.0.3 from install of libisc-export-dhcp-9.9.9-alt1.M80P.1 conflicts with file from package libisc-export-9.9.8-alt5
file /usr/lib64/libisc-export.so.106 from install of libisc-export-dhcp-9.9.9-alt1.M80P.1 conflicts with file from package libisc-export-9.9.8-alt5
file /usr/lib64/libisccfg-export.so.90 from install of libisc-export-dhcp-9.9.9-alt1.M80P.1 conflicts with file from package libisc-export-9.9.8-alt5
E: Ошибка во время исполнения транзакции
Comment 27 Mikhail Efremov 2017-02-02 20:33:54 MSK
(In reply to comment #26)
> E: Ошибка во время исполнения транзакции

Да, конфликт я забыл поставить.
Comment 28 Dmitry V. Levin 2017-02-03 03:06:48 MSK
(In reply to comment #27)
> (In reply to comment #26)
> > E: Ошибка во время исполнения транзакции
> 
> Да, конфликт я забыл поставить.

конфликт по soname? это точно не provides+obsoletes?
Comment 29 Mikhail Efremov 2017-02-03 13:17:58 MSK
Ну да, поставил obsoletes. Provides не стал. хотя может зря.