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

mediatombの設定

LinkStationにてmediatombは導入済みでしたので
インストール&設定を行って起動でPS3から検索。
LinkStationでの導入記事

しかしPS3からDLNA機器は見つかりません・・・

再度、設定を見直しました。

# vi /etc/default/mediatomb

この中の以下の行が問題でした。

変更前:INTERFACE=””
変更後:INTERFACE=”eth0″

インターフェースをちゃんと指定しないとダメなようです。
mediatombを再起動後にPS3からちゃんと見えるようになりました。

ブラウザからDLNAに登録するディレクトリを選択できますが
設定を間違うとサーバーに非常に負担が掛かります。

mediatomb

各設定の意味は以下のようになります。
Scan Mode:
None スキャンしない
Timed 決められた時間でスキャンを行う
Inotify カーネルからファイル変更(追加、削除等)の通知を受けてDB登録する

Initial Scan:
Basic 単純にファイルの追加・削除の変更のみで更新を行う
Full 最後に登録されている情報と相違が無いかチェックして更新を行う

Recursive:
チェックを入れると再帰的に下位のディレクトリも検索の対象とします。

Include hidden files/directories:
チェックを入れると隠しファイルも検索の対象となります。

お勧めの設定は、上の画像の通りです。
Scan Mode:Timed + Initial Scan:Full + Recursive:チェックの設定にすると
ファイル数が多かったり、ディレクトリの階層が深いと、かなりの数の検索を行うことになり、サーバーに非常に負荷が掛かります。

LCD制御スクリプト

KURO-BOX/T4には、TeraStationと同様のLCDディスプレイが付いています。
標準でのインストールでは機能しないので、これを機能するようにスクリプトを作成しました。
私が実際に使っているスクリプトファイルを、一番下でダウンロード出来ます。

LCD表示スクリプト(LANリンク速度、ディスク容量、ホスト名、IP、日付、ファン回転数、ケース内温度)

#!/bin/sh

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

# lcd back light bright {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100}
BACK_LIGHT_BRIGHT="70"

miconapl -a lcd_set_bright $BACK_LIGHT_BRIGHT

hostname=`cat /etc/hostname`
miconapl -a lcd_set_hostname $hostname
miconapl -a lcd_disp_hostname

miconapl -a lcd_disp_fanspeed_on
miconapl -a lcd_disp_temp_on

#私の場合は固定IPなので、ここにリンク速度のスクリプトへのパスを書いています。(IP取得も同様に1回しか呼んでいません)

#ここにディスク容量取得スクリプトのパス

#ここにディスクRAID設定スクリプトのパス

miconapl -a lcd_set_dispitem linkspeed hostname ipaddress date buffer0 buffer1

miconapl -a lcd_changemode_auto

idx=1
while :
do
sleep 60

dispdatetime=`date '+%y %m %d %k %M %S'`
miconapl -a lcd_set_date $dispdatetime

idx=`expr $idx + 1`
if [ $idx -ge 10 ]; then
idx=1;
#ここにディスク容量取得スクリプトのパス

#ここにディスクRAID設定スクリプトのパス
fi
done

NICリンクアップ時スクリプト(DHCPなどでIPが変更になる人は/etc/network/if-up.dなどの下にスクリプトとして書いてください)

#!/bin/sh

PATH=$PATH:/usr/local/sbin
export LANG=C
export PATH

ipaddress=`ifconfig | grep "inet addr" | awk '{print $2}' | awk -F: 'NR==1 {print $2}'`

miconapl -a lcd_set_ipaddress $ipaddress

リンク速度設定スクリプト

#!/bin/bash

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

eth_dev="eth0"

link_nolink="nolink"
link_10h="10h"
link_10f="10f"
link_100h="100h"
link_100f="100f"
link_1000="1000"

mii_result=`mii-tool $eth_dev`

case $mii_result in
*"10baseT-HD"*) set_link_speed=$link_10h;;
*"10baseT-FD"*) set_link_speed=$link_10f;;
*"10baseT-HD"*) set_link_speed=$link_100h;;
*"10baseT-HD"*) set_link_speed=$link_100f;;
*"1000baseT-FD"*) set_link_speed=$link_1000;;
*) set_link_speed=$link_nolink
esac

miconapl -a lcd_set_linkspeed $set_link_speed

exit

※リンク速度を表示する場合は
miconapl -a lcd_set_dispitem にlinkspeedを追加してください。
(リンク速度を設定することにより、本体のLinkActランプが自動的に点灯、点滅します)

ディスク容量セットスクリプト

#!/bin/bash

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

device1="/dev/sda"
device2="/dev/sdb"
device3="/dev/sdc"
device4="/dev/sdd"

d1=`df -m | grep $device1 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'`
d2=`df -m | grep $device2 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'`
d3=`df -m | grep $device3 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'`
d4=`df -m | grep $device4 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'`

if [ $d1 -lt 0 ]; then
d1=0;
fi
if [ $d2 -lt 0 ]; then
d2=0;
fi
if [ $d3 -lt 0 ]; then
d3=0;
fi
if [ $d4 -lt 0 ]; then
d4=0;
fi

