TinyVisor のインストール方法

このページではTinyVisorをインストールし、VMを1個作成し、OSを起動する手順を説明します。 インストール作業はLinux (x86_64)上で行います。

TinyVisorはBIOS環境とUEFI環境のどちらにもインストールすることができます。

流れは次の通りです。

  1. バイナリをビルドする
  2. インストールする

2のインストールする方法は、以下の3つがあります。

  1. USBメモリにインストールする (UEFI)
  2. USBメモリにインストールする (BIOS)
  3. Linuxのファイルシステムにインストールする (BIOS)


1. バイナリをビルドする

1. ビルドに必要なパッケージのインストール

次のパッケージが必要ですのでビルドマシンにインストールしてください(他にもあるかもしれません)。

  • gcc - The GNU C compiler
  • iasl - Intel ASL compiler/decompiler (または、acpica-tools)
  • make - An utility for Directing compilation.

UEFI環境の場合は、次のパッケージもインストールしてください。

  • mingw-w64 - Development environment targetting 32- and 64-bit Windows (または、mingw64-gcc)

2. ソースツリーを取得する

ソースツリーのアーカイブを次のページからダウンロードします。

ダウンロードしたら、ソースツリーを展開し、生成されたディレクトリへ移動します。

tar zxvf tinyvisor-*.tar.gz
cd tinyvisor*

なお、1.7以降のソースツリーはMercurialで管理しています。 Mercurialのリポジトリから直接ソースコードを取得するには、次のコマンドを実行します。

mkdir tinyvisor
cd tinyvisor
hg clone http://hg.osdn.jp/view/tinyvisor/tinyvisor-vmm vmm
hg clone http://hg.osdn.jp/view/tinyvisor/tinyvisor-bios bios

1.6以前のソースツリーはSubversionで管理しています。 Subversionのリポジトリから直接ソースコードを取得するには、次のコマンドを実行します。

svn checkout http://svn.osdn.jp/svnroot/tinyvisor/trunk tinyvisor
cd tinyvisor

3. ビルドする

1.7以降は、次のコマンドでビルドします。

make -C vmm -j 8
make -C vmm/boot/loader
make -C vmm/boot/uefi-loader
LC_ALL=C make -C bios -j 8

1.6以前は、次のコマンドでビルドします。

make


2-A. USBメモリにインストールする (UEFI)

USBメモリが /dev/sdf の場合の手順を記載します。 異なる場合は、読み替えてください。

初めてインストールする場合

1. 既存のパーティションを削除する

sudo /sbin/sgdisk -Z /dev/sdf
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

2. GPTでcode=ef00(EFI System)のパーティションを作成する

sudo /sbin/gdisk /dev/sdf
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-492510, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-492510, default = 492510) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI System'

Command (? for help): p
Disk /dev/sdf: 492544 sectors, 240.5 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): 44D93EB8-59E3-4222-B8CF-089083DC5D67
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 492510
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          492510   239.5 MiB   EF00  EFI System

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdf.
The operation has completed successfully.

3. 作ったパーティションをFAT32でフォーマットする

sudo /sbin/mkfs.vfat -F32 /dev/sdf1 
mkfs.vfat 3.0.13 (30 Jun 2012)

4. バイナリをFAT32のパーティションへインストールする

1.7以降の場合は、次のコマンドを実行します。

sudo vmm/boot/uefi-loader/install.sh -f /dev/sdf1

1.6以前の場合は、次のコマンドを実行します。

sudo ./install_to_usb.sh -e -f /dev/sdf1

5. VMMを起動する

USBメモリを挿入して、PCの電源を投入します。

BIOSメニューにおいて、OSがインストールされているHDDの優先順位がUSBメモリの優先順位の方が低く設定されている場合は、USBメモリの優先順位を高くして、再度PCを再起動してください。

USBメモリからVMMがロードされ起動を開始すると、メッセージが画面とCOM1に出力されます。 VMMの起動が完了すると、VM0が実行され始め、Host のUEFIに戻ります。 USBメモリの次の優先順位のHDDからOSがロードされて起動します。

2回目以降にインストールする場合

1. バイナリをFAT32のパーティションへインストールする

1.7以降の場合は、次のコマンドを実行します。

sudo vmm/boot/uefi-loader/install.sh /dev/sdf1

1.6以前の場合は、次のコマンドを実行します。

sudo ./install_to_usb.sh -e /dev/sdf1
2014年 10月  7日 火曜日 23:19:40 JST

2. VMMを起動する

USBメモリを挿入して、PCの電源を投入します。

BIOSメニューにおいて、OSがインストールされているHDDの優先順位がUSBメモリの優先順位の方が低く設定されている場合は、USBメモリの優先順位を高くして、再度PCを再起動してください。

USBメモリからVMMがロードされ起動を開始すると、メッセージが画面とCOM1に出力されます。 VMMの起動が完了すると、VM0が実行され始め、Host のUEFIに戻ります。 USBメモリの次の優先順位のHDDからOSがロードされて起動します。


2-B. USBメモリにインストールする (BIOS)

USBメモリが /dev/sdf の場合の手順を記載します。 異なる場合は、読み替えてください。

初めてインストールする場合

