HD-120LAN ジェイルのハックキットの自動起動


電源ONでジェイルのハックキットを起動するよう、rc を作成する

/etc/rc.d/init.d/hackkit を作成

#!/bin/sh
#
# HackKit
#
# chkconfig: 2 96 06


start() {
	/etc/rc.d/init.d/atalk stop
	/etc/rc.d/init.d/smb stop
	/etc/rc.d/init.d/cron stop
	/etc/rc.d/init.d/thttpd stop
	/etc/rc.d/init.d/inetd stop
	/etc/rc.d/init.d/syslog stop
	kill `cat /var/run/apservd-eth0.pid`
	/etc/rc.d/init.d/networking stop

	/etc/rc.d/init.d/atalk stop

	rm -fr /www
	mkdir /www
	mkdir /www/script
	cp /mnt/HackKit/www/script/melsub_shutdown.sh /www/script/melsub_shutdown.sh

	/mnt/HackKit/usr/sbin/chroot /mnt/HackKit /etc/rc.d/init.d/hackkitjail start
}

stop() {
	/mnt/HackKit/usr/sbin/chroot /mnt/HackKit /etc/rc.d/init.d/hackkitjail stop
}

test -x /mnt/HackKit/etc/rc.d/init.d/hackkitjail || exit 1

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	*)
		echo "Usage: $0 {start|stop}"
		exit 1
esac

exit 0

FLASH への保存方法

/etc/rc.d/init.d/hackkit を作ったものの、 /etc/rc.d/init.d は D-RAM なので、shutdown で消えてしまう。
電源ONでジェイルのハックキットを起動するには、 /etc/rc.d/init.d/hackkit を FLASH へ保存しなければならない。

HD-LAN Ver.2 だと、 ファームウェアアップデータがディスク上にあるようなので、 そこに入れてしまえばいいのだろうが、
HD-LAN Ver.1 だとそうもいかない。

