2009年7月4日土曜日

ガラクタにDebianをインストール

8年頑張ってくれたサーバ機が壊れたので、最近(8年から見れば最近)何かと話題のAtomのマザーボードを買ってみた。

http://www1.pcdepot.co.jp/webshop/commerce/CSfEcLastGenGoodsPage_001.jsp?GOODS_NO=42471&IMG_ROOT=/webshop

型番で検索すると「誰がこんなもの買うんだ」みたいな批評も出てくるが、PCIが2枚、PCI Expressが1枚挿せるのでこれにした。100BASEケーブルにしか対応してないけれど、壁内を通しているケーブルが100BASEケーブルだから当面ギガビットは要らない。

すんなり行くだろうと思いきや、いろいろと問題が起こり、バッドノウハウが溜まったのでメモ。

DebianをUSBインストール
参考:公式サイトの「USB メモリでの起動用ファイルの準備
Ubuntu8.04でDebianのインストールUSBドライブを作成した。とはいっても、とくに難しいことはない。


# aptitude install selinux mtools
# syslinux /dev/sdc1 # USBメモリのデバイスファイル
# mount /dev/sdc1 /mnt
# cd /mnt
# echo "default vmlinuz" > syslinux.cfg
# echo "append initrd=initrd.gz" > syslinux.cfg


そして、ISOイメージをUSBメモリの中に放り込んで完成。作る側がDebianでもUbuntuでも何ら相違なかった。
これをマシンにさして、USBブートすればインストールできる。CDに焼くより早くできるので、余っているクリップドライブがあるならこれはかなり良い。


aptにISOイメージをCDとして認識させる
参考: Re:apt-cdrom on iso mount
これは厄介。USBインストールだとCDがないから、ISOイメージをCDとして認識させる必要がある。
(マシンにCDドライブが無く、ネットワークに接続できないため。でなければこんなもの不要かと思われる)
以下、インストールしたマシンで

# mount -o loop debian.iso /mnt
# nano /etc/fstab
上記マウントをfstabにも書き込む。
/home/toshi/debian.iso /mnt iso9660 loop,user 0 0
# nano /etc/apt/sources.list
以下の一行を追加
deb file:///mnt/ lenny main
利用しないリポジトリをすべてコメントアウト
# aptitude update


これでISOイメージをdebianパッケージの入ったCDとして利用できる。


組み込みLANインターフェイス「Realtek RTL8101EL」のドライバをDebian Lennyにインストール
参考:本家のドライバ - treffen - 自宅サーバ
これが一番厄介だった。R8101ELは、Linuxカーネルにこのドライバが組み込まれていない。そのため、Realtek本家のソースコードをコンパイルするわけだが、これがエラーを吐いてくるので若干の修正が必要なのだ。
まず、本家ドライバをUSBメモリなどで新PCに移動。
次に以下ようにパッケージをインストール

# aptitude install linux-headers-`uname -r` libgomp1


あとはマニュアルどおり

# lsmod | grep r8169
(元々入っているドライバが表示される)
# rmmod r8169
# lsmod | grep r8169
(表示されなくなる)


R8010用ドライバのディレクトリに移動して以下のパッチを適用。本当にやっつけなので、無保証です。
共通の下位ディレクトリー: src-orig/.svnとsrc/.svn
src/だけに発見: modules.order
diff -c src-orig/r8101.h src/r8101.h
*** src-orig/r8101.h 2008-01-04 18:48:42.000000000 +0900
--- src/r8101.h 2009-07-04 01:17:43.220310388 +0900
***************
*** 49,55 ****
--- 49,57 ----

#define NODE_ADDRESS_SIZE 6

+ /* temporary disable
#define CONFIG_R8101_NAPI 1
+ */

#ifdef CONFIG_R8101_NAPI
#define NAPI_SUFFIX "-NAPI"
***************
*** 988,990 ****
--- 990,1000 ----
#endif
unsigned wol_enabled : 1;
};
+
+ #ifndef SET_MODULE_OWNER
+ #define SET_MODULE_OWNER(dev) do { ; } while(0)
+ #endif
+
+ #ifndef SET_NETDEV_DEV
+ #define SET_NETDEV_DEV(net,pdev) ((net)->class_dev.dev = (pdev))
+ #endif
あとはマニュアルどおり。

# make clean modules (as root or with sudo)
# make install
# depmod -a
# insmod ./src/r8101.ko (or r8101.o for kernel 2.4.x)
確認用↓
# lsmod | grep r8101
# ifconfig -a
これで、晴れてネットワークにつながるようになった。
久しぶりにいろんなサイトを駆けずり回った。Linuxも易しくなったものだ・・・。
あとは、サーバを復旧するだけだ。