ハックキットの一本化のためのインストーラ
Debian
HS-DHGL
LS-CL
LS-GL
LS-HGL
LS-WSGL/R1
ハックキットのインストーラを書いた
各パーティションのフォーマット
いきなり機種依存。
LS-WSGL
フォーマットせずに標準ファームのフォーマットをそのまま使う。
LS-WSGL 以外
/dev/sdb1 を ext3 に、
/dev/sdb2 と /dev/sdb4 とを xfs に、
/dev/sdb3 を swap に
フォーマットする。
# /boot
if [ "$BOOTPARTITIONTYPE" = ext3 ]
then
mke2fs -j $BOOTPARTITION || exit
else
mke2fs $BOOTPARTITION || exit
fi
# /
mkfs.xfs -f $ROOTPARTITION || exit
# swap
mkswap $SWAPPARTITION || exit
# data /mnt/xxx
if [ "$DATAPARTITION" != "" ]
then
mkfs.xfs -f $DATAPARTITION || exit
fi
/ のマウント
LS-WSGL
/dev/md1 をマウント。
/lib/modules 以外は削除。
LS-WSGL 以外
/dev/sdb2 をマウント。
if [ ! -d $MOUNTPOINT ]
then
mkdir $MOUNTPOINT || exit
fi
mount -t xfs $ROOTPARTITION $MOUNTPOINT || exit
if [ $MACHINE = LSWSGL ]
then
mkdir $MOUNTPOINT/.buffalo
mv $MOUNTPOINT/lib/modules $MOUNTPOINT/.buffalo
rm -fr $MOUNTPOINT/*
mkdir $MOUNTPOINT/lib
mv $MOUNTPOINT/.buffalo/modules $MOUNTPOINT/lib
rmdir $MOUNTPOINT/.buffalo
mkdir $MOUNTPOINT/mnt/disk1
mkdir $MOUNTPOINT/mnt/disk2
fi
アーカイブの展開
hackkit_YYMMDD.tar.gz を展開
cd $MOUNTPOINT
tar zxvf $HACKKIT
fstab の修正(LS-WSGL のみ)
md0, md10, md1 他を使うように修正
cat > etc/fstab <<EOF
# /etc/fstab: static file system information.
#
#
/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
EOF
miconapl のコピー(LS-GL/HS-DHGLのみ)
標準ファームから、/usr/local/sbin/miconapl をコピーする。
tar cf - usr/local/sbin/miconapl |(cd $MOUNTPOINT; tar xvf -)
chmod +x $MOUNTPOINT/usr/local/sbin/miconapl
tar cf - usr/local/lib/libbuffalo_bin.* |(cd $MOUNTPOINT; tar xvf -)
LED コントロールスクリプトの作成
/etc/init.d/miconapl を作成し、
/etc/rc0.d/K10miconapl
/etc/rc6.d/K10miconapl
/etc/rcS.d/S80miconapl
にシンボリックリンクを張る。
LS-HGL
LS-CL
LS-WSGL
cd $MOUNTPOINT
cat > etc/init.d/miconapl <<EOF
#!/bin/sh
if [ -d /proc/buffalo/gpio/led ]
then
LED=/proc/buffalo/gpio/led
else
LED=/proc/buffalo/led
fi
case "\$1" in
start)
echo off > \$LED/power_blink
echo on > \$LED/power
echo on > \$LED/eth
;;
stop)
echo on > \$LED/power_blink
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
EOF
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
LS-GL/HS-DHGL
cd $MOUNTPOINT
cat > etc/init.d/miconapl <<EOF
#!/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
EOF
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
Fan コントロールスクリプトの作成(LS-GL/HS-DHGLのみ)
LS-GL + ハックキットでファンコントロール
cd $MOUNTPOINT
cat > usr/local/sbin/fancontrol <<EOF
#!/bin/sh
# LS-GL, HS-DHGL, KURO-BOX/Pro Fancontrol
# (C) Copyright Yasunari YAMASHITA 2007. All Rights Reserved.
PATH=\$PATH:/usr/sbin
# stop -> LOW |- slow -> MID |- fast -> HIGH |- full
HIGH=40
MID=30
LOW=20
if [ -f /etc/fancontrol.conf ]
then
. /etc/fancontrol.conf
fi
# ude:/usr/local/sbin# /usr/local/sbin/miconapl -a temp_get
# #[miconapl.temp_get]
# temp=45
CURTEMP=`/usr/local/sbin/miconapl -a temp_get | sed -n -e 's/temp=//p'`
echo \$CURTEMP
if [ \$CURTEMP -gt \$HIGH ] # full
then
/usr/local/sbin/miconapl -a fan_set_speed full
echo fan_set_speed full
elif [ \$CURTEMP -gt \$MID ] # fast
then
/usr/local/sbin/miconapl -a fan_set_speed fast
echo fan_set_speed fast
elif [ \$CURTEMP -gt \$LOW ] # slow
then
/usr/local/sbin/miconapl -a fan_set_speed slow
echo fan_set_speed slow
else # stop
/usr/local/sbin/miconapl -a fan_set_speed stop
echo fan_set_speed stop
fi
EOF
cat > etc/fancontrol.conf <<EOF
#
# LS-GL, HS-DHGL, KURO-BOX/Pro Fancontrol configuration file
# (C) Copyright Yasunari YAMASHITA 2007. All Rights Reserved.
# stop -> LOW |- slow -> MID |- fast -> HIGH |- full
HIGH=40
MID=30
LOW=20
EOF
電源 SW による電源 OFF 対応
これは、LS-GL/HS-DHGL と それ以外とでまったく違う。
LS-GL/HS-DHGL
現状のインストーラのまま
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 -)
LS-HGL
LS-CL/LS-WSGL
cd $MOUNTPOINT
cat > etc/init.d/kernelmon <<EOF
#!/bin/sh
case "\$1" in
start)
if [ -e /proc/buffalo/gpio/switch/sw_control ]
then
echo on > /proc/buffalo/gpio/switch/sw_control
fi
/usr/local/sbin/kernelmon &
;;
stop)
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
EOF
chmod +x $MOUNTPOINT/etc/init.d/kernelmon
ln -s ../init.d/kernelmon $MOUNTPOINT/etc/rcS.d/S81kernelmon
cat > $MOUNTPOINT/usr/local/sbin/kernelmon <<EOF
#!/bin/sh
while :
do
LINE=\`cat /proc/buffalo/kernevnt\`
#echo "line [\$LINE]"
if [ "\$LINE" = PSW_off ]
then
shutdown -h now
fi
done
EOF
chmod +x $MOUNTPOINT/usr/local/sbin/kernelmon
カーネルモジュールのコピー
/lib/modules をコピーする。
cd /
tar cf - lib/modules | (cd $MOUNTPOINT ; tar xvf -)
カーネルモジュールのロードスクリプトの作成
それぞれ、存在すればロードするようにする。
cd $MOUNTPOINT
cat > etc/init.d/usb <<EOF
#!/bin/sh
case "\$1" in
start)
if [ -e /proc/buffalo/gpio/power_control/usb0 ]
then
echo on > /proc/buffalo/gpio/power_control/usb0
fi
if [ -e /proc/buffalo/usb_control ]
then
echo on > /proc/buffalo/usb_control
fi
if [ -f /lib/modules/*/kernel/drivers/usb/core/usbcore.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/core/usbcore.ko
fi
if [ -f /lib/modules/*/kernel/drivers/usb/host/ehci-hcd.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/host/ehci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/drivers/usb/host/ohci-hcd.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/host/ohci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/drivers/usb/host/uhci-hcd.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/host/uhci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/drivers/usb/storage/usb-storage.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/storage/usb-storage.ko
fi
if [ -f /lib/modules/*/kernel/drivers/usb/class/usblp.ko ]
then
insmod /lib/modules/*/kernel/drivers/usb/class/usblp.ko
fi
if [ -f /lib/modules/*/kernel/fs/fat/fat.ko ]
then
insmod /lib/modules/*/kernel/fs/fat/fat.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/vfat.ko ]
then
insmod /lib/modules/*/kernel/fs/vfat/vfat.ko
fi
;;
stop)
if [ -f /lib/modules/*/kernel/fs/vfat/vfat.ko ]
then
rmmod vfat.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/fat.ko ]
then
rmmod fat.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/usblp.ko ]
then
rmmod usblp.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/usb-storage.ko ]
then
rmmod usb-storage.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/uhci-hcd.ko ]
then
rmmod uhci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/ohci-hcd.ko ]
then
rmmod ohci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/ehci-hcd.ko ]
then
rmmod ehci-hcd.ko
fi
if [ -f /lib/modules/*/kernel/fs/vfat/usbcore.ko ]
then
rmmod usbcore.ko
fi
if [ -e /proc/buffalo/usb_control ]
then
echo off > /proc/buffalo/usb_control
fi
if [ -e /proc/buffalo/gpio/power_control/usb0 ]
then
echo off > /proc/buffalo/gpio/power_control/usb0
fi
;;
*)
echo "Usage: \$0 {start|stop}"
exit 1
esac
exit 0
EOF
chmod +x etc/init.d/usb
ln -s ../init.d/usb etc/rc0.d/K85usb
ln -s ../init.d/usb etc/rc1.d/K85usb
ln -s ../init.d/usb etc/rc2.d/S15usb
ln -s ../init.d/usb etc/rc3.d/S15usb
ln -s ../init.d/usb etc/rc4.d/S15usb
ln -s ../init.d/usb etc/rc5.d/S15usb
ln -s ../init.d/usb etc/rc6.d/K85usb
ネットワーク関連ののセットアップ
debian 依存。各機種共通。
/ のアンマウント
umount $MOUNTPOINT
/boot のマウント
LS-WSGL
/dev/md0 に fsck をかける。
/dev/md0 をマウント。
LS-WSGL 以外
/dev/sdb1 をマウント。
fsck -f -y $BOOTPARTITION
echo mounting /boot ...
cd /
if [ ! -d $MOUNTPOINT/boot ]
then
mkdir $MOUNTPOINT/boot || exit
fi
mount -t $BOOTPARTITIONTYPE $BOOTPARTITION $MOUNTPOINT/boot || exit
/boot のコピー
LS-WSGL
不要
LS-WSGL 以外
uImage.buffalo をコピー
(cd /boot ; tar cf - uImage.buffalo)|(cd $MOUNTPOINT/boot; tar xvf -)
initrd の編集
・initrd の取り出し
・loop デバイスの作成
・initrd のマウント
・linuxrc の編集・・・機種依存
・initrd のアンマウント
・initrd.buffalo の構築
dd if=/boot/initrd.buffalo of=/boot/initrd.gz bs=64 skip=1
echo gunziping /boot/initrd.gz ...
gunzip /boot/initrd.gz
if [ ! -d /tmp/root ]
then
mkdir /tmp/root || exit
fi
for minor in 0 1 2 3 4 5 6 7 8 9
do
if [ ! -e /dev/loop$minor ]
then
mknod /dev/loop$minor b 7 $minor
fi
done
mount -o loop /boot/initrd /tmp/root || exit
mv /tmp/root/linuxrc /tmp/root/linuxrc.orig
if [ $MACHINE = LSWSGL ]
then
cat > /tmp/root/linuxrc <<EOF
#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
echo "---- in hackkit linuxrc ---"
exit 0
EOF
else
cat > linuxrc <<EOF
#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
echo "---- in hackkit linuxrc ---"
mount proc /proc -t proc
mount sysfs /sys -t sysfs
ldconfig
depmod
/etc/init.d/startSysMd.sh
echo "0x901" > /proc/sys/kernel/real-root-dev
umount /sys
umount /proc
umount -a
exit 0
EOF
chmod 700 /tmp/root/linuxrc
umount /tmp/root
echo gziping /boot/initrd ... wait 5 minutes
gzip /boot/initrd || exit
chmod 755 $WORK/mkimage
chown root.root $WORK/mkimage
$WORK/mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initrd -d /boot/initrd.gz $MOUNTPOINT/boot/initrd.buffalo
rm -f /boot/initrd.gz
/boot のアンマウント
sync
umount $MOUNTPOINT/boot
さて、全機種デバッグするか。。。先、長い
Copyright (C) 2003-2009 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市