HS-DHGLをDebian化 (4)
参考URL:LinkStation/玄箱をハックしよう
固有コマンドのDebian環境に移植する。
miconapl の実行環境を作成する
libcのバージョンが合わないため、/usr/local/buffalo/ に閉じ込めて実行。
リンクするオブジェクトファイルと各種デバイスにアクセスするのでデバイスファイル(ttyS1)も必要。
閉じ込めたmiconaplを外から実行させるスクリプトも作成する。
ちなみに ldd /usr/local/sbin/miconapl の結果は以下のとおり
libc.so.6 => /lib/libc.so.6 (0x40020000) /lib/ld-linux.so.3 (0x40000000)
以下のコマンドを実行する。
# cd /mnt/disk1/debian_etch/usr/local/ # mkdir -p buffalo/{sbin,dev,lib,var/lock} # cd buffalo # cp /usr/local/sbin/miconapl sbin/ # cp /lib/{libc.so.6,libc-2.3.6.so} lib/ # cp /lib/{ld-linux.so.3,ld-2.3.6.so} lib/ # mknod dev/ttyS1 c 4 65 # echo -e '#!/bin/sh\nchroot /usr/local/buffalo/ /sbin/miconapl $*' > sbin/miconapl # chmod +x sbin/miconapl
電源ボタン管理用(kernelmon)
標準ファームへに依存してるとことログ関係をコメントアウト。
電源オフを shutdown.sh から halt コマンドに変更。
以下のコマンドを実行する。
# cd /mnt/disk1/debian_etch/ # cp /etc/init.d/kernelmon.sh etc/init.d/kernelmon # cp /usr/local/sbin/kernelmon usr/local/sbin/ # cp /usr/local/bin/kernelmon_exec.sh usr/local/bin/ # perl -pi -e 's/(\. \/|logger)/# \1/; s|[/a-z]+shutdown.sh.*$|sync;halt|' \ etc/init.d/kernelmon usr/local/bin/kernelmon_exec.sh
一応
diff -u /etc/init.d/kernelmon.sh etc/init.d/kernelmon と
diff -u /usr/local/sbin/kernelmon_exec.sh usr/local/bin/kernelmon_exec.sh
の結果は以下のとおり
--- /etc/init.d/kernelmon.sh 2006-06-08 20:54:19.000000000 +0900 +++ etc/init.d/kernelmon 2007-10-20 00:23:27.408718000 +0900 @@ -1,7 +1,7 @@ #!/bin/sh # processname: kernelmon -. /etc/init.d/logtag +# . /etc/init.d/logtag if ! [ -x /usr/local/sbin/kernelmon ]; then exit 0 @@ -11,7 +11,7 @@ { echo -n "Starting kernelmon:" /usr/local/sbin/kernelmon & - logger -t ${LOGTAG} -p ${LOGFACILITY} 'Started kernelmon' + # logger -t ${LOGTAG} -p ${LOGFACILITY} 'Started kernelmon' } stop() --- /usr/local/bin/kernelmon_exec.sh 2006-10-19 17:41:45.000000000 +0900 +++ usr/local/bin/kernelmon_exec.sh 2007-10-20 06:39:28.158718000 +0900 @@ -5,7 +5,7 @@ MICONAPL=/usr/local/sbin/miconapl -. /usr/local/bin/libbuffalo +# ./usr/local/bin/libbuffalo if [ "$1" = "" ]; then exit 1 @@ -61,7 +61,7 @@ ;; esac - . /etc/melco/info + # ./etc/melco/info if [ "$my_ipaddress" = "dhcp" ] && [ $2 -ne 0 ] && [ -f /var/tmp/bootcomplete ]; then # go background @@ -77,7 +77,7 @@ ##echo "miconint = ($int)" >/dev/console case $int in power_sw) - /usr/local/bin/shutdown.sh normal + sync;halt ;; lcd_sw) # echo sense lcd switch pushed @@ -103,7 +103,7 @@ ;; enetover) echo "re-up enet" - logger -t linktation -p user.info "enetover: re-up enet" + # logger -t linktation -p user.info "enetover: re-up enet" /etc/init.d/networking.sh restart ;; esac
起動時/終了時の処理
/mnt/disk1/debian_etch/etc/init.d/miconapl を以下の内容で作成する。
#!/bin/sh MICONAPL=/usr/local/sbin/miconapl [ -x $MICONAPL ] || exit 0 case "$1" in start) $MICONAPL -b -a boot_flash_ok $MICONAPL -a boot_end ;; stop) $MICONAPL -a shutdown_wait ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
そして、以下のコマンドを実行する。
# chroot /mnt/disk1/debian_etch # chmod +x /etc/init.d/miconapl # update-rc.d miconapl start 80 S . stop 10 0 6 . # update-rc.d kernelmon start 81 S . # exit