2017年12月4日月曜日

ConoHaの上でひたすらMySQLをビルドする簡単なお仕事

この記事は ConoHa Advent Calendar 2017 の4日目の記事です。
「ConoHaの上で」と銘打ってはいますが、俺の普段使いのLinux環境がConoHaだからというだけで、VirtualBoxだろうとEC2だろうとCentOS 7.4なら全部似たような結果になると思います
というわけでまずは吊るしのConoHaのVPSインスタンスを作ります。
最近のMySQLはビルドに結構メモリーを食うのでメモリーは1GBのものを選びました(512MBだと、途中でOOM Killerに殺されるかまたは永遠にビルドが終わらないと思います。5.7とそれ以降)
WEBからポチポチしてSSHでログインできたら、さっさとビルドを開始します。
まずは 5.0からいきましょう。
2017/12/04現在、サポートが継続されているMySQLは5.5, 5.6, 5.7の3系統です。
サポートが切れているMySQLのソースコードも MySQL :: MySQL Product Archives から手に入れることができます。
(が、ここでもMySQL Fabricは存在しません。 泣かない
というわけでMySQL 5.0系の最終バージョンである5.0.96を取ってきてさっくりビルドしてみます。

$ wget https://downloads.mysql.com/archives/get/file/mysql-5.0.96.tar.gz
$ tar xf mysql-5.0.96.tar.gz 
$ cd mysql-5.0.96/
$ ll
なんかパーミッションがスゴいことになっていて、時代のせいなのかパッケージングが出鱈目だったのか気になります。
MySQL 5.1とそれ以前のバージョンでは configure スクリプトを使って下準備をします。

$ ./configure --prefix=/opt/mysql/5.0.96
..
configure: error: in `/root/mysql-5.0.96':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
あ、エラった。流石に gcc とかデフォで入っていない様子。
$ sudo yum install -y gcc
$ ./configure --prefix=/opt/mysql/5.0.96
..
checking for termcap functions library... configure: error: No curses/termcap library found
今度は別のエラー。cursesライブラリーがないって言われるけれどこれ ncurses-libs のことではなくて ncurses-devel のことなので注意(数年前にハマったなあ)
$ sudo yum install -y ncurses-devel
$ ./configure --prefix=/opt/mysql/5.0.96

..
Thank you for choosing MySQL!

Remember to check the platform specific part of the reference manual
for hints about installing MySQL on your platform.
Also have a look at the files in the Docs directory.
無事に終わったぽいので make
$ make
..
DEPDIR=.deps depmode=none /bin/sh ../depcomp \
g++ -DDEFAULT_BASEDIR=\"/opt/mysql/5.0.96\" -DMYSQL_DATADIR="\"/opt/mysql/5.0.96/var\"" -DDEFAULT_CHARSET_HOME="\"/opt/mysql/5.0.96\"" -DSHAREDIR="\"/opt/mysql/5.0.96/share/mysql\"" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR="\"/opt/mysql/5.0.96/etc\"" -DHAVE_CONFIG_H -I. -I../include -I../zlib -I../include -I../include -I.    -O -DDBUG_OFF    -fno-implicit-templates -fno-exceptions -fno-rtti -c -o my_new.o my_new.cc
../depcomp: line 571: exec: g++: not found
make[2]: *** [my_new.o] Error 127
make[2]: Leaving directory `/root/mysql-5.0.96/mysys'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/mysql-5.0.96'
make: *** [all] Error 2
C++コンパイラーの g++ が要るって(´・ω・`) だったら configure の段階で言ってよ!
$ sudo yum install -y gcc-c++
$ ./configure --prefix=/opt/mysql/5.0.96

$ make
gcc-c++を入れたら再 configure して(しないと make が通らなかった)もっかい makemake が終わったら make install--prefix で指定したパスにファイルをコピー。
$ sudo make install
はい5.0終わり。次5.1。
MySQL 5.1は5.0とそんなに変わらないので、同じくアーカイブのページから5.1系の最終バージョンである5.1.73を…あれ?
「いや、そのりくつはおかしい」と言いたくなるけれども取り敢えずアーカイブページには5.1.72までしかない。 特に切羽詰まっている(?)わけでもないので、今回は5.1.72でビルドすることにしよう。
$ wget https://downloads.mysql.com/archives/get/file/mysql-5.1.72.tar.gz
$ tar xf mysql-5.1.72.tar.gz
$ cd mysql-5.1.72
$ ./configure --prefix=/opt/mysql/5.1.72
$ make
$ sudo make install
特に詰まることもなく(5.0から追加で何か入れることもなく)5.1も終了。はい次5.5。
ここから現在サポートされているバージョンになるので、最新のマイナーバージョンであれば MySQL :: Download MySQL Community Server から、それ以前のマイナーバージョンであればまたアーカイブから取ってくることになる。
ダウンロードページでは5.7が全面に押し出されているけれども、「Looking for previous GA versions?」とか書いてあるのを探すと5.5と5.6へのリンクがあるのでそれを選んでダウンロード。
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.58.tar.gz
$ tar xf mysql-5.5.58.tar.gz 
$ cd mysql-5.5.58/
$ cmake -DCMAKE_INSTALL_PREFIX=/usopt/mysql/5.5.58
-bash: cmake: command not found
MySQL 5.5とそれ以降では cmake を使って下準備をする。入ってなかったのでインストール。
$ sudo yum install -y cmake
$ cmake -DCMAKE_INSTALL_PREFIX=/usopt/mysql/5.5.58
..
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mysql-5.5.58

$ make
$ sudo make install
あれ、意外とさっくり通ってしまった。まあいいや、5.5終わったので5.6。
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.38.tar.gz
$ tar xf mysql-5.6.38.tar.gz
$ cd mysql-5.6.38/
$ cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql/5.6.38
$ make
$ sudo make install
このへんからビルドに時間がかかるようになってくる(´・ω・`)
が、特にエラーもなく終わったので次5.7。
MySQL 5.7から先は、同じようにダウンロードページからソースの.tar.gzを探すと「Compressed TAR Archive」と「Compressed TAR Archive, Includes Boost Headers」というのが見つかる。
これは MySQLは5.7.5からBoostを使うようになった からで、別で自分でBoostを入れているような人はBoost同梱版を選ぶ必要は特にない(けれど、バージョン決め打ちでBoostを欲しがるようなので、同梱版の方が絶対に楽だと思う)
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.20.tar.gz
$ tar xf mysql-boost-5.7.20.tar.gz
$ cd mysql-5.7.20
$ cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql/5.7.20 -DWITH_BOOST=./boost
$ make
$ sudo make install
さて、5.7も案外何事もなく終わったので開発中の最新版8.0に行きましょう。
MySQL 8.0(2017/12/04現在、8.0.3-rc)も MySQL :: Download MySQL Community Server のページの中で「Development Releases」を探すと出てきます。
$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.3-rc.tar.gz
$ tar xf mysql-boost-8.0.3-rc.tar.gz
$ cd mysql-8.0.3-rc
$ cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql/8.0.3 -DWITH_BOOST=./boost
$ make
$ sudo make install
:(;゙゚’ω゚’): あらフツーに通った…
もうちょっとなんかライブラリー要求されるかと思いましたが、意外とオプションなしなら通るものですね。
ちなみに、
$ du -sh /opt/mysql/*
66M     /opt/mysql/5.0.96
228M    /opt/mysql/5.1.72
342M    /opt/mysql/5.5.58
998M    /opt/mysql/5.6.38
1.9G    /opt/mysql/5.7.20
1.5G    /opt/mysql/8.0.3
5シリーズビルドするのに大体6時間くらいでした!
それでは楽しい MySQL on ConoHa ライフを!




0 件のコメント :

コメントを投稿