syslogの保存

ルータはログ機能を持っているが、ログの保存領域はせまいものが多い。そのため大抵はsyslogを使って、外部にログを吐きだす機能を持っている。ここでは、YamahaのRT107eを用いてsyslogの設定を行う。syslogを受け取るのは、CentOS5とする。

  • 前準備

まずファシリティ名を決める。ファシリティ名はauth,authpriv,cron,daemon,ftp,kern,local0〜local7,lpr,mail,news,syslog,user,uucpを用いることができる。この値はコンパイル時に決められているようだ。

# man 3 syslog

とすれば詳しい説明を読むことができる。
余談になるがmanのあとの数字はマニュアルのセクション番号。セクション番号は通常以下のように決められている

話がそれたが、ファシリティとして、local6を用いることにする。
またログは/var/log/routerlogにとる。ログのローテーションも行う。

/etc/syslog.confに以下の行を追加する。ここで空白はスペースではなくタブでなければならないので注意!

# Save Router Messages
local6.* /var/log/routerlog

次にログローテーションの設定を行う。/etc/logrotate.d/syslogで行う。一行目の{の前に/var/log/routerlogを追加しておく。
また、リモートからログを受け取れるようにsyslog起動時のオプションに-rをつけるように変更する。/etc/sysconfig/syslogファイルのSYSLOGD_OPTIONSに-rを追加すればよい。

SYSLOGD_OPTIONS="-r -m 0"

またsyslogは514番のudpポートを使用するため、iptableなどを用いている場合には、このポートを開けておくこと!
syslogを再起動する。

/etc/init.d/syslog restart

  • RT107eの設定

管理者モードでログイン後以下のコマンドを入力する。

# syslog host SYSLOGを取るサーバ名
# syslog facility local6

またcaution、infoのsyslogはデフォルトでは取られないので以下のコマンドを実行する。
caution(フィルタなどに引っかかったパケット)のsyslogを取る場合

# syslog caution on

infoのsyslogを取る場合

# syslog info on

デバック用のsyslogを取る場合

# syslog debug on

debugは大量のsyslogがとられるためデバックのときのみにしておいたほうが良い。

参考にしたのは以下のページ

# apt-get install kernel-package
# apt-get install libc6-dev
# apt-get install libncurses5-dev
# apt-get install module-init-tools

libc6-devを入れると自動的にlinux-kernel-headersもインストールされた。以下からソースを落としてくる。

root以外のユーザでログインしてソースをwgetで取得

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.gz
$ tar zxvf linux-2.6.23.1.tar.gz
$ cd linux-2.6.23.1
$ make oldconfig

いろいろと聞いてくる。とりあえず全部エンター

$ make menuconfig

iptables関連を有効にしておく

$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image

ここでエラー。どうやらfakerootがない。rootに戻ってインストール。

# apt-get install fakeroot

もう一度一般ユーザに戻ってmake-kpkg

$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.0.1 kernel_image

かなりの時間がかかる。無事カーネルパッケージの作成完了

$ cd ..
$ ls
linux-image-2.6.23.1_custom.0.1_arm.deb

このlinux-image-2.6.23.1_custom.0.1_arm.debをインストールする。以下はrootアカウントで実行

# dpkg -i linux-image-2.6.18-subarchitecture_custom.1.0_i386.deb

途中で以下のように怒られる

dpkg: dependency problems prevent configuration of linux-image-2.6.23.1:
linux-image-2.6.23.1 depends on initramfs-tools (>= 0.53) | yaird (>= 0.0.11) | linux-initramfs-tool; however:
Package initramfs-tools is not installed.
Package yaird is not installed.
Package linux-initramfs-tool is not installed.
dpkg: error processing linux-image-2.6.23.1 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
linux-image-2.6.23.1

initramfs-toolsをインストールしようとしたが、apt-get -f installしろと怒られる

# apt-get -f install

とりあえず以下のように表示される。

Setting up linux-image-2.6.23.1 (custom.0.1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.

# dpkg -i linux-image-2.6.23.1_custom.0.1_arm.deb

とりあえずうまくいったように見える。コンソールキットをつないでU-Bootからの起動を試みるがうまくゆかず。
仕方なしに、uImage.buffaloにもどして、dpkgを用いない方法で試すことにする。
以下のURLを参照

$ make clean
$ make uImage

時間がかかるのでちょっと休憩

"mkimage" command not found - U-Boot images will not be built

このエラー画面を見て納得。uImageはU-Bootで用いるイメージのことだったらしい。
道理でうまくゆかないわけだ。ちなみにmkimageをfindで調べたところ、
/usr/local/sbinにあるらしい。

PATH=/usr/local/sbin:$PATH; export PATH

として再び

$ make uImage

今度はうまく作成されたっぽい。

Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-2.6.23.1
Created: Sun Nov 11 18:42:57 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961100 Bytes = 938.57 kB = 0.92 MB
Load Address: 0x00008000
Entry Point: 0x00008000
Image arch/arm/boot/uImage is ready

つづいてモジュールのコンパイル

$ make modules

モジュールのコンパイル中に気づく、もしかしてdpkgを使って作成したカーネルイメージからmkimageを用いてuImageを作成できるのでは?
そこで調査すると以下のページを見つける

さっそくCtrl-Cでコンパイルを途中で止めrootになり試す

# cd /boot
# mkimage -l uImage.buffalo
Image Name: Linux-2.6.12.6-arm1
Created: Thu Feb 8 15:00:09 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736372 Bytes = 1695.68 kB = 1.66 MB
Load Address: 0x00008000
Entry Point: 0x00008000
# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Linux-2.6.23.1-arm1 Ver0.1" -d vmlinuz-2.6.23.1 uImage.kurobox
Image Name: Linux-2.6.23.1-arm1 Ver0.1
Created: Sun Nov 11 19:10:19 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 961104 Bytes = 938.58 kB = 0.92 MB

リブートしてU-Bootでストップ

Marvell>>setenv kernel 'uImage.kurobox'
Marvell>>boot

こんどはカーネルの読み込みまではうまくいったが上がってこない。
何かを根本的に間違っているのだろうか?
仕方ないので電源を強制的に切ってパラメータを元に戻す。

Marvell>>setenv kernel 'uImage.buffalo'
Marvell>>boot

どうやらカーネルのコンフィグから見直さないといけないようだ。時間がかかりそうなので今日の玄箱はここいらでやめておこう。

不要なサービスの停止

うちのセカンドマシンはXenがインストールされていて以下のような構成になっています。

一応基本的なモジュールと開発者用のツール&Xenのみをインストールしたのですが、メモリ1Gのマシンに3台のDomain-Uは厳しいので余計なサービスを停止することにします。以下のページを参考にしました

Domain-0(CentOS5.0)

  • xfs X用のフォントサーバ
  • rpcidmapd RPCを使う場合に必要。使用しないので停止。
  • rpcgssd RPCを使う場合に必要。使用しないので停止。
  • readahead_early キャッシュ内のファイルを前もって読みだす。メモリを考えると必要なし。
  • portmap PRC向けのダイナミックなポート指定デーモン。必要なし。
  • pcscd スマートカード用のデーモン。必要なし。
  • nfslock NFSを使わないので必要なし。
  • netfs NFSのマウントアンマウントを行う。必要なし。
  • hidd BlueToothを使わないので必要なし。
  • gpm コンソール用マウスサーバ。うざいだけなので停止しておく。
  • cups 印刷関連。必要なし。
  • bluetooth 名前のとおり。必要なし。
  • avahi-dnsconfd mDNS DNS-SDで用いる。通常は必要なし。IP-Phoneなどでは必要かもしれない。停止しておく
  • avahi-daemon 上記と同じ、必要なし。

Domain-U(CentOS4.5)
上記のDomain-0に加え

  • smartd
  • pcmcia
  • kudzu(脱着したハードの検出)
  • openibd(InfiniBand:グリッドコンピューティングなどのスパコンで使うバス)
  • autofs(自動的にマウントを行う)

を停止する。またpcscd,avahi-dnsconfd,avahi-daemonはインストールされていないのでoffの必要なし。

# chkconfig サービス名 off

を入力して、上記すべてをoffにしたのちrebootで再起動。無事終了。