USB起動のSqueeze-amd64版インストーラ

■USB起動Squeeze-amd64版の再作成
 LennyからアップデートしたSqueezeでvmnetのサービスが立ち上がらなくなった。
 クリーンなSqueezeと比べても特に異常は無かったので、お手上げ。
 ということで、USB起動のLennyをSqueezeのインストーラに変身させる。
 CD-Rが無かったのと、PXE-Bootはもうやったので、またUSB起動を試す。

■現状確認。
 sdbとして認識しているUSB起動のディスクは、i686版のLennyです。
 MBRの末尾が「55 aa」、つまり0xAA55なので、起動可能です。

$ dmesg | grep sd | grep blocks
[2931999.307682] sd 7:0:0:0: [sdb] 31506432 512-byte logical blocks: (16.1 GB/15.0 GiB)

$ sudo fdisk -l /dev/sdb | tail -4
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        1873    15044841   83  Linux
/dev/sdb2            1874        1961      706860    5  Extended
/dev/sdb5            1874        1961      706828+  82  Linux swap / Solaris

$ sudo mount /dev/sdb1 /media/sdb1
$ sudo cat /media/sdb1/etc/debian_version
5.0.4
$ sudo ls /media/sdb1/boot/vmlinuz-2.6.26-2-686

$ dd if=/dev/sdb bs=512 count=1 | hexdump -C | less

00000000  fa 33 c0 8e d0 bc 00 7c  8b f4 50 07 50 1f fb fc  |.3.....|..P.P...|
00000010  bf 00 06 b9 00 01 f2 a5  ea 1d 06 00 00 be b8 06  |................|
00000020  ac 3c 00 74 0e 56 bb 07  00 b4 0e cd 10 5e ea 20  |.<.t.V.......^. |
00000030  06 00 00 cd 18 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000b0  00 00 00 00 00 00 00 00  50 65 6e 20 44 72 69 76  |........Pen Driv|
000000c0  65 20 57 69 74 68 6f 75  74 20 4f 70 65 72 61 74  |e Without Operat|
000000d0  69 6e 67 20 53 79 73 74  65 6d 2e 52 65 6d 6f 76  |ing System.Remov|
000000e0  65 20 50 65 6e 20 44 72  69 76 65 20 41 6e 64 20  |e Pen Drive And |
000000f0  52 65 62 6f 6f 74 2e 20  00 00 00 00 00 00 00 00  |Reboot. ........|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  01 02 03 04 00 00 80 01  |................|
000001c0  01 00 83 fe ff ff 3f 00  00 00 d2 21 cb 01 00 fe  |......?....!....|
000001d0  ff ff 05 fe ff ff 11 22  cb 01 58 92 15 00 00 00  |......."..X.....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
(END) 1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00125037 s, 409 kB/s
■おまけ
 自分で作ったの、すっかり忘れていたけど、これやばいw。
 GRUB用に想定しているコードなので、JUMPから先は気にしなくて大丈夫です。
 hexdumpの結果も「Pen Drive」になってますし。

 Debian簡易MBRチェック
 http://d.hatena.ne.jp/labunix/20120205

$ sudo ./myscripts/mbrchk.sh
INFO:root check ok.

INFO:/dev/sda   0xaa55
INFO:/dev/sda1  0x80
INFO:JUMP       0x48eb
INFO:GRUB       0x0203
#Stage2
INFO:load       0x2000
INFO:Secter     0x00000000
INFO:Segment    0x0202

INFO:/dev/sdb   0xaa55
INFO:/dev/sdb1  0x80
ERROR:/dev/sdb MBR first jump
ERROR:Other bootloader version 0x0000
#Stage2
INFO:load       0x0000
INFO:Secter     0x00000000
INFO:Segment    0x0000

■squeezeのビジネスカードイメージのダウンロード、インストーライメージの確認
 50MBほどのイメージなので、ダウンロードも2分程度です。

