VirtualBox (日本語)
| 概要 |
|---|
| VirtualBox の基本的な使い方について。Arch をホストにして VirtualBox を動かす方法と、VirtualBox 仮想マシンの中でゲストとして Arch を動かす方法の両方を説明します。 |
| ソフトウェア |
| VirtualBox |
| 関連項目 |
| VirtualBox Extras |
| PhpVirtualBox |
| VirtualBox Arch Linux Guest On Physical Drive |
| Installing Arch Linux from VirtualBox |
| Moving an existing install into (or out of) a virtual machine |
VirtualBox は VMware に似た仮想 PC エミュレータです。継続的に開発が行われており、新しい機能が日夜追加されています。例えば、バージョン 2.2 では Linux と Solaris をゲストにした OpenGL 3D アクセラレーションがサポートされました。VirtualBox には仮想マシンを管理するために Qt による GUI インターフェースや、SDL によるコマンドラインツールが用意されています。ゲスト OS によっては guest additions を使って、ファイルやクリップボードの共有・ビデオアクセラレーション・"シームレス"なウィンドウ統合モードなどのゲスト・ホストを統合する機能を使うことができます。
ホストとしてインストール
GPL ライセンス版の VirtualBox のセットは公式リポジトリにある virtualbox パッケージでインストールできます。
Arch Linux カーネル向けにコンパイル済みのモジュールを含んだ virtualbox-host-modules を別途インストールする必要があります。linux-lts カーネルを使っている場合、virtualbox-host-modules-lts パッケージもインストールしてください。カスタムカーネルを使っている場合、下のセクションを読んで下さい。
Qt による、グラフィカルインターフェース (VirtualBox コマンド) を使うには、qt4 パッケージもインストールしてください。シンプルな SDL の GUI (VBoxSDL コマンド) や VBoxHeadless コマンドを使う場合 qt は必要ありません。
ホストでカスタムカーネルを使っている場合
公式の Arch カーネルパッケージをシステムで保持する必要がない限り、Linux-ck などのカスタムカーネルを使っていても VirtualBox は問題なく動作します。pacman から Arch カーネルパッケージを外し続けるには virtualbox を virtualbox-host-dkms (virtualbox カーネルモジュール用のソースが含まれています) と一緒にインストールします。詳しい説明は FS#26721 を見て下さい。
virtualbox-host-dkms をインストールしたら、カスタムカーネルのためのカーネルモジュールを生成するために次を実行してください:
# dkms install vboxhost/<virtualbox-host-dkms version> -k <your custom kernel's version>/<your architecture>
入力するのが億劫な場合は次のコマンドを使って下さい:
# dkms install vboxhost/$(pacman -Q virtualbox|awk {'print $2'}|sed 's/\-.\+//') -k $(uname -rm|sed 's/\ /\//')
それからモジュールをロードします:
# modprobe vboxdrv
dkms.service を有効にすることで起動時に virtualbox モジュールを自動でロード・コンパイルできます:
# systemctl enable dkms.service
カーネルのアップデート毎に自動で virtualbox ホストモジュールをリコンパイルする
AUR にある vboxhost-hook によってこれを行うことができます。vboxhost-hook では、linux-headers パッケージがアップデートされた後に mkinitcpio (日本語) の vboxhost hook を使って'自動リコンパイル'が行われます。動かすために、/etc/mkinitcpio.conf の HOOKS 行に 'vboxhost' を追加して、'linux-headers' とあなたのカスタムカーネルのヘッダを /etc/pacman.conf の SyncFirst 行に追加する必要があります。
このフックは dkms コマンドを使ってあなたのカーネルバージョンにあわせて virtualbox ホストモジュールをアップデートします。
セットアップ
利用するユーザー名を vboxusers グループに追加してください。追加しなくても問題なく動作しますが、共有フォルダなどの任意機能を動かすためには必要です。新しいグループは自動では現在のセッションに適用されません; ユーザーは一度ログインしなおすか newgrp や sudo -u $USER -s などのコマンドで新しい環境を始める必要があります。
# gpasswd -a $USER vboxusers
カーネルモジュールのロード
Linux 上で VirtualBox を動作させるとカーネルモジュールが使われますが、その中には vboxdrv と呼ばれる必須モジュールがあり、仮想マシンを起動する前にロードする必要があります。Arch Linux 起動時に自動でロードすることも、必要なときだけ手動でロードすることもできます。
手動でモジュールをロード:
# modprobe vboxdrv
起動時に VirtualBox ドライバをロードするには、/etc/modules-load.d ディレクトリにロードが必要なモジュールを全て含めた *.conf ファイル (例: virtualbox.conf) を追加してください:
/etc/modules-load.d/virtualbox.conf
vboxdrv
VirtualBox グラフィカルマネージャを起動:
$ VirtualBox
ブリッジネットワークをフル機能させるには net-tools パッケージだけでなく vboxnetadp, vboxnetflt, vboxpci カーネルモジュールもロードしてください。
Guest additions ディスク
virtualbox パッケージは VirtualBox を動かすホスト側 (Arch Linux) に、virtualbox-guest-iso もインストールすることを提案します。これはゲスト OS に guest additions をインストールするために使われるディスクイメージです。これを(動作中の)ゲストで利用するには Devices に行き "Install Guest Additions... Host+D" をクリックしてください。それからゲスト側で guest additions インストールを行います。
live ディスクの起動
'New' ボタンをクリックすることで新しい仮想環境を作ることができます。まず適当な名前をつけ、オペレーティングシステムのタイプとバージョンを選んで下さい。それからベースメモリーサイズを選択します(注意: ほとんどの OS は正しく動作させるのに少なくとも 512MB 必要です)。そして新しいハードディスクイメージを作成します(ハードディスクイメージとは OS のファイルシステムとファイルが含まれるファイルのことです)。
新しいイメージが作成されたら、'Settings' をクリックし、次に CD/DVD-ROM をクリック、'Mount CD/DVD Drive' をチェックして ISO イメージを選びます。
仮想マシンでサービスをセットアップする
仮想マシンで systemd サービスをセットアップする方法については Systemd/Services#VirtualBox_virtual_machines を見て下さい。
高度なセットアップ
高度な設定については VirtualBox Extras を見て下さい。
Arch Linux をゲストにする
VirtualBox の下で Arch をインストールするのは簡単です、pacman を使って additions をインストールしてください (VirtualBox の "Install Guest Additions" や、マウントした ISO イメージを使わないでください)。
Guest Additions をインストール
virtualbox-guest-utils パッケージをインストールします:
# pacman -S virtualbox-guest-utils
手動でモジュールをロードします:
# modprobe -a vboxguest vboxsf vboxvideo
以下の内容を持つ *.conf ファイル (例: virtualbox.conf) を /etc/modules-load.d/ に作成します:
/etc/modules-load.d/virtualbox.conf
vboxguest vboxsf vboxvideo
以下の行を ~/.xinitrc の一番上、exec オプションよりも上に追加してください (ファイルが存在しない場合は作成してください):
~/.xinitrc
/usr/bin/VBoxClient-all
カーネルのアップデート毎に自動で virtualbox ゲストモジュールをリコンパイルする
AUR にある vboxguest-hook によってこれを行うことができます。vboxguest-hook では、linux-headers パッケージがアップデートされた後に mkinitcpio の vboxguest hook を使って'自動リコンパイル'が行われます。動作させるには、/etc/mkinitcpio.conf の HOOKS 行に 'vboxguest' を追加してください。linux-headers パッケージを更新した後は initramfs を手動で再作成する必要があります。
このフックは dkms コマンドを使ってあなたのカーネルバージョンにあわせて virtualbox ゲストモジュールをアップデートします。
共有サービスの起動
上記の通り virtualbox-guest-utils をインストールした後、VBoxClient-all を使ってクリップボード共有、画面リサイズなどのサービスを起動してください。
- GNOME や KDE など、
/etc/xdg/autostart/vboxclient.desktopを実行するものを使っている場合、なにもなさらなくて結構です。 -
.xinitrcを使って実行する場合、.xinitrcで WM を起動する前に次の行を追加してください。
# VBoxClient-all &
USB ウェブカメラ/マイクロフォン を使う
- 仮想マシンを止め、ウェブカメラ/マイクロフォンが使われていないのを確認します。
- メイン VirtualBox ウィンドウを立ち上げ Arch マシンの設定に行き、USB セクションを見ます。
- "Enable USB Controller" を選択します。それから "Enable USB 2.0 (EHCI) Controller" を選択します。
- "Add filter from device" ボタンをクリック ('+' アイコンとケーブル)。
- リストから USB ウェブカメラ/マイクロフォンデバイスを選択する。
- OK をクリックして VM を起動。
Virtualbox の EFI モードで Arch を使う
My experience with this configuration was pretty terrible, but it does work.
UPD. Using efibootmgr has the same effect as using VirtualBox boot menu (see the note below): settings disappear after VM shutdown. First, efibootmgr does *not* work. It will appear to work, but all changes it makes appear to be overwritten on reboot. After performing a standard UEFI/GPT installation, reboot and you should get dumped to the EFI shell. Type exit and you will get a menu. Select the Boot Management Manager, Boot Options, Add Boot Option. Use the file browser to find the grub efi file and select it. Add a label if you want. Afterwards, select Change Boot Order from the menu, use arrow keys to select your Arch option, and + to move it up to the top. GRUB should boot by default now.
Other options are: 1) move your loader to \EFI\boot\bootx64.efi, 2) create \startup.nsh script, which executes desirable loader, like this:
\startup.nsh
HD16a0a1:\EFI\refind\refindx64.efi
Here I'm using consistent mapping name (HD16a0a1). It is probably a good idea, because they do survive configuration changes.
ゲスト側の Arch Linux の共有フォルダ
共有フォルダはホスト側にある VirtualBox によって管理されます。共有フォルダが追加されると、自動でマウントされ読み込み専用になります。
VirtualBox から共有フォルダを作成すると /media/sf_SHAREDFOLDERNAME の中にとフォルダが設置されます。この時、ゲスト側の Arch の中のフォルダを使うには設定が必要になります。ゲスト側の Arch に共有フォルダを作成するには、pacman で Guest Additions パッケージをインストールした後、コマンドラインで以下を実行してください:
# groupadd vboxsf # gpasswd -a $USER vboxsf
望むなら、シンボリックを作って home ディレクトリにアクセスしやすくすることができます。例として、"Dropbox" という名の共有フォルダがホスト側の VirtualBox の中に作成されている場合、/media/sf_Dropbox をゲスト側に自動で作成するには次のようにしてください:
$ ln -s /media/sf_Dropbox/* ~/dropbox
Guest Additions iso が提供している .run スクリプトでも同じことができますが、Arch はこれを使うことを推奨しません、手動で行うべきだからです。このことについての提言はここで見られます: (pastebin: [1]) .
共有フォルダが自動でマウントされない場合、手動でマウントするか次のセクションを読んで下さい。
systemd (日本語) を使うと起動時に問題が起こる時は、/etc/fstab に comment=systemd.automount を加えて下さい。こうすると、スタートアップ時ではなくマウントポイントにアクセスしたときに共有フォルダがマウントされます。さもなければカーネルアップデート後にシステムが使えなくなるかもしれません(guest additions を手動でインストールした場合)。
desktop /media/desktop vboxsf uid=user,gid=group,rw,dmode=700,fmode=600,comment=systemd.automount 0 0
nofail オプションをテストするのにも時間を取ってください。mount.vboxsf はこれを管理できません (2012-08-20)。
desktop /media/desktop vboxsf uid=user,gid=group,rw,dmode=700,fmode=600,nofail 0 0
ゲストの時刻をホストに同期させる
時刻を同期させるには、まずホスト側に virtualbox-guest-utils をインストールする必要があります(前のセクションを見て下さい)。それから次を実行して次のブート時にサービスを有効にします
# systemctl enable vboxservice.service
今すぐサービスを開始するには
# systemctl start vboxservice.service
共有フォルダの自動マウント機能を使うときにもこのデーモンを起動する必要があります。
トラブルシューティング
modprobe Exec フォーマットエラー
あなたのシステムを最新状態にしてください:
pacman -Syu
VBOX_E_INVALID_OBJECT_STATE (0x80BB0007)
これは VM を正常終了しないと発生することがあります。VM をアンロックしてください:
VBoxManage controlvm nArch poweroff
USB サブシステムがホスト側もしくはゲスト側で動かない
時々 usb サブシステムが自動で検知されずホスト側の USB ドライブが表示されなかったりエラーが出ることがあります (例: Could not load the Host USB Proxy service: VERR_NOT_FOUND)。これはユーザーが vboxusers グループになっていても起こります。詳しくは [2] を見て下さい。
~/.bashrc に以下を加え再起動するか新しいインスタンスを開始すれば USB サブシステムが動作します。
VBOX_USB=usbfs
また、あなたのユーザーを storage グループのメンバーに追加してください。
ホストオンリーのネットワークインターフェースを作成できない
Host-Only Network Adapter や Bridged Network Adapter を作るためには、カーネルモジュールの vboxnetadp と vboxnetflt をロードする必要があります。また、net-tools パッケージがインストールされているか確認してください。これらのカーネルモジュールを手動でロードするには:
# modprobe -a vboxnetadp vboxnetflt
起動時に自動でロードするには /etc/modules-load.d/virtualbox.conf にモジュール毎に新しい行を追加してください:
vboxdrv vboxnetadp vboxnetflt
このトピックについて詳しい情報がここにあります。
WinXP: ビット深度を 16 より上げることができない
16-ビット色深度で動作させている場合、アイコンの見た目が毛羽立ったりむらがでるかもしれません。しかし、色深度をもっと高く変えようとすると、システムの解像度が低くなってしまったり、もしくは全く深度が変えられないかもしれません。これを修正するには、regedit を起動し次のキーをゲスト側の Windows XP レジストリに追加します:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services] "ColorDepth"=dword:00000004
それからデスクトップのプロパティウィンドウから色深度を変えてください。何も怒らない場合、強制的に画面を再描写させてください(つまり、Host+F で再描写するか、フルスクリーンにしてください)。
.vdi イメージのマウント
以下の方法では静的なサイズの vdi イメージしか動きません!動的なサイズのイメージは簡単にはマウントできません!まず .vdi イメージの情報が必要です:
$ VBoxManage internalcommands dumphdinfo Arch_64min.vdi |grep offData Header: offBlocks=4096 offData=69632
ここで、offData に 32256 を加算してください。例: 32256 + 69632 = 101888
そして vdi イメージをマウントします:
# mount -t ext4 -o rw,noatime,noexec,loop,offset=101888 Arch_64min.vdi /mnt/
マウント失敗によるスタートアップ時の問題
カーネルをアップグレードした後、systemd (日本語) セットアップで問題が発生したら、システムを起動するときに init=/bin/bash (緊急シェルが動かない場合) を付ける必要があります。
root=/dev/mapper/vg_main-lv_root ro vga=792 resume=/dev/mapper/vg_main-lv_swap init=/bin/bash
それから root-ファイルシステムを書き込み権限付きでマウントします:
# mount / -o remount,rw
#ゲスト側の Arch Linux の共有フォルダ に合わせて /etc/fstab を変更します。そして bash シェルから systemd を exec します:
# exec /bin/systemd
ゲスト側の Arch Linux でコピーアンドペーストが機能しない
virtualbox-guest-additions がバージョン 4.2.0-2 にアップデートされてからホスト OS からゲスト側の Arch Linux へのコピーアンドペーストができなくなりました。VBoxClient-all に root 権限が必要なったためだと思われます。以前のバージョンでは VBoxClient-all & を ~/.xinitrc に追加しておけばコピーアンドペーストが機能していました。~/.xinitrc を sudo VBoxClient-all & にして , NOPASSWD: /usr/bin/VBoxClient-all を sudoers ファイルのあなたのユーザ名のところに追加してください。これでまた動くはずです。sudoers ファイルの行はこのようになるはずです:
# Allow sudo for user 'you' and let him run VBoxClient-all without requiring a password you ALL = PASSWD: ALL, NOPASSWD: /usr/bin/VBoxClient-all
ゲスト OS でシリアルポートを使う
シリアルポートのパーティションを確認してください:
$ /bin/ls -l /dev/ttyS* crw-rw---- 1 root uucp 4, 64 Feb 3 09:12 /dev/ttyS0 crw-rw---- 1 root uucp 4, 65 Feb 3 09:12 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Feb 3 09:12 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Feb 3 09:12 /dev/ttyS3
それからユーザーを uucp グループに追加して:
# gpasswd -a $USER uucp
ログインしなおして下さい。
レジュームが失敗する
レジュームを失敗させるバグが報告されています: https://www.virtualbox.org/ticket/11289。回避方法はシンプルです: VM を終了するときにはいつも Host+q かメニューを使って下さい。
System Images in Btrfs
In 2010 there were reports that OS disk images would not start if they were attached via a virtual SATA device. It was reportedly fixed, and seemed to be. But as of around March 2013, that particular bug report has been repoened. This can be fixed by enabling the use of the host I/O cache, which is disabled by default with virtual SATA interfaces.
vagrant up の問題
最新バージョンの Virtualbox(4.2.14-1) では vagrant up コマンドは以下のように失敗します:
Command: ["import", "/Users/username/.vagrant.d/boxes/precise32/virtualbox/box.ovf"] Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Interpreting /Users/username/.vagrant.d/boxes/precise32/virtualbox/box.ovf... OK. 0%... Progress object failure: NS_ERROR_CALL_FAILED
修正がリリースに入るまで、回避対策を取るか VirtualBox をダウングレードする必要があります。
Workaround by creating manifests for each box in ~/.vagrant.d/boxes/BoxName/virtualbox:
openssl sha1 *.vmdk *.ovf > box.mf
You can downgrade Virtualbox. If you have the old package file inside your cache just downgrade it via:
sudo pacman -U /var/cache/pacman/pkg/virtualbox-4.2.12-3-x86_64.pkg.tar.xz
This error seems to appear on all platforms: http://www.marshut.com/pzisi/progress-object-failure-ns-error-call-failed-when-running-vagrant-up-in-getting-started-guide.html#qhihz
It's unclean for the moment. It could be regression inside Virtualbox or a issue inside Vagrant. When you delete the cache you can downgrade via ArchLinux downgrader (I didn't test it correctly, but I assume this works, else check the wiki page for downgrading: https://wiki.archlinux.org/index.php/Downgrading_Packages)
For more Information, check the issue page on github Clean install on OS X 10.8.4 w/ latest VirtualBox not working
According to the Vagrant creator on Twitter, this is a VirtualBox bug. On 2013-06-25, he said that they fixed the bug in SVN, and he's waiting on a release. Also, I can confirm that this is a multi-platform issue, 4.2.14 was broken for me on Win7.
This issue has been solved inside the virtualbox release virtualbox-4.2.16-1