2012年11月25日日曜日

memsql on CentOS5.8-x86_64 with glibc2.14.1

memsqlは通常、GLIBC_2.11以上が必要となります。
無理に起動して次のメッセージを見た方も多いかと思う。

[root@localhost memsqlbin]# ./check_systemWarning: CPU may not support CMPXCHG16 instruction, which is required by MemSQL.Warning: The version of CentOS that you're using (5.8) is too low.MemSQL supports versions 6.0 and up./usr/local/src/memsqlbin/objdir/usr/local/bin/memsql-g++: /lib64/libc.so.6: version `GLIBC_2.11' not found (required by /usr/local/src/memsqlbin/objdir/usr/local/bin/memsql-g++)[root@localhost memsqlbin]# ./memsqld -u root./memsqld: symbol lookup error: /usr/local/src/memsqlbin/objdir/usr/local/lib64/libstdc++.so.6: undefined symbol: _ZNSt8messagesIcE2idE, version GLIBCXX_3.4
すなわち、CentOS6系で動作させるのがいい。
しかしながら、諸般の事情でCentOS5系で動作させたい需要もあるかと思う。
そこで、無理やりmemsqlを動作させる為に、glibc2.14.1をインストールしてCentOS5.8 -x86_64 上で起動してみる。
くれぐれも自己責任でのインストールをお願いします。
詳しくは確認していないがインストール後、ターミナル上の日本語表示が?を表示してしまう等の事象が見られた。
なお所要時間は環境にもよるが、数時間を要する。

ほぼ、glibc2.14.1のインストール等は株式会社C.A.モバイル様のEngineers'Blogとほぼの同一の内容です。
ただし、若干手順に誤りがある様で、手元で確認した内容を記載します。
(具体的にはconfigureが足りなかったり、一部currentのバージョン指定があり、2012年11月23日の段階ではインストールできなかった。)
ブログ記載された方とコンタクトを取って、上記の事を伝えたり、転載の許可を得たいが、連絡先が不明の為、断りなくこちらで記載させていただく事とした次第。
もちろん、関係者から御連絡いただけると幸いです。

混乱や誤りを避ける為、CentOS5.8インストール時にServerだけを選択して構築したサーバを対象とする。
yumを利用すると予期せずソフトウェアのバージョンが上がってしまう恐れがある。
そこで、ISOイメージ上のrpmを利用する。

・動作環境
CentOS5.8-x86_64
memsql 5.5.8 MemSQL Version: '1c'
md5sum /usr/local/src/memsqlbin_amd64.tar.gz
a46c60779f14a73eba27ea037d3c97c5  /usr/local/src/memsqlbin_amd64.tar.gz
 
・事前作業
CentOS-5.8-x86_64-bin-DVD-1of2をマウント。
mkdir -p /media/CentOS
mount /media/CentOS /dev/cdrom

・rpmでインストールするソフトウェア
gcc-4.1.2-52.el5
gcc-c++-4.1.2-52.el5
glibc-devel-2.5-81
glibc-devel-2.5-81
glibc-headers-2.5-81
kernel-devel-2.6.18-308.el5
kernel-headers-2.6.18-308.el5
libstdc++-devel-4.1.2-52.el5
openldap24-libs-2.4.23-5.el5

openldap24-libs-2.4.23-5.el5はglibc2.14.1だけをインストールする場合不要。
memsqlを起動するにあたり必要になる 。
具体的にはrpmに含まれる
/usr/lib64/liblber-2.4.so.2
が必要。
rpm以外でliblber-2.4.so.2をインストールしてもいいと思われる。

・ソースからインストールするソフトウェア
libgmp-5.0.1
libmpfr-3.1.0
libmpc-0.9
libppl-0.11.2
binutils-binutils-2.21.1
gcc-4.6.2
glibc-2.14.1

・インストール
rpmをyumでインストールした後、各ソフトウェアをソースからインストールする。

1)rpmのインストール
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c5-media install gcc-c++ gcc-c++-devel
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c5-media install glibc-devel
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c5-media install kernel-devel
2)ダウンロード
[root@localhost ~]# wget ftp://ftp.gmplib.org/pub/gmp-5.0.1/gmp-5.0.1.tar.bz2
[root@localhost ~]# wget http://www.mpfr.org/mpfr-3.1.0/mpfr-3.1.0.tar.bz2
[root@localhost ~]# wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
[root@localhost ~]# wget http://bugseng.com/external/ppl/download/ftp/releases/0.11.2/ppl-0.11.2.tar.gz
[root@localhost ~]# wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1.tar.bz2
[root@localhost ~]# wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.bz2
3)各ソフトウェアのインストール
/usr/local/src以下にlibgmp、libmpfr、libmpc、libppl、binutils-binutils、gcc、glibcをインストールする。
一括してインストールする方法は次の通り。make checkは省略。
glibcはpatchを当てたりする必要があり一括では実行しにくい。

