ブートしない条件(2)

LS410D

実験用HDDができたので、色々調べる。

一番調べたいのは、ブートしない条件。

initrd.buffalo の
・タイムスタンプを変えても
・サイズを変えても
・image を作りなおしても
・initrd.gz を gzip し直しても
起動してくることはわかった。

次は、initrd の中身を書き換えて どこまでなら起動するのかを見て行きたいところであるのだが、
LinkStation の標準ファームでは initrd を書き換える事ができず
別の Linux マシンで書き換える必要がある。

別の Linux マシンで書き換えて、
LinkStation の HDD を USB で接続して、
initrd.buffalo をコピーして
起動してみる
ということを繰り返すのはすごく面倒。

なので、tftp boot して標準ファームが起動できるかを確かめた。
これなら、
別の Linux マシンで書き換えて、
tftp ブートしてみる
と簡単に繰り返せるので。

gzip のし直し

ここから再開。

gzip のし直しは、LinkStation セルフで確認したが、 念のため、クロス+tftp Boot でここまでは同じく問題ないことを確認する。

オリジナルを保存

yasunari@qube:~$ cd /srv/tftp/ls400-111/
yasunari@qube:/srv/tftp/ls400-111$ ls
initrd.buffalo  uImage.buffalo
yasunari@qube:/srv/tftp/ls400-111$ mv initrd.buffalo{,.orig}
yasunari@qube:/srv/tftp/ls400-111$

スクリプトの作成

何度も繰り返すことはスクリプトに書く
yasunari@qube:/srv/tftp/ls400-111$ vi remakeinitrd.sh
	:
	:
yasunari@qube:/srv/tftp/ls400-111$ cat remakeinitrd.sh
set -x

cp initrd.buffalo{.orig,}
dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
gunzip /tmp/initrd.gz

gzip /tmp/initrd
mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
yasunari@qube:/srv/tftp/ls400-111$

スクリプトの実行

