「KURO-BOX/T4」カテゴリーアーカイブ

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