機種個別のインストーラだったらその機種だけのことを考えればよいのだが、
機種共通にすることを考えると、枠をきっちり決めて
その枠の中でどう機種依存を吸収するかを考えないといけない。
久しぶりにソフトウェアを設計しているという気にさせてくれる。
ワクワク。
インストーラで実行するのは、
・各パーティションのフォーマット
・/ のマウント
・アーカイブの展開
・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 0LS-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 0LS-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 0S81kernelmon にリンク
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 0LS-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製品の価格改定を実施 |