1. 既存のパーティションを削除する

sudo /sbin/sgdisk -Z /dev/sdf
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

2. USBメモリにパーティションを作成する

USBメモリ全体を使用して一つのパーティションを作成します。

sudo /sbin/fdisk /dev/sdf

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x6a01f56c.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):  

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-1965055, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-1965055, default 1965055): 

Created a new partition 1 of type 'Linux' and of size 958.5 MiB.

Command (m for help): p
Disk /dev/sdf: 959.5 MiB, 1006108672 bytes, 1965056 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6a01f56c

Device     Boot Start     End Sectors   Size Id Type
/dev/sdf1        2048 1965055 1963008 958.5M 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

3. バイナリをUSBメモリにインストールする

1.7以降の場合は、次のコマンドを実行します。

sudo vmm/boot/loader/install.sh -f -c 'vm0.boot_int18' /dev/sdf 0 1 vmm/boot/loader/bootloader vmm/vmm.elf

1.6以前の場合は、次のコマンドを実行します。

sudo ./install_to_usb.sh -f -c 'vm0.boot_int18' /dev/sdf

なお、「vm0.boot_int18」は、VMMが格納されているUSBメモリの次の起動順位のHDDからVM0のOSの起動を行うことを指示するパラメータです。このパラメータを指定しないと、再度VMMの起動が試みられてパニックします。

4. VMMを起動する

USBメモリを挿入して、PCの電源を投入します。

BIOSメニューにおいて、OSがインストールされているHDDの優先順位がUSBメモリの優先順位の方が低く設定されている場合は、USBメモリの優先順位を高くして、再度PCを再起動してください。

USBメモリからVMMがロードされ起動を開始すると、メッセージが画面とCOM1に出力されます。 VMMの起動が完了すると、VM0が実行され始め、Host BIOSのINT18 BIOS CALLが呼び出されます。 USBメモリの次の優先順位のHDDからOSがロードされて起動します。

BIOSによっては、OSが見つからないというエラーメッセージが出力され、OSの起動に失敗することがあります。その場合は、「vm0.boot_int18」の代わりに「vm0.boot_drive=81」を指定してUSBメモリにインストールしてみてください。このパラメータはBIOSのドライブ番号81のHDDからOSを起動することを指示するパラメータです。

2回目以降にインストールする場合

1. バイナリをUSBメモリにインストールする

1.7以降の場合は、次のコマンドを実行します。

sudo vmm/boot/loader/install.sh -c 'vm0.boot_int18' /dev/sdf 0 1 vmm/boot/loader/bootloader vmm/vmm.elf

1.6以前の場合は、次のコマンドを実行します。

sudo ./install_to_usb.sh -c 'vm0.boot_int18' /dev/sdf

なお、「vm0.boot_int18」は、VMMが格納されているUSBメモリの次の起動順位のHDDからVM0のOSの起動を行うことを指示するパラメータです。このパラメータを指定しないと、再度VMMの起動が試みられてパニックします。

2 VMMを起動する

USBメモリを挿入して、PCの電源を投入します。

BIOSメニューにおいて、OSがインストールされているHDDの優先順位がUSBメモリの優先順位の方が低く設定されている場合は、USBメモリの優先順位を高くして、再度PCを再起動してください。

USBメモリからVMMがロードされ起動を開始すると、メッセージが画面とCOM1に出力されます。 VMMの起動が完了すると、VM0が実行され始め、Host BIOSのINT18 BIOS CALLが呼び出されます。 USBメモリの次の優先順位のHDDからOSがロードされて起動します。

BIOSによっては、OSが見つからないというエラーメッセージが出力され、OSの起動に失敗することがあります。その場合は、「vm0.boot_int18」の代わりに「vm0.boot_drive=81」を指定してUSBメモリにインストールしてみてください。このパラメータはBIOSのドライブ番号81のHDDからOSを起動することを指示するパラメータです。


2-C. Linuxのファイルシステムにインストールする (BIOS)

1. バイナリを/bootにコピーする

バイナリを/bootにコピーします。以下はビルドマシンとターゲットマシンが同一の場合の例です。ビルドマシンとターゲットマシンが異なる場合はftpやscpなどでターゲットマシンの適当なディレクトリへコピーしたのち、/bootディレクトリに移動してください。

sudo cp vmm/vmm.elf /boot
sudo bios/out/bios.bin /boot

/etc/grub.d/40_customに次のエントリを追加します。このエントリは、VMを一つのみ作成します。

menuentry 'VMM (VM0)' --class vmm {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        echo    'Loading VMM ...'
        multiboot   /boot/vmm.elf
}

Debianの場合は、update-grubコマンドを実行します。 Fedoraの場合は、grub2-mkconfig -o /boot/grub2/grub.cfgコマンドを実行します。

2. VMMを起動する

PCを再起動します。

GRUBメニューが表示されたら、「VMM (VM0)」を選択します。

VMMの起動が開始し、メッセージが画面とCOM1に出力されます。 VMMの起動が完了すると、VM0が実行され始め、再度GRUBメニューが表示されます。 このときは、VMMではなくOSを選択し、OSを起動させます。


複数のOSを起動する手順は、TinyVisorの使い方を参照してください。