/etc/rc.d/init.d/ にファイルを置く方法を普通に考えると、 D-RAM に展開されるファイルシステムは、 /dev/fl1 の ramdisk.image.gz に収められているので、

  • /dev/fl1 から ramdisk.image.gz を取り出して、
  • ramdisk.image.gz を展開して、
  • /etc/rc.d/init.d/hackkit と sym-link を入れて、
  • ramdisk.image.gz を作り直して、
  • firminfo.txt を作って、
  • setsum で firmimg.bin を作って、
  • firmimg.bin を /dev/fl1 に書く
    という手順が必要になるはず

    大変だなぁ、、、と思っていたら、 通勤途上に:-)良い案を思いついた。

    /dev/fl1 ではなく、/dev/fl0 に入れるのである。
    /dev/fl0 には、設定ファイルを収めた conf_save.tar.gz が保存してあるが、 /etc/init.d/load_config で conf_save.tar.gz を D-RAM に展開する際、 何のチェックも行っていない。
    つまり、conf_save.tar.gz に入れておけば、 どんなファイルでも展開されるはずである。

    早速試してみる

    まずは、conf_save.tar.gz の取り出し

    root@SECO:~# as_flash /dev/fl0 get -n /tmp/conf_save.tar.gz --output /tmp/conf_save.tar.gz
    
    rc を整える
    root@SECO:~# cd /etc/rc.d/
    root@SECO:/etc/rc.d# cd rc2.d/
    root@SECO:/etc/rc.d/rc2.d# ln -s ../init.d/hackkit S96hackkit
    root@SECO:/etc/rc.d/rc2.d# cd ../rc0.d/
    root@SECO:/etc/rc.d/rc0.d# ln -s ../init.d/hackkit K10hackkit
    
    conf_save.tar.gz に追加する
    root@SECO:/# gunzip /tmp/conf_save.tar.gz
    bash: gunzip: command not found
    
    あたた、ハックキットの gunzip を使う
    root@SECO:/# /mnt/HackKit/usr/bin/gunzip /tmp/conf.tar.gz
    root@SECO:/# tar rfp /tmp/conf_save.tar etc/rc.d/*/*hackkit
    
    fl0 に書き込む
    root@SECO:/# gzip /tmp/conf_save.tar
    root@SECO:/# as_flash /dev/fl0 add -n /tmp/conf_save.tar.gz
    root@SECO:/# as_flash /dev/fl0 list
    0 -> /tmp/conf_save.tar.gz
    

    再起動!

    ******* Product Information *******
    ----------------------------------
    Product Name: HD-LAN
              VER: 1.23
             Date: 2004/5/10 11:24:1
    ----------------------------------
    Firmware check:done.
    
    >>
    Now Loading...done.
    Now Booting
    (略)
    INIT: Entering runlevel: 2
    Starting AP serv daemon:AP serv starting on eth0
    Starting internet superserver: inetd.
    Start services: thttpd
    Starting periodic command scheduler: cron.
    Starting AppleTalk services: (backgrounded)
    Start services: smbd nmbd
    Start services: ppc_uartd
    (ここまでが LinkStation Linux。この下から ジェイルのハックキット)
    Stop servecies: atalkd afpd
    Can't unregister SECO:Workstation@*
    Can't unregister SECO:netatalk@*
    /etc/rc.d/rc2.d/S90atalk: line 7:   150 Terminated              /usr/sbin/atalkd
     -f /etc/atalk/atalkd.conf
    Stop services: smbd nmbd
    Stopping periodic command scheduler: cron.
    Stop services: thttpd
    Stopping internet superserver: inetd.
    Stopping system log daemon: klogd syslogd.
    Deconfiguration network interface: lo eth0
    dhcpcd[73]: terminating on signal 1
    
    Stop servecies: atalkd afpd
    Can't unregister SECO:Workstation@*
    Can't unregister SECO:netatalk@*
                            Welcome to Vine Linux
                    Press 'I' to enter interactive startup.
    Mounting proc filesystem:  [  OK  ]
    Configuring kernel parameters:  [  OK  ]
    hwclock: ioctl() to /dev/rtc to turn on update interrupts failed unexpectedly, errno=515: Unknown error 515.
    Setting clock  (localtime): Mon Jun 14 01:42:28 JST 2004 [  OK  ]
    Activating swap partitions:  [  OK  ]
    Setting hostname hackkit:  [  OK  ]
    modprobe: Can't open dependencies file /lib/modules/2.4.17_mvl21-sandpoint/modules.dep (No such file or directory)
    modprobe: Can't open dependencies file /lib/modules/2.4.17_mvl21-sandpoint/modules.dep (No such file or directory)
    modprobe: Can't open dependencies file /lib/modules/2.4.17_mvl21-sandpoint/modules.dep (No such file or directory)
    Mounting local filesystems:  [  OK  ]
    Enabling local filesystem quotas:  [  OK  ]
    Enabling swap space:  [  OK  ]
    /bin/cat: /proc/modules: No such file or directory
                                                      /bin/cat: /proc/ksyms: No such
     file or directory
                      Setting network parameters:  [  OK  ]
    Bringing up loopback interface:  [  OK  ]
    Bringing up interface eth0:  [  OK  ]
    Starting system logger: [  OK  ]
    Starting kernel logger: [  OK  ]
    Initializing random number generator:  [  OK  ]
    Mounting other filesystems:  [  OK  ]
    Starting INET services: [  OK  ]
    Starting crond: [  OK  ]
    Starting atd: [  OK  ]
    
    
    MELCO INC. Link Station series HD-LAN
    
    hackkit login:
    
    OK!
    ログインしてみる
    hackkit login: root
    PAM_unix[609]: (login) session opened for user root by LOGIN(uid=0)
    Linux (none) 2.4.17_mvl21-sandpoint #857 2004年 5月 10日 月曜日 11:22:13 JST ppc unknown
    login[609]: ROOT LOGIN on `console'
    
    root@hackkit:~# ps -aux
    Bad syntax, perhaps a bogus '-'?
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
    root         1  2.4  1.0  1448  644 ?        S    01:41   0:05 init
    root         2  0.0  0.0     0    0 ?        SW   01:41   0:00 [keventd]
    root         3  0.0  0.0     0    0 ?        SWN  01:41   0:00 [ksoftirqd_CPU0]
    root         4  0.0  0.0     0    0 ?        SW   01:41   0:00 [kswapd]
    root         5  0.0  0.0     0    0 ?        SW   01:41   0:00 [bdflush]
    root         6  0.0  0.0     0    0 ?        SW   01:41   0:00 [kupdated]
    root        35  0.0  0.0     0    0 ?        SW   01:42   0:00 [kreiserfsd]
    root       157  0.0  0.7  1408  480 ?        S    01:42   0:00 /usr/sbin/ppc_uar
    root       515  0.0  1.2  1660  780 ?        S    01:42   0:00 syslogd -m 0
    root       520  0.0  0.9  1500  620 ?        S    01:42   0:00 klogd -2
    root       574  0.0  1.0  1628  660 ?        S    01:42   0:00 inetd
    root       592  0.0  1.3  2016  848 ?        S    01:42   0:00 crond
    daemon     603  0.0  1.1  1628  712 ?        S    01:42   0:00 /usr/sbin/atd
    root       609  0.0  2.4  2756 1552 ttyS0    S    01:42   0:00 -bash
    root       622  0.0  1.4  2800  924 ttyS0    R    01:45   0:00 ps -aux
    root@hackkit:~#
    
    HD-HGLAN から telnet してみる
    [yasunari@giga yasunari]$ telnet hackkit
    Trying 192.168.1.6...
    Connected to hackkit.
    Escape character is '^]'.
    
    Vine Linux 2.6 (La Fleur de Bouard)
    Kernel 2.4.17_mvl21-sandpoint on a ppc
    login: guest
    Password:
    bash-2.04$ ps -aux
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT    START   TIME COMMAND
    root         1  2.5  1.0  1448  644 ?        S       01:47   0:05 init
    root         2  0.0  0.0     0    0 ?        SW      01:47   0:00 [keventd]
    root         3  0.0  0.0     0    0 ?        SWN     01:47   0:00 [ksoftirqd_CPU0]
    root         4  0.0  0.0     0    0 ?        SW      01:47   0:00 [kswapd]
    root         5  0.0  0.0     0    0 ?        SW      01:47   0:00 [bdflush]
    root         6  0.0  0.0     0    0 ?        SW      01:47   0:00 [kupdated]
    root        35  0.0  0.0     0    0 ?        SW      01:47   0:00 [kreiserfsd]
    root       157  0.0  0.7  1408  480 ?        S       01:47   0:00 /usr/sbin/ppc_uartd
    root       520  0.0  1.2  1660  780 ?        S       01:48   0:00 syslogd -m 0
    root       525  0.0  0.9  1500  620 ?        S       01:48   0:00 klogd -2
    root       579  0.0  1.0  1628  672 ?        S       01:48   0:00 inetd
    root       597  0.0  1.3  2016  848 ?        S       01:48   0:00 crond
    daemon     608  0.0  1.1  1628  712 ?        S       01:48   0:00 /usr/sbin/atd
    root       614  0.0  0.9  1428  592 ttyS0    S       01:48   0:00 /sbin/getty console
    root       644  1.0  1.5  2360  992 ?        S       01:51   0:00 in.telnetd: giga.yamasita.jp
    root       645  1.6  2.5  3980 1596 pts/0    S       01:51   0:00 login -- guest
    guest      646  3.0  2.2  2888 1428 pts/0    S       01:51   0:00 -bash
    guest      659  0.0  1.6  3244 1012 pts/0    R       01:51   0:00 ps -aux
    bash-2.04$
    
    電源ボタン長押し
    INIT: Switching to runlevel: 0
    INIT: Sending pStopping atd: [  OK  ]
    Stopping crond: [  OK  ]
    Stopping INET services: [  OK  ]
    Saving random seed:  [  OK  ]
    Shutting down kernel logger: [  OK  ]
    Shutting down system logger: [  OK  ]
    Shutting down interface eth0:  [  OK  ]
    Shutting down loopback interface:  [  OK  ]
    Stopping periodic command scheduler: cron.
                                              Stopping internet superserver: inetd.
                                                                                   S
    top services: thttpd
                        Saving random seed... done.
                                                   Stop servecies: atalkd afpd
                                                                              Can't
    unregister hackkit:Workstation@*
                                    Can't unregister hackkit:netatalk@*
                                                                       Stopping syst
    em log daemon: klogd syslogd.
                                 Stop services: smbd nmbd
                                                         Stop services: ppc_uartd
                                                                                 Sen
    ding all processes the TERM signal... done.
                                               Sending all processes the KILL signal
    ... done.
             Deactivating swap... done.
                                       Unmounting local filesystems... done.
                                                                            flushing
     ide devices: hda
    Power down.
    
    ハックキット化、完了!
    (こんなんで、ええのか???)
    LinkStation/玄箱 をハックしよう → HD-120LAN 突然リセット

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