miconapl -a lcd_set_disk_capacity $d1 $d2 $d3 $d4

exit

※ディスク容量を表示する場合は
miconapl -a lcd_set_dispitem にhostnameを追加してください。
(T4のマイコン仕様書ではLinkSpeedと同じバッファを使ってるように読み取れましたが、miconaplではhostnameで表示されました)
ディスク容量セットスクリプトを定期的に動かすことで容量を再セットしてください。
また、ディスクの容量はマイコン仕様書では16進でセットしますが
miconaplが内部で変換しているようで0~100の値をセットで問題ありません。
(100まで行かなくても、95でFull表示になりました)

尚、raidを組んでいる場合はsdaやsdbの文字では正常に値が取得できませんので、md0などraidのデバイスとして登録してある文字f列をセットしてあげてください。
(一つのディスクに複数のraid用タイプfdを作成し,raidを複数組んでる場合は、このスクリプトは使用できません)
私の場合は、Disk2、Disk3、Disk3の3台をRaid5で運用していますので
device2=”/dev/md0″とし
d3=とd4=をコメントにし
miconapl -a lcd_set_disk_capacity $d1 $d2 $d2 $d2
としています。

電源ボタン監視スクリプト

#!/bin/sh

GET_SW="/usr/local/sbin/miconapl -a int_get_switch_status"
BEEP="/usr/local/sbin/miconapl -a bz_on button"
BEEP2="/usr/local/sbin/miconapl -a bz_on boot"
LCD_OFF="/usr/local/sbin/miconapl -a lcd_changemode_button"
LCD_FAN_OFF="/usr/local/sbin/miconapl -a lcd_disp_fanspeed_off"
LCD_TEMP_OFF="/usr/local/sbin/miconapl -a lcd_disp_temp_off"
LCD_BUF2_ON="/usr/local/sbin/miconapl -a lcd_disp_buffer2"
LCD_BRIGHT_ZERO="/usr/local/sbin/miconapl -a lcd_set_bright 0"
COUNT=4

while :
do
SW=`$GET_SW |grep "int=" |sed -e "s/int=//"`
case ${SW} in
power_sw)
COUNT=`expr ${COUNT} - 1`
if [ ${COUNT} -eq 0 ]
then
${BEEP2}
${LCD_OFF}
${LCD_FAN_OFF}
${LCD_TEMP_OFF}
${LCD_BUF2_ON}
${LCD_BRIGHT_ZERO}
/sbin/shutdown -hP now
else
${BEEP}
fi
sleep 1
;;
init_sw_front)
;;
*)
COUNT=4
sleep 2
;;
esac
done

2009/11/13 輝度制御スクリプトの追加
輝度制御設定ファイル(/etc/lcd_control.confで保存してください)

###################################################################
#
# LCD&LED輝度コントロール設定ファイル
#
###################################################################

# LED輝度通常時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100}
NORMAL_LED=100

# LCD輝度通常時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100}
NORMAL_LCD=70

# 時刻連動使用 {true | false}
TIME_LINKED=true

# LED輝度減光時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100}
DOWN_LED=50

# LCD輝度減光時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100}
DOWN_LCD=50

# LED輝度通常時刻 {0 - 23} step 1
NORMAL_START_TIME=7

# LED輝度減光時刻 {0 - 23} step 1
DOWN_START_TIME=23

輝度制御スクリプト

#!/bin/sh

PATH=$PATH:/usr/local/sbin
export PATH
# 設定ファイル
CONF_FILE=/etc/lcd_control.conf

if [[ -f "$CONF_FILE" ]]
then
. $CONF_FILE
else
echo "LCD輝度制御設定ファイル $CONF_FILE が見つかりません。"
exit 1
fi

if [ $TIME_LINKED = 'false' ]; then
exit
fi

while :
do
sleep 60

now_lcd=`miconapl -a lcd_set_bright|grep lcd_bright=|sed -n -e "s/.*=//p"`
now_led=`miconapl -a led_set_bright|grep led_bright=|sed -n -e "s/.*=//p"`

temphour=`date '+%k'`

if [ $NORMAL_START_TIME -eq $DOWN_START_TIME ]; then
# 通常時と減光時の時刻が同じ場合は、常に通常扱い
mode='normal'
elif [ $NORMAL_START_TIME -lt $DOWN_START_TIME ]; then
# 通常時が減光時より小さい場合
if [ $NORMAL_START_TIME -le $temphour -a $DOWN_START_TIME -gt $temphour ]; then
# 通常時の範囲
mode='normal'
else
# 減光時の範囲
mode='down'
fi
else
# 減光時が通常時より小さい場合
if [ $DOWN_START_TIME -le $temphour -a $NORMAL_START_TIME -gt $temphour ]; then
# 減光時の範囲
mode='down'
else
# 通常時の範囲
mode='normal'
fi
fi

if [ $mode = 'normal' ]; then
# 通常時
lcd_set_num=$NORMAL_LCD
led_set_num=$NORMAL_LED
else
# 減光時
lcd_set_num=$DOWN_LCD
led_set_num=$DOWN_LED
fi

