Ошибка неполного типа MD5_CONTEXT с MariaDB 10.2 и Openssl 1.1.0e

Я не могу собрать MariaDB 10.2 с включенным RocksDB в CentOS 7.

Он имеет следующую ошибку компиляции:

/root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void md5_result(MD5_CONTEXT*, uchar*)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:86:29: error: ‘EVP_MD_CTX_cleanup’ was not declared in this scope    EVP_MD_CTX_cleanup(context);
                             ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:102:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined    MD5_CONTEXT md5_context;
               ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:127:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined    MD5_CONTEXT md5_context;
               ^ /root/mariadb-10.2/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’: /root/mariadb-10.2/mysys_ssl/my_md5.cc:140:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’    return sizeof(MD5_CONTEXT);
                            ^ make[2]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o] Error 1 make[1]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/all] Error 2

Вот команды, которые я использовал для его создания:

yum install g++ cmake libbz2-dev libaio-dev bison zlib1g-dev libsnappy-dev libgflags-dev libreadline6-dev libncurses5-dev libssl-dev liblz4-dev gdb git

git clone https://github.com/MariaDB/server.git mariadb-10.2
git checkout bb-10.2-mariarocks
git submodule init  git submodule update

cmake -DCURSES_LIBRARY=/usr/lib64/libncurses -DCURSES_INCLUDE_PATH=/usr/include . 
make -j10

Я предполагаю, что это проблема версии OpenSSL, возможно, MariaDB поддерживает только более старую версию OpenSSL.

Итак, кто-нибудь знает, как это исправить?

мои версии:

  • OpenSSL 1.1.0e 16 февраля 2017 г.
  • g++ (ССЗ) 4.8.5 20150623

Спасибо,


person kchkg    schedule 16.05.2017    source источник
comment
Ошибки, связанные с ... недопустимым применением 'sizeof' к неполному типу... часто указывают на то, что одна из программ или библиотек не OpenSSL 1.1.0 в курсе. Вместо этого используйте OpenSSL 1.0.2. Возможно, вам потребуется включить слабые шифры, чтобы получить MD5. Также см. Совместимость и изменения OpenSSL 1.1.0 на вики OpenSSL.   -  person jww    schedule 17.05.2017
comment
но я должен использовать последнюю/более новую версию OpenSSL.   -  person kchkg    schedule 17.05.2017
comment
Тогда вы в основном облажались, если проекты не поддерживают OpenSSL 1.1.0. OpenSSH меня обманывает, потому что мне нужен ChaCha/Poly1305 (и TLS 1.3. в будущее), но OpenSSH поддерживает только OpenSSL 1.0.2 и ниже. Параллельные установки OpenSSL в основном не работают в Unix и Linux, поэтому я не смог обойти это.   -  person jww    schedule 17.05.2017


Ответы (1)


Поддержка OpenSSL 1.1 была добавлена в MariaDB 10.2.6, что на сегодняшний день (17 мая 2017 г.) еще не выпущен, но ожидается, что он будет выпущен очень скоро.

Поскольку вы берете исходный код с github, вы можете попробовать его уже сейчас, но вам не следует использовать дерево bb-10.2-mariarocks — хотя оно может иметь некоторые новейшие экспериментальные изменения в RocksDB (или нет), оно, вероятно, устарело в любом случае. другой путь. Пожалуйста, используйте ветку 10.2, там тоже есть RocksDB.

