機種個別のインストーラだったらその機種だけのことを考えればよいのだが、
機種共通にすることを考えると、枠をきっちり決めて
その枠の中でどう機種依存を吸収するかを考えないといけない。
久しぶりにソフトウェアを設計しているという気にさせてくれる。
ワクワク。
インストーラで実行するのは、
・各パーティションのフォーマット
・/ のマウント
・アーカイブの展開
・fstab の修正(LS-WSGL のみ)
・miconapl のコピー(LS-GL/HS-DHGLのみ)
・LED コントロールスクリプトの作成
・Fan コントロールスクリプトの作成(LS-GL/HS-DHGLのみ)
・電源 SW による電源 OFF 対応
・カーネルモジュールのコピー
・カーネルモジュールのロードスクリプトの作成
・ネットワークのセットアップ
・/ のアンマウント
・/boot のマウント
・/boot のコピー
・initrd の編集
・/boot のアンマウント
こんなところか。
一つ一つ確認していく。
mke2fs -j /dev/sdb1 || exit
mkfs.xfs -f /dev/sdb2 || exit
mkswap /dev/sdb3 || exit
mkfs.xfs -f /dev/sdb4 || exit
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> /dev/md1 / xfs defaults,noatime 0 0 proc /proc proc defaults 0 0 /dev/md10 swap swap defaults 0 0 /dev/md0 /boot ext2 defaults,noatime 0 0 /dev/sda6 /mnt/disk1 xfs defaults,noatime 0 0 /dev/sdb6 /mnt/disk2 xfs defaults,noatime 0 0
chmod +x etc/init.d/miconapl
ln -s ../init.d/miconapl etc/rc0.d/K10miconapl
ln -s ../init.d/miconapl etc/rc6.d/K10miconapl
ln -s ../init.d/miconapl etc/rcS.d/S80miconapl
/etc/init.d/miconapl は機種ごと
#!/bin/sh
[ -f /usr/local/sbin/miconapl ] || exit 0
case "$1" in
start)
/usr/local/sbin/miconapl -b -a boot_flash_ok
/usr/local/sbin/miconapl -a boot_end
;;
stop)
/usr/local/sbin/miconapl -a shutdown_wait
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#!/bin/sh
case "\$1" in
start)
echo off > /proc/buffalo/led/power_blink
echo on > /proc/buffalo/led/power
echo on > /proc/buffalo/led/eth
;;
stop)
echo on > /proc/buffalo/led/power_blink
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
#!/bin/sh
case "\$1" in
start)
echo off > /proc/buffalo/gpio/led/power_blink
echo on > /proc/buffalo/gpio/led/power
echo on > /proc/buffalo/gpio/led/eth
;;
stop)
echo on > /proc/buffalo/gpio/led/power_blink
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
LS-HGL とは出力先が違うだけ。
#!/bin/sh
case "\$1" in
start)
echo off > /proc/buffalo/gpio/led/power_blink
;;
stop)
echo on > /proc/buffalo/gpio/led/power_blink
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
LS-CL と同じでもいいな。
cd /
sed -e 's/^\(.*logtag.*\)$/# \1/' -e 's/^\(.*logger.*\)$/# \1/' \
/etc/init.d/kernelmon.sh > $MOUNTPOINT/etc/init.d/kernelmon
chmod +x $MOUNTPOINT/etc/init.d/kernelmon
ln -s ../init.d/kernelmon $MOUNTPOINT/etc/rcS.d/S81kernelmon
tar cf - usr/local/sbin/kernelmon |(cd $MOUNTPOINT; tar xvf -)
#!/bin/sh
case "\$1" in
start)
/usr/local/sbin/kernelmon &
;;
stop)
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
S81kernelmon にリンク
chmod +x $MOUNTPOINT/etc/init.d/kernelmon ln -s ../init.d/kernelmon $MOUNTPOINT/etc/rcS.d/S81kernelmon/usr/local/sbin/kernelmon
#!/bin/sh
while :
do
LINE=\`cat /proc/buffalo/kernevnt\`
#echo "line [\$LINE]"
if [ "\$LINE" = PSW_off ]
then
shutdown -h now
fi
done
chmod +x $MOUNTPOINT/usr/local/sbin/kernelmon
#!/bin/sh
case "\$1" in
start)
echo on > /proc/buffalo/gpio/switch/sw_control
/usr/local/sbin/kernelmon &
;;
stop)
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
LS-HGL との違いは、/proc/buffalo/gpio/switch/sw_control への
出力の有無のみ。
S81kernelmon にリンク
chmod +x $MOUNTPOINT/etc/init.d/kernelmon ln -s ../init.d/kernelmon $MOUNTPOINT/etc/rcS.d/S81kernelmon/usr/local/sbin/kernelmon
#!/bin/sh
while :
do
LINE=\`cat /proc/buffalo/kernevnt\`
#echo "line [\$LINE]"
if [ "\$LINE" = PSW_off ]
then
shutdown -h now
fi
done
chmod +x $MOUNTPOINT/usr/local/sbin/kernelmon
tar cf - lib/modules | (cd $MOUNTPOINT ; tar xvf -)
/lib/modules/2.6.16.16-arm1/kernel/drivers/usb/core/usbcore.ko /lib/modules/2.6.16.16-arm1/kernel/drivers/usb/host/ehci-marvell-hcd.ko /lib/modules/2.6.16.16-arm1/kernel/drivers/usb/storage/usb-storage.ko /lib/modules/2.6.16.16-arm1/kernel/fs/fat/fat.ko /lib/modules/2.6.16.16-arm1/kernel/fs/vfat/vfat.ko /lib/modules/2.6.16.16-arm1/kernel/fs/msdos/msdos.ko /lib/modules/2.6.16.16-arm1/kernel/drivers/usb/class/usblp.koそれぞれ、存在すればロードするようにする。
さて、コードを書くか。。。。
|
|
|
|
|
|
← ハックキットの一本化のための機種判別 |
ハックの記録 LinkStation/玄箱 をハックしよう |
→ RAID機能搭載NASの最大約37%値下げをはじめ、レイヤー2スイッチ、内蔵SSDなど計18製品の価格改定を実施 |