タイトル大津真=XはUNIXでサーバで》UNIX用ソフトウエアのインストール法(2)カテゴリーインターネット全般, UNIX, 大津真=XはUNIXでサーバで
作成日2001/8/24 18:1:3作成者新居雅行
――――configureスクリプトでMakefileの作成
さて、多くのソースファイルに分かれたプログラムをコンパイルしたりインストールするには通常Makefileと呼ばれるファイルが使われます。Makefileには、必要なライブラリの場所や依存関係、コンパイル手順、インストール先などさまざまな情報が記述されています。ただし、同じUNIX系OSといっても、コンパイラの相違やライブラリやヘッダのあるなしなど環境はさまざまであり、ひとつのMakefileですべてに対応するのは不可能です。そこで最近のオープンソースソフトウエアでよく利用されるのがconfigureスクリプトです。configureスクリプトをコンパイルを行うシステム上で実行すると、システムを検索してコンパイラやリンカなどを探し出しその環境にあったMakefileを自動作成してくれます。したがって、ソースを展開してみてconfigureスクリプトが含まれていたら、簡単にインストールできる可能性があると考えてもいいでしょう。もちろんNcFTPにもconfigureスクリプトが用意されています。ただし、configureスクリプトも万能ではありません。ほとんどのソフトはMac OS Xなどという新参者のOSを意識して作られていはいないということもあって、configureスクリプトがエラーとなる確率も低くありません。その理由としては、必要なライブラリがないなどという致命的な場合もありますが、簡単な修正やオプションの設定で対応できることもあります。
用意されているconfigureスクリプトにどのようなオプションがあるかは「--help」を付けて実行してみればわかります。「cd ncftp-3.0.3 <return>」などとして、展開したディレクトリのルートをカレントディレクトリにしておきます。

% ./configure --help <return>
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print ‘checking...’ messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
〈以下略〉

NcFTPの場合、特にオプションを指定しなくてもエラーにはなりません。気を付けるとすればインストール先でしょう。デフォルトのインストール先は「--prefix」で指定される「/usr/local」になっています。/usr/localはFHS(UNIXのディレクトリ構造を標準化するための提案)によればユーザコマンドの置き場所として適切なのですが、Mac OS Xの今後のバージョンアップが心配なのと、筆者の場合マシンを一人で使用することもあって、ホームディレクトリの下のmyLocalディレクトリに自分でインストールしたコマンド類をまとめて置くようにしています。

◇UNIXのディレクトリ構造を標準化するための提案:
 http://pathname.com/fhs

そのためconfigureには「--prefix=$HOME/myLocal 」を付けて実行しました($HOMEは自分のホームディレクトリを表します)。

% ./configure --prefix=$HOME/myLocal <return>
creating cache ./config.cache
checking for gcc... no
checking for cc... cc
checking whether the C compiler (cc ) works... yes
checking whether the C compiler (cc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether cc accepts -g... yes
〈以下略〉

以上でめでたくMakefileが生成されました。ディレクトリの内容を表示するlsコマンドで確認してみましょう。

% ls <return>
CHANGELOG NcFTP_All.dsp autoconf configure sh
FIREWALL-PROXY-README NcFTP_All.dsw config.cache configure.in sh_util
LICENSE.txt READLINE-README config.h doc sio
Makefile README config.h.in install-sh vis
Makefile.bin Strn config.log libncftp win
Makefile.in WHATSNEW-3.0 config.status ncftp

――――makeでコンパイル
コンパイルはmakeコマンドで行います。makeコマンドを引数なしで実行するとMakefileに記述された手順に従ってコンパイル&リンクを行いオブジェクトを生成します。

% make <return>
( cd Strn ; make "CC=cc" "CFLAGS=-D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k" )
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -DSTRNP_ZERO_PAD=0 -DSTRN_ZERO_PAD=1 Dynscat.c -c
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -DSTRNP_ZERO_PAD=0 -DSTRN_ZERO_PAD=1 Strncpy.c -c
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -DSTRNP_ZERO_PAD=0 -DSTRN_ZERO_PAD=1 Strncat.c -c
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -DSTRNP_ZERO_PAD=0 -DSTRN_ZERO_PAD=1 Strntok.c -c
〈以下略〉

途中で、実行過程の他にワーニングやらエラーやらがだらだらと表示されると思いますが、binディレクトリを見てみるとオブジェクト自体はなんとか生成されたようです。

% ls bin
ncftp ncftpbatch ncftpbookmarks ncftpget ncftpls ncftpput

――――make installでインストール
コンパイルが終わったら「make install」でインストールします。このとき「-n」オプションを付けると実際にインストールはされずに、実行されるコマンドが表示されます。まあ、インストールするふりをして、変なところにコピーされないかとかを一応調べるわけです。

% make -n install <return>
( cd ncftp ; make "CC=cc" "CFLAGS=-D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k" )
echo ’Done making NcFTP.’
( cd sh_util ; make "CC=cc" "CFLAGS=-D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k" )
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -Dsh_util -DHAVE_CONFIG_H -I/Users/Shared/ncftp/ncftp-3.0.3 -I/usr/local/include -I. -I../libncftp -I../Strn -I../sio gpshare.o preffw.o spool.o util.o getline.o version.o ncftpget.c -o ../bin/ncftpget -L../libncftp -L../Strn -L../sio -L/usr/local/lib -lncftp -lStrn -lsio
strip ../bin/ncftpget
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -Dsh_util -DHAVE_CONFIG_H -I/Users/Shared/ncftp/ncftp-3.0.3 -I/usr/local/include -I. -I../libncftp -I../Strn -I../sio gpshare.o preffw.o spool.o util.o getline.o version.o ncftpput.c -o ../bin/ncftpput -L../libncftp -L../Strn -L../sio -L/usr/local/lib -lncftp -lStrn -lsio
strip ../bin/ncftpput
echo ’Done making NcFTP shell utilities.’
( cd vis ; make "CC=cc" "CFLAGS=-D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k" )
cc -D_LARGEFILE64_SOURCE -g -O2 -Wno-format-y2k -Dvis -DNCFTPPATH=\"/Users/o2/myLocal/bin/ncftp\" -DHAVE_CONFIG_H -I/Users/Shared/ncftp/ncftp-3.0.3 -I/usr/local/include -I. -I../libncftp -I../Strn -I../sio bmed.c wgets.o wutil.o pref.o preffw.o trace.o util.o bookmark.o version.o -o ../bin/ncftpbookmarks -L../libncftp -L../Strn -L../sio -L/usr/local/lib -lncftp -lStrn -lsio -lcurses
strip ../bin/ncftpbookmarks
echo ’Done making NcFTP full-screen utilities.’
mkdir "/Users/o2/myLocal" "/Users/o2/myLocal/bin" "/Users/o2/myLocal/man" "/Users/o2/myLocal/man/man1" 2>/dev/null
echo ’..... Installing the programs .....’
/usr/bin/install -c bin/ncftp "/Users/o2/myLocal/bin/ncftp"
〈以下略〉
(続く)
関連リンク