36 | | Disk /opt/Vine42.dd.img: 0 MB, 0 bytes |
37 | | 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors |
38 | | Units = セクタ数 of 1 * 512 = 512 bytes |
39 | | Disk identifier: 0x000a0970 |
40 | | |
41 | | デバイス Boot Start End Blocks Id System |
42 | | /opt/Vine42.dd.img1 * 63 208844 104391 83 Linux |
43 | | /opt/Vine42.dd.img2 208845 15727634 7759395 83 Linux |
44 | | /opt/Vine42.dd.img3 15727635 16771859 522112+ 82 Linux swap / Solaris |
45 | | 領域 3 は異なった物理/論理終点になっています: |
46 | | 物理=(1023, 254, 63) 論理=(1043, 254, 63) |
47 | | }}} |
48 | | Startセクタ * 512バイト目がパーティションの始まりになるので、offset を指定してマウントする。 |
49 | | {{{ |
50 | | # mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42 |
51 | | # ls /opt/Vine42/ |
52 | | System.map@ initrd-2.6.16-0vl76.27.img vmlinuz@ |
53 | | System.map-2.6.16-0vl76.27 initrd.img@ vmlinuz-2.6.16-0vl76.27 |
54 | | System.map.old@ initrd.old.img@ vmlinuz.old@ |
55 | | config-2.6.16-0vl76.27 kernel.h |
56 | | grub/ lost+found/ |
57 | | }}} |
58 | | こっちは /boot パーティションですね。 |
59 | | 一旦アンマウントして、/ に対応する 2番目のセクタをマウント。 |
60 | | /boot もついでにマウントする。必要は無いけど。 |
61 | | {{{ |
62 | | # umount /opt/Vine42 |
63 | | # umount /opt/Vine42 |
64 | | # mount -o loop,offset=`expr 208845 \* 512` /opt/Vine42.dd.img /opt/Vine42 |
65 | | # mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42/boot |
66 | | # df |
67 | | ファイルシステム 1K-ブロック 使用 空き 使用% マウント位置 |
68 | | /dev/sda3 38456340 26437676 10065160 73% / |
69 | | none 2021060 0 2021060 0% /dev/shm |
70 | | /dev/loop0 7637400 1928112 5321320 27% /opt/Vine42 |
71 | | /dev/loop1 101086 8908 86959 10% /opt/Vine42/boot |
72 | | }}} |
73 | | これで Vine Linux 4.2 のディスクを Vine Linux 5.2 からアクセスできるようになりました。 |
74 | | ちなみに、dd せずにそのまま mount しても可。 |
75 | | この場合は、e2label であらかじめ "/" や "/boot" を消しておきましょう。 |
76 | | {{{ |
77 | | # e2label /dev/hda1 "" |
78 | | # e2label /dev/hda2 "" |
79 | | }}} |
80 | | みたいな。 |
81 | | そうしないと、古いVine Linux 4.2のディスクを繋いだときに、そっちが / としてマウントされてしまうことがあります。 |
82 | | |
83 | | |
84 | | マウントはできましたが、このままではライブラリの依存関係を満たせないので Vine Linux 4.2 のバイナリはほとんどの場合で実行できません。 |
85 | | {{{ |
86 | | $ /opt/Vine42/usr/bin/gnome-calculator |
87 | | /opt/Vine42/usr/bin/gnome-calculator: error while loading shared libraries: libgnomeui-2.so.0: cannot open shared object file: No such file or directory |
88 | | $ ldd /opt/Vine42/usr/bin/gnome-calculator |
89 | | linux-gate.so.1 => (0xffffe000) |
90 | | libgnomeui-2.so.0 => not found |
91 | | libbonoboui-2.so.0 => not found |
92 | | <snip.> |
93 | | }}} |
94 | | そこで、chroot |
95 | | {{{ |
96 | | # chroot /opt/Vine42 |
97 | | }}} |
98 | | これで、/opt/Vine42 が / としてアクセスできるようになる。 |
99 | | ためしに、ldd してみるとライブラリの依存関係が満たされていることが確認できる |
100 | | {{{ |
101 | | # ldd /usr/bin/gnome-calculator |
102 | | linux-gate.so.1 => (0xffffe000) |
103 | | libgnomeui-2.so.0 => /usr/lib/libgnomeui-2.so.0 (0xf7660000) |
104 | | libbonoboui-2.so.0 => /usr/lib/libbonoboui-2.so.0 (0xf7600000) |
105 | | <snip.> |
106 | | }}} |
107 | | |
108 | | あとは、なんちゃってVMとして sshログインして使えるような設定をいくつか。 |
109 | | |
110 | | 古い mtab が残っているとややこしいので、一旦空っぽにしておく。 |
111 | | {{{ |
112 | | # echo > /etc/mtab |
113 | | }}} |
114 | | |
115 | | === MAKEDEVとか === |
116 | | デバイスファイルがほとんど無いので、必要そうなものをいくつか作る |
117 | | {{{ |
118 | | # ls /dev/ |
119 | | console null |
120 | | # MAKEDEV /dev/null /dev/random /dev/urandom /dev/ptmx |
121 | | # mkdir /dev/pts |
122 | | # mount /dev/pts |
123 | | # mount -n -t proc /proc /proc |
124 | | # mount -n -t sysfs /sys /sys |
125 | | # mkdir /dev/shm |
126 | | # mount /dev/shm |
127 | | }}} |
128 | | |
129 | | === sshd を動かしてログイン === |
130 | | あとはsshdを動かせば、ログインできるようになる。 |
131 | | ただ、22番ポートはホストの Vine Linux 5.2 環境で使われているハズなので、ポート番号を適当に変えた上で sshd を起動。 |
132 | | {{{ |
133 | | # vim /etc/ssh/sshd_config |
134 | | # diff /etc/ssh/sshd_config.orig /etc/ssh/sshd_config |
135 | | 13c13 |
136 | | < #Port 22 |
137 | | --- |
138 | | > Port 20022 |
139 | | # /etc/init.d/sshd start | nkf -uw |
140 | | sshdを起動中: [ OK ] |
141 | | }}} |
142 | | ちなみに、Vine Linux 4.2 は ja_JP.eucJP を使っているので文字化けすると思います。 |
143 | | まぁその辺は適当に対応してください。 |
144 | | |
145 | | あと、dbus も動いていないと何かと不便が多いので、 |
146 | | {{{ |
147 | | # /etc/init.d/messagebus start |
148 | | }}} |
149 | | しとくと、幸せになれるかもれません。 |
150 | | |
151 | | chroot したターミナルはもう閉じ (CTRL+d) ていいです。 |
152 | | {{{ |
153 | | $ ssh -p 20022 vine@localhost |
154 | | vine@localhost's password: |
155 | | Last login: Sun Dec 12 00:21:43 2010 from localhost.localdomain |
156 | | $ gnome-calculator & |
157 | | }}} |
158 | | 今度は、ちゃんと電卓が起動できたと思います。 |
159 | | きっと他の商用アプリケーションも動かせるでしょう。 |
160 | | |
161 | | === VMWare Player と chroot 環境でベンチマーク比較 === |
162 | | * I/O で差がつくはずだから、ディスクに負荷がかかるベンチマークを探す |
163 | | |
164 | | == 事例 2:Debianベースの ARM 開発環境を Vine Linux 5.2 で使う == |
165 | | === ダウンロード === |
166 | | * [http://armadillo.atmark-techno.com/downloads ATDEのVMWare イメージ] |
167 | | {{{ |
168 | | $ wget http://armadillo.atmark-techno.com/files/downloads/atde/atde3-20100309.zip |
169 | | $ sudo unzip atde3-20100309.zip -d /opt/ |
170 | | Archive: atde3-20100309.zip |
171 | | creating: /opt/atde3-20100309/ |
172 | | inflating: /opt/atde3-20100309/atde3-s005.vmdk |
173 | | inflating: /opt/atde3-20100309/atde3-s007.vmdk |
174 | | inflating: /opt/atde3-20100309/atde3.vmx |
175 | | inflating: /opt/atde3-20100309/atde3-s009.vmdk |
176 | | inflating: /opt/atde3-20100309/atde3.vmxf |
177 | | inflating: /opt/atde3-20100309/atde3.nvram |
178 | | extracting: /opt/atde3-20100309/atde3.vmsd |
179 | | inflating: /opt/atde3-20100309/atde3-s002.vmdk |
180 | | inflating: /opt/atde3-20100309/atde3.vmdk |
181 | | inflating: /opt/atde3-20100309/atde3-s001.vmdk |
182 | | inflating: /opt/atde3-20100309/atde3-s003.vmdk |
183 | | inflating: /opt/atde3-20100309/atde3-s004.vmdk |
184 | | inflating: /opt/atde3-20100309/atde3-s006.vmdk |
185 | | inflating: /opt/atde3-20100309/atde3-s008.vmdk |
186 | | }}} |
187 | | |
188 | | === 分割されたvmdkファイルをディスクのイメージに変換 === |
189 | | vmdk をループバックマウントできるようにできるように、ディスクのファイル形式をqemu-imgで変換します。 |
190 | | {{{ |
191 | | $ sudo apt-get install qemu |
192 | | $ cd /opt/atde3-20100309 |
193 | | # $ sudo qemu-img convert atde3-s00[1-9].vmdk -O bin atde3-20100309.img |
194 | | $ qemu-img convert atde3-s00[1-9].vmdk -O raw /tmp/atde3-20100309.img |
195 | | (VMDK) image open: flags=0x2 filename=atde3-s001.vmdk |
196 | | (VMDK) image open: flags=0x2 filename=atde3-s002.vmdk |
197 | | (VMDK) image open: flags=0x2 filename=atde3-s003.vmdk |
198 | | (VMDK) image open: flags=0x2 filename=atde3-s004.vmdk |
199 | | (VMDK) image open: flags=0x2 filename=atde3-s005.vmdk |
200 | | (VMDK) image open: flags=0x2 filename=atde3-s006.vmdk |
201 | | (VMDK) image open: flags=0x2 filename=atde3-s007.vmdk |
202 | | (VMDK) image open: flags=0x2 filename=atde3-s008.vmdk |
203 | | (VMDK) image open: flags=0x2 filename=atde3-s009.vmdk |
204 | | $ fdisk -lu /tmp/atde3-20100309.img |
205 | | 設定する必要があります シリンダ数. |
206 | | あなたは特別機能メニューからこれを行なうことができます |
207 | | |
208 | | Disk /tmp/atde3-20100309.img: 0 MB, 0 bytes |
209 | | 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors |
210 | | Units = セクタ数 of 1 * 512 = 512 bytes |
211 | | Disk identifier: 0x0008bb4c |
212 | | |
213 | | デバイス Boot Start End Blocks Id System |
214 | | /tmp/atde3-20100309.img1 * 63 498014 248976 83 Linux |
215 | | /tmp/atde3-20100309.img2 498015 33543719 16522852+ 8e Linux LVM |
216 | | 領域 2 は異なった物理/論理終点になっています: |
217 | | 物理=(1023, 254, 63) 論理=(2087, 254, 63) |
218 | | }}} |
219 | | |
220 | | === LVMの構成を確認 === |
221 | | === kpartx === |
222 | | ディスクは参照できる形になりました。 |
223 | | でも面倒なことにLVMが使われているので、mount offset オプションではマウントできません。(たぶん) |
224 | | そこで、kpartx、LVM のマウント |
225 | | {{{ |
226 | | $ sudo /sbin/kpartx -av /opt/atde3-20100309.img |
227 | | add map loop2p1 : 0 497952 linear /dev/loop2 63 |
228 | | add map loop2p2 : 0 33045705 linear /dev/loop2 498015 |
229 | | $ ls /dev/mapper/ |
230 | | control loop2p1 loop2p2 |
231 | | $ sudo /sbin/pvscan |
232 | | PV /dev/dm-1 VG atde3 lvm2 [15.75 GB / 0 free] |
233 | | Total: 1 [15.75 GB] / in use: 1 [15.75 GB] / in no VG: 0 [0 ] |
234 | | $ sudo /sbin/lvscan |
235 | | inactive '/dev/atde3/root' [14.70 GB] inherit |
236 | | inactive '/dev/atde3/swap_1' [1.06 GB] inherit |
237 | | $ sudo /sbin/vgchange -ay |
238 | | 2 logical volume(s) in volume group "atde3" now active |
239 | | $ sudo /sbin/lvscan |
240 | | ACTIVE '/dev/atde3/root' [14.70 GB] inherit |
241 | | ACTIVE '/dev/atde3/swap_1' [1.06 GB] inherit |
242 | | $ sudo mount -o loop /dev/atde3/root /opt/atde3-20100309 |
243 | | $ sudo mount -o loop /dev/mapper/loop2p1 /opt/atde3-20100309/boot |
244 | | }}} |
245 | | 後の手順は事例1 と同じ。 |
246 | | {{{ |
247 | | $ sudo chroot /opt/atde3-20100309 |
248 | | }}} |
249 | | のはずだけど、まだやっていないのでぼちぼち追記します。 |
250 | | |
251 | | {{{ |
252 | | }}} |
253 | | === 試しにAndroidをビルド === |
254 | | まだ。。。 |
| 65 | == Follow up == |
| 66 | ここでは最小限の手間でrpmパッケージ作成を体験できる方法を紹介しました。 |
| 67 | 読者の環境によっては同じようにならないこともあると思います。その場合にはML等で質問して下さい。 |
| 68 | 続編として様々な問題に対処したパッケージ作成を紹介するつもりです。 |