source: projects/web/trunk/vlmagazine/20110303.dat @ 2828

Revision 2828, 26.4 KB checked in by kenta, 13 years ago (diff)

misc. bug fix.

Line 
1<date>
22011,03,03
3
4<author>
5kenta
6
7<title>
8ループバックマウントとchrootで作るなんちゃって仮想マシン
9
10<description>
111台のPCで複数のOSを使い分けるソリューションとして、KVM や VMWare, VirtualBoxのような仮想マシンは今や常識となっています。
12しかし、Linuxの上で別のLinux環境実現するのであれば方法は他にもあります。
13ここでは、chrootを使ってVine Linux 5.2の上に別のLinux環境を実現する方法を初めとした、次の方法を実例を通して紹介していきます。
14<ul>
15<li>ディスクのイメージをループバックマウントする方法
16   <ul>
17   <li>dd でダンプしたディスクのイメージをマウントする</li>
18   <li>VMWare の VMDK ファイル形式ディスクをマウントする</li>
19   </ul></li>
20<li>chrootを使ったなんちゃって仮想マシン環境を構築する方法</li>
21</ul>
22
23<h2 id="benchmark">chrootとVMWare Playerのベンチマーク比較</h2>
24<p>chrootの中のプロセスはホストのkernel上で直接実行されます。そのため、VMWare Playerを初めとする仮想マシン環境と較べると次のようなメリットがあります。</p>
25<ul>
26<li>パフォーマンス・ペナルティがない</li>
27<li>VMWareの上限である8CPU以上のSMP環境が使える</li>
28<li>物理メモリの全てを利用できる</li>
29</ul>
30<p>ここでは、試しにVine Linux 5.2 (x86 32bit) をインストールしたPC上にVMWare Playerをインストールして、VMWare Player上のVine Linux 4.2 (i386) と、chrootの上に構築した Vine Linux 4.2 (i386) の環境での性能を比較してみました。</p>
31
32<h3>VMWare Player と chroot 環境でベンチマーク比較:BeeCrypt Benchmark</h3>
33
34<p>まずベンチマークプログラムにBeeCrypt Benchmarkを使って、次のそれぞれの環境で性能を比較してみました。
35<dl>
36<dt>VMWare
37<dd>Vine Linux 5.2にインストールしたVMWare Player 3.1.3上のVine Linux 4.2環境で実行
38<dt>chroot
39<dd>Vine Linux 5.2の上でchrootを使って構築したVine Linux 4.2環境で実行
40<dt>5.2 native
41<dd>Vine Linux 5.2の上でそのまま実行
42</dl>
43</p>
44<img src="http://chart.apis.google.com/chart?chxl=0:|Blowfish+128+-+ECB+decryption|Blowfish+128+-+ECB+encryption|AES+128+-+ECB+decryption|AES+128+-+ECB+encryption|SHA-256|2:|KB%2Fs+%28Longer+is+Faster%29&chxp=2,50&chxr=1,0,120000&chxs=2,676767,11.5,0,_,676767&chxt=y,x,x&chbh=10,3&chs=600x280&cht=bhg&chco=A2C180,3D7930,FF9900&chds=0,120000,0,120000,0,120000&chd=t:101040,90002,76328,95126,97087|107520,95110,78728,99872,100536|108759,96267,79084,101660,101955&chdl=VMWare|chroot|5.2+native&chtt=BeeCrypt+Benchmark" width="600" height="280" alt="BeeCrypt Benchmark" />
45<p>総じてchroot上でのベンチマーク結果はVMWare Playerよりも高速で、Vine Linux 5.2の上での実行結果と遜色がないパフォーマンスを示しています。BeeCryptのベンチマークは演算が中心となっており、ディスクやメモリアクセスの性能差がでにくい傾向にあるのですが、それでも約 5%程度の差が出ました。</p>
46
47<h3>VMWare Player と chroot 環境でベンチマーク比較:カーネルビルド</h3>
48<p>先ほどと同じくVMWare Player上の Vine Linux 4.2環境と、Vine Linux 5.2のchroot上に構築したVine Linux 4.2環境で、それぞれカーネルビルドに掛かった時間を比較した結果が次のグラフです。
49<!-- rpmbuild --rebuild --target i686 kernel-2.6.16-76.55vl4.src.rpm -->
50</p>
51<p>積み重ねグラフはsysとuser時間を、折れ線グラフはreal時間を表しており、4コアのマシン上でビルドしていたためにsysとuser時間の合計よりもreal時間が大幅に短くなるケースが見られます。なお、それぞれ 6回実行しています。特にreal時間にはばらつきが大きいのでどちらが高速かを一概には言えない面もありますが、全体的にchroot環境の方がsys時間が短く、高速であることが見て取れます。</p>
52<img src="https://chart.googleapis.com/chart?cht=bhs&chm=D,FF3300,2,0,5,1&chbh=15,5&chs=450x320&chd=t2:494,474,461,402,508,548,0,176,173,173,176,185,178|1288,1237,1239,1186,1281,1321,0,1248,1221,1227,1247,1267,1249|1651,950,925,674,1661,1883,_,800,742,745,789,1317,792&chco=4D89F9,C6D9FD,FF3300&chds=0,1920&chxt=y,x,x&chxl=0:|chroot+6|chroot+5|chroot+4|chroot+3|chroot+2|chroot+1||VM+6|VM+5|VM+4|VM+3|VM+2|VM+1|1:|0|8+min|16+min|24+min|32+min.|2:|seconds+%28Shorter+is+Faster%29&chxp=2,50&chdl=sys|usr|real&chtt=Kernel+Build" width="450" height="320" alt="Kernel Build" />
53<p>このように、chroot上で構築したなんちゃって仮想マシンはパフォーマンスの面では一般的な仮想マシンより優位性があるとわかると思います。</p>
54
55<h2 id="V42onV52">事例 1:古い Vine Linux 4.2 の環境を Vine Linux 5.2 にお引っ越し</h2>
56<p>Vine Linux 5.2をお使いの方が多いと思います。
57しかし、どうしても以前使っていたVine Linux 4.2の環境で使っていた特定のアプリケーションがVine Linux 5.2で使えないからなかなか移行できないという方もおられるかと思います。
58また、メインではVine Linux 5.2を使っているけど、一部の商用アプリケーションを使用するために別にRed Had ELやSLESのマシンを用意している方もおられるかもしれません。
59ここでは、仮想マシンを使用することなくVine Linux 5.2の上で既存のVine Linux 4.2の実行環境を構築する方法を紹介します。</p>
60<p>
61次の手順で進めていきます。
62<ol>
63<li>古いマシンのディスクをVine Linux 5.2上にマウントしてアクセスできるようにする</li>
64<li>chrootコマンドを使って、古いマシンのディスクを"/"としてアクセスできるようにする</li>
65<li>一般ユーザーがsshでリモート接続できる設定</li>
66</ol>
67なお、途中で詳細な説明を省いているところがあります。不明な点がありましたらご指摘をいただければ可能な範囲で補足説明します。
68</p>
69
70
71<h3>dd したディスクイメージをループバックマウント</h3>
72
73<p>まず、旧マシンのディスクをVine Linux 5.2の環境からアクセスできるようにしておきます。
74ここでは、古いマシンのディスクが /dev/hdX に繋がっているものと想定しています。</p>
75<pre class="screen diffUnifiedStyle">
76# dd if=/dev/hdX of=/opt/Vine42.dd.img
77</pre>
78<p>とddコマンドを使って、ディスクのイメージを丸ごとファイルにダンプし、この以前のディスクの環境をVine Linux 5.2の上で使えるようにします。
79なお、ここではいくつかのコマンドを説明する目的もあるため、若干無駄な操作も入っています。
80「初めからルートパーティションだけddすればいいじゃん」などといった野暮なつっこみは厳に御容赦願います。。。</p>
81
82
83<p>でも、このままループバックマウントのオプション"-o loop"を使ってディスクのイメージをマウントすることはできません。</p>
84<pre class="screen diffUnifiedStyle">
85# mkdir /opt/Vine42
86# mount -o loop /opt/Vine42.dd.img /opt/Vine42
87mount: ファイルシステムタイプを指定する必要があります
88</pre>
89
90<p>ここでは、パーティションの情報を確認し、オフセットを指定しながらディスクのイメージをループバックマウントします。</p>
91<pre class="screen diffUnifiedStyle">
92# fdisk -lu /opt/Vine42.dd.img
93設定する必要があります シリンダ数.
94あなたは特別機能メニューからこれを行なうことができます
95
96Disk /opt/Vine42.dd.img: 0 MB, 0 bytes
97255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
98Units = セクタ数 of 1 * 512 = 512 bytes
99Disk identifier: 0x000a0970
100
101       デバイス Boot      Start         End      Blocks   Id  System
102/opt/Vine42.dd.img1   *          63      208844      104391   83  Linux
103/opt/Vine42.dd.img2          208845    15727634     7759395   83  Linux
104/opt/Vine42.dd.img3        15727635    16771859      522112+  82  Linux swap / Solaris
105領域 3 は異なった物理/論理終点になっています:
106     物理=(1023, 254, 63) 論理=(1043, 254, 63)
107</pre>
108<p>Startセクタ * 512バイト目がパーティションの始まりになるので、1番目のパーティションは 63*512 = 32,256バイト目からのオフセットを指定することでマウントできます。</p>
109
110<pre class="screen diffUnifiedStyle">
111# mkdir /opt/Vine42
112# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42
113$ ls /opt/Vine42/
114System.map@                 initrd-2.6.16-0vl76.27.img  vmlinuz@
115System.map-2.6.16-0vl76.27  initrd.img@                 vmlinuz-2.6.16-0vl76.27
116System.map.old@             initrd.old.img@             vmlinuz.old@
117config-2.6.16-0vl76.27      kernel.h
118grub/                       lost+found/
119</pre>
120<p>こっちは /boot パーティションですね。
121一旦アンマウントして、/ に対応する 2番目のセクタをマウント。
122ついでに、必要はありませんが/bootもマウントします。</p>
123
124<pre class="screen diffUnifiedStyle">
125# umount /opt/Vine42
126# umount /opt/Vine42
127# mount -o loop,offset=`expr 208845 \* 512` /opt/Vine42.dd.img /opt/Vine42
128# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42/boot
129$ df
130ファイルシステム     1K-ブロック  使用        空き 使用% マウント位置
131/dev/sda3             38456340  26437676  10065160  73% /
132none                   2021060         0   2021060   0% /dev/shm
133/dev/loop0             7637400   1928112   5321320  27% /opt/Vine42
134/dev/loop1              101086      8908     86959  10% /opt/Vine42/boot
135</pre>
136<p>これで Vine Linux 4.2 のディスクを Vine Linux 5.2 からアクセスできるようになりました。</p>
137
138<p>ちなみに、ここでは従来環境のディスクをdd でディスクイメージのファイルに落としていましたが、ディスクをそのまま mount しても同じことは可能です。
139この場合は、古いディスクを繋ぐ前にあらかじめ e2label コマンドで "/" や "/boot" といったラベルを消しておきましょう。</p>
140<pre class="screen diffUnifiedStyle">
141# e2label /dev/hda1 ""
142# e2label /dev/hda2 ""
143</pre>
144<p>そうしなければ、古いVine Linux 4.2のディスクを繋いだときに、そっちが "/" となって起動することがあります。
145grubがVine Linux 5.2のカーネルをロードしたのに、"/"としてVine Linux 4.2のディスクが参照され、大量のワーニングを吐きながらVine Linux 4.2が起動する姿を見るとやるせない気分になります。</p>
146
147
148<h3>chrootを使って / のパスを変更</h3>
149
150<p>マウントはできましたが、このままではライブラリの依存関係を満たせないので Vine Linux 4.2 のバイナリはほとんどの場合で実行できません。</p>
151
152<pre class="screen diffUnifiedStyle">
153$ /opt/Vine42/usr/bin/gnome-calculator
154/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
155$ ldd /opt/Vine42/usr/bin/gnome-calculator
156        linux-gate.so.1 =>  (0xffffe000)
157        libgnomeui-2.so.0 => not found
158        libbonoboui-2.so.0 => not found
159        <snip>
160</pre>
161<p>これは、Vine Linux 4.2のバイナリを実行するのに必要なライブラリ群が/opt/Vine42/usr/lib 以下に配置されている一方、ライブラリは /usr/lib 以下が参照されるため必要なライブラリをリンクできないのが原因です。そこで chroot を使って、/opt/Vine42/usr/lib が /usr/lib として参照できるようパスを変更します。</p>
162
163<pre class="screen diffUnifiedStyle">
164# chroot /opt/Vine42
165</pre>
166<p>これで、/opt/Vine42 が / としてアクセスできるようになります。
167試しに、ldd してみるとライブラリの依存関係が満たされていることが確認できるでしょう。</p>
168
169<pre class="screen diffUnifiedStyle">
170# ldd /usr/bin/gnome-calculator
171        linux-gate.so.1 =>  (0xffffe000)
172        libgnomeui-2.so.0 => /usr/lib/libgnomeui-2.so.0 (0xf7660000)
173        libbonoboui-2.so.0 => /usr/lib/libbonoboui-2.so.0 (0xf7600000)
174        <snip>
175</pre>
176
177
178<h3>なんちゃって仮想マシンとして使うための初期設定</h3>
179<p>chrootを使って、Vine Linux 4.2のバイナリが実行できるようになりました。しかし、chrootを実行するにはroot権が必要なほか、何かと不便が多いのであたかも仮想マシンにsshログインするかのように使えるよういくつかの設定をします。</p>
180<p>まず、古い mtab が残っていると問題になることがあるので、一旦空っぽにしておきます。</p>
181
182<pre class="screen diffUnifiedStyle">
183# echo > /etc/mtab
184</pre>
185
186<p>次に、デバイスファイルがほとんど無いので、必要そうなものをいくつか作ります。</p>
187<pre class="screen diffUnifiedStyle">
188# ls /dev/
189console  null
190# MAKEDEV /dev/null /dev/random /dev/urandom /dev/ptmx
191# mkdir /dev/pts
192# mount /dev/pts
193# mount -n -t proc /proc /proc
194# mount -n -t sysfs /sys /sys
195# mkdir /dev/shm
196# mount /dev/shm
197</pre>
198
199<p>先の 3行の手続きは一度だけ必要な初期設定です。後の4回のmountコマンドは、ホストPCを再起動する度に必要となる設定です。</p>
200
201<h3>sshd を動かしてログイン</h3>
202<p>あとはsshdを動かせば、ログインできるようになります。</p>
203<p>ただし、22番ポートはホストの Vine Linux 5.2 環境で使われているハズですので、ポート番号を適当に変えた上で sshd を起動します。</p>
204
205<pre class="screen diffUnifiedStyle">
206# vim /etc/ssh/sshd_config
207# diff /etc/ssh/sshd_config.orig /etc/ssh/sshd_config
20813c13
209< #Port 22
210---
211> Port 20022
212# /etc/init.d/sshd start | nkf -uw
213sshdを起動中:                                              [  OK  ]
214</pre>
215<p>ちなみに、Vine Linux 4.2 は Vine Linux 5.2とはデフォルトのロケールが異なります。
216(5.2はja_JP.UTF-8、4.2はja_JP.eucJP)
217そのために文字化けすることがあると思います。それぞれ適当に対応してください。</p>
218
219<p>このほか、dbus も動いていないと何かと不便が多いようですので、dbusも起動しておきます。</p>
220<pre class="screen diffUnifiedStyle">
221# /etc/init.d/messagebus start
222</pre>
223<p>これで準備は完了です。chroot したターミナルはもう CTRL+d で閉じて構いません。</p>
224
225<p>それではホストのVine Linuxから chroot上のVine Linux 4.2に一般ユーザーとしてSSHログインしてみましょう。この際、sshのポート番号を変えているので -p オプションで明示的にポート番号を指定することを忘れないで下さい。</p>
226<pre class="screen diffUnifiedStyle">
227$ ssh -p 20022 vine@localhost
228vine@localhost's password:
229Last login: Sun Dec 12 00:21:43 2010 from localhost.localdomain
230$ gnome-calculator &
231</pre>
232
233<p>今度は、ちゃんと電卓が起動できたと思います。きっと他の商用アプリケーションも動かせるでしょう。</p>
234<p>なお、/etc/resolv.confが空っぽだったり正しくない値が書かれている場合に、DNSによる名前解決が出来ないことがあります。Host環境の設定をそのまま cp するので良いでしょう。</p>
235<pre class="screen diffUnifiedStyle">
236$ sudo cp -a /etc/resolv.conf /opt/Vine42/etc/resolv.conf
237</pre>
238
239
240<h2 id="ATDEonV52">事例 2:Debianベースの ARM 開発環境を Vine Linux 5.2 で使う</h2>
241<p>先の事例では、既存のHDDにインストールしたVine Linux 4.2を Vine Linux 5.2上のchrootで使う事例を紹介しましたが、既存の環境がVMWare上にあった場合でも同様のことが可能です。</p>
242<p>ここでは、VMWareのディスクイメージをループバックマウントして、先と同じくchrootのなんちゃって仮想マシンに仕立て上げる方法を紹介します。</p>
243
244<h3>VMWareのディスクイメージを入手</h3>
245<p>ちょっとAndroidをGingerbreadに更新したいなぁなんて思うことは誰でもあると思います。(いや、ないとは思いますが。。)
246そんなときに、クロス開発環境から作り始めるといろんなこだわりもあったりしてそれだけで半日遊んでしまいます。で、僕は今日いったい何をやっていたんだろう?などと後悔するわけです。閑話休題。</p>
247<p>お手軽にARMのクロス開発環境がほしいと思ったときに便利なのが、株式会社アットマークテクノから公開されているATDEです。
248VMWareのイメージをダウンロードしてきてそのまま使えますし、お手持ちのdebian の環境にインストールしても使えます。
249でも、VMWare Playerは諸般の事情で使えないとか、やっぱりVineをメインで使いたいと思ったときに ATDEの環境をchrootの上で使えると便利です。
250ここでは、ATDEのVMWareディスクイメージを例題としてVine Linux 5.2にマウントしてのchrootで使ってみます。</p>
251<p>まず初めに<a href="http://armadillo.atmark-techno.com/atde">ATDEのサイト</a>から VMWare イメージ (atde3-20100309.zip [696.69 MB]) をダウンロードし、zipアーカイブを展開します。</p>
252
253<pre class="screen diffUnifiedStyle">
254$ wget http://armadillo.atmark-techno.com/files/downloads/atde/atde3-20100309.zip
255$ sudo unzip atde3-20100309.zip -d /tmp/
256Archive:  atde3-20100309.zip
257   creating: /tmp/atde3-20100309/
258  inflating: /tmp/atde3-20100309/atde3-s005.vmdk
259  inflating: /tmp/atde3-20100309/atde3-s007.vmdk
260  inflating: /tmp/atde3-20100309/atde3.vmx
261  inflating: /tmp/atde3-20100309/atde3-s009.vmdk
262  inflating: /tmp/atde3-20100309/atde3.vmxf
263  inflating: /tmp/atde3-20100309/atde3.nvram
264 extracting: /tmp/atde3-20100309/atde3.vmsd
265  inflating: /tmp/atde3-20100309/atde3-s002.vmdk
266  inflating: /tmp/atde3-20100309/atde3.vmdk
267  inflating: /tmp/atde3-20100309/atde3-s001.vmdk
268  inflating: /tmp/atde3-20100309/atde3-s003.vmdk
269  inflating: /tmp/atde3-20100309/atde3-s004.vmdk
270  inflating: /tmp/atde3-20100309/atde3-s006.vmdk
271  inflating: /tmp/atde3-20100309/atde3-s008.vmdk
272</pre>
273
274<h3>分割されたvmdkファイルをディスクのイメージに変換</h3>
275<p>vmdk をループバックマウントできるようにできるように、ディスクのファイル形式をqemu-imgでコマンドで変換します。
276もしqemu-imgがインストールされていない場合にはapt-getインストールします。</p>
277<pre class="screen diffUnifiedStyle">
278$ sudo apt-get install qemu
279$ cd /tmp/atde3-20100309
280$ sudo qemu-img convert atde3-s00[1-9].vmdk -O bin /opt/atde3-20100309.img
281(VMDK) image open: flags=0x2 filename=atde3-s001.vmdk
282(VMDK) image open: flags=0x2 filename=atde3-s002.vmdk
283(VMDK) image open: flags=0x2 filename=atde3-s003.vmdk
284(VMDK) image open: flags=0x2 filename=atde3-s004.vmdk
285(VMDK) image open: flags=0x2 filename=atde3-s005.vmdk
286(VMDK) image open: flags=0x2 filename=atde3-s006.vmdk
287(VMDK) image open: flags=0x2 filename=atde3-s007.vmdk
288(VMDK) image open: flags=0x2 filename=atde3-s008.vmdk
289(VMDK) image open: flags=0x2 filename=atde3-s009.vmdk
290$ fdisk -lu /opt/atde3-20100309.img
291設定する必要があります シリンダ数.
292あなたは特別機能メニューからこれを行なうことができます
293
294Disk /opt/atde3-20100309.img: 0 MB, 0 bytes
295255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
296Units = セクタ数 of 1 * 512 = 512 bytes
297Disk identifier: 0x0008bb4c
298
299            デバイス Boot      Start         End      Blocks   Id  System
300/opt/atde3-20100309.img1   *          63      498014      248976   83  Linux
301/opt/atde3-20100309.img2          498015    33543719    16522852+  8e  Linux LVM
302領域 2 は異なった物理/論理終点になっています:
303     物理=(1023, 254, 63) 論理=(2087, 254, 63)
304</pre>
305
306<h3>LVMが使われているディスクイメージをループバックマウント</h3>
307<p>ディスクは参照できる形になりました。</p>
308<p>でも面倒なことにLVMが使われているので、mount offset オプションを使ってマウントできません。(たぶん)</p>
309<p>そこでまず、kpartxを使って各パーティションのデバイスマップを作ります。</p>
310
311<pre class="screen diffUnifiedStyle">
312$ sudo /sbin/kpartx -av /opt/atde3-20100309.img
313add map loop2p1 : 0 497952 linear /dev/loop2 63
314add map loop2p2 : 0 33045705 linear /dev/loop2 498015
315$ ls /dev/mapper/
316control  loop2p1  loop2p2
317</pre>
318
319<p>これでディスクイメージの各物理パーティションに対応したデバイスマップができました。fdiskで見えていたパーティションはそれぞれ、/dev/mapper/loop2p1 /dev/mapper/loop2p2 として参照できるようになっています。</p>
320<p>次にLVM のマウントです。各コマンドについては適宜manなどで調べてください。詳細は割愛します。</p>
321
322<pre class="screen diffUnifiedStyle">
323$ sudo /sbin/pvscan
324  PV /dev/dm-1   VG atde3   lvm2 [15.75 GB / 0    free]
325  Total: 1 [15.75 GB] / in use: 1 [15.75 GB] / in no VG: 0 [0   ]
326$ sudo /sbin/lvscan
327  inactive          '/dev/atde3/root' [14.70 GB] inherit
328  inactive          '/dev/atde3/swap_1' [1.06 GB] inherit
329$ sudo /sbin/vgchange -ay
330  2 logical volume(s) in volume group "atde3" now active
331$ sudo /sbin/lvscan
332  ACTIVE            '/dev/atde3/root' [14.70 GB] inherit
333  ACTIVE            '/dev/atde3/swap_1' [1.06 GB] inherit
334</pre>
335
336<p>LVMのパーティションに対応するデバイスファイルができましたので、あとは普通にマウントできます。</p>
337<pre class="screen diffUnifiedStyle">
338$ sudo mkdir /opt/atde3-20100309
339$ sudo mount -o loop /dev/atde3/root /opt/atde3-20100309
340$ sudo mount -o loop /dev/mapper/loop0p1 /opt/atde3-20100309/boot
341</pre>
342
343<h3>マウント後の初期設定</h3>
344<p>後の手順は事例1 と同様に、sshdを動かしててリモートログインできるように設定します。</p>
345<p>後で使うので /etc/resolv.conf を ATDE側にコピーした上でchrootします。</p>
346
347<pre class="screen diffUnifiedStyle">
348$ sudo cp -a /etc/resolv.conf /opt/atde3-20100309/etc/
349$ sudo chroot /opt/atde3-20100309
350</pre>
351
352<p>デバイスファイルはだいたい揃っているので、MAKDEV と mkdir は不要です。</p>
353<pre class="screen diffUnifiedStyle">
354# echo > /etc/mtab
355# mount /dev/pts
356# mount -n -t proc /proc /proc
357# mount -n -t sysfs /sys /sys
358# mount /dev/shm
359</pre>
360
361<p>sshdがインストールされていないのを追加すると、あとは事例1 と同様にsshログインできるようになります。</p>
362<pre class="screen diffUnifiedStyle">
363# apt-get install openssh-server
364# vim /etc/ssh/sshd_config
365# /etc/init.d/ssh start
366# exit
367$ ssh -p 20022 atmark@localhost
368atmark@localhost's password: atmark
369    (初期パスワードはatmark)
370$ whoami
371atmark
372</pre>
373
374<h3>試しにAndroid kernelをビルド</h3>
375<p><a href="http://armadillo.atmark-techno.com/armadillo-500-fx">Armadillo-500FX</a>用のビルド方法をまとめられている<a href="http://blog.sola-dolphin-1.net/archives/3166656.html">solaさんのblog</a> に沿ってATDEのクロスコンパイラを使ってkernelをビルドしてみました。</p>
376
377<pre class="screen diffUnifiedStyle">
378$ mkdir ~/bin
379$ curl http://android.git.kernel.org/repo > ~/bin/repo
380$ chmod +x ~/bin/repo
381$ export PATH=/home/atmark/bin:$PATH
382$ mkdir ~/work
383$ cd ~/work
384$ git clone git://github.com/sola-dolphin1/OHA-Android-2.3_r1.0.git
385Initialized empty Git repository in /home/atmark/work/OHA-Android-2.3_r1.0/.git/
386remote: Counting objects: 191730, done.
387remote: Compressing objects: 100% (133820/133820), done.
388remote: Total 191730 (delta 84118), reused 158374 (delta 50901)
389Receiving objects: 100% (191730/191730), 1019.48 MiB | 2956 KiB/s, done.
390Resolving deltas: 100% (84118/84118), done.
391Checking out files: 100% (249342/249342), done.
392$ export ANDROID=/home/atmark/work/OHA-Android-2.3_r1.0
393$ cd $ANDROID/kernel/armadillo500fx/
394$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- armadillo500fx_dev_android_defconfig
395  HOSTCC  scripts/basic/fixdep
396  HOSTCC  scripts/basic/docproc
397  HOSTCC  scripts/kconfig/conf.o
398  HOSTCC  scripts/kconfig/kxgettext.o
399  SHIPPED scripts/kconfig/zconf.tab.c
400  SHIPPED scripts/kconfig/lex.zconf.c
401  SHIPPED scripts/kconfig/zconf.hash.c
402  HOSTCC  scripts/kconfig/zconf.tab.o
403  HOSTLD  scripts/kconfig/conf
404#
405# configuration written to .config
406#
407$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -j4
408scripts/kconfig/conf -s arch/arm/Kconfig
409  CHK     include/linux/version.h
410(中略)
411  AS      .tmp_kallsyms2.o
412  LD      vmlinux
413  SYSMAP  System.map
414  SYSMAP  .tmp_System.map
415  OBJCOPY arch/arm/boot/Image
416  Kernel: arch/arm/boot/Image is ready
417  AS      arch/arm/boot/compressed/head.o
418  GZIP    arch/arm/boot/compressed/piggy.gz
419  CC      arch/arm/boot/compressed/misc.o
420  Building modules, stage 2.
421  MODPOST 1 modules
422  CC      drivers/scsi/scsi_wait_scan.mod.o
423  LD [M]  drivers/scsi/scsi_wait_scan.ko
424  AS      arch/arm/boot/compressed/piggy.o
425  LD      arch/arm/boot/compressed/vmlinux
426  OBJCOPY arch/arm/boot/zImage
427  Kernel: arch/arm/boot/zImage is ready
428</pre>
429<p>このように、ARM用のLinux Kernelをビルド出来る環境が簡単に実現できました。</p>
430<p>ここではDebianベースのATDEを例に取りましたが、他のLinuxでも基本的にここで紹介した方法でchroot上で使えるようにできると思います。VMWareのディスクイメージは他にも様々なところで公開されていますので、いろいろ試してみて下さい。</p>
431
432<h2 id="conclusion">おわりに</h2>
433<p>ここでは、既存のHDDイメージやVMWareのディスクイメージをループバックマウントして、仮想マシンのように使う事例を紹介しました。</p>
434<p>chrootは使い方次第で様々な活用が可能です。今後もchrootを使ってVine Linuxのより幅広い活用事例を紹介していきます。読者の皆様から「こういった内容を詳しく知りたい」や「こんな問題があるけどよい解決方法は?」などのご要望、ご質問があれば前向きにテーマとして取り上げたいと思います。皆様のご意見、ご感想をお待ちしております。</p>
Note: See TracBrowser for help on using the repository browser.