воскресенье, 8 ноября 2015 г.

Solaris: Сборка libevent 2.1.x 64 бита

Как минимум, libevent используется для Tor и Unbound. И, в принципе, можно было бы взять ее из репозитория OpenCSW, но вот беда - там старая библиотека. Мягко говоря. Это вообще беда подавляющего большинства публичных репозиториев - там лежит тухлятина. Которая обновляется раз в пятилетку.

Единственная возможность - взять на сайте свежую версию и собрать. 

Однако матерых соляристов поджидает один сюрприз. 

2.0.x собирается, все хорошо. Со всеми опциями. А вот 2.1 подхватывает старый openssl (0.9.7), который штатно включен в Солярис.

Можно, конечно, отключить поддержку SSL. Но вот как раз для двух вышеуказанных софтов этого делать и не следует, поскольку именно им поддержка эта как раз и нужна.

Вопрос: Как собрать libevent на Солярис с правильной версией openssl?

Ответ: Есть хинт, как это сделать.

Для начала нужно взять openssl из OpenCSW - там он относительно свежий, но, самое главное - он там дуальный, 32 и 64 бита.

Дело за малым: правильно сконфигурировать libevent перед компиляцией.

 # 32 bit GCC (for 2.1.x)  
 ./configure 'CFLAGS=-O3 -m32 -mtune=native -pipe' 'CPPFLAGS=-I/opt/csw/include' 'PKG_CONFIG_PATH=/opt/csw/lib/pkgconfig'  
 # 64 bit GCC (for 2.1.x)  
 ./configure 'CFLAGS=-O3 -m64 -mtune=native -pipe' 'CPPFLAGS=-I/opt/csw/include' 'PKG_CONFIG_PATH=/opt/csw/lib/pkgconfig'  
   
 gmake && gmake install-strip  
   
 # 64 bit CC (for 2.1.x)  
 # PKG_CONFIG_PATH должен указывать в директорию pkgconfig с нужной версией openssl (для Solaris)  
 export CC=`which cc`  
 ./configure 'CFLAGS=-xO5 -m64 -xtarget=native' 'CPPFLAGS=-I/opt/csw/include' 'PKG_CONFIG_PATH=/opt/csw/lib/pkgconfig'  
   
 make && make install-strip  
   

Пояснение. pkg-config на Солярис по умолчанию идет за библиотеками в /usr/lib/pkgconfig. Где - сюрприз! - лежит описание только старой версии openssl (штатной). Хотя конфигуратор libevent и не содержит документированного параметра PKG_CONFIG_PATH, его можно и нужно задать, направив в директорию CSW вашего сервера, где лежит описание правильной версии openssl (которую вы установили из репозитория).

Вот и все, ребята!

PS. И не забудьте перекомпилировать весь софт, который использует libevent.