# VirtualBox (日本語)

概要 help replacing me
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/\ /\//')

Note: 次のようなエラーが表示される場合 `Your kernel headers for kernel <your custom kernel's version> cannot be found at/usr/lib/modules/<your custom kernel's version>/build or /usr/lib/modules/<your custom kernel's version>/source` おそらく linux-headers がインストールされていません。

それからモジュールをロードします:

    # 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 行に追加する必要があります。

Warning: SyncFirst オプションは pacman 4.1 から利用できなくなりました。次のコマンドを使って

    # pacman -Sy linux-headers && pacman -Su

手動で linux-headers を最初に更新するようにしてください。この説明を参照してください。

このフックは dkms コマンドを使ってあなたのカーネルバージョンにあわせて virtualbox ホストモジュールをアップデートします。

Note: この機能を使う場合は、Linux（やその他のカーネル）パッケージのインストールプロセスを注意して見ることが重要です。vboxhost hook が何か警告を表示することがあるかもしれません。

## セットアップ

利用するユーザー名を 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

Note: vboxdrv ロード時に 'no such file or directory' エラーが出る場合、カーネルモジュールデータベースをアップデートする必要があります。次を実行してください: `depmod -a`。

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

Note: 新しく `~/.xinitrc` ファイルを作成する場合、ウィンドウマネージャかデスクトップ環境も含めなくてはなりません。

#### カーネルのアップデート毎に自動で virtualbox ゲストモジュールをリコンパイルする

AUR にある vboxguest-hook によってこれを行うことができます。vboxguest-hook では、linux-headers パッケージがアップデートされた後に mkinitcpio の vboxguest hook を使って'自動リコンパイル'が行われます。動作させるには、`/etc/mkinitcpio.conf` の HOOKS 行に 'vboxguest' を追加してください。linux-headers パッケージを更新した後は initramfs を手動で再作成する必要があります。

このフックは `dkms` コマンドを使ってあなたのカーネルバージョンにあわせて virtualbox ゲストモジュールをアップデートします。

Note: この機能を使う場合は、linux (やその他のカーネル) パッケージのインストールプロセスを注意して見ることが重要です。vboxguest hook が何か警告を表示することがあるかもしれません。

### 共有サービスの起動

上記の通り virtualbox-guest-utils をインストールした後、`VBoxClient-all` を使ってクリップボード共有、画面リサイズなどのサービスを起動してください。

- GNOME や　KDE など、`/etc/xdg/autostart/vboxclient.desktop` を実行するものを使っている場合、なにもなさらなくて結構です。
- `.xinitrc` を使って実行する場合、`.xinitrc` で WM を起動する前に次の行を追加してください。

    # VBoxClient-all &

### USB ウェブカメラ/マイクロフォン を使う

Note: 以下の作業をする前に VirtualBox 拡張パックをインストールする必要があります。詳しくは VirtualBox_Extras#Extension_pack を見て下さい。

1. 仮想マシンを止め、ウェブカメラ/マイクロフォンが使われていないのを確認します。
2. メイン VirtualBox ウィンドウを立ち上げ Arch マシンの設定に行き、USB セクションを見ます。
3. "Enable USB Controller" を選択します。それから "Enable USB 2.0 (EHCI) Controller" を選択します。
4. "Add filter from device" ボタンをクリック ('+' アイコンとケーブル)。
5. リストから USB ウェブカメラ/マイクロフォンデバイスを選択する。
6. 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.

Note: Another useful way to get back to the EFI menu after autobooting is working is to press the `C` key inside GRUB and type `exit`. Obviously, this will only work with `grub-efi`, not `grub-bios`.

Regenerating the `grub.cfg` file may also be required to fix broken UUIDs. Check with the `lsblk -f` command that they match.

Yet another useful way to get to VirtualBox boot menu is pressing `F12` right after starting virtual machine. It comes in handy when using rEFInd + EFISTUB, for example.

## ゲスト側の Arch Linux の共有フォルダ

共有フォルダはホスト側にある VirtualBox によって管理されます。共有フォルダが追加されると、自動でマウントされ読み込み専用になります。 VirtualBox から共有フォルダを作成すると `/media/sf_SHAREDFOLDERNAME` の中にとフォルダが設置されます。この時、ゲスト側の Arch の中のフォルダを使うには設定が必要になります。ゲスト側の Arch に共有フォルダを作成するには、pacman で Guest Additions パッケージをインストールした後、コマンドラインで以下を実行してください:

    # groupadd vboxsf
    # gpasswd -a $USER vboxsf

Note: 自動マウントを機能させるには、vboxservice サービスを有効にする必要があります。次のセクションの説明を見て下さい。

望むなら、シンボリックを作って 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

Note: These used to be added to the `MODULES` array in `/etc/rc.conf`. This is now deprecated.

このトピックについて詳しい情報がここにあります。

### 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

Note: sudoers を編集する時は `visudo` を使って下さい。保存するときに構文エラーをチェックします。

### ゲスト 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

## 外部リンク

- VirtualBox User Manual

Categories:

- Emulators (日本語)
- Virtualization (日本語)