Пытаюсь собрать Manticore 3.5.2 (да и 3.5.1 тоже пробовал) на Ubuntu 20.04 и Arch Linux, но cmake пишет странные ошибки (одинаковые и в убунте, и в арче):
-- Could NOT find Boost: missing: context (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.61.0"))
[...]
-- Could NOT find Boost: missing: system (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0"))
-- Checking for std::shared_ptr is usable ...
-- Performing Test HAVE_STD_SHARED_PTR__res_
-- Performing Test HAVE_STD_SHARED_PTR__res_ - Failed
-- Checking for std::tr1::shared_ptr ...
-- Performing Test HAVE_BOOST_SHARED_PTR_HPP__res_
-- Performing Test HAVE_BOOST_SHARED_PTR_HPP__res_ - Failed
-- Looking for C++ include boost/shared_ptr.hpp
-- Looking for C++ include boost/shared_ptr.hpp - not found
CMake Error at /home/andreymal/tmp/cache/galera-cmake-3.x-5.7-src/CMakeLists.txt:171 (message):
No shared ptr available
Но Boost естественно установлен, и все требуемые либы стоят (копировал apt-get install из документации), все нужные исходники в /usr/include/boost лежат.
может выставить BOOST ROOT переменную окружения - которая будет указывать в boost?
какая версия cmake у вас? бывает что ставится из пакета старая версия cmake и она не находит нуэный буст - попробуйте собрать \ поставить самый свежий cmake
Попробовал с разными комбинациями BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR — ничего не изменилось.
Но спасибо за наводку: погуглив в этом направлении, я обнаружил, что:
с опцией -DBoost_NO_BOOST_CMAKE=ON cmake успешно отрабатывает;
если запустить cmake с переменной окружения CXXFLAGS="-Wno-error=deprecated-copy", то после этого Manticore успешно собирается в убунте;
а с CXXFLAGS="-Wno-error=deprecated-copy -Wno-error=stringop-truncation"почти собирается в арче, но на 89% сборки начинает писать какие-то странные ошибки про secondaryindex.cpp.
В принципе можно считать, что цель достигнута и Manticore в убунте успешно собран (с арчем я потом ещё поиграюсь), правда, остаётся интересно, почему без опции Boost_NO_BOOST_CMAKE собираться не хочет
попробуйте собрать \ поставить самый свежий cmake
В убунте 3.16.3, в арче 3.18.3, вроде свежее особо и некуда
В исходниках есть папочка dist, а в ней build_dockers под все актуальные системы.
В целом - начиная с bionic можно собирать с бустом, который есть в репозитории.
Но мы, ради унификации, собираем буст сами, и в докерфайлах это отражено.
в gentoo ~amd64 удалось пройти cmake -DWITH_MYSQL=1 -DWITH_RE2=1 …
после правки line 489 : manticoresearch/build/boost-context-src/tools/build/src/build/feature.jam
# import errors ;
# errors.error "$(values[1])" is not a known value of feature
# $(feature) : legal “values:” "$($(feature).values)" ;
но далее make валится где-то на 43%
в gentoo ~x86 cmake -DWITH_MYSQL=1 -DWITH_RE2=1 -DBoost_NO_BOOST_CMAKE=ON …
проходит без правки feature.jam, но при сборке тоже в районе галеры валится
в gentoo она свежая как и на https://galeracluster.com
Проще просто поставить буст. Ровно две команды: ./bootstrap.sh && ./b2 install --with-context --with-system runtime-link=static
После этого конфигурация будет просто его использовать, все скачивания/клонирования в процессе станут не нужными и не будут вызываться.
А что касается галеры - там история чуть иная. На гитхабе зоопарк разных версий, но нам важно совпадение версии API. В файле wsrep_api.h есть строчка "#define WSREP_INTERFACE_VERSION “31"” - вот именно 31-я версия нужна. Насколько она “свежая” в рамках gentoo - совершенно неважно, если не совпадёт то просто не взлетит.
(оригинальная галера билдится просто как блоб, версию по бинарю узнать невозможно, можно лишь попробовать её загрузить. Мы в своей сборке кладём эту версию в soversion - чтобы лишний раз не гадать. Оригинальная галера билдится скунсом, у нас сборка через cmake, сборка портирована из скунса. Ну и если взять галеру от mysql/maria - она тупо не подойдёт по версии (у них там что-то вроде 24 или 28; нужного нам 31 просто так нет)).
Однако наличие галеры критично только для репликации. Если её нет - всё остальное работать по-прежнему будет!