CMakeでMySQLをビルドしてみる:仕事で使える魔法のLAMP(46)
前回、MySQLののビルドには「CMake」というツールを使うことを紹介し、その準備をしました。今回はひとまずMySQLをビルドしてみます(編集部)
ひとまずCMakeを使ってみる
前回説明しましたが、現在のMySQLはWindowsなど多様なOSに対応しているため、configureスクリプトではなくCMakeというビルドツールを採用していると説明しました。そして、MySQLをインストールする方法として、パッケージ管理システムを使う方法、CMakeの公式バイナリを使う方法、そしてソースコードからビルドしてインストールする方法を紹介しました。今回は実際にCMakeを使って、MySQLをビルドしてみましょう。
Linuxにおいては、CMakeはconfigureスクリプトに代わるものと考えてよいでしょう。CMakeを実行するときは、configureスクリプトを使うときと同様に、インストール先やビルド時に組み込む機能を指定します。実行すると、必要な外部ソフトウェアや環境をチェックしてくれます。configureについては第11〜12回で解説していますので、そちらも参照してください。
使い方も大体同じです。インストール先などはコマンドラインの引数で指定します。コンパイラを環境変数で指定するところも同じです。configureスクリプトと異なるのは、引数にソースコードのディレクトリを必ず指定しなければならないという点です。
まずは特別な設定をせず、標準状態のままで全体の流れを確認してみましょう。MySQLのソースコードを任意のディレクトリに展開し、そのディレクトリをカレントディレクトリとして、次のコマンドを実行します。
$ cmake .
引数の「.」が、ソースコードが存在するディレクトリを指定している部分です。カレントディレクトリなので「.」となっています。もちろんほかのディレクトリを指定することもできますが、ここでは話を単純にするためにカレントディレクトリを使うことにして進めます。
実行するとすると次のようなメッセージが現れます。システムをチェックしている様子を表しています。
$ cmake . -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Looking for SHM_HUGETLB -- Looking for SHM_HUGETLB - found -- MySQL 5.5.21 -- Looking for sys/types.h -- Looking for sys/types.h - found (略) -- Configuring done -- Generating done -- Build files have been written to: /home/atmarkit/src/mysql-5.5.21
無事cmakeの実行が終了すると、Makefileなどのコンパイルに必要なファイルが生成されます。configureスクリプトの実行が成功したときと同じ状態です。後は「make」と「make install」を実行するだけです。CMakeを使ってソフトウェアをビルドする際の基本的な流れは上記の通りです。
念のため、ソースコードをカレントディレクトリではないディレクトリに置いた場合について、少し説明しておきます。例えばソースコードを「~/mysql-5.5.21」に展開したとします。次のようなコマンドを実行してみてください。
$ mkdir ~/build $ cd ~/build $ cmake ~/mysql5.5.21
ソースコードを展開したディレクトリのほかに、「~/build」というディレクトリを作り、このディレクトリをカレントディレクトリとして、引数に~/mysql-5.5.21を指定してcmakeを実行しています。
この後でmakeを実行すると、~/buildディレクトリにバイナリが生成され、~/mysql5.5.21ディレクトリは、ソースコードを展開した状態のまま、一切変化しません。開発版のコードをバージョン管理システムから取り出してビルドするときなど、ソースコードディレクトリを変更したくないときに使う方法です。
外部ソフトウェアを揃えてやり直し
先に、cmakeを使う基本的な方法を見て頂くために、エラーが発生しないと仮定して見て頂きました。しかし、本連載で使ってきた環境で実際にcmakeを実行してみると、次のように途中で失敗します。
(略) -- Check size of wint_t -- Check size of wint_t - done -- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) CMake Error at cmake/readline.cmake:83 (MESSAGE): Curses library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. Call Stack (most recent call first): cmake/readline.cmake:127 (FIND_CURSES) cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT) CMakeLists.txt:268 (MYSQL_CHECK_READLINE) -- Configuring incomplete, errors occurred!
このメッセージを読むと分かりますが、必要な外部ソフトウェアが不足していることによるエラーです。これまでも何度かあったケースですね。なお、環境によっては、すでにMySQLのビルドに必要な外部ソフトウェアが揃っているために、何事もなく成功することもあります。
MySQLが必要とする外部ソフトウェアのうち、MySQLに付属していないncursesとlibaioは、あらかじめインストールしておく必要があります。次のコマンドを実行すると、開発用パッケージをインストールできます。
$ sudo yum install ncurses-devel libaio-devel
ncursesは、実際にはMySQLではなく、readlineが利用しているライブラリです。readlineはMySQLのコマンドラインインターフェイスでカーソル移動や履歴等の機能を実現するためのライブラリで、MySQLに付属しています。このreadlineをビルドするためにncursesの開発パッケージが必要になのです。
第29回でreadlineをPHPで使えるようにビルドしましたが、そのときはncursesが必要なかったことに気付いた方はいらっしゃるでしょうか。PHPをビルドしたときは、OSにインストールしてあるビルド済みreadlineをPHPにリンクしたので、ncursesを用意する必要がなかったのです。MySQLではOSにインストール済みのreadlineは使わず、常にMySQLに付属するreadlineを使ってビルドしますので、ncurses-develが必要になるのです。
なお、MySQLにはlibeditというreadlineの互換ライブラリも付属しており、readlineとlibeditのどちらを使うか選択できるようになっています。readlineはライセンスがGPLであるため、再配布の際に自由を維持するための一定の制約があります。libeditは、非GPLの互換ライブラリを作る目的で開発されたものです。MySQLには非GPLの商用版もあるためか、GPLに依存しないlibeditを使う方が標準になっています。
libaioは、非同期I/Oの機能を提供するライブラリです。より高速なディスクアクセスやネットワーキングのために必要であると考えればよいでしょう。
ncursesとlibaioの開発用パッケージをインストールしたら、cmakeコマンドを再び実行します。一度cmakeを実行すると「CMakeCache.txt」というファイルが残ります。これは、cmake実行時の状態を記録したものです。cmakeを再び実行するときはこのファイルを削除してください。
$ rm CMakeCache.txt $ cmake .
これでエラーなくcmakeを実行できるようになったはずです。
外部ソフトウェアを揃えてやり直してみる
エラーなくcmakeを実行できたら、次はmakeを実行します。前回、CMakeをビルドするところで触れましたが、単に「make」と入力しただけで実行すると、進行の度合いと、コンパイル対象のファイルだけがコマンドラインに現れます(図1)。これはCMakeを使って生成したMakefileの特徴です。
この表示はカラフルで見やすいものの、ビルド時にどのようなコマンドを実行しているのかがまるで分からないので、ビルドのログとしては物足りないものとなっています。makeを実行するときに、「VERBOSE=1」を引数に指定すると、ビルド状況を詳細に表示するようになります(図2)。
ApacheやPHPをビルドするときは、teeコマンドでログをファイルとして保存していました。それに合わせて、cmakeとmakeを実行するときも、ログをファイルとして保存するようにしましょう。
$ cmake . 2>&1 | tee cmake_log.txt $ make VERBOSE=1 2>&1 | tee make_log.txt
ビルドが完了したら「sudo make install」でインストールできますが、このままの状態では「/usr/local/mysql」以下にインストールされますので注意してください。
次回は、インストール先の指定などの設定について解説します。
- CMakeでMySQLをビルドしてみる
- MySQLのビルドに欠かせないCMakeを準備する
- いよいよMySQL編、ソースからビルドすべきか?
- PHPでセッションを利用するための設定
- クライアントがアクセスできる範囲を制限する
- エラーメッセージをどう扱うか?
- ファイルのアップロードを制限する
- リクエストデータを受け取る変数の扱い
- マジッククオート機能には頼らない
- 安全を考えてPHPの実行時設定を調整する
- Apacheの設定ファイルでPHPの設定を変える
- PHPの設定ファイルを作って配置してみる
- PHPスクリプトを実行できるようにする準備
- PHPエクステンション組み込みの仕上げ
- 単純なデータを管理するDBMを使えるようにする
- エクステンションの組み込み状況を確認する
- PHPでデータベースを使う準備をする
- XMLを処理できるようにする
- エクステンションを有効にしてビルドに挑戦!
- PHPテスト失敗の原因を追究する
- 早速PHPをビルド! そしてテスト!
- PHP編に突入! まずはソースをダウンロード
- 設定ファイルを作成してApacheを動作させる
- 設定ファイルや公開ドキュメントの配置を考える
- 1つのサーバに複数の仮想サーバ?
- Apacheの設定ファイルを記述する前に
- サードパーティのApacheモジュールをビルドする
- 認証DBにアクセスするライブラリを組み込む
- Apache同梱ソフトウェアに引数を渡してビルド
- OpenSSLをビルドしてApacheで利用する
- proxyやsslのモジュールを使ってみる
- ライブラリが足りなくてビルドできないときは?
- Apache HTTP Serverのビルドを始めよう
- configureでソフトウェア固有の設定を変更してみる
- configureの設定を変更してみる
- 配布パッケージの中身と、configureの役目を知る
- ダウンロードファイルが真正なものであるかを確認
- Makefileをいろいろ書き換えながらビルドしてみよう
- makeを使ってソフトウェアをビルドしてみよう
- ダイナミックリンクとスタティックリンク
- 「ビルド」という作業は何を指しているのか
- 公開鍵認証でsshを安全に使う
- sshを便利にする公開鍵暗号
- アクセス制限の設定とCentOSのアップデート
- サーバに接続して、一般ユーザーのアカウントを作る
- LAMP環境、自分で作りませんか?
Copyright © ITmedia, Inc. All Rights Reserved.