RamRoot で立ち上がる initrd

LS-WSGL/R1

RamRoot にするよい方法が見つからないので、 最後の(?)手段 initrd の /linuxrc を変更して RamRoot で立ち上がるようにしてみる。

initrd のマウント

先日 initrd の root のパスワードをつぶした 時と同様。
root@LS-WSGL678:/boot# vi LS-WSGL_hackkit_0.00.sh
root@LS-WSGL678:/boot# cat !$
cat LS-WSGL_hackkit_0.00.sh

        dd if=initrd.buffalo of=initrd.gz bs=64 skip=1
        gunzip initrd.gz
        for minor in 0 1 2 3 4 5 6 7 8 9
        do
                mknod /dev/loop$minor b 7 $minor
        done

        mkdir /tmp/root
        mount -o loop initrd /tmp/root
root@LS-WSGL678:/boot# sh $!
sh LS-WSGL_hackkit_0.00.sh
87438+1 records in
87438+1 records out
/sbin/hotplug [block]
root@LS-WSGL678:/boot#

さて、どこを変更?

どうやったら、RamRoot で立ち上がるようになるのか、、、
root@LS-WSGL678:/boot# vi /tmp/root/linuxrc
	:
	:
echo "linuxrc:choose operation (timeout 4[s])"
echo -n " 1:RamRoot other:HddRoot  ? "
## timeout is 4[s]
ANSWER=`/usr/local/bin/keyinput -t 4`
case "$ANSWER" in
  1) RamdiskRoot ;;
  9) CommandMode ;;
  *)
        HddRoot
        ;;
esac
	:
	:
ここで、ANSWER に 1 を入れればよい。
root@LS-WSGL678:/boot# vi LS-WSGL_hackkit_0.00.sh
root@LS-WSGL678:/boot# cat !$
cat LS-WSGL_hackkit_0.00.sh
	:
	:
        cd /tmp/root
        mv linuxrc linuxrc.orig
        sed -e 's/^ANSWER=.*$/ANSWER=1/' linuxrc.orig > linuxrc
        chmod 700 linuxrc
	:
	:
root@LS-WSGL678:/boot# sh LS-WSGL_hackkit_0.00.sh
root@LS-WSGL678:/boot# diff -c /tmp/root/linuxrc.orig /tmp/root/linuxrc
*** /tmp/root/linuxrc.orig      Tue Jul 15 14:50:14 2008
--- /tmp/root/linuxrc   Sun Oct 26 10:58:11 2008
***************
*** 425,431 ****
  echo "linuxrc:choose operation (timeout 4[s])"
  echo -n " 1:RamRoot other:HddRoot  ? "
  ## timeout is 4[s]
! ANSWER=`/usr/local/bin/keyinput -t 4`
  case "$ANSWER" in
    1) RamdiskRoot ;;
    9) CommandMode ;;
--- 425,431 ----
  echo "linuxrc:choose operation (timeout 4[s])"
  echo -n " 1:RamRoot other:HddRoot  ? "
  ## timeout is 4[s]
! ANSWER=1
  case "$ANSWER" in
    1) RamdiskRoot ;;
    9) CommandMode ;;
root@LS-WSGL678:/boot#

initrd の再構成

initrd.buffalo を作る。
root@LS-WSGL678:/boot# vi LS-WSGL_hackkit_0.00.sh
root@LS-WSGL678:/boot# cat !$
cat LS-WSGL_hackkit_0.00.sh
	:
	:
        umount /tmp/root
        gzip initrd
        mv initrd.buffalo initrd.buffalo.orig
        mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initrd -d /boot/initrd.gz /boot/initrd.buffalo
	:
	:
相変わらず標準ファームで動く mkimage がないので、 これでは動かない。
mkimage 作るかな。。。どうやって???

仕方がないので、前回と同じく、LS-HGL ハックキットを展開し、 それに納めている mkimage を使う。

root@LS-WSGL678:/boot# umount /tmp/root
root@LS-WSGL678:/boot# gzip initrd
root@LS-WSGL678:/boot# mv initrd.gz /mnt/disk1/HackKit/boot
root@LS-WSGL678:/boot# chroot /mnt/disk1/HackKit /usr/local/sbin/mkimage -A  ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initrd -d /boot/initrd.gz /boot/initrd.buffalo
Image Name:   initrd
Created:      Sun Oct 26 11:33:55 2008
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    5598414 Bytes = 5467.20 kB = 5.34 MB
Load Address: 0x00000000
Entry Point:  0x00000000
root@LS-WSGL678:/boot# ls -l /mnt/disk1/HackKit/boot
-rw-r--r--    1 root     root      5598478 Oct 26 11:33 initrd.buffalo
-rw-r--r--    1 root     root      5598414 Oct 26 11:31 initrd.gz
root@LS-WSGL678:/boot# mv /mnt/disk1/HackKit/boot/initrd.buffalo .
root@LS-WSGL678:/boot#
できた。

再起動

電源 SW を OFF にしてシャットダウン、
電源 SW を ON にして起動する。
	:
	:
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
---- in linuxrc ---
Sun Oct 26 11:37:48 JST 2008
CheckDevices
linuxrc:choose operation (timeout 4[s])
 1:RamRoot other:HddRoot  ? -RamdiskRoot-
md: md0 stopped.
	:
	:
なんの入力も無しに RamdiskRoot で起動を始め、

BUFFALO INC. LinkStation series
LS-WSGL-EM678 login:
RamRoot(EM mode)で起動してきた。
大成功!

ぅ゛
ここまで来て気が付いた。
telnetd が起動していないので(シリアルコンソールからしか) ログインできない。

やり直し。あーぁ



LinkStation Mini
LS-WSGL
楽天市場
Amazon
Yahoo!ショッピング
Livedoor デパート
Sofmap
TSUKUMO ネットショップ
ムラウチドットコム
ヤマダ電機WEB
パソQ


Maxtor Diamod max 10 6L200 ×2
ハックの記録
LinkStation/玄箱 をハックしよう

ラックの写真

Copyright (C) 2003-2008 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市