$ wget http://cdimage.debian.org/debian-cd/6.0.5/amd64/iso-cd/debian-6.0.5-amd64-businesscard.iso
$ du debian-6.0.5-amd64-businesscard.iso
51256   debian-6.0.5-amd64-businesscard.iso

$ test -d ~/tempiso || mkdir ~/tempidp;sudo mount -o loop debian-6.0.5-amd64-businesscard.iso ~/tempiso
$ ls ~/tempiso/install.amd/ | sed s/"gtk\|install.bat"// | xargs echo -n;echo
initrd.gz vmlinuz

■USBメモリのパーティションの切りなおし。

$ sudo fdisk /dev/sdb
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):1
First cylinder (1-1961, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1961, default 1961):+100M
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):2
First cylinder (15-1961, default 15):
Using default value 15
Last cylinder, +cylinders or +size{K,M,G} (15-1961, default 1961):+60M
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):3
First cylinder (24-1961, default 24):
Using default value 24
Last cylinder, +cylinders or +size{K,M,G} (24-1961, default 1961):
Using default value 1961
Command (m for help): a
Partition number (1-4): 1
Command (m for help): p

Disk /dev/sdb: 16.1 GB, 16131293184 bytes
255 heads, 63 sectors/track, 1961 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x04030201

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          14      112423+  83  Linux
/dev/sdb2              15          23       72292+  83  Linux
/dev/sdb3              24        1961    15566985   83  Linux

Command (m for help):w

■USBメモリのパーティションの確認

$ sudo fdisk /dev/sdb -l | tail -4
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          14      112423+  83  Linux
/dev/sdb2              15          23       72292+  83  Linux
/dev/sdb3              24        1961    15566985   83  Linux

■USBメモリのフォーマット

$ sudo mke2fs /dev/sdb1
$ sudo mke2fs /dev/sdb2
$ sudo mke2fs /dev/sdb3

■USBメモリに起動イメージをコピー

$ sudo mount /dev/sdb1 /media/sdb1
$ mount | grep sdb1
/dev/sdb1 on /media/sdb1 type ext2 (rw)
$ sudo mkdir -p /media/sdb1/boot

$ sudo cp -pi ~/tempiso/install.amd/[iv]*z /media/sdb1/boot/
$ ls /media/sdb1/boot/
initrd.gz  vmlinuz

■既存のMBRのバックアップとgrubのインストール

$ sudo dd if=/dev/sda of=backup.mbr bs=512 count=1
$ sudo umount /dev/sdb1
$ sudo mount /dev/sdb1 /boot
$ sudo grub-install --root-directory=/media/sdb1 /dev/sdb
Installation finished. No error reported.

$ sudo dd if=/dev/sda of=after.mbr bs=512 count=1
$ diff -s backup.mbr after.mbr
ファイルbackup.mbrとafter.mbrは同一

■見慣れたgrubのMBRになりました。
 パーティション情報が変わってます。ただし、Stage1までです。
 よって、起動は元の/dev/sdaのMBRを使います。

