「LinkStation」タグアーカイブ

EABI環境でkernelの再構築

まずARMなLinkstationではKernelがEABIという形式でコンパイルされていることを理解しましょう。
興味がある人は「debian EABI」で検索すれば少ないですが情報は取得出来ると思います。

LinkstationのkernelはこのEABIでコンパイルされているので
通常のapt-get install iptablesでiptablesをインストールしてもエラーが出て動きません。

サイトを検索するとkernelコンパイル時にEABIをOFFにしてOABIでコンパイルしている方が殆どのようです。
しかしこれは初心者には大変危険な方法なのです。
xfsでフォーマットしているファイルシステムは壊れてしまうことがあるのです!
(これもサイトを検索すれば色々と出てきます)
実際に一度OABIでコンパイルして動かしてみたら見事にファイルシステムが壊れました・・・
(おかげでこのサイトも数日止まってしまいました)

ではウンチクはこの辺で終わりにして実際にkernelのコンパイルを行います。
iptables有効なkernelのコンパイル方法を掲載したサイトはは沢山あるので要点だけ書きます。
まずはLS-GLのGPLなソースをバッファローからDLします。
GPL/LGPL Resource -BUFFALO INC.-
(DLするファイルはlinux-2.6.16_lsp.1.7.8.tar.gzです)
DLしたら適当な場所に解凍してmake menuconfigします。

設定画面が出たらrouting関連を全てチェックしnetfiter関連を全てのモジュールにしてから保存します。
(network filterはEnterキーで詳細項目の設定に移行します)
準備が出来たらmakeコマンドでコンパイルの開始です!
(事前にapt-get update と apt-get upgrade でGCCのバージョンを最新にしておいてください)
次にmake modulesコマンドでmodulesもコンパイルします。

コンパイルがうまく出来たらuImageとmodulesを組み込みます。
uImageはソースファイルの下の/arch/arm/bootの中にuImageで出来上がっています。
これを/bootにuImage.buffaloとしてコピーします。
modulesは INSTALL_MOD_PATH=/ make modules_installでinstallします。
終わったらdepmod -aでmodulesを反映させときます。

これでkernelのコンパイルとインストールは終了です。
再起動して動くか確認してみましょう。

FreeLinkのカーネルバージョンを簡単に上げよう!

※この方法はLS-GL(国外ではLSPro)にFreeLinkを導入している方が対象です。

LS-GLにFreeLink1.0rev2を導入するとKernelのバージョンが2.6.12.6で導入されます。
メーカー標準のファームでは2008年1月現在2.6.16.16が入ります。

そこでFreeLinkのKernelを2.6.16.16に上げようというのが今回の企画です。

まず最初にやったのがソースを拾ってきてコンパイルでした。
コンパイルに必用なパッケージを入れたりconfigファイルを設定したり割と面倒です。
コンパイルに要する時間も非常に長いです。

誰かビルドしている人はいないのか?と調べたところFreeLinkがあるサイトのDLディレクトリにあるではありませんか!
これを使わない手は無いです(笑)

さてこれより超簡単なKernel入れ換えに入ります。

1./bootディレクトリに移動します。
コマンド:cd /boot

2.wgetでコンパイル済みファイルをDLします。
コマンド:wget http://downloads.nas-central.org/Users/mindbender/arm9/KERNEL/2.6.16.16-arm1-mb_v1/uImage_2.6.16.16-arm1-mb_v1

3.現在のKernelファイルに_oldを付けてリネームします。
コマンド:mv uImage.buffalo uImage.buffalo_old

4.wgetしたファイルをuImage.buffaloとして動くようにシンボリックリンクを張ります。
コマンド:ln -s uImage_2.6.16.16-arm1-mb_v1 uImage.buffalo
(以前のKernelに戻すにはrm uImage.buffaloでシンボリックリンクを削除しln -s uImage.buffalo_old uImage.buffaloで以前のKernelにシンボリックリンクを張ればOKです)

Kernelの入れ換えはこれだけです!(僅か4ステップ)
※しかしここで再起動してはいけません!
新Kernelのモジュールが入っていませんので動きません。

新Kernel用のモジュールも導入します。

