それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

超便利な仮想マシンソフト:VirtualBox をインストールしてコマンドラインから使う

以前から書き散らかしたエントリをまとめた

ubuntu 10.04 にVirutalBoxを導入

VirtualBoxは買収&買収でややこしくなってるが,公式からDL出来るDebian系ならAPT-Lineで簡単に導入できる.標準パッケージより最新版がオススメ

sudo mkdir /etc/apt/sources.list.d
sudo sh -c "echo 'deb http://download.virtualbox.org/virtualbox/debian maverick contrib non-free' \
> /etc/apt/sources.list.d/virtualBox.list "
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
#インストール
sudo apt-get update
sudo apt-get install dkms
sudo apt-get install virtualbox-4.0

VirtualBoxの起動

リモートサーバーのVirtualBoxを起動するために,VNCクライアントや、NXを入れておくのもめんどくさい話.
VirtualBoxを起動するためにXでログインするのもめんどくさい。virtualbox をリモートで扱うには.仮想マシンもコンソールで起動してまえばいい。

仮想マシンをバックグラウンドで起動するには

headlessモードはディスプレイ使わずに仮想マシンを起動する。

sudo VBoxManage startvm 'win2008webserver' --type headless

WindowsのRDPをエミュレートしてくれるのがVirtualBoxの魅力

VirtualBoxを使うべき特筆するべき機能。仮想マシンのRDPを使えば良いんだが、仮想マシンの起動前からRDPでつなげる。Windows仮想マシン起動前の画面をRDPで接続出来るのが嬉しい

VirtualBoxがリモートデスクトップのサーバーをやってくれる(但し重い.)vrdp はディスプレイをRDPに出力する。これはWindowsから接続するのに嬉しい機能。RDPで接続すると,仮想マシンのコンソール(Windowsだとセーフーモードを選ぶもの)が見られて嬉しいです.

vrdp モードはディスプレイがポート3389にRDPになる

sudo VBoxManage startvm 'win2008webserver' --type vrdp


vrdp モードだと非WindowsOSもmstsc.exeで接続出来て嬉しいですね.*1

ポートの設定はGUIでやっておくといい

設定はこんな感じ

Null 認証無し
external ホストOSのアカウントで認証
guest ゲストのユーザアカウントで認証、あまり使わない

最初はNullを選んでおき、OSのインストールを済ませ,起動が確認できてからvrdp をオフにする。インストール&起動確認後WindowsやLinuxの通常RDP/VNCに切替える。
インストール終わってしまうと,VRDPは緊急時以外に使わない。だけど緊急時に役に立つ。だから一度使っておくとイイと思う.

仮想マシンSSH経由で作成して、起動するなんてことも

面倒なので詳しくは割愛

VBoxManage createvm    マシン名
VBoxManage modifyvm    マシン名 --name 新しい名前   
VBoxManage modifyvm    マシン名 --memory 256
VBoxManage modifyvm    マシン名 --vram   64

編集はXML触る方が早い。もちろん、シェルから直接触れる.これもいいよね

一度作った仮想マシンをコピーして作るには設定XMLをコピーして編集するのが手っ取り早い
でもってコピー&編集後は登録する.

仮想マシンの登録

VBoxManage registervm  設定xmlファイル名

NAT動作時に仮想マシンポートを公開する

NAT動作時は仮想マシンポートをホスト側に出すと便利
以下の例はホストマシンのポート80を仮想マシンのポート80に転送する例

VBoxManage setextradata "win2008webserver" "VBoxInternal/Devices/e1000/0/LUN#0/Config/iis/Protocol" TCP
VBoxManage setextradata "win2008webserver" "VBoxInternal/Devices/e1000/0/LUN#0/Config/iis/GuestPort" 80
VBoxManage setextradata "win2008webserver" "VBoxInternal/Devices/e1000/0/LUN#0/Config/iis/HostPort" 80
直接ファイルを編集する

もしくは直接ファイルを触ることでも同じ事

vim /home/gscc/.VirtualBox/Machines/win2008webserver/win2008webserver.xml

ファイル

<ExtraDataItem name="VBoxInternal/Devices/e1000/1/LUN#0/Config/iis/Protocol" value="TCP"/>
  <ExtraDataItem name="VBoxInternal/Devices/e1000/1/LUN#0/Config/iis/GuestPort" value="80"/>
  <ExtraDataItem name="VBoxInternal/Devices/e1000/1/LUN#0/Config/iis/HostPort" value="80"/>
</ExtraData>

どのHDDを使っているのか調べる

仮想マシンが使っているHDDの情報を見る.

takuya@debian01:~$ sudo VBoxManage showvminfo 'win2008webserver'| grep vdi
IDE コントローラ (0, 0): /root/.VirtualBox/HardDisks/win2008webserver.vdi (UUID: 53ff43bb-4d1b-4c3a-a861-XXXXXXXX)

仮想ハードディスクの情報を見る

takuya@debian01:~$ sudo VBoxManage showhdinfo /root/.VirtualBox/HardDisks/win2008webserver.vdi
Sun VirtualBox Command Line Management Interface Version 3.1.6
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

UUID:                 53ff43bb-4d1b-4c3a-a861-XXXXXXXX
Accessible:           yes
Description:
Logical size:         20480 MBytes
Current size on disk: 20388 MBytes
Type:                 normal (base)
Storage format:       VDI
In use by VMs:        win2008webserver (UUID: 26e4a3d2-d628-4d89-9ab0-XXXXXXXX)
Location:             /root/.VirtualBox/HardDisks/win2008webserver.vdi

まとめ

ほとんどの場合,シェルからSSH経由で制御が簡単でとても嬉しいです.VmWareでも出来るけれど.VirtualBoxのほうが手軽で良い感じです.

*1:但し重いけど