person elenst    schedule 17.05.2017
comment
Сейчас я перешел на версию 10.2, но у нее были другие ошибки компиляции: CMakeFiles/mariadb_obj.dir/secure/openssl.c.o: в функции ma_tls_start': /root/mariadb-10.2/libmariadb/libmariadb/secure/openssl.c:299: undefined reference to OPENSSL_init_ssl' - person kchkg; 17.05.2017
comment
Я сделаю некоторые предположения. Если вы установили OpenSSL 1.1.0 в /usr/local/lib64, а /usr/lib64 все еще имеет 1.0.1, ваша сборка запутается. Попробуйте повторно запустить cmake с явными путями к SSL и CRYPTO, например cmake . -DOPENSSL_SSL_LIBRARY=/usr/local/lib64/libssl.so -DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib64/libcrypto.so, а затем снова make. - person elenst; 18.05.2017
comment
Я пробовал это. Лучше! но все же какая-то другая ошибка: make[2]: *** Нет правила для создания цели /usr/lib64/libncurses', needed by client/mysql'. Останавливаться. make[2]: *** Ожидание незавершенных заданий.... - person kchkg; 18.05.2017
comment
Кстати, у меня 1.0.1e в /usr/lib64/ - person kchkg; 18.05.2017
comment
1.1 в /usr/local/lib64/ - person kchkg; 18.05.2017
comment
и я использовал 1.1 (для моей последней попытки) следующим образом -DOPENSSL_SSL_LIBRARY=/usr/local/lib64/libssl.so - person kchkg; 18.05.2017
comment
Последнее про ncurses выглядит странно и не имеет отношения к делу, больше похоже на ошибку конфигурации (вышло make /usr/local/lib64?!). Я бы предложил удалить CMakeCache.txt, может быть, даже make clean на всякий случай (или git clean -dfx), затем повторно запустить всю команду cmake <all options together>, а затем make. И если это снова пойдет не так, вставьте команду cmake, которую вы запустили. - person elenst; 18.05.2017
comment
О, я прошел эту ошибку, если я укажу версию, например -DCURSES_LIBRARY=/usr/lib64/libncurses.so.5 - person kchkg; 18.05.2017
comment
Но... еще одна ошибка: Связывание исполняемого файла CXX mysql /usr/bin/ld: ../extra/readline/libreadline.a(terminal.c.o): неопределенная ссылка на символ 'UP' /usr/bin/ld: примечание: «UP» определен в DSO /lib64/libtinfo.so.5, поэтому попробуйте добавить его в командную строку компоновщика /lib64/libtinfo.so.5: не удалось прочитать символы: недопустимая операция collect2: ошибка: ld вернул 1 выход статус - person kchkg; 18.05.2017
comment
Поскольку вы уже находитесь на пути предоставления путей cmake к библиотекам, вы можете изучить параметры cmake WITH_READLINE, READLINE_INCLUDE_DIR и READLINE_LIBRARY и посмотреть, какая комбинация работает для вас. - person elenst; 18.05.2017
comment
прошла эта ошибка. Теперь еще одна ошибка @.@..... /root/mariadb-10.2/client/mysql.cc:100:24: ошибка: переменная или поле 'my_vidattr' объявлено недействительным статическим недействительным my_vidattr(chtype attrs) ^ /root/ mariadb-10.2/client/mysql.cc:100:24: ошибка: 'chtype' не был объявлен в этой области /root/mariadb-10.2/client/mysql.cc: в функции 'int com_status(String*, char*) ': /root/mariadb-10.2/client/mysql.cc:4753:16: ошибка: "A_BOLD" не был объявлен в этой области видимости my_vidattr(A_BOLD); - person kchkg; 18.05.2017
comment
На самом деле, я просто хочу включить движок RocksDB. Но в моей версии (10.2.5) его нет.. поэтому я хотел собрать его из исходников - person kchkg; 18.05.2017
comment
RocksDB находится в версии 10.2.5, он поставляется как отдельный пакет, например. MariaDB-10.2.5-centos7-x86_64-rocksdb-engine.rpm. Что касается проблем со сборкой — вы используете настроенную установку CentOS, возможно, поэтому это так сложно. Вы можете просмотреть журналы сборки для CentOS 7 из системы сборки, например. в buildbot.askmonty .org/buildbot/builders/kvm-rpm-centos7-amd64/ , это довольно гладко: - person elenst; 18.05.2017