yasunari@qube:/srv/tftp/ls400-111$ sh remakeinitrd.sh
+ cp initrd.buffalo{.orig,}
cp: missing destination file operand after `initrd.buffalo{.orig,}'
詳しくは `cp --help' を実行して下さい.
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
dd: opening `initrd.buffalo': そのようなファイルやディレクトリはありません
+ gunzip /tmp/initrd.gz
gzip: /tmp/initrd.gz: No such file or directory
+ gzip /tmp/initrd
gzip: /tmp/initrd: No such file or directory
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
mkimage: Can't open /tmp/initrd.gz: No such file or directory
yasunari@qube:/srv/tftp/ls400-111$ which sh
/bin/sh
yasunari@qube:/srv/tftp/ls400-111$
がー。なんで、{} が使えない?
yasunari@qube:/srv/tftp/ls400-111$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-01-11 23:51 /bin/sh -> dash
yasunari@qube:/srv/tftp/ls400-111$
dash!

やり直し。

yasunari@qube:/srv/tftp/ls400-111$ bash remakeinitrd.sh
+ cp initrd.buffalo.orig initrd.buffalo
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 7.51946 s, 1.6 MB/s
+ gunzip /tmp/initrd.gz
+ gzip /tmp/initrd
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
Image Name:   initramfs
Created:      Mon Sep 16 12:17:50 2013
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    11929799 Bytes = 11650.19 kB = 11.38 MB
Load Address: 0x00000000
Entry Point:  0x00000000
yasunari@qube:/srv/tftp/ls400-111$ ls -l
合計 26096
-rw-r--r-- 1 yasunari yamasita 11929863 2013-09-16 12:17 initrd.buffalo
-rwxr-xr-x 2 yasunari yamasita 11886884 2013-07-04 22:18 initrd.buffalo.orig
-rw-r--r-- 1 yasunari yamasita      243 2013-09-16 12:09 remakeinitrd.sh
-rwxr-xr-x 2 yasunari yamasita  2894416 2013-07-04 22:18 uImage.buffalo
yasunari@qube:/srv/tftp/ls400-111$
gzip の性能が良いのか、サイズが小さくなった。

tftp Boot

LS400D の電源ON。E07
func ボタンを押す。
Sep 16 12:20:46 qube in.tftpd[1415]: connect from 192.168.11.150 (192.168.11.150)
Sep 16 12:20:46 qube tftpd[1416]: tftpd: trying to get file: uImage.buffalo
Sep 16 12:20:46 qube tftpd[1416]: tftpd: serving file from /srv/tftp
Sep 16 12:20:48 qube in.tftpd[1417]: connect from 192.168.11.150 (192.168.11.150)
Sep 16 12:20:48 qube tftpd[1418]: tftpd: trying to get file: initrd.buffalo
Sep 16 12:20:48 qube tftpd[1418]: tftpd: serving file from /srv/tftp

tftp サーバに取りに来た。

しばらくして白点灯。

yasunari@qube:/srv/tftp/ls400-111$ ssh root@ls410d
[root@LS410D06E ~]# hostname
LS410D06E
[root@LS410D06E ~]# exit
logout
 Connection to ls410d closed.
yasunari@qube:/srv/tftp/ls400-111$
動いているようだ。

initrd の作り直し

次は、gunzip した initrd の作りなおし。
ar で展開して、すぐに作りなおす。

スクリプトの修正

yasunari@qube:/srv/tftp/ls400-111$ vi remakeinitrd.sh
	:
	:
yasunari@qube:/srv/tftp/ls400-111$ cat remakeinitrd.sh
set -x

cp initrd.buffalo{.orig,}
dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
gunzip /tmp/initrd.gz
mkdir root
cd root
cat /tmp/initrd | cpio -id


find . -depth -print | cpio -ov > /tmp/initrd
cd ..
rm -fr root
gzip /tmp/initrd
mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo

rm -f /tmp/initrd.gz
yasunari@qube:/srv/tftp/ls400-111$

スクリプトの実行

yasunari@qube:/srv/tftp/ls400-111$ bash remakeinitrd.sh
+ cp initrd.buffalo.orig initrd.buffalo
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 7.73635 s, 1.5 MB/s
+ gunzip /tmp/initrd.gz
gzip: /tmp/initrd already exists; do you wish to overwrite (y or n)? y
+ mkdir root
+ cd root
+ cat /tmp/initrd
+ cpio -id
cpio: dev/sdb7: Cannot mknod: 許可されていない操作です
cpio: dev/mtd0: Cannot mknod: 許可されていない操作です
cpio: dev/mtd3: Cannot mknod: 許可されていない操作です
cpio: dev/ptmx: Cannot mknod: 許可されていない操作です
cpio: dev/hda15: Cannot mknod: 許可されていない操作です
cpio: dev/sdb4: Cannot mknod: 許可されていない操作です
cpio: dev/hdb11: Cannot mknod: 許可されていない操作です
cpio: dev/ttymxc2: Cannot mknod: 許可されていない操作です
cpio: dev/sda: Cannot mknod: 許可されていない操作です
cpio: dev/uba5: Cannot mknod: 許可されていない操作です
cpio: dev/kmem: Cannot mknod: 許可されていない操作です
cpio: dev/ttyp9: Cannot mknod: 許可されていない操作です
cpio: dev/hda13: Cannot mknod: 許可されていない操作です
cpio: dev/ttyAM1: Cannot mknod: 許可されていない操作です
	:
	:
一般ユーザでは mknod できないか。

root で再実行

root@qube:/srv/tftp/ls400-111# bash remakeinitrd.sh
+ cp initrd.buffalo.orig initrd.buffalo
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 8.38006 s, 1.4 MB/s
+ gunzip /tmp/initrd.gz
+ mkdir root
+ cd root
+ cat /tmp/initrd
+ cpio -id
52829 blocks
+ find . -depth -print
+ cpio -ov
./usr/lib/libreadline.so.6.2
./usr/lib/libstdc++.so.
	:
	:
./www/cgi-bin/resume.cgi
./www/cgi-bin/query.cgi
./www/cgi-bin
./www
.
52612 blocks
+ cd ..
+ rm -fr root
+ gzip /tmp/initrd
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
Image Name:   initramfs
Created:      Mon Sep 16 12:44:11 2013
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    11913516 Bytes = 11634.29 kB = 11.36 MB
Load Address: 0x00000000
Entry Point:  0x00000000
+ rm -f /tmp/initrd.gz
root@qube:/srv/tftp/ls400-111# ls -l
total 26080
-rw-r--r-- 1 yasunari yamasita 11913580 Sep 16 12:44 initrd.buffalo
-rwxr-xr-x 2 yasunari yamasita 11886884 Jul  4 22:18 initrd.buffalo.orig
-rw-r--r-- 1 yasunari yamasita      376 Sep 16 12:36 remakeinitrd.sh
-rwxr-xr-x 2 yasunari yamasita  2894416 Jul  4 22:18 uImage.buffalo
root@qube:/srv/tftp/ls400-111#
今度はオリジナルより大きくなった。

tftp Boot

LS400D の電源ON。E07
func ボタンを押す。
しばらくして白点灯。
root@qube:/srv/tftp/ls400-111# ssh root@ls410d
The authenticity of host 'ls410d (192.168.2.57)' can't be established.
RSA key fingerprint is 1d:79:3f:1a:29:f6:42:39:32:05:f8:9b:24:8f:fc:32.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ls410d,192.168.2.57' (RSA) to the list of known hosts.
[root@LS410D06E ~]#
起動している。

init のタイムスタンプの変更

次は init のタイムスタンプを変更してみる

スクリプトの修正

init を touch する
root@qube:/srv/tftp/ls400-111# vi remakeinitrd.sh
	:
	:
root@qube:/srv/tftp/ls400-111# cat remakeinitrd.sh
set -x

cp initrd.buffalo{.orig,}
dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
gunzip /tmp/initrd.gz
mkdir root
cd root
cat /tmp/initrd | cpio -id

touch init


find . -depth -print | cpio -ov > /tmp/initrd
cd ..
rm -fr root
gzip /tmp/initrd
mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo

rm -f /tmp/initrd.gz
root@qube:/srv/tftp/ls400-111#

スクリプトの実行

root@qube:/srv/tftp/ls400-111# bash remakeinitrd.sh
+ cp initrd.buffalo.orig initrd.buffalo
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 7.88083 s, 1.5 MB/s
+ gunzip /tmp/initrd.gz
+ mkdir root
+ cd root
+ cat /tmp/initrd
+ cpio -id
52829 blocks
+ touch init
+ find . -depth -print
+ cpio -ov
./usr/lib/libreadline.so.6.2
./usr/lib/libstdc++.so.6.0.16-gdb.py
	:
	:
./www/cgi-bin
./www
.
52612 blocks
+ cd ..
+ rm -fr root
+ gzip /tmp/initrd
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
Image Name:   initramfs
Created:      Tue Sep 17 00:43:48 2013
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    11913523 Bytes = 11634.30 kB = 11.36 MB
Load Address: 0x00000000
Entry Point:  0x00000000
+ rm -f /tmp/initrd.gz
root@qube:/srv/tftp/ls400-111# ls -l
total 26080
-rw-r--r-- 1 yasunari yamasita 11913587 Sep 17 00:43 initrd.buffalo
-rwxr-xr-x 2 yasunari yamasita 11886884 Jul  4 22:18 initrd.buffalo.orig
-rw-r--r-- 1 yasunari yamasita      388 Sep 17 00:40 remakeinitrd.sh
-rwxr-xr-x 2 yasunari yamasita  2894416 Jul  4 22:18 uImage.buffalo
root@qube:/srv/tftp/ls400-111#

tftp Boot

LS400D の電源ON。E07
func ボタンを押す。
しばらくして白点灯。
root@qube:/srv/tftp/ls400-111# ssh root@ls410d
[root@LS410D06E ~]#
起動している。

init のサイズ変更

init のサイズを変えてみる

スクリプトの修正

root@qube:/srv/tftp/ls400-111# vi remakeinitrd.sh
	:
	:
root@qube:/srv/tftp/ls400-111# cat !$
cat remakeinitrd.sh
set -x

cp initrd.buffalo{.orig,}
dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
gunzip /tmp/initrd.gz
mkdir root
cd root
cat /tmp/initrd | cpio -id

echo >> init


find . -depth -print | cpio -ov > /tmp/initrd
cd ..
rm -fr root
gzip /tmp/initrd
mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo

rm -f /tmp/initrd.gz
root@qube:/srv/tftp/ls400-111#

スクリプトの実行

root@qube:/srv/tftp/ls400-111# bash remakeinitrd.sh
+ cp initrd.buffalo.orig initrd.buffalo
+ dd if=initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 7.57186 s, 1.6 MB/s
+ gunzip /tmp/initrd.gz
+ mkdir root
+ cd root
+ cat /tmp/initrd
+ cpio -id
52829 blocks
+ echo
+ cpio -ov
+ find . -depth -print
./usr/lib/libreadline.so.6.2
./usr/lib/libstdc++.so.6.0.16-gdb.py
./usr/lib/libkmod.so.2
./usr/lib/libe2p.so.2
	:
	:
./www/cgi-bin/resume.cgi
./www/cgi-bin/query.cgi
./www/cgi-bin
./www
.
52612 blocks
+ cd ..
+ rm -fr root
+ gzip /tmp/initrd
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
Image Name:   initramfs
Created:      Tue Sep 17 00:51:50 2013
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    11913477 Bytes = 11634.25 kB = 11.36 MB
Load Address: 0x00000000
Entry Point:  0x00000000
+ rm -f /tmp/initrd.gz
root@qube:/srv/tftp/ls400-111# ls -l
total 26080
-rw-r--r-- 1 yasunari yamasita 11913541 Sep 17 00:51 initrd.buffalo
-rwxr-xr-x 2 yasunari yamasita 11886884 Jul  4 22:18 initrd.buffalo.orig
-rw-r--r-- 1 yasunari yamasita      402 Sep 17 00:49 remakeinitrd.sh
-rwxr-xr-x 2 yasunari yamasita  2894416 Jul  4 22:18 uImage.buffalo
root@qube:/srv/tftp/ls400-111#
なんか、どんどん大きくなる

tftp Boot

LS400D の電源ON。E07
func ボタンを押す。
しばらくして白点灯。
root@qube:/srv/tftp/ls400-111# ssh root@ls410d
[root@LS410D06E ~]#
起動している。

というわけで、いろいろ変えてみたが、特に問題なし。
initrd.buffalo を変えてもブートしないことは無いのでは??



LS410D

楽天市場
Amazon


tftp Boot で標準ファームを起動
ハックの記録
LinkStation/玄箱 をハックしよう

initrd の /init を見る(2)

ツイート Tweet to @yasunari_y @yasunari_yをフォロー

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