配布パッケージの中身と、configureの役目を知る:仕事で使える魔法のLAMP(11)
前回入手したソースコードのファイルを調べ、ビルド前に必要な作業について解説します(編集部)
配布パッケージを展開してみる
前回からGNU Helloを例に、実際にビルドの手順を追いながら解説をしてきました。フリーソフトウェア、オープンソースソフトウェア(以下FOSS)のソースコード配布パッケージの入手、そのパッケージが本物であることの確認までが終わりました。
GNU Helloのソースコード配布パッケージは無事入手できましたでしょうか。まだの方は前回を参照しながら入手してください。本物かどうかの確認は、ついついおろそかにしがちですが、習慣としたいものです。FOSSのサイトがクラックされた例も過去にはあるのですから、習慣付けておいて損はありません。
それでは入手した配布パッケージを展開し、中に何が入っているか見てみましょう。
$ tar zxvf hello-2.7.tar.gz $ cd hello-2.7 $ ls -p ABOUT-NLS ChangeLog.O NEWS aclocal.m4 configure.ac man/ AUTHORS INSTALL README build-aux/ contrib/ po/ COPYING Makefile.am THANKS config.in doc/ src/ ChangeLog Makefile.in TODO configure gnulib/ tests/
ファイル名が大文字になっているものは、ほとんどの場合ドキュメントです。まずはドキュメントからチェックしていきましょう。
最低限確認すべきドキュメント
ほとんどのソースコード配布パッケージでは、ドキュメントは慣例に従ったファイル名になっています。ほかのファイルと見分けやすいように、すべて大文字か、大文字で始まる形になっています。数字で始まることもあります。
ドキュメントファイルはプレーンテキストですので、サーバ上でもlessコマンドなどで表示できます。HTMLやPDFといった形式のドキュメントを用意しているFOSSも増えてきましたが、そういったドキュメントはたいてい「doc/」などのディレクトリにあります。普通はサイト上にも同じものがあるので、そちらを見た方が早いでしょう。
まず「README」には、そのソフトウェアの紹介や、作者の連絡先などが書かれています。インストール手順をここにまとめてあることもあります。「ChangeLog」「CHANGES」などの名前のファイルは、バージョンごとの変更点がまとめられています。バージョンアップするときは目を通しておくとよいでしょう。
インストールの手順を示したファイルは「INSTALL」です。ほかのソフトウェアが必要なFOSSであれば、その一覧も記載してあるでしょう。ビルドという作業を進める上で、とても重要なドキュメントです。ざっとでも良いので、ビルド前には一読しておくべきです。詳しいインストール手順は、HTMLやPDFファイルに記載されている場合もあります。見逃さないようにしましょう。
このほかに、事前に把握すべきものとしては、そのFOSSのライセンスがあります。ライセンス条項を記したファイルは「COPYING」や「LICENSE」という名前になっています。著作権者は、ライセンスに基づいてソフトウェアの利用や再配布を許諾しているということを忘れてはなりません。
特に仕事で使う場合、ライセンスが問題となるケースもあります。代表的なライセンスであるGPLでは、派生したソフトウェアを再配布するときもGPLで配布しなければならないという制約があります。
派生したソフトウェアを販売しようと考えたとき、この点が問題になります。販売することも自由なのですが、入手した人が無料で再配布するのもまた自由になってしまうのです。このように、ライセンスの種類によっては、FOSSを採用できないということもあります。ライセンスを扱った解説記事やWebサイトなどもあります。詳しくはそちらを参照してください。
configureでMakefileを生成
さて、実際にGNU HelloのINSTALLファイルを見てみますと、冒頭に次のような1文があります。
Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package.
インストールにsudoを使っていないという違いはあるものの、これまでの連載で何度か示してきた手順と同じであることが分かります。
makeコマンドがどのような処理をしているかは、これまでの連載でその概要を解説しました。Makefileという名前のファイルに記した設定に従ってソースコードをコンパイル、リンクしたり、インストールなどを実行しているのでした。
ここで配布パッケージ内のファイル一覧をよく見てください。Makefileがどこにもありません。似たような名前のファイルはあるものの、配布パッケージには入っていないわけです。当然、配布パッケージを展開した直後にmakeを実行すると、Makefileがないのでエラーになります。
このことから、makeコマンドの前に実行しているconfigureコマンドが、Makefileを生成しているのだろうと分かります。configureはカレントディレクトリのファイルを実行していますので、これは配布パッケージ内にあるファイルということになります。
とにかく、configureを実行してみましょう。実行すると、以下のようになります。
$ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking for ranlib... ranlib (略) checking where the gettext function comes from... libc configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/Makefile config.status: creating doc/Makefile config.status: creating gnulib/lib/Makefile config.status: creating man/Makefile config.status: creating po/Makefile.in config.status: creating src/Makefile config.status: creating tests/Makefile config.status: creating config.h config.status: executing depfiles commands config.status: executing po-directories commands config.status: creating po/POTFILES config.status: creating po/Makefile $
ずらずらと「checking 〜」という表示が並び、最後の方で「creating Makefile」という表示を確認できます。この表示からもMakefileを生成しているということが分かります。
configureの役割
なぜ、Makefileを配布パッケージには含めず、付属のconfigureコマンドで生成するようになっているのでしょうか。これはソフトウェアをビルドする環境には、多かれ少なかれ差異があるからです。
Linuxと言ってもCentOSやDebian GNU/Linuxなどといった違いがありますし、FreeBSDやSolarisなどまったく別のUNIXもあります。同じCentOSでも、パッケージのインストール状況はそれぞれの環境で異なるでしょう。このような差異があると、単一のMakefileではうまく対応できないのです。
第9回の例を参照してほしいのですが、コンパイラのコマンド名をマクロとしてMakefileに記述しました。GNU C Compilerならgccですが、もしIntelのコンパイラをインストールしていればiccと記述します。コンパイラの標準コマンド名であるccが、どちらのコンパイラにシンボリックリンクを張ってあるかは、設定した人によるでしょう。
コンパイラに限らず、このように環境に依存しているものを決め打ちでMakefileに埋め込んでしまうと、自分の環境ではビルドできるがほかの人の環境ではできない、ということにもなりかねません。これを移植性が悪いともいいます。
環境の差異を吸収するには、その部分を設定可能にするしかありません。Makefileのマクロで定義すれば、実行時に上書きもできますし、Makefileの書き換えも簡単です。しかし、これはユーザーが差異を調べて吸収する作業をしなければならないということです。ビルドという作業をやり遂げる際のハードルがかなり高いものになってしまいます。
そこで、自動的に環境を調査して、環境に合わせて設定したMakefileを生成する、という方法が採られるようになりました。そのためのコマンドがconfigureです。lessなどで表示してみれば分かりますが、configureはシェルスクリプトです。標準的なUNIXであれば、どこでも実行できるようになっています。なお、configureが生成するのはMakefileだけではありません。ソースコードが参照するファイルなども設定しています。
configureがチェックする要素はかなりたくさんあります。configureの出力にある「checking 〜」という表示は、環境ごとの差異になり得る部分を1つチェックしていることを示す表示です。次のようにして調べてみると、GNU Helloで202個もあります。
$ ./configure | grep 'checking' | wc -l 202
configureによる自動設定が主流になる前は、Makefileなどのファイルを自分の環境に合わせて書き換えてからmakeしていました。それに比べると現在のビルド作業は、はるかに楽になったものです。ただし、今現在でもconfigureが付属せず、自分で書き換えなければいけないFOSSは、ごく少ないですが存在しています。
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.