Q4Mを再び...
Socket遊びが終わらない和人くんはほっといて、Q4Mの新しいバージョンをgentooで使えるようにebuildを作成しました。 前回はMySQLの5.1用のプラグインとして作りましたが、もう古いということで新しめのMySQLとQ4Mで作り直しました。
インストール
既にMySQLをインストールされている方は気をつけてください まずこうして
karky7 ~ # layman -a karky7バージョン指定でこうする
karky7 ~ # emerge -u "=dev-db/mysql-5.6.24::karky7"サービスを開始
karky7 ~ # systemctl start mysqldQ4Mのプラグインをインストール
karky7 ~ # mysql -u root < /usr/share/mysql/support-files/install.sql確認
karky7 ~ # mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.24-log Source distribution Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show plugins; +----------------------------+--------+--------------------+--------------------+---------+ | Name | Status | Type | Library | License | +----------------------------+--------+--------------------+--------------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | QUEUE | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL | +----------------------------+--------+--------------------+--------------------+---------+ 42 rows in set (0.00 sec)でQUEUEが入ります
Q4Mの罠
Q4Mのソースを追加してビルドをすると、ディフォルトのebuildでは以下のエラーでビルドできませんした。
... ... ... /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/static_assert.hpp:119:10: 備考: in expansion of macro ‘BOOST_JOIN’ BOOST_JOIN(boost_static_assert_typedef_, __LINE__) ^ /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/optional/optional.hpp:333:8: 備考: in expansion of macro ‘BOOST_STATIC_ASSERT’ BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ; ^ In file included from /usr/include/features.h:366:0, from /usr/include/assert.h:35, from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/include/g++-v4/cassert:43, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.cc:1: /usr/include/bits/mathcalls.h: 大域スコープ: /usr/include/bits/mathcalls.h:153:1: エラー: declaration of C function ‘long double pow(long double, long double)’ conflicts with __MATHCALL (pow,, (_Mdouble_ __x, _Mdouble_ __y)); ^ /usr/include/bits/mathcalls.h:153:1: エラー: previous declaration ‘double pow(double, double)’ here __MATHCALL (pow,, (_Mdouble_ __x, _Mdouble_ __y)); ^ In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/include/g++-v4/complex:44:0, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/type_traits/is_complex.hpp:12, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/type_traits.hpp:81, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/spirit/home/classic/core/parser.hpp:12, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/spirit/home/classic/core.hpp:29, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/spirit/include/classic_core.hpp:11, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/boost/spirit/core.hpp:25, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.cc:4: /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/include/g++-v4/cmath: 関数 ‘long double std::pow(long double, long double)’ 内: /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/include/g++-v4/cmath:411:39: エラー: ‘long double std::pow(long double, long double)’ conflicts with previous using declaration ‘long double pow(long double, long double)’ pow(long double __x, long double __y) ^ In file included from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.cc:13:0: /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.h: メンバ関数 ‘queue_cond_t::value_t queue_cond_t::pow_func::bop(const queue_cond_t::value_t&, const queue_cond_t::value_t&) const’ 内: /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.h:274:69: エラー: オーバーロードされている ‘pow(const long long int&, const long long int&)’ の呼び出しが曖昧です return value_t::int_value(static_cast<long long>(powl(x.l, y.l))); ^ /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.h:274:69: 備考: 候補: In file included from /usr/include/features.h:366:0, from /usr/include/assert.h:35, from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/include/g++-v4/cassert:43, from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.cc:1: /usr/include/bits/mathcalls.h:153:1: 備考: double pow(double, double) __MATHCALL (pow,, (_Mdouble_ __x, _Mdouble_ __y)); ^ <コマンドライン>:0:6: 備考: long double pow(long double, long double) In file included from /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.cc:13:0: /home/cuomo/workspace/mysql/mysql-5.6.23/storage/q4m/src/queue_cond.h:275:5: 警告: 制御が非 void 関数の終りに到達しました [-Wreturn-type] } ^ storage/q4m/CMakeFiles/queue.dir/build.make:57: ターゲット 'storage/q4m/CMakeFiles/queue.dir/src/queue_cond.cc.o' のレシピで失敗しました make[2]: *** [storage/q4m/CMakeFiles/queue.dir/src/queue_cond.cc.o] エラー 1 CMakeFiles/Makefile2:596: ターゲット 'storage/q4m/CMakeFiles/queue.dir/all' のレシピで失敗しました make[1]: *** [storage/q4m/CMakeFiles/queue.dir/all] エラー 2 Makefile:136: ターゲット 'all' のレシピで失敗しました make: *** [all] エラー 2 ... ...pow()関数がconflictしてると起こられます、色々調べてみましたがどうやら、cmakeのオプションの -DWITH_ZLIB=system がQ4Mだとダメらしく、これを -DWITH_ZLIB=bundled にする必要があるようです、このオプションはCOMPRESS()関数などで使うらしいのですが、これをMySQL提供のzlibにするか、システムにインストールされているzlibを利用するかの選択のオプションで、ディフォルトだとsystemになっています。
gentooのディフォルトのebuildが-DWITH_ZLIB=systemでハードコードされていたので、これを修正しました。 多分、どちらのzlibでも動くと思うのですが、たぶんヘッダーのincludeに問題があるような気がします、RedHatでも同じエラーが出てるような気がしました。 時間があれば、ソースコードを追っかけてみます、っていってそのままが多いのですが...
最後にcmakeのオプションサンプル
cmakeのオプションはこんな感じ、参考程度に、MySQL-5.6.23ですが....
cmake --no-warn-unused-cli \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_C_FLAGS_RELWITHDEBINFO=-DNDEBUG \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=-DNDEBUG \ -DCMAKE_INSTALL_PREFIX=/usr \ -DMYSQL_DATADIR=/var/lib/mysql \ -DSYSCONFDIR=/etc/mysql \ -DINSTALL_BINDIR=bin \ -DINSTALL_DOCDIR=share/doc/mysql-5.6.23 \ -DINSTALL_DOCREADMEDIR=share/doc/mysql-5.6.23 \ -DINSTALL_INCLUDEDIR=include/mysql \ -DINSTALL_INFODIR=share/info \ -DINSTALL_LIBDIR=lib64 \ -DINSTALL_ELIBDIR=lib64/mysql \ -DINSTALL_MANDIR=share/man \ -DINSTALL_MYSQLDATADIR=/var/lib/mysql \ -DINSTALL_MYSQLSHAREDIR=share/mysql \ -DINSTALL_MYSQLTESTDIR=share/mysql/mysql-test \ -DINSTALL_PLUGINDIR=lib64/mysql/plugin \ -DINSTALL_SBINDIR=sbin \ -DINSTALL_SCRIPTDIR=share/mysql/scripts \ -DINSTALL_SQLBENCHDIR=share/mysql \ -DINSTALL_SUPPORTFILESDIR=/usr/share/mysql \ -DWITH_UNIT_TESTS=OFF \ -DWITH_LIBEDIT=0 \ -DWITH_ZLIB=system \ -DWITHOUT_LIBWRAP=1 \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ -DINSTALL_UNIX_ADDRDIR=/var/run/mysqld/mysqld.sock \ -DWITH_SSL=system \ -DWITH_DEFAULT_COMPILER_OPTIONS=0 \ -DWITH_DEFAULT_FEATURE_SET=0 \ -DENABLE_DTRACE=OFF \ -DWITH_EDITLINE=bundled \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DMYSQL_USER=mysql \ -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ -DDISABLE_SHARED=OFF \ -DWITH_debug=OFF \ -DWITH_DEBUG=OFF \ -DWITH_Debug=OFF \ -DWITH_EMBEDDED_SERVER=OFF \ -DWITH_profiling=OFF \ -DWITH_PROFILING=OFF \ -DWITH_Profiling=OFF \ -DENABLE_DTRACE=OFF \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_CSV_STORAGE_ENGINE=1 \ -DWITH_HEAP_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MYISAMMRG_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=OFF \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_DO_STRIP=OFF
0 件のコメント:
コメントを投稿