[root@localhost ~]# cd /usr/local/src
[root@localhost ~]# tar jxf mpfr-3.1.0.tar.bz2 && cd mpfr-3.1.0 && ./configure && make && make install && cd .. && tar xzf mpc-0.9.tar.gz && cd mpc-0.9 && ./configure && make && make install && cd .. && tar xzf ppl-0.11.2.tar.gz && cd ppl-0.11.2 && ./configure && make && make install && cd .. && tar xjf binutils-2.21.1.tar.bz2 && cd binutils-2.21.1 && ./configure && make && make install && cd ..
[root@localhost ~]# echo "/usr/local/lib" > /etc/ld.so.conf
[root@localhost ~]# /sbin/ldconfig
[root@localhost ~]# tar xjf gcc-4.6.2.tar.bz2
[root@localhost ~]# cd gcc-4.6.2 && ./configure && make && make install && cd ..
[root@localhost ~]# tar xjf glibc-2.14.1.tar.bz2
[root@localhost ~]# cd glibc-2.14.1
[root@localhost ~]# DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
[root@localhost ~]# sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" scripts/test-installation.pl
[root@localhost ~]# unset DL
[root@localhost ~]# sed -i -e 's/"db1"/& \&\& $name ne "nss_test1"/' scripts/test-installation.pl
[root@localhost ~]# sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
[root@localhost ~]# patch -Np1 -i ../glibc-2.14.1-gcc_fix-1.patch
[root@localhost ~]# sed -i '195,213 s/PRIVATE_FUTEX/FUTEX_CLOCK_REALTIME/' nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timed{rd,wr}lock.S
[root@localhost ~]# sed -i -e 's|CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)|#CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)|' Makefile[root@localhost ~]# mkdir -p build
[root@localhost ~]# cd build
[root@localhost ~]# ../configure --prefix=/usr --disable-profile --enable-add-ons
[root@localhost ~]# make[root@localhost ~]# make install

・起動
-uでrootを指定。次の様に終了してしまう。
[root@localhost ~]# cd /usr/local/src/memsqlbin/
[root@localhost memsqlbin]# ./memsqld -u root
+-----------------------------------------------------------------------------+| MemSQL has encountered a fatal error and exited. || It could be a bug, misconfiguration, or hardware issue. |+-----------------------------------------------------------------------------+| || MemSQL was running with durability on, which means that when you || restart MemSQL, your data will be recovered back to a consistent state. || || Help us improve MemSQL. To notify the team of this error, please run: || || sudo /usr/local/src/memsqlbin/utils/crash-report/submit || || You can contact MemSQL directly at any time by emailing support@memsql.com || or calling 1-855-4-MEMSQL || |+-----------------------------------------------------------------------------+

そこで、openldap24のrpmをインストールする事で回避出来る。
[root@localhost ~]# wget ftp://ftp.muug.mb.ca/mirror/centos/5.8/os/x86_64/CentOS/openldap24-libs-2.4.23-5.el5.x86_64.rpm
[root@localhost ~]# rpm -ivh ./openldap24-libs-2.4.23-5.el5.x86_64.rpmPreparing... ########################################### [100%] 1:openldap24-libs ########################################### [100%]/sbin/ldconfig: /usr/local/lib/libstdc++.so.6.0.16-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
エラーが出るが、インストール自体には影響がない。再度起動する。
[root@localhost ~]# cd /usr/local/src/memsqlbin/
[root@localhost memsqlbin]# ./memsqld -u root
172629 2012-11-24 10:37:22 WARNING: SSE4.2 is not supported. Resorting to software CRC32C.Warning: CPU may not support CMPXCHG16 instruction, which is required by MemSQL.Warning: The version of CentOS that you're using (5.8) is too low.MemSQL supports versions 6.0 and up.Warning: The recommended configuration for MemSQL is at least 8 GB of RAM261197 2012-11-24 10:37:22 INFO: Log level changed to 0306479 2012-11-24 10:37:22 INFO: Started recovery of database `memsql`318608 2012-11-24 10:37:22 INFO: /usr/local/src/memsqlbin/data/memsql_snapshot_a is valid: version 10 (expected 10), header CRC OK, file id 0, opened 2012-11-24 05:53:43, closed 2012-11-24 05:53:43.319452 2012-11-24 10:37:22 WARNING: Snapshot `/usr/local/src/memsqlbin/data/memsql_snapshot_b` of database `memsql` is missing.319716 2012-11-24 10:37:22 INFO: Replaying snapshot '/usr/local/src/memsqlbin/data/memsql_snapshot_a' of database `memsql`.319966 2012-11-24 10:37:22 INFO: Replaying log '/usr/local/src/memsqlbin/data/memsql_log_a' of database `memsql`.332207 2012-11-24 10:37:22 INFO: Successfully recovered database `memsql`.332406 2012-11-24 10:37:22 INFO: Started recovery of database `test`340972 2012-11-24 10:37:22 INFO: /usr/local/src/memsqlbin/data/test_snapshot_a is valid: version 10 (expected 10), header CRC OK, file id 0, opened 2012-11-24 05:58:45, closed 2012-11-24 05:58:45.341989 2012-11-24 10:37:22 WARNING: Snapshot `/usr/local/src/memsqlbin/data/test_snapshot_b` of database `test` is missing.342399 2012-11-24 10:37:22 INFO: Replaying snapshot '/usr/local/src/memsqlbin/data/test_snapshot_a' of database `test`.351558 2012-11-24 10:37:22 INFO: Replaying log '/usr/local/src/memsqlbin/data/test_log_a' of database `test`.351995 2012-11-24 10:37:22 INFO: Successfully recovered database `test`.121124 10:37:22 [Note] /usr/local/src/memsqlbin/memsqld: ready for connections.Version: '1c' socket: '/tmp/memsql.sock' port: 3306
フォアグランドで起動する。
別のターミナルからmysqlクライアントで接続出来る。
[root@localhost ~]# mysql -h 127.0.0.1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 253
Server version: 5.5.8 MemSQL source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

参考にしたサイト
Linux From Scratch
http://lfsbookja.sourceforge.jp/7.0.ja/index.html

0 件のコメント: