2015年4月18日土曜日

MySQL-5.6.24へQ4Mを入れ込んだgentooのebuildをつくりました

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 mysqld
Q4Mのプラグインをインストール
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 件のコメント:

コメントを投稿