Bug 33053 - Не отвечает на запросы при запуске через SysVInit
: Не отвечает на запросы при запуске через SysVInit
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/dhcp-server)
: unstable
: all Linux
: P3 blocker
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2017-01-26 15:09 by
Modified: 2017-02-03 13:17 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


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

Запускается при этом нормально, конфигурация самая простая.
Аналогично сломано и в p8, где было и поймано.
------- Comment #1 From 2017-01-26 15:31:15 -------
Запускается нормально, но не выходит.
------- Comment #2 From 2017-01-26 15:50:11 -------
Да, ещё и не выходит.
На системах с SysVInit запускается, но не отвечает на запросы. При этом
завершает свою работу нормально. На системах с systemd - запускается и
работает, но на SIGTERM не реагирует.
если просто из консоли запустить как dhcpd -d на sysvinit запускается и
работает
------- Comment #3 From 2017-01-26 16:08:20 -------
Разница в том, что на sysvinit не используется опция -f
------- Comment #4 From 2017-01-26 16:17:43 -------
[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 From 2017-01-26 16:23:55 -------
У меня на P8 под systemd работает.
Не работает под SysVinit, т.к. тут форкается сам dhcpd.
На systemd dhpcd не форкается, поэтому и работает.
------- Comment #6 From 2017-01-26 16:51:17 -------
У меня даже после отката, если руками запустить
/usr/sbin/dhcpd -4 -f --no-pid eth0 br0;

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

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 From 2017-01-26 22:03:29 -------
Что-то изменилось в библиотеках нового bind, похоже dhcpd уходит в deadlock.
Попробую для начала просто обновить его до актуальной версии.
------- Comment #9 From 2017-01-27 19:08:52 -------
При ближайшем рассмотрении обновление dhcpd несколько более трудозатратная
задача, чем я думал, так что отложим до лучших времен.
Проверьте dhcpd из #177232.
------- Comment #10 From 2017-01-27 19:39:01 -------
Для проверки нужен таск для P8.
------- Comment #11 From 2017-01-27 19:44:43 -------
> Проверьте dhcpd из #177232.

Только там решалась проблема с завершением dhcpd. Чинить работу под sysvinit я
пока даже не пытался.
------- Comment #12 From 2017-01-27 21:27:22 -------
т.е. - с -f всё ещё не работает ?
------- Comment #13 From 2017-01-27 22:09:36 -------
Наоборот, не работает без. Это две разные проблемы.
С новой libbind у нас не только bind стал многопоточным, но и dhcpd. И к этому
он оказался совершенно не готов.
------- Comment #14 From 2017-01-28 07:12:53 -------
Ясно, ждём.
------- Comment #15 From 2017-01-28 12:20:06 -------
Простите, увидел коммент про "многопоточность" и вспомнил про патч для другой
баги, в котором фигурируют слова про "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 From 2017-01-28 12:28:07 -------
(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 From 2017-01-28 13:36:20 -------
(В ответ на комментарий №16)
> Объясните, пожалуйста, почему вы считаете, что тот патч ещё актуален.

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

Если в федоре не осилили, это не основание опускать руки.
------- Comment #20 From 2017-01-31 15:08:01 -------
(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 From 2017-01-31 15:34:51 -------
(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 From 2017-01-31 16:13:38 -------
(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 From 2017-02-01 18:09:23 -------
Я пока соберу dhcp с библиотеками bind-9.9.9. Надо его починить, наконец, а то
он и в p8 сломан.
Далее уже без спешки можно экспериментировать с его сборкой на Сизифе.
------- Comment #24 From 2017-02-01 22:29:34 -------
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 From 2017-02-01 23:07:05 -------
Миша, спасибо. Завтра проверю.
------- Comment #26 From 2017-02-02 20:20:50 -------
Следующие НОВЫЕ пакеты будут установлены:
  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 From 2017-02-02 20:33:54 -------
(In reply to comment #26)
> E: Ошибка во время исполнения транзакции

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

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