BSD界隈四方山話

第50回Ubuntu 16.04をbhyveにインストール

Ubuntu 16.04 LTS登場

Canonicalは4月21日(米国時間⁠⁠、Ubuntuの最新版となる「Ubuntu 16.04 LTS」を公開しました。今回のリリースは長期サポートバージョンとされており、向こう5年間のサポートが提供されます。

今回のバージョンは今後のマルチプラットフォーム展開を見据えてパッケージフォーマットが新しい「snap」に変更された点が注目されるほか、LXD/LXCが最新バージョンにアップデートされたこと、コンテナ技術のファイルシステム/ボリュームとしてのZFSが利用しやすくなったことが注目されます。

今回はbhyveにUbuntu Server 16.04 LTSをインストールする方法を紹介します。インストール方法はいくつかあるのですが、grub2-bhyveで起動するためにファイルシステムと起動時に指定する内容を一致させる必要があります。今回はLVMを利用しない場合のインストールおよび起動方法を説明します。

仮想環境のセットアップ

次の構成で仮想環境を用意することにします。インストールイメージファイルや設定ファイルなどを適宜用意しておきます。

 ホストとゲストの設定
項目内容
ホストOSFreeBSD 10.3-RELEASE/amd64
ゲストOSUbuntu Server 16.04 LTS
ホストNICbge0
ゲストNICtap11 via bridge0
仮想CPU2個
仮想メモリ2GB
仮想ディスク(32BG)/dev/zvol/z/ubuntu-16.04
インストーラ/d/bhyve/ubuntu-16.04-server-amd64.iso
grub-bhyve設定ファイル/d/bhyve/ubuntu-16.04-device.map
リスト /boot/loader.confに追加する設定
vmm_load="YES"
リスト /etc/sysctl.confに追加する設定
net.link.tap.up_on_open=1
リスト /etc/rc.confに追加する設定
cloned_interfaces="bridge0 tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7 tap8 tap9 tap10 tap11 tap12"
ifconfig_bridge0="addm bge0 addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 addm tap5 addm tap6 addm tap7 addm tap8 addm tap9 addm tap10 addm tap11 addm tap12"
リスト /d/bhyve/ubuntu-16.04-device.mapファイルの中身
(hd0) /dev/zvol/z/ubuntu-16.04
(cd0) /d/bhyve/ubuntu-16.04-server-amd64.iso

設定ファイルを用意したあとにシステムを再起動しないのであれば、次のようにコマンドを手動で実行します。

 ネットワーク環境をセットアップ
# kldload vmm
# ifconfig tap11 create
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1
# ifconfig bridge0 create
# ifconfig bridge0 addm bge0 addm tap11 up

仮想環境で利用する仮想ディスクを次のようにZFSで作成します。

 ゲストの仮想ディスクをセットアップ
# zfs create -V 32G -o volmode=dev z/ubuntu-16.04

カーネルの読み込みにgrub2-bhyveが必要になるので、パッケージからインストールしておきます。

 カーネルの読み込みに使用するgrub2-bhyveをインストール
# pkg install grub2-bhyve

これで仮想環境のセットアップは完了です。

Ubuntu 16.04インストール

次のようにgrub2-bhyveを実行してカーネルを読み込みます。

 カーネルのローディング
# grub-bhyve -r cd0 -m /d/bhyve/ubuntu-16.04-device.map -M 2G ubuntu-16.04
 Install Ubuntu Serverを選択
図 Install Ubuntu Serverを選択

次にインストーラを起動します。

 インストーラ起動
# bhyve \
    -H -P -A \
    -c 2 -m 2G \
    -l com1,stdio \
    -s 0:0,hostbridge \
    -s 1:0,lpc \
    -s 2:0,virtio-net,tap11 \
    -s 3,ahci-cd,/d/bhyve/ubuntu-16.04-server-amd64.iso \
    -s 4,virtio-blk,/dev/zvol/z/ubuntu-16.04 \
    ubuntu-16.04

インストールの途中で次のような画面でパーティションの設定を求められますが、ここでLVMを利用しないパーティションを選択します。

 パーティションでLVM以外を選択
図 パーティションでLVM以外を選択
 LVMを利用しないでパーティションを設定
図 LVMを利用しないでパーティションを設定

インストールが終了したら、手動で一旦仮想環境を終了します。

 インストーラの最後の操作
図 インストーラの最後の操作
 仮想マシンを終了
# bhyvectl --destroy --vm=ubuntu-16.04

インストーラを終了しても仮想環境は実行されたままですので、上記のようにbhyvectl(8)を実行して仮想環境を一旦終了させます。

インストールしたUbuntu 16.04を起動

インストールしたUbuntu Server 16.04 LTSを起動します。まず、次のようにカーネルを読み込みます。

 カーネルを読み込み
# grub-bhyve -r hd0,msdos1 -m /d/bhyve/ubuntu-16.04-device.map -M 2G ubuntu-16.04
 起動する内容を選択
図 起動する内容を選択

次にインストールしたUbuntu Server 16.04 LTSを起動します。

 Ubuntu 16.04を起動
# bhyve \
    -H -P -A \
    -c 2 -m 2G \
    -l com1,stdio \
    -s 0:0,hostbridge \
    -s 1:0,lpc \
    -s 2:0,virtio-net,tap11 \
    -s 3,ahci-cd,/d/bhyve/ubuntu-16.04-server-amd64.iso \
    -s 4,virtio-blk,/dev/zvol/z/ubuntu-16.04 \
    ubuntu-16.04
 Ubuntu 16.04ログインプロンプト
図 Ubuntu 16.04ログインプロンプト
 ログイン後スクリーン
図 ログイン後スクリーン

毎回grub-bhyveコマンドを実行したりbhyve(8)コマンドにたくさんオプションを指定するのは面倒なので、次のようなエイリアスを用意します。

リスト Ubuntu 16.04を起動するためのエイリアス

alias bhyve_ubuntu_16.04="sudo bhyvectl --destroy --vm=ubuntu-16.04; sudo grub-bhyve -r hd0,msdos1 -m /d/bhyve/ubuntu-16.04-device.map -M 2G ubuntu-16.04 && sudo bhyve -H -P -A -c 2 -m 2G -l com1,stdio -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap11 -s 3,ahci-cd,/d/bhyve/ubuntu-16.04-server-amd64.iso -s 4,virtio-blk,/dev/zvol/z/ubuntu-16.04 ubuntu-16.04; sudo bhyvectl --destroy --vm=ubuntu-16.04"

これで次回からbhyve_ubuntu_16.04でUbuntu 16.04の仮想環境が起動してくるようになります。

Linuxディストリビューションはバージョンごとにファイルシステムの構成が変わることがあり、以前と同じインストール方法では起動してこないことがあります。ISOイメージは起動構成が変わらないためインストールはできるものの、インストール後にディスクからシステムが起動してこないといったものです。そういった場合、インストール時のファイルシステムを変更したり、grub2-bhyveで選択するカーネルを変更するなどで調整してみてください。

FreeBSD勉強会 告知

第52回 5月26日(木)19:00~ FreeBSD翻訳に貢献しよう!基本的なツールの使い方

ソースコードが読めないからドライバを書いたりカーネルを書き換えたりできないし、新しくportsを作るのもちょっと難しい…… そう思ってはいませんか? プロジェクトに貢献するのはなにもソースコードだけではありません。FreeBSDにはFreeBSD Handbookという優れたドキュメントがあります。このドキュメントを翻訳するだけでも、多くの日本のユーザに貢献することになります。

FreeBSD Docチームは最近POの機能を取り込んだ翻訳システムを構築して活用しています。このシステムを導入する前に比べると自動化できる部分も増えましたし、システマティックに変更部分を判断することもやりやすくなりました。こうした新しい翻訳作業に関してdocチームは各国で開催されるカンファレンスやサミットでチュートリアルを開催するなど、こうした仕組みを広く伝える取り組みをおこなっています。

今回の勉強会では、翻訳するにあたって使われているツールやサービスについて紹介したり、実際にどうやって作業を行っているのかの紹介を実施します。実際に翻訳作業をするわけではなくても、新しいドキュメント管理の方法を学ぶという上でも役に立つのではないかと思います。多くの方のご参加をお待ちしております :)

参加申請はこちらから。

第53回 6月22日(水)19:00~ ZFSマスターベーシックス

ストレージシステムや仮想化システムのファイルシステムとしてデファクトスタンダードになりつつあるZFS。FreeBSDでネイティブに動作するファイルシステムで、FreeBSDをストレージシステムや仮想化システムのオペレーティングシステムとして採用する強い同期になっています。

ZFSについては聞いたことはあるけど使ったことはない、どんなものか知りたい、使ってみたい、という方向けの勉強会です。ZFSの概要や基本的な使い方などを紹介します。

参加申請はこちらから。

おすすめ記事

記事・ニュース一覧