configureの設定を変更してみる:仕事で使える魔法のLAMP(12)
configureを実行するときに、どのような項目を設定できて、どこまで自由に変更できるのかを説明します(編集部)
configureでどんなことを設定できるか
前回は、ソースコード配布パッケージに入っているconfigureスクリプトを使って、Makefileを生成するということを解説しました。Makefileはパッケージには含まれず、自動的に環境の違いを吸収した上で生成することで、さまざまな環境でビルドできるようになっています。configureスクリプトの役割の1つは、「ほかの環境に移植しやすくする」ということがあるのです。
もう1つの役割は、ビルド時にユーザーが設定を変更できるようにすることです。こういった設定は、Makefileやソースコードに埋め込むものです。環境の差異による設定も、これらのファイルに記述するわけですから、configureスクリプトで同時に済ませるのは合理的です。また、設定と環境の差異が密接に関係していることもあります。例えば外部のライブラリに依存している機能を組み込むかどうかの設定です。
configureスクリプトで設定する主な項目としては、インストールディレクトリ、コンパイラやそのオプション、機能や追加オプションのオン・オフ、ソフトウェア実行時の設定のデフォルト値の4つが挙げられます。
このうち、3つ目と4つ目はソフトウェアごとに異なりますが、1つ目と2つ目は大体どのソフトウェアでも同じです。今回はこの共通の設定について解説します。
インストールディレクトリを変更する
configure実行時に、設定内容を指定する方法としては、コマンドラインの引数(オプション)と、環境変数があります。どんなことができるのかということは、--helpを引数にして実行すると現れるヘルプで確認できます。GNU Helloのconfigureスクリプトでは、図1に示すようなことを設定できます。
$ ./configure --help `configure' configures GNU Hello 2.7 to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] (省略) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <bug-hello@gnu.org>. GNU Hello home page: <http://www.gnu.org/software/hello/>. General help using GNU software: <http://www.gnu.org/gethelp/>.
たくさんの引数がありますが、ソフトウェア固有のものと、どのソフトウェアのconfigureスクリプトでも共通に使えるものの大きく2つに分けられます。configureは開発者が記述するものではなく、ツールを使って自動で生成するスクリプトです。そのため、どのソフトウェアにも共通の引数があるのです。ソフトウェア固有の引数だけを表示するには--help=shortを使います。普段はこちらのヘルプを参照するのがよいでしょう。
まずは、GNU Helloのインストールディレクトリを設定してみます。これには--prefixを使います。インストール先を指定する引数はほかにもありますが(後述)、どのソフトウェアでも使える共通の引数です。
次のように「--prefix=ディレクトリ名」とします。この例では、/opt/hello-2.7ディレクトリにインストールしています。
$ ./configure --prefix=/opt/hello-2.7 $ make $ sudo make install
指定したディレクトリにインストールできたことを確認してみましょう。
$ ls -p /opt/hello-2.7 bin/ share/ $ ls -p /opt/hello-2.7/bin hello $ /opt/hello-2.7/bin/hello Hello, world!
ちゃんとhelloコマンドをインストールできています。
このように、インストールするファイルは--prefixで指定したディレクトリの直下ではなく、binなどのサブディレクトリにインストールされます。このサブディレクトリのレイアウトは、UNIXの標準的なレイアウトに従っています。もし--prefixに/usrを指定すれば、OSの標準的なディレクトリにインストールすることになるわけです。もちろんこのように指定すると、OSが本来備えているファイルを上書きしてしまうので、やめましょう。
--prefixを指定しないでconfigureを実行すると、/usr/localを指定したことになります。このようなデフォルト値もヘルプに書いてありますのでよく確認しましょう。
一般に、/usr/localというディレクトリはOS標準外のソフトウェアをインストールする場所となっています。ここにインストールしても良いのですが、先ほどの例の/opt/hello-2.7のように、ソフトウェアごと、バージョンごとのディレクトリにインストールしておくのも1つの手です。こうしておけばバージョンの切り替えや、一括削除が簡単になります。
インストール先の標準のレイアウトを変更することもできます。例えば--bindirを使えば実行ファイルのインストール先のみを変えることができます。ただ、レイアウトまで変更しなくてはならないケースはほとんどないでしょう。
実行ファイル以外のディレクトリ
GNU Helloのインストールディレクトリに「share」というディレクトリがありました。このディレクトリにはプロセッサのアーキテクチャによらないファイルが入ります。実行ファイルはプロセッサのアーキテクチャごとに異なるファイルになるものですが、shareにあるファイルはアーキテクチャを超えて共有できるファイルが入っています。OS標準のディレクトリであれば/usr/shareになります。
GNU Helloの場合、ここに翻訳データやマニュアルが入っています。GNU Helloはただ「Hello, world!」と表示するだけのソフトウェアではないのです。実は多言語化されたものです。次のように環境変数LANGを各国のロケールに変えることで、さまざまな国の言葉で「Hello, world!」を表示できます。以下は日本語とフランス語でHello, worldを表示した例です。ここで使っているenvコマンドは、そのときだけ環境変数を変更するコマンドです。
$ env LANG=ja_JP.UTF-8 /opt/hello-2.7/bin/hello 世界よ、こんにちは! $ env LANG=fr_FR.UTF-8 /opt/hello-2.7/bin/hello Bonjour, le monde!
マニュアルは、manコマンドやinfoコマンドで参照できます。通常、manやinfoコマンドは、man helloのように使うものです。しかし、今回の例のような場所にインストールすると、マニュアルファイルのサーチパスにファイルがないためにman helloと実行しても表示が出てきません。その場合は次のように直接ファイルを指定しましょう。
$ man /opt/hello-2.7/share/man/man1/hello.1 $ info /opt/hello-2.7/share/info/hello.info
このように、標準外の場所にインストールすることによる弊害もあります。マニュアルなどは頻繁に使うものでもありませんし、管理の容易さを優先した方が良いと筆者は考えています。なお、翻訳データの場所はビルド時の設定としてhelloコマンドに埋め込まれるので、上記の例のように問題なく利用できています。
環境変数でも設定できる
configureスクリプトの設定は、環境変数で指定するものもあります。--prefixのような引数ではなく、環境変数で設定するのはなぜでしょうか。
環境変数による設定方法は、configureのヘルプを見ると最後の方にでてきます(図1も参照)。ここのCCなどは、見覚えのある名前ではないでしょうか。実はこれらの設定は、第9回でとりあげた、makeの標準的なマクロと同じものなのです。
makeのマクロは、Makefileの中で参照できる変数のようなもので、例えばCCはコンパイラのコマンド名でした。ここでちょっとmakeのマクロの復習です。マクロの値は次の優先順位で決まります。
- makeの引数(例: make CC=gcc)
- 同じ名前の環境変数
- Makefile中の定義
- makeが持つデフォルト値
つまり、この設定はmakeの実行時に指定して変更することもできるのです。これをさらにconfigureでも設定するというのは、ちょっと余計なことのようにも思えます。もちろんこれには理由があって、configureにマクロの値を教えておくことによって、そのマクロの値を前提にした環境のチェックをしているためです。
例えば、コンパイラをIntelコンパイラに変更したい場合、CC=iccとするわけですが、configureにこれを渡しておけばコンパイラをiccに変えた状態でチェックをかけることになります。もしチェック時に問題があればconfigureはエラーで止まります。そのため、configure実行時とmake実行時は、原則としてマクロの値は同じでなければいけません。せっかくのチェックが無駄になってしまうためです。
configureの実行前に環境変数を設定しておき、その後何もしなければよいのですが、ビルドを繰り返したり、さまざまなソフトウェアをビルドしていると混乱する可能性があります。makeコマンドも環境変数を参照しているので、configure時と一致しなくなることも考えられます。
そこでconfigureスクリプトで環境変数の設定をするときは、その都度毎回コマンドラインで指定することをおすすめします。ヘルプにも書いてあるのですが、makeコマンドのマクロと同様に引数から指定することもできるのです。
$ ./configure CC=gcc
あるいは前述のenvコマンドを使っても問題ありません。
$ env CC=gcc ./configure
ここまででconfigureスクリプトで共通に使う設定方法はほとんど説明できました。次は、ソフトウェア個別の設定です。
- 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.