dadv: (Default)
[personal profile] dadv

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

Date: 2012-05-01 14:35 (UTC)
From: [identity profile] denis-sotchenko.livejournal.com
Опытный некромант должен помнить UPDATING вечно!

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios