「LinkStation」カテゴリーアーカイブ

lastlogが正常に動いていない

久々にLinuxネタを。

logwatchが出力するログを見ててlastlogがずっと以下のエラーを出してるのは気になってました(笑)
lastlog_openseek: /var/log/lastlog is not a file or directory!
lastlog_filetype: Couldn’t stat /var/log/lastlog: No such file or directory

そもそも/var/log/lastlogがない状況で出すものすらないと・・・

当然ですがコマンドでlastlogを実行してもエラーが出ますし
ログインしても最後の接続時間は出ていない状況でした。

pamの設定を見てみるがちゃんとsession option pam_lastlog.soは記述されてるし
sshd_configもちゃんとUsePAM yesになってるんですよね。

この様な理由からsshでログインした時におかしいのではなく
そもそもPAMのログインに時にlastlogが記録されていないと推測しました。

色々と調べてみると/var/log/lastlogはちゃんと作ってあげないと動かないらしいです(汗)
#touch /var/log/lastlog
で、とりあえず/var/log/lastlogを作ってみたらちゃんと動きました。
/var/log/lastlogなかったら作るくらいしてくれればいいのに・・・

ということで今更ですがlastlogが正常に動くようになりました。
SSHでのログイン時も最後のログイン情報が出力されるようになりました。
(SSHでのログイン時にlastlogを出すかはSSHの設定によります)

DLNAサーバーの導入

今まではNASに入れたmpeg2を直接Regzaで再生していました。
しかし、mpeg2だと流石にファイルのサイズが大きいですね。

PS3の新品が安く売っていたので思わず購入(笑)
PS3のDLNAクライアントは割と色んな種類のファイルが再生可能だったりします。
(バージョンアップで再生可能な形式が増えたりもします)
しかしUSBで接続したメディアのファイルは再生出来るもののNASの共有ファイルを直接覗く事は出来ません。
そこでLinux(etch)にDLNAサーバーを導入することにしました。
DLNAサーバーとして採用したのはMediatombというフリーのアプリです。

インストールの方法は下記のサイトに詳しく載っているので省略します。

玄箱PROを使用したPS3用DLNAサーバ構築手順 (Mediatombのインストール)

このままPS3からDLNAサーバーの検索を行うとMediaTombという名前で表示されます。
この名前を変更する方法は/etc/mediatomb/config.xmlを編集します。
MediaTombとなっている部分のMediaTombを任意の名前に変更すればPS3にもその名前で表示されるようになります。
※勿論RegzaからDLNAで接続してもファイルは見えますがmpeg2しか再生出来ません。

LinuxからWindowsを再起動(シャットダウン)

WakeOnLanに続きLinuxからWindowsを再起動(シャットダウン)する方法です。

まず最初に試してみたのがsmbをインストールすると使えるrpcclientです。

rpcclient -U username%password -N -W yourWorkGroup -c ‘shutdown -r’ yourPCName

早速実行してみる。
invalid command

コマンドがダメだと怒られる・・・
色々調べてみたけど解決策は見つからず。
どうもこのコマンドではうまく行かないようです。

他に方法が無いものかと調べていたらnetコマンドで対応できるようです。

net rpc shutdown -r -t 30 -S yourPCName --workgroup=yourWorkGroup -U username%password --comment=”comment”
↑これは一行で書きます。

以下は各コマンドオプションの説明です。

shutdown -r
これは再起動の命令です。shutdownと-rを取ればシャットダウンに変更できます。
(私の環境ではシャットダウンしてもWindowsは正常に終了するものの電源が完全に落ちませんでした。)

-t 30
シャットダウンするまでの時間(秒数)です。
コマンドが正常に受理されるとWindowsにシャットダウンする事を伝えるダイアログが出現し指定した秒数のカウントダウンが始まります。

-S yourPCName
再起動するPC名を指定します。-Sで指定する場合はコマンドを実行するLinux側で名前解決できている必要があります。
もしIPでPCを指定する場合は -I オプションでIPを指定してください。

--workgroup=yourWorkGroup
再起動するPCが属しているワークグループ名です。
(これはなくても実行可能かも)

-U username%password
再起動するPCのユーザー名とパスワードを指定します。ユーザー名とパスワードの間に%を入れるのを忘れないで下さい。

--comment=”comment”
コマンドが正常に受理されるとWindowsにシャットダウンする事を伝えるダイアログが出現します。
このダイアログにコメント欄がありそこにここで指定したコメントが表示されます。
もしも誰かが再起動するマシンを操作していた場合にワームによる再起動と間違われないようにコメントは書いておきましょう。

ログを監視しメールを自動送信する。

Apache2のログ監視はanalogをインストールし既に行ってました。
また、サーバーの各ステータスもMrtg+RRDTOOLで監視を行っていました。
そこで今回はsyslogなどの実際のログを監視して自動でメールを送信してくれるlogwatchをいうアプリをインストールします。
※このアプリを動かすためにはmailutils、exim4などのメール送信に必用なパッケージをインストールしmailコマンドでメール送信が出来るように設定する必要があります。

まずインストールですがこれは非常に簡単です。
apt-get install logwatch

インストールされたらlogwatchの設定を変更します。
vi /usr/share/logwatch/default.conf/logwatch.conf

変更点は以下の点になります。

変更前:MailTo = root
変更後:MailTo = your_address@your_host.com
↑送信したいメールアドレスに書き換えます。(mailコマンドで送信できるアドレスであることが前提)

変更前:#Archives = No
変更後:Archives = Yes
↑logがlotateされた場合を想定

変更前:Detail = Low
変更後:Detail = Med
↑好みのログレベルに設定してください。(文字列ではなく数値で指定も可能です)

設定が完了したらテストで実行してみましょう。
/usr/sbin/logwatch

実際に設定したアドレスにメールが送信されてくれば設定は完了です。

ちなみにcronにはインストール時に自動で登録されています。
(1日1回自動実行されてメールが送られてきます)
debianでのcronへの自動登録はdailyに登録されるのでAM6:25に実行されます。
時間などを変更したい場合はcron.dailyから削除しcrontabに自分で登録してください。

送られてくる内容で注意すべきなのは
pam_unix、SSHD、Disk Space、kernelの項目でしょうか。(kernelはエラー出ないと送られてこないようです)

pam_unixはLinuxのpam認証を表示しています。

SSHDはその名の通りsshへの接続を示しています。
許可していないユーザーでのログインがあれば不正アクセスの可能性もありますので注意が必要です。

Disk Spaceは一杯になる前にどうにかしましょう(笑)

kernel項目に関しては出力されていれば解析、調査が必要ですね。

最後に
 logwatchを導入すると毎日定期でlogの結果が送信されてきます。
誰しも最初は注意深く見るのですが平和な日々が続きますと次第に見なくなったり軽く読み飛ばしたりするようになりがちです。
しかし、それではlogwatchを導入した意味は全くありません。
mrtgの様にグラフでの傾向は示してくれませんが毎日logに目を通すことで障害を未然に防げたり
発生した障害による被害を広げないことも可能になります。
このツールの本当の真価はlogをチェックする人の対応力に尽きると思います。

抜け殻+新品HDD=超安LinkStation

LinkStationの抜け殻を使ってLinkStationを再生します。
※新品HDDを組み込んだだけでは起動してくれないARM系のLinkStationを対象にしています。

通常はLinuxにHDDを繋いで必要なファイルを書き込んでHDDをLinkStationに戻しますが
今回はお手軽に再生する方法を紹介します。

お手軽にということでシリアルコンソールも使用せずに再生したいと思います。
LinkStationに新品HDDを取り付けて起動するとbootディレクトリ(必要なファイルも)が存在しないのでLinkStationは内部的にはtftp経由で起動しようとします。

そこでtftpを使ってbootイメージをLlinkStationに転送しEMモード(復旧モード)で起動し
そこからファームウェアのアップデートでHDD内に必要なファイルを作成します。
使用するソフトはTFTPサーバー Poor TFTP Server for WIN32というソフトです。
Windows上で起動することでtftpサーバーとして動作するソフトです。
※既にリンク先のサイトはなくなっているようです

tftpで転送する為のboot用ファイルをまずは用意します。
Buffaloのサイトから該当するLinkStationのファームウェアをDLしてきます。
転送に必要なファイルは initrd.buffalo uImage.buffalo の二つです。
これらのファイルはファームの中に圧縮ファイルとして存在するので解凍して取り出します。
initrd.imgを解凍するとinitrd.buffaloが取り出せますがZIPのPASSを求められるので下のどれかを入れてください。

1NIf_2yUOlRDpYZUVNqboRpMBoZwT4PzoUvOPUp6l
aAhvlM1Yp7_2VSm6BhgkmTOrCN1JyE0C5Q6cB3oBB
YvSInIQopeipx66t_DCdfEvfP47qeVPhNhAuSYmA4
IeY8omJwGlGkIbJm2FH_MV4fLsXE8ieu0gNYwE6Ty

二つのファイルをtftpのディレクトリに置けば準備完了です。
LinkStationのtftp起動時はLlinkStationのIPは192.168.11.XXXとなっており
192.168.11.1のtftpサーバーに接続しようとします。
ですのでtftpサーバーを起動するPCのIPを192.168.11.1に変更してからtftpソフトを起動してください。
tftpサーバーソフトを起動させたらLinkStationの電源をONにしてtftp起動させます。
※同じハブなどにPCとLinkStationをLANで接続してから行ってください。

tftpでbootイメージが転送されるとtftpサーバーソフトに転送されたメッセージが出て
LinkStationのLEDがオレンジ色に光り起動するはずです。
この状態がEMモードとなります。

EMモードになったらtftpを起動したPCで通常と同じようにファームのアップデートを行ってください。
HDDのパーティション設定やフォーマットまでやるのでそれなりの時間が掛かります。
これで新品のHDDからLlinkStaionの再生は完了です。

どうしてももエラーになる場合などは内部的に何が起こっているのか全く分からないので
どうしてもシリアルコンソールが必要になります。
何台も再生させる人や色々とイジリ倒したい人は素直にシリアルコンソールを取り付けましょう(笑)

HDD不良セクタの監視

HDDの温度監視に続いて不良セクタの監視を行います。
HDD温度と同じようにsmartctrlコマンドを利用して不良セクタ情報を取得します。
監視項目は以下の二つです。

Reallocated_Sector_Ct   不良セクタを予備セクタと置き換えた数
Current_Pending_Sector  置き換えることが出来なかった不良セクタの数

Reallocated_Sector_Ctに関しては置き換えが成功しているので一般的に数個までなら大丈夫といわれています。
しかし大事なデータやシステム領域のセクタを失うと致命傷になる可能性はあります。
Current_Pending_Sectorは1個でも出るとかなり危険です。
データを退避してHDDを入れ替えた方がいいかもしれません。

個人的な設定としてはReallocated_Sector_Ctは10、Current_Pending_Sectorは1でメールが送信されるように設定しました。
グラフを表示しても基本的には0なので面白くはないですが重要なグラフには違いないです。

HDDの温度のスクリプトを少し改造すればこれらの情報を取得するスクリプトはすぐに完成しますね。

Reallocated_Sector_Ct.pl
-------------------
#!/usr/bin/perl --

$count = readpipe(‘smartctl -d marvell -a /dev/sda -s on | grep -i Reallocated_Sector_Ct | awk ‘{print $10}”);

print $count;

exit $count;
-------------------

Current_Pending_Sector.pl
-------------------
#!/usr/bin/perl --

$count = readpipe(‘smartctl -d marvell -a /dev/sda -s on | grep -i Reallocated_Sector_Ct | awk ‘{print $10}”);

print $count;

exit $count;
-------------------

※スクリプトのsnmp登録方法や利用方法、閾値を超えた場合のメールの送信方法は以前の記事を参考にして下さい。