以下は私が SparcLinux が走っている Sun Sparc 機で netatalk を 走らせようとコンパイルしたときの記録です。Netatalk とカーネルソースの 変更はTom Dyasによります。 カーネルソースの変更は、2.0.30 より前のカーネルでのエンディアンの 問題を解決します。これにより、ntohl()
を始めとする netatalk のコードを変更せずにすみます。ところで、Sun Sparc と Intel のアーキテクチャーの大きな相違点は エンディアンの問題です。Intel のチップは 32bit ワード(4B) を 1-2-3-4 という順番で格納します。これをリトルエンディアンと呼びます。 Sparc チップは 32bit ワードを 4-3-2-1 という順番で格納します。 これはビッグエンディアンです。ネットワーク I/O は全てビッグエンディアン で扱われているため、リトルエンディアンを採用している(Intel のような) アーキテクチャーでは、データをネットワークに送る前に変換しなければ なりませんし、受け取ったデータを処理する前にリトルエンディアンに 変更しなければなりません。この処理はホストからネットワークにデータ を送るときには
htonl()
を呼ぶことによって、ネットワーク からホストにデータを送るときにはntohl()
を呼ぶことによって 行います。ここにあったバグは 2.0.30 カーネルと 2.1.34 カーネルで修正され ました。
必要なもの:
- SparcLinux カーネル 2.0.24 以降が走っている Sun Sparc
- SparcLinux 用 Netatalk-1.4b2
- 2.0.30 以前のカーネルを使っている場合には atalk.h用のパッチ
すること:
- ソースの解凍と展開
- カーネルにパッチを当てる
- カーネルの設定とコンパイル
- netatalk のコンパイル(普通の linux と同じ)
- オプションの設定 (普通の linux と同じ)
- サーバーの起動(普通の linux と同じ)
ソースの解凍と展開配付されている netatalk を適当な場所に置き、つぎの様にタイプします:カーネルにパッチを当てる
tar -xzvf netatalk-1.4b2-compiled.tar.gz
これで配付されているソースを解凍し、展開できました。
これはカーネル 2.0.30 より前の版をコンパイルする前に用意しなければ ならないものです(2.0.30 カーネルではこのパッチは不要です)。 カーネルソースの root で、atalk.h.diff パッチをカーネルソースに当てます:カーネルを設定し、コンパイルする
patch < atalk.h.diff
変更されるのは
include/linux/atalk.h
です。警告: カーネルをコンパイルしたことがない人は Kernel-HOWTO を読んで下さい。ここでしくじるとシステムが動作しなくなるからです。SparcLinux netatalk の残りの部分は Intel Linux バージョンと同じです。 Linux-Netatalk-HOWTO 日本語訳を 参照して下さい。Netatalk を動かすために、カーネルに Appletalk DDP Support が不可欠 です。以下のコマンドでカーネルを設定して下さい。
make menuconfig
"Networking options" のところで、"Appletalk DDP" を組み込むか モジュールとして使うようにして下さい。
適当な方法でカーネルをコンパイルします。私は次のような コマンドを使っています:
make vmlinux
silo を必ず走らせて、新しいカーネルで再起動します。
このページは堀江誠一が翻訳しました。