dadv: (Default)

При обновлении удаленного сервера 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, но кто ж помнит прочитанное однажды четыре года назад и ни разу не использованное на практике :-)

Profile

dadv: (Default)
Choose your future

June 2017

M T W T F S S
   1234
56 7891011
12131415161718
19202122232425
2627282930  

Syndicate

RSS Atom

Tags

Style Credit

Powered by Dreamwidth Studios