💻

UTM のヘッドレスモードで仮想サーバーを起動する方法

2024/07/15に公開

UTM とは?

UTM とは、macOS用の仮想環境構築ソフトウェアのことで、1つのOS内で異なるOSを動かすことができます。
App Store で提供されてる有料版と無料版がありますが、機能に差分はないので、特に理由なければ、無料版を使いましょう。

ローカル環境の情報

PC: M3 Mac
OS: macOS 14.5

仮想環境の設定

今回は、以下で設定します。

  • OS: AlmaLinux
  • メモリ: 2GB
  • サイズ: 64GB
  • 名前: AlmaLinux(後ほど使用するので、個別で設定)

詳細な設定については、今回は割愛しますが、設定方法については、以下の記事がおすすめです。
https://zenn.dev/hrak0x59/articles/4e4700fdbad73c#sshのセットアップ

注意点としては、今回は AlmaLinux を使用しましたが、このOSを使う場合は、「Apple 仮想化を使用」「Rosettaを有効にする」をチェックします。
(設定しないと、正常に起動しないです。。)

image

前提条件

ここから先の内容は、以下の設定ができてることを前提に説明します。

  • 一般ユーザの作成(今回は仮名で alma とします)
  • sudo dnf update -y が実行されていること
  • 一般ユーザ alma でローカルマシンから仮想マシンへ ssh ログインができること

本題: UTM ヘッドレスモードを使用して、仮想マシンを起動する

さて、本題に入ります。
最近のアップデートで導入された、ヘッドレスモードを使用して、サーバー起動します。

公式の docs には、こう書かれていました。

To setup headless mode, open the virtual machine configuration and delete any display device as well as any serial device that is set to “Built-in Terminal” mode. It is highly recommended that you set up at least one serial device in one of the other modes so that you can communicate with the virtual machine. See this page for more details.

https://docs.getutm.app/advanced/headless/

内容としては、

  1. まず、ディスプレイデバイスとシリアルデバイスを削除する
  2. utmctl コマンド 使用して、サーバー起動する

という感じです。

ディスプレイデバイスとシリアルデバイスを削除する

その状態で、以下の操作を行います。

  1. 左側のサーバー一覧で、作成したサーバーを右クリックして、「編集」をクリック
  2. サーバーの設定画面が表示されるので、左側のメニューで「ディスプレイ」を右クリックして「削除」
  3. シリアルデバイスがある場合は「シリアル」という項目が表示されてるので、先程と同様の操作で削除する
  4. 最後に保存する

image

utmctl コマンドを使用できるようにする

次にローカルマシンで utmctl というコマンドラインツールを使用できるようにします。
ターミナルで、こちらのドキュメントにあるコマンドを実行します。

https://docs.getutm.app/scripting/scripting/#command-line-interface

$ sudo ln -sf /Applications/UTM.app/Contents/MacOS/utmctl /usr/local/bin/utmctl

最後に utmctl --help を実行して、以下が表示されたら準備完了です。

$ utmctl --help
OVERVIEW: CLI tool for controlling UTM virtual machines.

USAGE: utmctl <subcommand>

OPTIONS:
  -h, --help              Show help information.

SUBCOMMANDS:
  list                    Enumerate all registered virtual machines.
  status                  Query the status of a virtual machine.
  start                   Start a virtual machine or resume a suspended virtual machine.
  suspend                 Suspend running a virtual machine to memory.
  stop                    Shuts down a running virtual machine.
  attach                  Redirect the serial input/output to this terminal.
  file                    Guest agent file operations.
  exec                    Execute an application on the guest.
  ip-address              List all IP addresses associated with network interfaces on the guest.
  clone                   Clone an existing virtual machine.
  delete                  Delete a virtual machine (there is no confirmation).
  usb                     USB device handling.

  See 'utmctl help <subcommand>' for detailed help.

utmctl で仮想マシンを起動する

ターミナルで utmctl list を実行して、先程作ったサーバー AlmaLinux があるか確認します。

$ utmctl list
UUID                                 Status   Name
F38C0C45-4769-4D0E-AE62-D58322A706E8 stopped  AlmaLinux

サーバーがあることがわかったので AlmaLinux を起動します。

$ utmctl start "AlmaLinux"

これで、サーバーが起動します。
再度 utmctl list を実行すると Statusstarted になっています。

$ utmctl list
UUID                                 Status   Name
F38C0C45-4769-4D0E-AE62-D58322A706E8 started  AlmaLinux

ターミナルから ssh ログインできるか確認しましょう。

$ ssh alma@{仮想マシンのIPアドレス}
Last login: Mon Jul 15 20:53:15 2024 from 10.211.56.1
[alma@localhost ~]$

無事ログインできたら、完了です 🎉

Discussion