wiki:Developers/kenta

Version 5 (modified by kenta, 13 years ago) (diff)

--

Todo

  • vlmag (due 2010/12/24)

vlmag 下書きメモ

最初に概要

紹介するのは

  • ディスクのイメージをループバックマウントする方法
    1. dd でダンプしたイメージを kpartx
    2. VMWare の VMDK ファイルを qemu-img で変換したあと kpartx
  • chroot でなんちゃって Virtual Machine

参考資料

ぐぐったら、同じことやっている人がいた。  http://d.hatena.ne.jp/adsaria/20080724

事例 1:古い Vine Linux 4.2 の環境を Vine Linux 5.2 にお引っ越し

dd したディスクイメージをループバックマウント

# dd if=/dev/hdX of=/opt/Vine42.dd.img

とやって、ディスクをファイルにダンプ。

でも、このまま

# mkdir /opt/Vine42
# mount -o loop /opt/Vine42.dd.img /opt/Vine42
mount: ファイルシステムタイプを指定する必要があります

とやってもマウントはできません。 まず、パーティションの情報を確認。

# fdisk -lu /opt/Vine42.dd.img 
設定する必要があります シリンダ数.
あなたは特別機能メニューからこれを行なうことができます

Disk /opt/Vine42.dd.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = セクタ数 of 1 * 512 = 512 bytes
Disk identifier: 0x000a0970

       デバイス Boot      Start         End      Blocks   Id  System
/opt/Vine42.dd.img1   *          63      208844      104391   83  Linux
/opt/Vine42.dd.img2          208845    15727634     7759395   83  Linux
/opt/Vine42.dd.img3        15727635    16771859      522112+  82  Linux swap / Solaris
領域 3 は異なった物理/論理終点になっています:
     物理=(1023, 254, 63) 論理=(1043, 254, 63)

Startセクタ * 512バイト目がパーティションの始まりになるので、offset を指定してマウントする。

# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42
# ls /opt/Vine42/
System.map@                 initrd-2.6.16-0vl76.27.img  vmlinuz@
System.map-2.6.16-0vl76.27  initrd.img@                 vmlinuz-2.6.16-0vl76.27
System.map.old@             initrd.old.img@             vmlinuz.old@
config-2.6.16-0vl76.27      kernel.h
grub/                       lost+found/

こっちは /boot パーティションですね。 一旦アンマウントして、/ に対応する 2番目のセクタをマウント。 /boot もついでにマウントする。必要は無いけど。

# umount /opt/Vine42
# umount /opt/Vine42
# mount -o loop,offset=`expr 208845 \* 512` /opt/Vine42.dd.img /opt/Vine42
# mount -o loop,offset=`expr 63 \* 512` /opt/Vine42.dd.img /opt/Vine42/boot 
# df
ファイルシステム     1K-ブロック  使用        空き 使用% マウント位置
/dev/sda3             38456340  26437676  10065160  73% /
none                   2021060         0   2021060   0% /dev/shm
/dev/loop0             7637400   1928112   5321320  27% /opt/Vine42
/dev/loop1              101086      8908     86959  10% /opt/Vine42/boot

これで Vine Linux 4.2 のディスクを Vine Linux 5.2 からアクセスできるようになりました。 でも、ライブラリの依存関係を満たせないので Vine Linux 4.2 のバイナリはほとんどの場合で実行できません。

$ /opt/Vine42/usr/bin/gnome-calculator 
/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
$ ldd /opt/Vine42/usr/bin/gnome-calculator
        linux-gate.so.1 =>  (0xffffe000)
        libgnomeui-2.so.0 => not found
        libbonoboui-2.so.0 => not found
        <snip.>

そこで、chroot

# chroot /opt/Vine42

これで、/opt/Vine42 が / としてアクセスできるようになる。 ためしに、ldd してみるとライブラリの依存関係が満たされていることが確認できる

# ldd /usr/bin/gnome-calculator
        linux-gate.so.1 =>  (0xffffe000)
        libgnomeui-2.so.0 => /usr/lib/libgnomeui-2.so.0 (0xf7660000)
        libbonoboui-2.so.0 => /usr/lib/libbonoboui-2.so.0 (0xf7600000)
        <snip.>

あとは、なんちゃってVMとして sshログインして使えるような設定をいくつか。

古い mtab が残っているとややこしいので、一旦空っぽにしておく。

# echo > /etc/mtab 

MAKEDEVとか

デバイスファイルがほとんど無いので、必要そうなものをいくつか作る

# ls /dev/
console  null
# MAKEDEV /dev/null /dev/random /dev/urandom /dev/ptmx
# mkdir /dev/pts 
# mount /dev/pts
# mount -n -t proc /proc /proc
# mount -n -t sysfs /sys /sys
# mkdir /dev/shm
# mount /dev/shm 

sshd を動かしてログイン

あとはsshdを動かせば、ログインできるようになる。 ただ、22番ポートはホストの Vine Linux 5.2 環境で使われているハズなので、ポート番号を適当に変えた上で sshd を起動。

# vim /etc/ssh/sshd_config
# diff /etc/ssh/sshd_config.orig /etc/ssh/sshd_config
13c13
< #Port 22
---
> Port 20022
# /etc/init.d/sshd start | nkf -uw
sshdを起動中:                                              [  OK  ]

ちなみに、Vine Linux 4.2 は ja_JP.eucJP を使っているので文字化けすると思います。 まぁその辺は適当に対応してください。

あと、dbus も動いていないと何かと不便が多いので、

# /etc/init.d/messagebus start 

しとくと、幸せになれるかもれません。

chroot したターミナルはもう閉じ (CTRL+d) ていいです。

$ ssh -p 20022 vine@localhost 
vine@localhost's password: 
Last login: Sun Dec 12 00:21:43 2010 from localhost.localdomain
$ gnome-calculator &

今度は、ちゃんと電卓が起動できたと思います。 きっと他の商用アプリケーションも動かせるでしょう。

ちなみに、dd せずにそのまま mount しても可。

VMWare Player と chroot 環境でベンチマーク比較

  • I/O で差がつくはずだから、ディスクに負荷がかかるベンチマークを探す

事例 2:Debianベースの ARM 開発環境を Vine Linux 5.2 で使う

ダウンロード

分割されたvmdkファイルをディスクのイメージに変換

LVMの構成を確認

kpartx

試しにAndroidをビルド

まだ。。。