ポートマッパの変更とビルド

それではより広く有益なことへと進もう。「Hello World」からNFSに進むのは極端なステップのように感じるが、悪くない。まずは必要なincludeファイルにアクセスするために、Linuxのソースツリーをインストールしセットアップする必要がある。ソースツリーはNSLU2に同梱のCDの中に収録されているsnapgearというtarファイルに入っている。
それではあなたのビルド場所でtarファイルのsnapgearをuntarしよう。ここではカーネルビルドにまで手を出すつもりはないから、ARMアーキテクチャのためのセットアップについては近道をする。snapgear/linux-2.4.xディレクトリの中で、次のスクリプトを作成し実行しよう:

#!/bin/bash

rm -f include/asm
rm -f include/asm-arm/proc
rm -f include/asm-arm/arch

( cd include; ln -s asm-arm asm )
( cd include/asm-arm; ln -s proc-armv proc )
( cd include/asm-arm; ln -s arch-ixp425 arch )

というところで、もう少し複雑なビルドをしなければならない。NFSはリモートプロシージャコールアーキテクチャに基づいている。RPCを機能させるためには、ポートマッパというデーモンが必要だ。私はポートマッパのソースコードをここで見つけ、NFSサーバのソースはここで見つけた。このソースツリーをuntarすると、結果的にもともとのgpl_code_2.03ディレクトリに加えてportmap_4ディレクトリ、snapgearディレクトリ、nfs-server-2.2beta47ディレクトリが作成されるだろう。

それではポートマッパをビルドしよう。私はビルドを単純にするため、Makeファイルにいくつか変更をしなければならなかった。まず外部ライブラリとの依存関係を減らすため、私は以下の行をコメントアウトした:

HOSTS_ACCESS=-DHOSTS_ACCESS

いたるところでlibwrap.aへのリファレンスを目にしたため、私は先ほどと同じ理由でこれもコメントアウトした。よりセキュアなサーバにするためにはこれらは外しておくべきだが、ライブラリを追加する必要もある。
次にsnapgear linuxのソースツリーを参照するように、CFLAGSの行をこのように変更した:

CFLAGS = $(COPT) -O $(NSARCHS) $(SETPGRP) -I /home/jbuzbee/snapgear/linux-2.4.x/include/

最後はmakeファイルの先頭に、私はクロスコンパイラを起動するために次の行を追加した:

CC=/home/jbuzbee/gpl_code_2.03/usr/local/openrg/armsaeb/bin/armv4b-hardhat-linux-gcc

makeファイル変更に加え、私はソースを少し変更する必要があった。portmap.cのファイルで、標準のperror設定を上書きするperror定義が存在していた。また今回のクロスコンパイルツリーに存在するstdio.hの宣言と整合させるため、引数の宣言を変更しconst charを__const charへと変更した。
さてこれで残すところは"make"だけになった。このmakeではやたら警告が出るが、このビルドはちゃんと最後まで通すこと。次にNSLU2にセーブするため、このバイナリをstripする:

# armv4b-hardhat-linux-strip portmap