$ dd if=/dev/sdb bs=512 count=1 | hexdump -C
00000000  eb 63 90 8e d0 bc 00 7c  8b f4 50 07 50 1f fb fc  |.c.....|..P.P...|
00000010  bf 00 06 b9 00 01 f2 a5  ea 1d 06 00 00 be b8 06  |................|
00000020  ac 3c 00 74 0e 56 bb 07  00 b4 0e cd 10 5e ea 20  |.<.t.V.......^. |
00000030  06 00 00 cd 18 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa eb 07  f6 c2 80 75 02 b2 80 ea  |...........u....|
00000070  74 7c 00 00 31 c0 8e d8  8e d0 bc 00 20 fb a0 64  |t|..1....... ..d|
00000080  7c 3c ff 74 02 88 c2 52  be 80 7d e8 1c 01 be 05  ||<.t...R..}.....|
00000090  7c f6 c2 80 74 48 b4 41  bb aa 55 cd 13 5a 52 72  ||...tH.A..U..ZRr|
000000a0  3d 81 fb 55 aa 75 37 83  e1 01 74 32 31 c0 89 44  |=..U.u7...t21..D|
000000b0  04 40 88 44 ff 89 44 02  c7 04 10 00 66 8b 1e 5c  |.@.D..D.....f..\|
000000c0  7c 66 89 5c 08 66 8b 1e  60 7c 66 89 5c 0c c7 44  ||f.\.f..`|f.\..D|
000000d0  06 00 70 b4 42 cd 13 72  05 bb 00 70 eb 76 b4 08  |..p.B..r...p.v..|
000000e0  cd 13 73 0d f6 c2 80 0f  84 d8 00 be 8b 7d e9 82  |..s..........}..|
000000f0  00 66 0f b6 c6 88 64 ff  40 66 89 44 04 0f b6 d1  |.f....d.@f.D....|
00000100  c1 e2 02 88 e8 88 f4 40  89 44 08 0f b6 c2 c0 e8  |.......@.D......|
00000110  02 66 89 04 66 a1 60 7c  66 09 c0 75 4e 66 a1 5c  |.f..f.`|f..uNf.\|
00000120  7c 66 31 d2 66 f7 34 88  d1 31 d2 66 f7 74 04 3b  ||f1.f.4..1.f.t.;|
00000130  44 08 7d 37 fe c1 88 c5  30 c0 c1 e8 02 08 c1 88  |D.}7....0.......|
00000140  d0 5a 88 c6 bb 00 70 8e  c3 31 db b8 01 02 cd 13  |.Z....p..1......|
00000150  72 1e 8c c3 60 1e b9 00  01 8e db 31 f6 bf 00 80  |r...`......1....|
00000160  8e c6 fc f3 a5 1f 61 ff  26 5a 7c be 86 7d eb 03  |......a.&Z|..}..|
00000170  be 95 7d e8 34 00 be 9a  7d e8 2e 00 cd 18 eb fe  |..}.4...}.......|
00000180  47 52 55 42 20 00 47 65  6f 6d 00 48 61 72 64 20  |GRUB .Geom.Hard |
00000190  44 69 73 6b 00 52 65 61  64 00 20 45 72 72 6f 72  |Disk.Read. Error|
000001a0  0d 0a 00 bb 01 00 b4 0e  cd 10 ac 3c 00 75 f4 c3  |...........<.u..|
000001b0  00 00 00 00 00 00 00 00  01 02 03 04 00 00 80 01  |................|
000001c0  01 00 83 fe 3f 0d 3f 00  00 00 4f 6e 03 00 00 00  |....?.?...On....|
000001d0  01 0e 83 fe 3f 16 8e 6e  03 00 c9 34 02 00 00 00  |....?..n...4....|
000001e0  01 17 83 fe ff ff 57 a3  05 00 12 11 db 01 00 00  |......W.........|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00673785 s, 76.0 kB/s
00000200
■最近のdevicemapはidで識別しますので、安心です。
 これだけのためにgrub-installしたのです。。。

$ cat /media/sdb1/boot/grub/device.map | sed s/"[2-9]\|[A-Z]"/"X"/g
(hd0)   /dev/disk/by-id/ata-Xitachi_XXXXX1010XXXXX0_XXXX0XXX0XXXXX
(hd1)   /dev/disk/by-id/usb-XXXXisk_XunXisk_X00X0X110000000000000001-0:0

■ISOイメージをコピー。

$ sudo dd if=debian-6.0.5-amd64-businesscard.iso of=/dev/sdb2 bs=512
102400+0 records in
102400+0 records out
52428800 bytes (52 MB) copied, 8.01307 s, 6.5 MB/s

■再起動して、grubメニューで「e」コマンドで編集、「b」コマンドで起動。

root (hd1,0)
kernel /boot/vmlinuz root=/dev/sdb1 ro quiet
initrd /boot/initrd.gz

■これで普通のインストーラが起動できます。
 grubのインストールも中途半端なので、普通はやらないですよね。。。