VirtualBox/Arch Linux をゲストにする
関連記事
目次
仮想マシンの中に Arch Linux をインストール
仮想マシンの仮想ドライブを使って Arch のインストールメディアを起動します。そして、ビギナーズガイドやインストールガイドに書かれている方法に従って Arch のインストールを完了してください。グラフィックドライバーのインストールはしません: 次のステップで VirtualBox のグラフィックドライバーをインストールします。
EFI モードでインストール
VirtualBox の中に EFI モードで Arch Linux をインストールしたい場合、仮想マシンの設定で、左側のパネルの System アイテムを選んでから右側のパネルの Motherboard を選択して Enable EFI (special OSes only) のチェックを入れて下さい。Arch Linux のインストールメディアを起動すると Arch Linux の標準の systemd-boot メニューが素早く表示されます:
Arch Linux archiso x86_64 UEFI USB UEFI Shell x86_64 v1 UEFI Shell x86_64 v2 EFI Default Loader
最初のアイテムを選択してカーネルをロードした後、メディアは1分30秒ほど止まった後、通常通りにカーネルの起動に進みます。絶望しないで待機して下さい。
システムとブートローダーをインストールしたら、VirtualBox はまず ESP から /EFI/BOOT/BOOTX64.EFI
を実行します。最初のオプションが失敗した場合、VirtualBox は次に EFI のシェルスクリプト startup.nsh
を ESP のルートから試行します。つまり、システムを起動する方法として以下の選択肢があります:
- 毎回 EFI シェルから手動でブートローダーを起動する。
- ブートローダーをデフォルトの
/EFI/BOOT/BOOTX64.EFI
パスに移動する。 - ESP のルートに
startup.nsh
スクリプトを作成してブートローダーアプリケーションのパスを記述する。例:\EFI\grub\grubx64.efi
。
GRUB や Gummiboot を使うなら、デフォルトの EFI Hard Drive エントリが完璧に動作します。起動時に F2
キーを押すことで使える、VirtualBox Boot Manager を使用しないで下さい: 起動時に手動で追加した、もしくは efibootmgr による EFI エントリは再起動しても残りますが VM をシャットダウンすると消えます。
UEFI Virtualbox installation boot problems も参照。
Guest Additions をインストール
VirtualBox の Guest Additions にはゲストオペレーティングシステムを最適化するドライバーやアプリケーションが含まれています。画像解像度の改善やマウスのより良い制御などもされます。インストールしたゲスト環境の中で、グラフィカル環境を使用する場合、virtualbox-guest-utils をインストールしてください。グラフィカル環境を使わないときは X のサポートを外した VirtualBox Guest ユーティリティの virtualbox-guest-utils-nox をインストールしてください。どちらのパッケージをインストールした場合でも、ゲストモジュールのパッケージの選択が求められます:
- linux カーネルを使用する場合 virtualbox-guest-modules-arch を選択してください。
- 他のカーネルを使う場合 virtualbox-guest-dkms を選択してください。
virtualbox-guest-dkms によって提供される virtualbox モジュールをコンパイルするには、インストールしているカーネルにあわせて適切なヘッダーパッケージをインストールする必要があります (例: linux-lts なら linux-lts-headers パッケージ、linux-zen なら linux-zen-headers パッケージ) [1]。VirtualBox かカーネルのどちらかがアップデートされると、DKMS の Pacman フックによって自動的にカーネルモジュールが再コンパイルされます。
ゲストで動作する Guest Additions と、ホストで動作する VirtualBox アプリケーションのバージョンは一致している必要があります。バージョンが食い違っていると (クリップボードの共有など) Guest Additions の機能が使えなくなります。ゲストをアップグレードする場合 (例: pacman -Syu
)、ホスト側の VirtualBox アプリケーションも最新版になっていることを確認してください。VirtualBox の GUI にある "Check for updates" はときどき機能しないことがあります。virtualbox.org のウェブサイトを確認してください。
Virtualbox カーネルモジュールをロード
自動的にモジュールをロードするには vboxservice
サービスを有効化してください。モジュールをロードしてゲストのシステム時刻をホストと同期します。
手動でモジュールをロードするには、次のコマンドを入力:
# modprobe -a vboxguest vboxsf vboxvideo
バージョン 5.0.16 から、virtualbox-guest-modules-arch や virtualbox-guest-dkms は systemd-modules-load サービスを使って起動時にモジュールをロードします。
VirtualBox ゲストサービスを起動
VirtualBox カーネルモジュールのインストールが終わったら、ゲストサービスを起動する必要があります。ゲストサービスは VBoxClient
という名前のバイナリ実行ファイルであり X Window System と対話を行います。VBoxClient
は以下の機能を管理します:
- 共有クリップボードとホストとゲスト間のドラッグアンドドロップ。
- シームレスウィンドウモード。
- ゲストのウィンドウサイズに自動的にゲストの表示をリサイズ。
- VirtualBox ホストバージョンのチェック。
これらの機能は全てフラグを使って個別・手動で有効にすることができます。
$ VBoxClient --clipboard --draganddrop --seamless --display --checkhostversion
今のところドキュメントになっていませんが VirtualBox には X11 サーバーが実際に動作中かどうか確認して全ての機能を自動的に有効にする Bash スクリプト VBoxClient-all
が入っています。
# VBoxClient-all
virtualbox-guest-utils はログイン時に VBoxClient-all
が実行されるように /etc/xdg/autostart/vboxclient.desktop
をインストールします。使用しているデスクトップ環境やウィンドウマネージャが自動的にスクリプトを実行してくれない場合、自動で起動するように手動で設定してください。詳しくは自動起動#グラフィカルを参照。
VirtualBox にはホストとゲスト間で時刻を同期させる機能も存在します。vboxservice.service
を起動・有効化してください。
これで、Arch Linux のゲスト環境が動作するようになったはずです。クリップボードの共有などの機能はデフォルトでは無効になっているので注意してください。使用したいときは VM ごとの設定でオンにする必要があります (例: Settings > General > Advanced > Shared Clipboard)。
Arch Linux ゲストとホストでフォルダを共有したい場合、下を見てください。
ハードウェアアクセラレーション
ハードウェアアクセラレーションはホストコンピュータの VirtualBox のオプションから有効にできます。GDM ディスプレイマネージャ 3.16 以上はハードウェアアクセラレーションのサポートを破壊するので [2]、ハードウェアアクセラレーションに問題が発生する場合、別のディスプレイマネージャを使用することを推奨します (LightDM は問題なく動作します)。
ゲスト側の 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: [3])。
共有フォルダが自動でマウントされない場合、手動でマウントするか次のセクションを読んで下さい。
systemd を使うと起動時に問題が起こる時は、/etc/fstab
に comment=systemd.automount
を加えて下さい。こうすると、スタートアップ時ではなくマウントポイントにアクセスしたときに共有フォルダがマウントされます。さもなければカーネルアップデート後にシステムが使えなくなるかもしれません(guest additions を手動でインストールした場合)。
sharedFolderName /path/to/mntPtOnGuestMachine vboxsf uid=user,gid=group,rw,dmode=700,fmode=600,noauto,x-systemd.automount
sharedFolderName
: 仮想マシンの Settings > SharedFolders > Edit > FolderName メニューの値。ホストマシンの実際のフォルダ名とは違う可能性があります。仮想マシンの Settings を確認するには、ホスト OS の VirtualBox アプリケーションから、適切な仮想マシンを選択して Settings をクリックしてください。/path/to/mntPtOnGuestMachine
: 存在しない場合、このディレクトリは手動で作成する必要があります (mkdir などを使用)。dmode
/fmode
は/path/to/mntPtOnGuestMachine
のなかのディレクトリやファイルのパーミッションです。
2012年8月2日現在、mount.vboxsf
は nofail
オプションに対応していません:
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
共有フォルダの自動マウント機能を使うときにもこのデーモンを起動する必要があります。
ホストからゲストに SSH
仮想マシン設定のネットワークタブの "Advanced" にはポートフォワーディングを作成するツールがあります。ゲストの ssh ポート 22
をホストの 3022
ポートなどに転送することで、以下のように接続できるようになります:
user@host$ ssh -p 3022 $USER@localhost
共有フォルダのかわりに SSHFS を使う
ポートフォワーディングと sshfs を使うことで、ゲストのファイルシステムをホストにマウントすることができます:
user@host$ sshfs -p 3022 $USER@localhost:$HOME ~/shared_folder