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にとる。ログのローテーションも行う。
- CentOS側の設定
/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がとられるためデバックのときのみにしておいたほうが良い。
■
参考にしたのは以下のページ
- http://www.debian.org/releases/stable/i386/ch08s06.html.ja
- http://park15.wakwak.com/~unixlife/linux/de-kernel.html
- http://park15.wakwak.com/~unixlife/linux/de-kernel-pkg.html
# 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
かなりの時間がかかる。無事カーネルパッケージの作成完了
この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.
とりあえずうまくいったように見える。コンソールキットをつないで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がインストールされていて以下のような構成になっています。
- Domain-0 CentOS5
- Domain-U 3台仮想マシン上でCentOS4.5が動作
一応基本的なモジュールと開発者用のツール&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で再起動。無事終了。