# 現在の設定と違う場合は設定変更
if [ $now_lcd -ne $lcd_set_num ]; then
miconapl -a lcd_set_bright $lcd_set_num
fi
if [ $now_led -ne $led_set_num ]; then
miconapl -a led_set_bright $led_set_num
fi
done

2009/11/13 RAID設定スクリプトの追加
※¥は全角で書いていますので、半角に書き換えてください。(blognの制約上)
表示形式は以下の通りです。
LCD下段はRAIDの状態で表示が変わります。
RAIDなし(/proc/partitionsにmdの文字が見つからない場合)
上段:Operation MODE
下段:Normal
RAID0~6
上段:HD 2-3-4
下段:RAID○ [UUUU]
上段はmd○のArrayに使用されているドライブ番号が表示されます。
例:1,2,3,4ドライブでRAID利用=1-2-3-4
下段のUUUUの部分は/proc/mdstatで取得出来るディスクのディスクの動作状況です。
以下はエラー系です。
/proc/mdstatからRAIDの状態を取得出来なかった場合:RAID GET ERROR
/proc/mdstatからディスクの動作状況を取得出来なかった場合:RAID○

#!/bin/sh

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

#md?のパーティションがあるかチェック
first_md_char=`cat /proc/partitions|grep md|sed -n -e "s/.*md//p"`

raid_mode="Operation MODE  "
if [ $first_md_char = "" ]; then
#md?が見つからない(ノーマルモード)
raid_mode="${raid_mode}Normal          "
else
#md?が見つかった場合
proc_mdstat=`cat /proc/mdstat`

#RAIDのドライブ構成を調べる
raid_mode="HD "
raid_info=""
idx=0
while [ $idx -ne 4 ]
do
drive=`echo "$proc_mdstat"|grep ¥[${idx}]|sed -n -e "s/.¥[${idx}].*//p"|sed -n -e "s/.*sd//p"`
case $drive in
a)drive="1";;
b)drive="2";;
c)drive="3";;
d)drive="4";;
*)drive="";;
esac

#ドライブ構成文字の作成
if [ ! $drive = "" ]; then
if [ ! $raid_info = "" ]; then
raid_info="${raid_info}-${drive}"
else
raid_info="${drive}"
fi
fi
idx=`expr $idx + 1`
done

#RAID表示文字(上段)の作成
raid_mode="${raid_mode}${raid_info}"
#16バイトになるまで空白で埋める
idx=`expr length "$raid_mode"`
while [ $idx -lt 16 ]
do
raid_mode="${raid_mode} "
idx=`expr $idx + 1`
done

#RAIDモード、ドライブ動作状況の取得
raid_mode_num=`echo "$proc_mdstat"|grep md${first_md_char}|sed -n -e "s/ sd.*//p"|sed -n -e"s/.*raid//p"`
if [ $raid_mode_num = "" ]; then
#情報取得エラー
raid_mode="${raid_mode}RAID GET ERROR"
else
#モード取得
raid_state=`echo "$proc_mdstat"|grep '] ¥['|tr -d '¥012'|sed -n -e"s/.*] //p"`
#動作状況取得
raid_mode="${raid_mode}RAID${raid_mode_num} $raid_state"
fi
fi
#miconに文字列をセット
miconapl -a lcd_set_raidmode32 "$raid_mode"

※RAID設定を表示する場合は
miconapl -a lcd_set_dispitem にraidmodeを追加してください。
※表示するRIADの情報は/proc/partitionsにて最初に取得出来るmd○のArrayとなります。

※ケース内温度によるファン回転数制御スクリプトは、ネットなどで転がっている物が使えると思いますので省略します。

2009/11/16 追記
以下は私が使っているスクリプトです。
環境に合わせて書き換えてください。
lcd_scripts.tar.bz2
/usr/loca/sbin に解凍して実行権限を与えてください。

lcd_scripts_conf.tar.bz2
このファイルはスクリプトの設定ファイルになります。
/etc に解凍して、設定を行ってください。

またこれらのスクリプトを実行するために/etc/rc.local に以下の記述を行い、起動時に実行しています。

# init LCD display
if [ -x /usr/local/sbin/Keventd ] ; then
/usr/local/sbin/Keventd &
fi

if [ -x /usr/local/sbin/Fand ] ; then
/usr/local/sbin/Fand &
fi

if [ -x /usr/local/sbin/Displayd ] ; then
/usr/local/sbin/Displayd &
fi

if [ -x /usr/local/sbin/lcd_control.sh ] ; then
/usr/local/sbin/lcd_control.sh &
fi

モニター当選

KURO-BOX/T4のモニターを募集していたので、応募したら当選しました!
モニターの条件は、予め申告した内容をレポートする事。
当選者は抽選ではなく、その申告内容で決まるというものでした。
※HDDは商品に含まれていないので、自分で準備する必要があります。

レポートは提出し終わったので、blogの方にも情報を書こうかと思ってます。

構成はHDD1に標準インストール、HDD2、3、4でRaid5を構築。
WebServer、DHCPサーバー、DLNAサーバー、USB-LAN使用のルータ、ファイルサーバーなど
スペックが高くないのにテンコ盛りです(笑)

KURO-NAS/T4

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