Bug 46191

Summary: libevent: ошибка сборки с glibc 2.36
Product: Sisyphus Reporter: Alexey Sheplyakov <asheplyakov>
Component: libeventAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: asheplyakov, asheplyakov, glebfm, iv, ldv, nir, placeholder, sin
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 45802    

Description Alexey Sheplyakov 2023-05-18 20:23:43 MSK
/bin/sh ./libtool  --tag=CC   --mode=link loongarch64-alt-linux-gcc  -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -Wall -fno-strict-aliasing  -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch -Wno-unused-parameter -Wstrict-aliasing -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement -Waddress -Wnormalized=id -Woverride-init -Wlogical-op   -o sample/signal-test sample/signal-test.o  libevent.la -lcrypto
libtool: link: loongarch64-alt-linux-gcc -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -Wall -fno-strict-aliasing -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch -Wno-unused-parameter -Wstrict-aliasing -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement -Waddress -Wnormalized=id -Woverride-init -Wlogical-op -o sample/.libs/signal-test sample/signal-test.o  ./.libs/libevent.so -lcrypto
ld: ./.libs/libevent.so: undefined reference to `arc4random_addrandom'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:1497: sample/signal-test] Error 1
make[1]: Leaving directory '/usr/src/RPM/BUILD/libevent-2.1.8'
make[1]: *** Waiting for unfinished jobs....

Похоже на https://github.com/libevent/libevent/pull/1427
Comment 1 Alexey Sheplyakov 2023-05-18 21:25:07 MSK
http://git.altlinux.org/people/asheplyakov/packages/libevent.git tags/2.1.12-alt1
Comment 2 Alexey Sheplyakov 2023-05-18 21:27:14 MSK
#321176 FAILED #1 [test-only] sisyphus libevent.git=2.1.12-alt1

FAILED потому что поехало ABI, и нужно пересобрать клиентов (MySQL, chromium, и всякое такое)
Comment 3 Dmitry V. Levin 2023-05-18 21:41:34 MSK
task add rebuild-unmets?
Comment 4 Alexey Sheplyakov 2023-05-18 21:59:09 MSK
(Ответ для Dmitry V. Levin на комментарий #3)
> task add rebuild-unmets?

Вопрос в другом: есть ли какие-то возражения против обновления на 2.1.12 (и последующей массовой пересборки)?
Comment 5 Dmitry V. Levin 2023-05-18 22:05:49 MSK
У пакета много пользователей, но по сути нет мантейнера, поэтому, я думаю, результат пересборки зависимых пакетов будет определяющим.
Comment 6 Alexey Sheplyakov 2023-05-18 22:35:58 MSK
(Ответ для Dmitry V. Levin на комментарий #5)
> У пакета много пользователей, но по сути нет мантейнера,

Значит я буду.

> поэтому, я думаю, результат пересборки зависимых пакетов будет определяющим.

Автоматика не осилила, с первого взгляда видно, что chromium надо было собирать последним.
Comment 7 Alexey Sheplyakov 2023-05-19 12:29:36 MSK
Падает тест openldap:

[00:21:14] Starting lloadd on TCP/IP port 9011...
[00:21:15] ./scripts/lloadd/test000-rootdse: line 70: 3131293 Aborted                 $SLAPD -f $CONF1.slapd -h $URI6 -d $LVL > $LOG1 2>&1
[00:21:15] Using ldapsearch to retrieve the root DSE...
[00:21:15] <39>May 19 08:16:53 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:15] Waiting 7 seconds for lloadd to start...
[00:21:22] <39>May 19 08:17:00 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:22] Waiting 7 seconds for lloadd to start...
[00:21:29] <39>May 19 08:17:07 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:29] Waiting 7 seconds for lloadd to start...
[00:21:36] <39>May 19 08:17:14 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:36] Waiting 7 seconds for lloadd to start...
[00:21:43] <39>May 19 08:17:21 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:43] Waiting 7 seconds for lloadd to start...
[00:21:50] <39>May 19 08:17:28 lt-ldapsearch: DIGEST-MD5 common mech free
[00:21:50] Waiting 7 seconds for lloadd to start...
[00:21:57] ./scripts/lloadd/test000-rootdse: line 100: kill: (3131293) - No such process
[00:21:57] >>>>> Test failed
[00:21:57] <39>May 19 08:17:35 lt-slapd[3131241]: DIGEST-MD5 common mech free
[00:21:57] <39>May 19 08:17:35 lt-slapd[3131235]: DIGEST-MD5 common mech free
[00:21:57] <39>May 19 08:17:35 lt-slapd[3131244]: DIGEST-MD5 common mech free
[00:21:57] <39>May 19 08:17:35 lt-slapd[3131235]: DIGEST-MD5 common mech free
[00:21:57] <39>May 19 08:17:35 lt-slapd[3131244]: DIGEST-MD5 common mech free
[00:21:57] >>>>> 00:00:44 Failed   test000-rootdse for lloadd+mdb after 44 seconds
[00:21:57] (exit 255)

На loongarch падает этот же тест с вот такой диагностикой:

64673ab3.388d97f2 0x7ffff3bf4100 lt-slapd startup: initiated.
64673ab3.3897095e 0x7ffff31370c0 lloadd startup: failed to set up for async name resolution
64673ab3.3899ed86 0x7ffff3bf4100 backend_startup: bi_open 4 (lload) failed!
64673ab3.389a1b4e 0x7ffff3bf4100 lt-slapd shutdown: initiated
lt-slapd: module_init.c:132: lload_back_close: Assertion `lloadd_inited == 1' failed.