1.作業ディレクトリに移動します。(ここでは/tmpとしてます)
コマンド:cd /tmp

2.wgetでモジュールファイルを取得する。
コマンド:wget http://downloads.nas-central.org/Users/mindbender/arm9/KERNEL/2.6.16.16-arm1-mb_v1/modules_2.6.16.16-arm1-mb_v1.tar.gz

3.取得したファイルを解凍する。
コマンド:tar -C / -xzvf modules_2.6.16.16-arm1-mb_v1.tar.gz

4.解凍したモジュールを登録する。
コマンド:cd /lib/modules/2.6.16.16-arm1-mb_v1
コマンド:depmod -a

これでモジュールの導入も完了です!(僅か4ステップ)

さて再起動してみましょう・・・

順調に起動しているように見えたが最後の方でcat /proc/driver/kernevntが無いというエラーが連発して
TeraTermの画面を埋め尽くしていきます(^^;
このエラー表示はシリアルコンソールの画面でしか確認できません。
telnetで接続しても普通に動いているようにしか見えません。
この状態では電源ボタンを長押ししてもシャットダウンしない状態になっています。
またtopコマンドでプロセスの使用状況を見るとkernelmonというプロセスが表示されます。
シリアルコンソールで接続していない場合はこれで確認できます。

色々調べてみると今回のKernelと以前のKernelでkernevntを吐き出している場所が違うようです・・・
そこでkernelmonスクリプトの書き換えを行います。

ここからはシリアルコンソール経由からはログが流れて操作出来ない状態になっているのでtelnetで接続して作業を行います。

コマンド:vi /usr/local/sbin/kernelmon

“cat /proc/driver/kernevnt”と書いてある部分がすぐに見つかると思います。
ここを”cat /proc/buffalo/kernevnt”に書き換えて保存します。

これでエラーの対処も終わりましたのでrebootします。
再起動後にエラーが出ない状態になればファームの更新作業は無事終了です。
電源ボタンの長押しで再起動するようになっているはずです。
超簡単Kernelバージョンアップはこれにて終了です!

今後も標準ファームで新Kernelが登場したら簡単入れ換え可能であればやってみようと思います(笑)

5.インデックスページの作成と自動実行

ここまでで一応設定等は終わりですが手動でmrtgを動かすわけにも行かないので
スクリプトを作成してcronに登録します。
また、作成したページをインデックス表示してくれるHTMLも
mrtgで提供されているスクリプトを利用して作成します。

/usr/binにexec_mrtgという名前でスクリプトを作成します。
内容はこの一行だけです。
※cronに直接登録したら動かなかったのでスクリプトにしました。

env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg

実行権限も適切に与えてください。
このスクリプトをcronに登録します。
crontab -e コマンドを実行して登録してください。

*/10 * * * * /usr/bin/exec-mrtg

通常は5分間隔で実行することが多いようですが
LinkStationのCPUは非力なので10分間隔で実行するようになっています。

次にインデックスページを作成します。
indexmakerというスクリプトを使うと自動で生成してくれるので非常に便利です。

/usr/bin/indexmaker /etc/rtg/mrtg.cfg > /インデックスを作成したいパス/index.html

途中にある「>」はりダイレクトというファイルに出力する記号なので
省いて実行するとエラーになり作成されませんので注意してください。

index.htmlをブラウザから開けばインデックスのページが表示されます。

※設定等はご自分の環境に合わせた設定に調整して行ってください。

MRTG INDEX サンプル画像

4.FANと温度の監視

いよいよLinkStation特有の設定であるFAN回転数と温度の監視に入ります。

まずmrtgに結果を返してあげるPerlスクリプトを作成します。

まずFANの回転数を取得するスクリプトです。
/usr/local/mrtg/binにmon_fan.plという名前で作成します。

-----------------------

#!/usr/bin/perl —

$rpm = readpipe(‘/usr/local/sbin/miconapl -a fan_get_speed’);
$rpm =~ s/#[miconapl.fan_get_speed]sfan_rpm=//;

print “$rpm” . “2640nnlocalhostn”;

-----------------------

このスクリプトは以下のような内容の結果を出力します。

実際のFANの回転数
2640
(空白行)
localhost

この結果をmrtgが受け取ることで二つのグラフのが完成します。
2640の部分は0でも構いません。
この場合はグラフを見る場合の目安線とする為にこの値にしています。

スクリプトを作成したら適切な権限を与えて
/usr/local/mrtg/bin/mon_fan.plを実行してみてください。
FANの回転数等が表示されるはずです。

次に同じように温度を出力するスクリプトを作成します。

/usr/local/mrtg/binにmon_temp.plという名前で作成します。

-----------------------

#!/usr/bin/perl —

$temp = readpipe(‘/usr/local/sbin/miconapl -a temp_get’);
$temp =~ s/#[miconapl.temp_get]stemp=//;

print “$temp” . “55nnlocalhostn”;

-----------------------

内容は基本的にFANと同じで温度に変わっただけです。

スクリプトを作成しましたのでmtrg.cfgにFAN、温度監視の設定を追加します。

-----------------------

Options[fan]: gauge,growright,nopercent,unknaszero
MaxBytes[fan]: 3700
ThreshMaxI[fan]: 3000
SetEnv[fan]: EMAIL=”メールの送信先アドレス”
URL=”http://ウェブアクセスアドレス/fan.html”
YLegend[fan]: Fan RPM
ShortLegend[fan]: rpm
LegendI[fan]:RPM
LegendO[fan]:fastline
Unscaled[fan]: ymwd

Target[fan]: `/usr/local/mrtg/bin/mon_fan.pl`
Title[fan]: Fan RPM Information
PageTop[fan]:

Fan RPM Information on localhost

System:localhost
Maintainer:Root
Ip:192.168.0.1

Options[temp]: gauge,growright,nopercent,unknaszero
MaxBytes[temp]: 75
ThreshMaxI[temp]: 50
SetEnv[temp]: EMAIL=”メールの送信先アドレス”
URL=”http://ウェブアクセスアドレス/temp.html”
YLegend[temp]: Temperature
ShortLegend[temp]: C-deg
LegendI[temp]:TEMP
LegendO[temp]:borderline
Unscaled[temp]: ymwd

Target[temp]: `/usr/local/mrtg/bin/mon_temp.pl`
Title[temp]: Temperature Information
PageTop[temp]:

Temperature Information on localhost

System:localhost
Maintainer:Root
Ip:192.168.0.1

-----------------------

またまた3回mrtgを実行すればFAN、温度監視のHTMLが作成されます。
もちろんディスク管理の時と同じで設定温度、FAN回転数が

規定値を超えれば送信先アドレスにメールが送信されます。
試しにThreshMaxI[temp]: の値を低くしてmrtgを実行してみれば
実際にメールが送られてくるか確認できます。

メールが送られてこない場合は実行ファイルの権限や
スクリプト、コンフィグファイルの内容を再確認してください。

3.メール送信とディスクの監視

ここまでは比較的簡単に出来ると思います。

次にディスクの使用率監視設定を行います。

と、その前にディスク使用率上昇、FAN回転数上昇、温度上昇が
ある一定の値を超えた場合に管理者にメールするスクリプトを作成します。
※このスクリプトを動かすためにはmailutils、exim4のパッケージをインストールし
mailコマンドでメール送信が出来るように設定する必要があります。

/usr/local/mrtg/binにmail_warning.plというPerlスクリプトを作成します。
(権限などは動くように変更してください)

以下mail_warning.plの内容
---------------------

#!/usr/bin/perl —

$to = $ENV{‘EMAIL’};
$from = “mrtguser@hiro7216.mydns.jp”;
$subject = “‘[ Warning ] $ARGV[0] on $ENV{‘HOST’}'”;

open(MAIL,”| mail -s $subject $to”);

print MAIL “From: $fromn”;
print MAIL “To: $ton”;
print MAIL “Subject: $subjectnn”;

print MAIL `date` . “$ARGV[0] が閾値 を超えました。n”;

print MAIL “————————————————- n”;
print MAIL ” 閾値 : $ARGV[1] n”;
print MAIL ” 現在の値 : $ARGV[2] n”;
print MAIL “————————————————- nn”;

print MAIL “$ENV{‘URL’} n”;

foreach(@ARGV){
print MAIL $_;
}

close(MAIL);

---------------------

これで警告メール送信スクリプトの準備が出来ました。

mrtg.cfgにメール送信の為の共通オプション設定を書き加えます。

共通設定ですのでネットトラフィックやCPU監視設定よりも先に書くことになります。

---------------------

SetEnv[^]: HOST=”localhost”

ThreshDir: 警告ファイルを出力するパス/www/
ThreshProgI[_]: /usr/local/mrtg/bin/mail_warning.pl
ThreshProgO[_]: /usr/local/mrtg/bin/mail_warning.pl

---------------------

これで設定した値を超えた値を検出した場合にメールを送信する設定が終わりました。
次にディスクの監視を行うために監視したいパーティションがマウントされているパスをsnmpdに設定します。

/etc/snmp/snmpd.confというsnmpdを設定するコンフィグファイルがあるので
その一番最後に監視したいパーティションにあるパスを指定します。

---------------------

disk /
disk /mnt/disk1
---------------------

設定後に/etc/init.d/snmpd restartとコマンドでsnmpデーモンを再起動してください。
再起動後に指定したディスクの情報をsnmpから取得することが出来るように成します。

いよいよmrtg.cfgにディスク監視用の設定を書き込みます。

---------------------

Options[df]: growright,gauge
ThreshMaxI[df]: 80
ThreshMaxO[df]: 80
SetEnv[df]: EMAIL=”メール送信先アドレス”
URL=”http://ディスク監視ページのアドレス/df.html”
MaxBytes[df]: 100
YLegend[df]: Disk Usage
ShortLegend[df]: %
LegendI[df]:rootfs
LegendO[df]:/mnt/disk1
Target[df]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.2:public@localhost:
Title[df]: Disk Usage “rootfs” and “/mnt/disk1”
PageTop[df]:

Disk Usage “rootfs” and “/mnt/disk1” on localhost

System:localhost
Maintainer:Root
Ip:192.168.0.0

---------------------

今回の設定ではディスク使用率が80%を超えたら警告メールが送信されるようになっています。
%を変更するには

ThreshMaxI[df]: 80
ThreshMaxO[df]: 80

この数値を変更してください。
設定した数値の%を超えるとメール送信されるようになります。

mrtgをまた3回実行すればディスク監視用のhtmlファイルが作成され確認できると思います。

2.CPUとメモリの監視

次はCPU、メモリの監視設定です。

設定内容の細かい意味はここでは省略します(笑)
※検索すれば設定値の意味は出てくると思います。

以下作成したコンフィグファイルに追加。
-----------------

### CPU ###
Options[cpu]: gauge,absolute,integer,growright,nopercent
MaxBytes[cpu]: 100
YLegend[cpu]: CPU Load Average (%)
Legend1[cpu]: 1 min CPU Load Avalage
Legend2[cpu]: 5 min CPU Load Avalage
LegendI[cpu]: 1min
LegendO[cpu]: 5min
ShortLegend[cpu]: percent (%)
Unscaled[cpu]: ymwd

Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@localhost
Title[cpu]: CPU Load Average for localhost
PageTop[cpu]:

CPU Load Average for localhost

System:localhost
Maintainer:Root
Ip:192.168.0.0

### memory ###

Options[memory]: gauge,absolute,growright
YLegend[memory]: Memory Used(Bytes)
ShortLegend[memory]: (Bytes)
Legend1[memory]: Real Memory
Legend2[memory]: Swap Memory
LegendI[memory]: Real
LegendO[memory]: Swap
Unscaled[memory]: dwmy
kMG[memory]: k,M,G,T,P

Target[memory]: 1.3.6.1.4.1.2021.4.6.0&1.3.6.1.4.1.2021.4.4.0:public@localhost
MaxBytes1[memory]: 131072
MaxBytes2[memory]: 131072
Title[memory]: Memory Used for localhost
PageTop[memory]:

Memory Used for localhost

System:localhost
Maintainer:Root
Ip:192.168.0.0

-----------------------

これでまた3回実行すればCPU、メモリのhtmlも作成されているはずです。