KSE R.I.P.
2012-05-01 16:54![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
При обновлении удаленного сервера FreeBSD 6.4-STABLE до 7.4-STABLE через source upgrade path, а потом и до 8.3-STABLE, столкнулся с одной проблемой. После поднятия системы до 7.4 приложения из портов не пересобирал, имея в ядре options COMPAT_FREEBSD6
- поддержку бинарной совместимости для старых приложений. В таком состоянии система прекрасно отработала неделю, выполняя всё множество функций.
На втором этапе, после обновления до 8.3, перестали работать тредовые приложения, в первую очередь все milters. kdump показал:
18998 spamass-milter CALL #381 18998 spamass-milter RET #381 -1 errno 78 Function not implemented ... 18998 spamass-milter GIO fd 2 wrote 20 bytes "kse_create() failed "
Оказалось, что из восьмерки выкинули KSE - старую ядерную реализацию многопоточности M:N, не сохранив бинарную совместимость на уровне syscalls, а только на уровне замены библиотек, то есть для работы старых многопоточных бинарников без их пересборки нужно написать в /etc/libmap.conf:
libpthread.so.1 libthr.so.1 libpthread.so.2 libthr.so.2 libkse.so.3 libthr.so.3
Получился неприятный сюрприз. Но в итоге всё заработало. Вообще, это документировано в /usr/src/UPDATING в записи 20080312, но кто ж помнит прочитанное однажды четыре года назад и ни разу не использованное на практике :-)
no subject
Date: 2012-05-01 14:35 (UTC)