Это похоже на https://github.com/libevent/libevent/issues/1155
Comment 8 Alexey Sheplyakov 2023-05-19 13:51:55 MSK
(Ответ для Alexey Sheplyakov на комментарий #7)
> Падает тест openldap:
> 
> [00:21:14] Starting lloadd on TCP/IP port 9011...
> [00:21:15] ./scripts/lloadd/test000-rootdse: line 70: 3131293 Aborted       
> $SLAPD -f $CONF1.slapd -h $URI6 -d $LVL > $LOG1 2>&1
> [00:21:15] Using ldapsearch to retrieve the root DSE...
> [00:21:15] <39>May 19 08:16:53 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:15] Waiting 7 seconds for lloadd to start...
> [00:21:22] <39>May 19 08:17:00 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:22] Waiting 7 seconds for lloadd to start...
> [00:21:29] <39>May 19 08:17:07 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:29] Waiting 7 seconds for lloadd to start...
> [00:21:36] <39>May 19 08:17:14 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:36] Waiting 7 seconds for lloadd to start...
> [00:21:43] <39>May 19 08:17:21 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:43] Waiting 7 seconds for lloadd to start...
> [00:21:50] <39>May 19 08:17:28 lt-ldapsearch: DIGEST-MD5 common mech free
> [00:21:50] Waiting 7 seconds for lloadd to start...
> [00:21:57] ./scripts/lloadd/test000-rootdse: line 100: kill: (3131293) - No
> such process
> [00:21:57] >>>>> Test failed
> [00:21:57] <39>May 19 08:17:35 lt-slapd[3131241]: DIGEST-MD5 common mech free
> [00:21:57] <39>May 19 08:17:35 lt-slapd[3131235]: DIGEST-MD5 common mech free
> [00:21:57] <39>May 19 08:17:35 lt-slapd[3131244]: DIGEST-MD5 common mech free
> [00:21:57] <39>May 19 08:17:35 lt-slapd[3131235]: DIGEST-MD5 common mech free
> [00:21:57] <39>May 19 08:17:35 lt-slapd[3131244]: DIGEST-MD5 common mech free
> [00:21:57] >>>>> 00:00:44 Failed   test000-rootdse for lloadd+mdb after 44
> seconds
> [00:21:57] (exit 255)
> 
> На loongarch падает этот же тест с вот такой диагностикой:
> 
> 64673ab3.388d97f2 0x7ffff3bf4100 lt-slapd startup: initiated.
> 64673ab3.3897095e 0x7ffff31370c0 lloadd startup: failed to set up for async
> name resolution
> 64673ab3.3899ed86 0x7ffff3bf4100 backend_startup: bi_open 4 (lload) failed!
> 64673ab3.389a1b4e 0x7ffff3bf4100 lt-slapd shutdown: initiated
> lt-slapd: module_init.c:132: lload_back_close: Assertion `lloadd_inited ==
> 1' failed.
> 
> Это похоже на https://github.com/libevent/libevent/issues/1155

Ошибка вызвана тем, что /etc/resolv.conf в сборочнице пустой.
Код в openldap (servers/lloadd/daemon.c) делает следующее:

1235 int
1236 lloadd_daemon( struct event_base *daemon_base )
1237 {
1238     int i, rc;
1239     LloadTier *tier;
1240     struct event_base *base;
1241     struct event *event;
1242     struct timeval second = { 1, 0 };
1243 
1244     assert( daemon_base != NULL );
1245 
1246     dnsbase = evdns_base_new( daemon_base, EVDNS_BASE_INITIALIZE_NAMESERVERS );
1247     if ( !dnsbase ) {
1248         Debug( LDAP_DEBUG_ANY, "lloadd startup: "
1249                 "failed to set up for async name resolution\n" );
1250         return -1;
1251     }

evdns_base_new выдаёт ошибку, если не удалось разобрать /etc/resolv.conf (или он отсутствует), и lloadd не стартует.


Для эксплуатации openldap (nfs, и прочих сетевых служб) поведение "не работает DNS - выругался и упал" - правильное и желательное, а для тестов в изолированном окружении - не очень.
Загвоздка в том, что у libevent нет "ручек" (файла настроек, переменных окружения), чтобы переключиться между режимами "нормальная эксплуатация" и "тестирование", и разработчик(и) libevent не видят в ней необходимости, см. https://github.com/libevent/libevent/issues/1155#issuecomment-918826471

В libevent 2.1.8 проверка на наличие и правильность /etc/resolv.conf сломана, её починили позже, а именно в
https://github.com/libevent/libevent/commit/c3f353450e94248ee677a068ed2c4ed29d64f79e


Есть несколько вариантов решения:

1) Отключить тест lloadd в openldap
2) Соорудить какой-то непустой /etc/resolv.conf
3) Запатчить libevent, чтобы она игнорировала битый/отсутствующий /etc/resolv.conf (очень, очень плохой вариант).
4) Перенаправить операции с /etc/resolv.conf (stat, open) (cmocka или ещё какой LD_PRELOAD).

Лично я предпочитаю вариант 2 (непустой /etc/resolv.conf), но не знаю, как его соорудить в хешернице.
Comment 9 Alexey Sheplyakov 2023-05-22 06:30:59 MSK
> > Это похоже на https://github.com/libevent/libevent/issues/1155
> 
> Ошибка вызвана тем, что /etc/resolv.conf в сборочнице пустой.
> evdns_base_new выдаёт ошибку, если не удалось разобрать /etc/resolv.conf
> (или он отсутствует), и lloadd не стартует.
> 
> 
> Для эксплуатации openldap (nfs, и прочих сетевых служб) поведение "не
> работает DNS - выругался и упал" - правильное и желательное, а для тестов в
> изолированном окружении - не очень.
> Загвоздка в том, что у libevent нет "ручек" (файла настроек, переменных
> окружения), чтобы переключиться между режимами "нормальная эксплуатация" и
> "тестирование", и разработчик(и) libevent не видят в ней необходимости, см.
> https://github.com/libevent/libevent/issues/1155#issuecomment-918826471
> 
> В libevent 2.1.8 проверка на наличие и правильность /etc/resolv.conf
> сломана, её починили позже, а именно в
> https://github.com/libevent/libevent/commit/
> c3f353450e94248ee677a068ed2c4ed29d64f79e
> 
> 
> Есть несколько вариантов решения:
> 
> 1) Отключить тест lloadd в openldap
> 2) Соорудить какой-то непустой /etc/resolv.conf
> 3) Запатчить libevent, чтобы она игнорировала битый/отсутствующий
> /etc/resolv.conf (очень, очень плохой вариант).
> 4) Перенаправить операции с /etc/resolv.conf (stat, open) (cmocka или ещё
> какой LD_PRELOAD).
> 
> Лично я предпочитаю вариант 2 (непустой /etc/resolv.conf), но не знаю, как
> его соорудить в хешернице.

В итоге сделал, чтобы пустой /etc/resolv.conf не вызывал ошибки.
Во-первых, это сохраняет текущее поведение и соблюдает принцип наименьшего удивления.
Во-вторых, в libevent 2.2 такое поведение будет "из коробки", см. https://github.com/libevent/libevent/commit/ebd7e8d7930df0ef9f11a23309c59cded735e7c4
Comment 10 Alexey Sheplyakov 2023-05-22 06:32:02 MSK
#321176 EPERM #9 sisyphus libevent.git=2.1.12-alt1 MySQL.git=8.0.30-alt1.1 openldap.git=2.6.4-alt1 avahi.git=avahi-0.8-alt2 bfgminer.git=5.5.0-alt2 bitcoin.git=24.0.1-alt1 hiredis.git=1.1.0-alt1 ccnet.git=7.1.1-alt1 memcached.git=1.6.19-alt1 srpm=fstrm-0.6.1-alt1_2.src.rpm fvwm3.git=1.0.5-alt2 gearmand.git=1.1.19.1-alt1 getstream.git=20120411-alt4 libcamera.git=0.0.5-alt1.1 libcoeurl.git=0.1.1-alt2 srpm=libevhtp-1.2.18-alt1_4.src.rpm srpm=libverto-0.3.2-alt1_1.src.rpm srpm=links2-2.29-alt1.src.rpm lldpd.git=1.0.16-alt1 lua5.1-module-event.git=lua5.1-event-0.4.6-alt1 lua5.3-module-event.git=lua5.3-event-0.4.6-alt1 lua5.4-module-event.git=lua5.4-event-0.4.6-alt1 netatalk.git=3.1.13-alt1 nfs.git=nfs-2.6.3-al
t1 nsd.git=4.6.1-alt1 ocproxy.git=1.60-alt1 unbound.git=1.17.1-alt1 srpm=perl-Event-Lib-1.03-alt7.src.rpm pgbouncer.git=1.16.1-alt1 qt5-webengine.git=5.15.13-alt2 qt6-webengine.git=6.4.2-alt1 rsyslog.git=8.2304.0-alt1 scanssh.git=2.1.2-alt1 seafile.git=8.0.6-alt1 srpm=seamonkey-2.53.14-alt1.src.rpm sstp-client.git=1.0.12-alt1 suricata.git=6.0.10-alt1 taler.git=0.15.0.1-alt6 thrift.git=0.18.1-alt1 thunderbird.git=102.11.0-alt1 tmate.git=2.4.0-alt2 tmux.git=3.3a-alt2 tor.git=0.4.7.13-alt1 trickle.git=1.07-alt5 ustreamer.git=ustreamer-5.38-alt1 webdis.git=0.1.20-alt1 zabbix.git=6.0.16-alt1 chromium.git=113.0.5672.63-alt1 coturn.git=4.5.2-alt1 srpm=chromium-gost-111.0.5563.64-alt1.src.rpm transmission.git=3.00-alt2.1 ossec-hids.git=3.6.0-alt2
Comment 11 Repository Robot 2023-05-23 20:43:41 MSK
libevent-2.1.12-alt1 -> sisyphus:

 Thu May 18 2023 Alexey Sheplyakov <asheplyakov@altlinux> 2.1.12-alt1
 - 2.1.12
 - Use python3 to run python scripts (closes: #40742).
 - Fixed build with glibc 2.36 and newer (closes: #46191).