Ubuntu Weekly Recipe

第683回 LXDコンテナ上にUbuntuのフルデスクトップ環境を構築する

この記事を読むのに必要な時間:およそ 4 分

第679回ではLXD/VMの上にWindows 10をインストールしました。Windowsが動くなら他のOSも動きそうです。仮想マシンでとりあえず動かしてみるOSと言えばなんでしょう。もちろん,Ubuntuですね。 今回は別バージョンのUbuntuデスクトップを仮想マシンとして使いたいけれども,どうせならLXDのCLIで仮想マシンを管理したいという少しねじまがった性癖をお持ちのあなたに向けて, LXDインスタンスの上でUbuntuデスクトップを動かしてみます。

Ubuntuデスクトップ上でUbuntuデスクトップを動かしたい

LXDにはコンテナインスタンスVMインスタンスの2種類が存在します。コンテナインスタンスはLinuxのコンテナ機能を利用しています。それに対してVMインスタンスはQEMUを利用した仮想マシンです。

コンテナインスタンスでもデスクトップ環境一式をインストールすれば,デスクトップ環境にリモートログインできます。この場合はVNC/RDPなどを使うことになるでしょう。ただしそれなりに下準備が必要なのと,コンテナ固有の事情を考慮しなくてはいけないことから,普通のデスクトップとは少し趣が異なります。

それに対してVMインスタンスについては,よりシンプルです。QEMUがバックエンドであるため,VirtualBoxやVirtManagerと同じような感じで利用できます。仮想マシンの場合は,ウィンドウがVGAコンソールとなり,普通のUbuntuのインストーラーをそのまま使えるのが一般的です。ただしLXDの場合は,VirtualBoxのように専用の描画ウィンドウが存在しないため,仮想マシンであっても何らかの外部クライアントをインスタンスに接続させ,リモートのデスクトップを表示する仕組みが必要です。

VMインスタンスでGUI環境を実現する方法は2種類存在します。

  • 仮想マシンインスタンスを起動して,Ubuntuデスクトップ関連のパッケージをインストールする
  • 空の仮想マシンインスタンスを構築し,起動デバイスとしてUbuntuインストーラーのISOイメージを指定する

今回は後者の方法を解説します。前者のほうが簡単そうに見えますが,実は前者はクラウドイメージをベースにしています。Ubuntuデスクトップとは初回にインストールされるパッケージが異なるだけでなく,カーネルも小さなサイズになるよう仮想マシンに必要ないドライバー類を極力削っているのです。結果,状況によってはカーネルの入れ直し等いくつかの対応が必要になります。それに対して後者は,普通にUbuntuをインストールするところからはじめます。手間は増えるものの,普段使っているデスクトップのインストーラーをそのまま利用するため,そこまで面倒ではないでしょう。

第679回のLXD上にWindowsをインストールするではWindowsのインストーラーにあらかじめVirtIOのドライバーをインストールした上で,SPICEプロトコルでアクセスできるようにしました。Ubuntuの場合は,最初からSPICEプロトコルが使えるため,インストーラー側に特別なカスタマイズは不要です。

ちなみに,そもそもVirtualBoxやVirtManager/GNOME Boxesを愛用しているなら,わざわざLXDを使う必要はありません。特に「古いUbuntuデスクトップ」をインストールするなら,VirtualBoxのほうが良い場合も多くあります。⁠サーバーと同じようにCLIでインスタンスを管理したい」⁠Ubuntuが公式にサポートしているツールで管理したい」⁠何が何でもLXDで完結したい⁠⁠,今回紹介する方法はそういう目的がある場合にのみ意味が出てきます。

インストールはとっても簡単

手順自体はWindowsをインストールした第679回と大差ありません。

まずLXD 4.4以降が必要です。これはインストール時に必要なVGAコンソールを取得できるようになったのが,このバージョン以降だからです。Ubuntu 20.04 LTS等のプレインストールなLXDの場合,LXD 4.0.xになっているので適宜アップグレードしてください。また,ホストシステムはデスクトップ版のほうが確実です。サーバー版でもSSH経由のX転送等でVGAコンソールを起動できるようではあるものの,いくつかの報告を見ていると余計なトラブルにハマりやすい傾向があるようです。

今回は最新の4.18で確認した手順を紹介します。

$ lxc --version
4.18

コンソール画面にアクセスするためにSPICEクライアントが必要になります。LXDの場合,remote-viewerコマンドもしくはspicyコマンドがインストールされていたら,それを起動します。よってremote-viewerコマンドを提供するvirt-viewerパッケージをインストールしておきましょう。

$ sudo apt install virt-viewer

さらにLXDがvirt-viewerがインストールされていることを把握できるように,上記インストール後は一度LXDデーモンを再起動しておきます。

$ sudo systemctl reload snap.lxd.daemon.service

次に空のインスタンスを作成し,ストレージのサイズを拡張しておきます。今回はVMインスタンス--vmを,2コアのCPU-c limits.cpu=2と8GiBのメインメモリー-c limits.memory=8GiBで作ることにしましょう。

$ lxc init desktop --empty --vm -c limits.cpu=2 -c limits.memory=8GiB
Creating desktop

$ lxc config device override desktop root size=50GiB
Device root overridden for desktop

Ubuntuのインストーラーのメディアを起動デバイスとして追加しておきます。

$ lxc config device add desktop iso disk \
  source=$PWD/ubuntu-20.04.3-desktop-amd64.iso boot.priority=10
Device iso added to desktop

準備ができたらコンソールを有効化して仮想マシンを起動しましょう。

$ lxc start desktop --console=vga

図1 起動後にインストーラーメディアのチェックが行われる

図1

図2 見慣れたインストーラーが起動した

図1

あとは普通にUbuntuをインストールするだけです。インストーラーが完了したら再起動してください。ただしLXDの場合,インストーラーの終了後の「メディアの取り外し」のためにEnterを押しても取り外されません。またlxcコマンドからのメディアの取り外しも,インスタンス停止時にしか行えません。結果的に,起動優先度次第では,次回起動時はそのままインストーラーが再度起動してしまうかもしれません。具体的には再起動後に次のコマンドでコンソール接続してみてください。

$ lxc console desktop --type=vga

もしもう一度インストーラーが起動してしまっていたら,まずはコンソール画面を表示したままホスト側でlxc stop desktopを実行しましょう。メディアの取り外し画面が表示されるので,再度Enterを押すとインスタンスが終了します。その後,次の手順で明示的にメディアを削除し,インスタンスを起動してください。

$ lxc config device remove desktop iso
$ lxc start desktop

あとは再びlxc consoleでデスクトップに接続するだけです。とても簡単にデスクトップ環境を準備できました。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。