Я конечно всё понимаю но я совершенно не ожидал такого говнокода от уважаемой компании Yandex. Мне кажется ТАКОЙ код порочит систему сборки CMake так и компанию Yandex.
Что меня поразило:
UPDATE: Собрать получилось, но запустить - нет так нету поддержки префиксов.
Поддерживаю!
Товарищи, я все понимаю ("официально" работает только на Ubuntu и т. д.), но очень обидно, что собирать проект под что-нибудь мало-мальски отличающееся от бубунты настолько сложно.
Конструктивное предложение: вы принимаете патчи для системы сборки? Я думаю, они бы пригодились.
У нас в команде нет людей, которые хорошо знают CMake.
Да, отправляйте патчи. Примем обязательно.
Нашёлся один человек, который не так плохо знает CMake.
Спасибо за конструктивный ответ.
Ну я лично увидел что зависимости бандлятся и сразу расхотелось трогать проект. Если это не принципиально, и изменения где их использование будет убрано под опцию (а в идеале они вообще будут выкинуты из репозитория) будут приняты, то могу попробовать поковырять. Сразу вопрос, оно под FreeBSD имеет шанс собраться, или там что-то Linux-специфичное используется? Вообще не, мне это не интересно.
Сразу вопрос, оно под FreeBSD имеет шанс собраться, или там что-то Linux-специфичное используется?
Я думаю это было бы совсем плохо если ClickHouse нельзя было бы собрать под FreeBSD. Под MacOSX вроде работает так что должно.
Правда сейчас без хаков CMake файлов ничего не собралось у меня
PS и ещё пришлось mysql интерфейс в коде малёк подправить так как в новых версиях они немного поменяли: my_thread_init() - > mysql_thread_init() и т.д.
Вообще не, мне это не интересно.
Я привёл тебя в пример только в том смысле, что всегда можно проконсультироваться у коллег. :)
Навскидку:
CMAKE_INSTALL_PREFIX, CMAKE_BUILD_TYPE/usr/local, /usr/lib/x86_64-linux-gnu/glib-2.0/include/ и прочего)*_FLAGS только добавением (set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ...)FIND_PACKAGE, если нет модуля в cmake то написать модуль из 5 строчек, никаких bundled зависимостейBEFORE (include_directories(BEFORE contrib/libpoco/Data/MySQL/include)-ldl -> ${CMAKE_DL_LIBS}Сразу вопрос, оно под FreeBSD имеет шанс собраться, или там что-то Linux-специфичное используется?
Коллега на днях собрал под FreeBSD 11. https://github.com/yandex/ClickHouse/pull/286
Как раз вспоминал, кто просил об этой возможности.
Стало лучше?
Лучше стало хотя конечно ещё есть куда стремится. Без правок cmake всё равно пока не завелось (правда уже небольших).
Вот патч:
diff --git a/cmake/find_readline_edit.cmake b/cmake/find_readline_edit.cmake
index 76a704dc2..10678108b 100644
--- a/cmake/find_readline_edit.cmake
+++ b/cmake/find_readline_edit.cmake
@@ -5,6 +5,7 @@ if (NOT READLINE_LIB)
find_library (READLINE_LIB NAMES readline PATHS ${READLINE_PATHS})
endif ()
+list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.2)
find_library (TERMCAP_LIB NAMES termcap)
find_library (EDIT_LIB NAMES edit)
Дело в том что termcap это устаревшая библиотека и от неё активно отказываются, по этому во многих дистрибутивах (gentoo, arch) нету libtermcap.so а есть только libtermcap.so.2 выше указанный хак решает проблему. (я бы и вам от неё посоветовал отказаться)
К слову если не находит termcap то мягко говоря невнятные ошибки получаются, я бы сразу ERROR выдавал если termcap не нашёлся.
Ну и конечно таскать с собой всё то что лежит в /contrib это конечно очень спорно, но хорошо, что можно это не собирать.
Добрый день! Сборка на FreeBSD
Пробовал на FreeBSD 10.3-STABLE и на FreeBSD 11.0-STABLE
[ 51%] Building CXX object contrib/libcctz/CMakeFiles/cctz.dir/src/time_zone_libc.cc.o
/www/work/YandexDB/ClickHouse/contrib/libcctz/src/time_zone_libc.cc: In member function 'virtual cctz::time_zone::absolute_lookup cctz::TimeZoneLibC::BreakTime(cctz::time_point<std::chrono::duration<long int> >&) const':
/www/work/YandexDB/ClickHouse/contrib/libcctz/src/time_zone_libc.cc:52:65: warning: pointer to a function used in arithmetic [-Wpointer-arith]
# define OFFSET(tm) (timezone + ((tm).tm_isdst > 0 ? 60 * 60 : 0))
^
/www/work/YandexDB/ClickHouse/contrib/libcctz/src/time_zone_libc.cc:78:17: note: in expansion of macro 'OFFSET'
al.offset = OFFSET(tm);
^~~~~~
/www/work/YandexDB/ClickHouse/contrib/libcctz/src/time_zone_libc.cc:52:31: error: invalid conversion from 'char* (*)(int, int)' to 'int' [-fpermissive]
# define OFFSET(tm) (timezone + ((tm).tm_isdst > 0 ? 60 * 60 : 0))
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/www/work/YandexDB/ClickHouse/contrib/libcctz/src/time_zone_libc.cc:78:17: note: in expansion of macro 'OFFSET'
al.offset = OFFSET(tm);
^~~~~~
Можете чем-то помочь? Спасибо
пока самое простое - собирать последний рабочий коммит
git checkout 1adf0bb
но скоро либа будет поправлена.
[ 57%] Building CXX object libs/libmysqlxx/CMakeFiles/mysqlxx.dir/src/Connection.cpp.o
/root/ClickHouse/ClickHouse/libs/libmysqlxx/src/Connection.cpp:1:10: fatal error: 'mysql.h' file not found
#include <mysql.h>
Может где какие пути не прописаны?
make VERBOSE=1
есть ли там -I/usr/local/include/mysql ?
и что говорил cmake ?
должен был -- Using mysqlclient: /usr/local/include/mysql : ; static=/usr/local/lib/mysql/libmysqlclient.a
[ 48%] Building CXX object libs/libmysqlxx/CMakeFiles/mysqlxx.dir/src/Connection.cpp.o
cd /www/work/YandexDB/ClickHouse/build/libs/libmysqlxx && /usr/local/bin/g++6 -DBOOST_SYSTEM_NO_DEPRECATED -I/www/work/YandexDB/ClickHouse/contrib/libdouble-conversion -I/www/work/YandexDB/ClickHouse/contrib/libcityhash/include -I/www/work/YandexDB/ClickHouse/contrib/libzookeeper/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/MongoDB/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/XML/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Crypto/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Data/ODBC/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Data/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Net/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Util/include -I/www/work/YandexDB/ClickHouse/contrib/libpoco/Foundation/include -I/www/work/YandexDB/ClickHouse/contrib/libboost/boost_1_62_0 -I/usr/local/include -I/www/work/YandexDB/ClickHouse/libs/libmysqlxx/include -I/www/work/YandexDB/ClickHouse/libs/libcommon/include -I/www/work/YandexDB/ClickHouse/dbms/include -I/www/work/YandexDB/ClickHouse/build/libs/libcommon/include -I/www/work/YandexDB/ClickHouse/libs/libpocoext/include -I/www/work/YandexDB/ClickHouse/libs/libzkutil/include -D_GLIBCXX_USE_CXX11_ABI=1 -pipe -std=gnu++1y -DCLOCK_MONOTONIC_COARSE=CLOCK_MONOTONIC_FAST -fno-omit-frame-pointer -Wall -Wnon-virtual-dtor -msse4 -mpopcnt -Werror -O2 -g -DNDEBUG -D_GLIBCXX_USE_CXX11_ABI=1 -pipe -O3 -o CMakeFiles/mysqlxx.dir/src/Connection.cpp.o -c /www/work/YandexDB/ClickHouse/libs/libmysqlxx/src/Connection.cpp
/www/work/YandexDB/ClickHouse/libs/libmysqlxx/src/Connection.cpp:1:19: fatal error: mysql.h: No such file or directory
#include <mysql.h>
Это было поправлено в 1d7c5f63dfe9b49c92a8b5ea00fd3b26d8abef10
да, вроде собралось, спасибо!
сделал make -C dbms/src/Server install
установил вроде как, сам clickhouse тут - /usr/local/bin/clickhouse - запускаем -
# /usr/local/bin/clickhouse --server --config-file=/usr/local/etc/clickhouse-server/config.xml
2017.02.03 13:06:34.569217 [ 1 ] <Warning> Application: Logging to console
2017.02.03 13:06:34.577505 [ 1 ] <Information> : Starting daemon with revision 54147
2017.02.03 13:06:34.577554 [ 1 ] <Information> Application: starting up
2017.02.03 13:06:34.577720 [ 1 ] <Debug> Application: rlimit on number of file descriptors is 1885734
2017.02.03 13:06:34.577729 [ 1 ] <Debug> Application: Initializing DateLUT.
2017.02.03 13:06:34.577733 [ 1 ] <Trace> Application: Initialized DateLUT.
2017.02.03 13:06:34.578171 [ 1 ] <Debug> Application: Configuration parameter 'interserver_http_host' doesn't exist or exists and empty. Will use 'example.com' as replica host.
2017.02.03 13:06:34.578211 [ 1 ] <Debug> ConfigReloader: Loading config '/usr/local/etc/clickhouse-server/config.xml'
2017.02.03 13:06:34.581669 [ 1 ] <Debug> ConfigReloader: Loading config '/usr/local/etc/clickhouse-server/users.xml'
2017.02.03 13:06:34.584846 [ 1 ] <Information> Application: Loading metadata.
2017.02.03 13:06:34.585010 [ 1 ] <Information> DatabaseOrdinary (default): Total 0 tables.
2017.02.03 13:06:34.585060 [ 1 ] <Information> DatabaseOrdinary (system): Total 0 tables.
2017.02.03 13:06:34.585221 [ 1 ] <Debug> Application: Loaded metadata.
2017.02.03 13:06:34.585619 [ 1 ] <Information> Application: Shutting down storages.
2017.02.03 13:06:34.585670 [ 1 ] <Debug> Application: Shutted down storages.
2017.02.03 13:06:34.587567 [ 1 ] <Debug> Application: Destroyed global context.
2017.02.03 13:06:34.587711 [ 1 ] <Error> Application: Net Exception: Protocol not supported
2017.02.03 13:06:34.587718 [ 1 ] <Information> Application: shutting down
2017.02.03 13:06:34.587721 [ 1 ] <Debug> Application: Uninitializing subsystem: Logging Subsystem
2017.02.03 13:06:34.587761 [ 2 ] <Information> BaseDaemon: Stop SignalListener thread
И все, вываливается в консоль. То ли данные не установил - DatabaseOrdinary (system): Total 0 tables - я думал там должны быть какие-то системные таблицы - где их взять?
то ли что-то не так установилось - Application: Net Exception: Protocol not supported -
Конфиг по умолчанию.
Что ему теперь не хватает?
система с IPV6 собрана ?
да
Пока никаких идей кроме отключенного в ядре INET6 нет.
есть ли inet6 адреса в ifconfig ?
а что если в конфиге покрутить
@proller Добрый день!
Да, помогло в
Most helpful comment
Ну я лично увидел что зависимости бандлятся и сразу расхотелось трогать проект.
Если это не принципиально, и изменения где их использование будет убрано под опцию (а в идеале они вообще будут выкинуты из репозитория) будут приняты, то могу попробовать поковырять. Сразу вопрос, оно под FreeBSD имеет шанс собраться, или там что-то Linux-специфичное используется?Вообще не, мне это не интересно.