Ubuntuデスクトップ環境をLimaとNice DCVで構築する方法
はじめに
Mac で Ubuntu の仮想デスクトップを実現したい場合、通常は VNC が必要になりますが、VNC で表示したデスクトップの動作が重くストレスが溜まることがあります。さらに、Web ブラウザからアクセスしたい場合は noVNC の使用が必要であり、React に仮想デスクトップの機能を統合したい場合は、サードパーティーのライブラリである react-vnc を使用する必要があります。
今回は NICE DCV(以下: DCV)を使用したいと思います。DCV は、リモートデスクトップ接続を提供するソフトウェアであり、標準で Web ブラウザからのアクセスで仮想デスクトップを実現することができ、UI SDK も提供されています。
DCV サーバを起動するにはサーバが必要で、これを実現する1つの手段として AWS などのクラウドを利用することが考えられます。しかし、使用する EC2 インスタンスタイプによっては費用がかかるというデメリットが存在し、またサーバの起動に時間がかかるという問題もあります。これらの問題を解決するために、ローカル環境でサーバを立ち上げて手軽に動作確認したいと思います。
しかし、課題として NICE DCV サーバは Apple Silicon の Mac 上で実行できません。これに対する解決策として、Lima が内部で QEMU を使っているため、x86 のアーキテクチャをエミュレートできることを利用します。具体的には、Ubuntu イメージを使用して Lima で VM を立ち上げ、その上で DCV を起動します。これにより、Mac 上から Web ブラウザでアクセス可能な仮想環境を簡単に作成できます。
成果物
https://github.com/kntks/blog-code/tree/main/2024/01/vdi-lima-dcv
環境構築
環境構築にあたってツールのインストールは mise (旧rtx) を使います。
lima インストール
homebrew 用
Ansible インストール
VM 起動
qemu-ubuntu.yaml は以下の URL に置いています。
https://github.com/kntks/blog-code/blob/main/2024/01/vdi-lima-dcv/qemu-ubuntu.yaml
limactl ls
コマンドで SSH のポートや cpu のアーキテクチャを調べることができます。shell を開始して、uname
コマンドで確認もできます。
x86
をエミュレートできていそうです。
lima で立ち上げた VM に Ansibleを実行してみる
Ansible で簡単な playbook を作成し、VM の情報が出力される確認してみます。
qemu-ubuntu.yaml
ファイルで ssh.localPort を50022
にしました。Ansible で playbook を実行するときにその port をオプションで指定します。
出力結果に Linux
、x86_64
と書かれているので、VM で Ansible を実行できていることが確認できました。
NICE DCV をインストールする
今回は DCV をインストールする playbook を以下のように role に切り出しています。
ファイルは以下の URL に置いています。 https://github.com/kntks/blog-code/tree/main/2024/01/vdi-lima-dcv/ansible
先ほどと同様に ansible コマンドを実行します。
(今回は ubuntu-desktop
ではなく、ubuntu-desktop-minimal
にしています。)
セッションを作成する
一度VMを止めて、再度起動します。
DCV をインストールしたので、dcv コマンドが実行できるようになりました。セッションの一覧を確認してみましょう。
セッションが存在しないので、dcv create-session
コマンドで作成します。
Web ブラウザからアクセスする
1つ前の作業でセッションを作成しました。今度は、https://localhost:8443/#console にアクセスします。
Username = ubuntu、 Password = ubuntu でログインします。
こちらも同様に Password = ubuntu でログインします。
無事にデスクトップが表示されました!
まとめ
Lima で作成した VM 上に NICE DCV をインストールして VDI を実現することができました。すべてローカル環境で実現することができたので、動作確認がしやすくなったと思います。
クラウドの利用料が存在しないためコスト削減にも貢献できると思います。
トラブルシュート
crypt.crypt not supported on Mac OS X/Darwin, install passlib python module
mise で ansible をインストールした場合、実行している python のパスから調べた方が良さそうです。
エラーを読むと path が書いてあると思うので、 pip list コマンドで passlib
が入っているか確認してください
存在しない場合は、以下のコマンドを実行して passlib をインストールしてください。