Mac mini (Late 2014) を Cockpit KVM サーバーにする備忘録

Apple
Photo by hyt.

Mac mini (Late 2014) を Cockpit KVM サーバーにする備忘録です.

https://amzn.to/4f8Vdqp

はじめに

いままで無償で利用できていた VMWare ESXi が ESXi8 以降は利用できなくなるので,その代わりとして使えるか検証用として少し古い Mac mini (Late 2014) に Cockpit + KVM 環境を構築してみました.

個人的な環境の場合のVMWare ESXi の代わりは,Proxmox VE が多そうな感じですが,GUI があまり好みに合いません.GUI がキレイな Nutanix Community Edition は要求仕様が厳しい.ということで,GUI がスッキリしていて要求仕様もそれほど厳しくない Cockpit + KVM を試してみることにした訳ですね。

https://amzn.to/3UHDqP4
https://amzn.to/3UHDqP4

Mac mini Late 2014 の仕様

一応 Mac mini Late 2014 の仕様を以下の通りです.所謂 Fusion ドライブのモデルです.

  • CPU: Core i5-4308 2.8GHz
  • Memory: 8GB
  • Strage: SSD 128GB + HDD 1TB

OS の導入

導入OS は Ubuntu 24.04.1 LTS です.理由は Wi-Fi の認識です.

最初は Almalinux 9.4 で試したのですが,Mac mini の Wi-Fi モジュール Broadcom BCM4360 を動作させることがかなり困難でした.Cockpit は Red Hat が開発元のようなので,できれば Red Hat 系の OS を使いたかったので,これは残念なところです.

Ubuntu 24.04.1 LTS の導入

Ubuntu の導入手順は以下の通りです.

  1. Ubuntu の公式ページから Ubuntu Server 24.04.1 LTS の ISO をダウンロード
  2. CTRL + R で Mac mini の macOS 復旧復旧システムを起動し,ディスユーティリティで SSD + HDD を全て削除して電源断
  3. 手順1でダウンロードした ISO ファイルから Mac mini を起動
  4. Server World さんの記事に従って初期セットアップを実施(インストールの種類は Ubuntu Server (minimized) を選択,また,追加オプションとして Search for third-party driver を選択)

注意点は以下の通りです

  1. 手順3は,USB 接続の仮想ODDドライブ(DVDドライブのエミュレーター)を用いて実施しました.ISO ファイルを USB メモリに書き込んだものだとなぜか起動してくれませんでした.
  2. USB 接続のキーボードが必要です.ワイヤレスの Mac mini の純正キーボードは Bluetooth 接続のため,セットアップ時に使えません.
  3. Fusion ドライブは解除され,HDD が /dev/sda,SSD が /dev/sdb で認識されました.Ubuntu は SSD に導入しています.
https://amzn.to/3UHDqP4
https://amzn.to/3Yz7ugK

Wi-Fi の認識

Mac mini の Wi-Fi モジュール Broadcom BCM4360 を動作させるため,記事

Installing Broadcom Wireless Drivers
I'm having serious problems installing the Broadcom drivers for Ubuntu. It worked perfectly on my previous version, but ...

を参考に,以下の作業を実施しました.

$ sudo apt-get install --reinstall bcmwl-kernel-source

再起動後,ip a show に,

3: wlp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DORMANT group default qlen 1000
    link/ether ff:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff

のような表示があればきちんと認識できています.

Cockpit の導入

Cockpit の導入は以下の手順で行いました.

  1. Cockpit パッケージの導入
  2. ソフトウェアの更新問題への対応
  3. ストレージログのエラーへの対応
  4. SSL 対応

Cockpit パッケージの導入

Cockpit の導入は apt で関係パッケージを入れて,socket を起動するだけです.

$ sudo apt -y install cockpit
$ systemctl enable cockpit.socket

なお,Cockpit は「アプリケーション」を追加することでさまざまな機能拡張ができますが,Ubuntu の場合,はじめから導入されるアプリケーションは,

  • ストレージ(ストレージの管理)
  • ネットワーキング(Cockpit の NetworkManager と Firewalld の設定)

だけで,KVM 管理等のアプリケーションはあとで追加導入する必要があることに注意が必要です.また,初期導入されるこれら2つのパッケージについても問題がありますので,これらに対応する必要もあります.

ソフトウェア更新問題への対応

Cockpit の「ソフトウェア更新」が正常に行えるようにするために必要な作業は以下の通りです.

  1. 以下の内容の /etc/NetworkManager/conf.d/10-globally-managed-devices.conf ファイルを作成する.
    [keyfile]
    unmanaged-devices=none
  2. dummy network interface を作成する.
    $ sudo nmcli con add type dummy con-name fake0 ifname fake0 ip4 1.2.3.4/24 gw4 1.2.3.1
  3. 再起動する.

本問題は Cockpit の FAQ のようです.実際,公式ページに,

Frequently Asked Questions (FAQ)

の通り対応方法が案内されています.なお,この対応方法だと,Cockpit の「ネットワーキング」からネットワークインターフェースの設定が変更できなくて不便なので,KVM の導入時に再度ネットワークの設定し直していることを注意しておきます.

ストレージログのエラーへの対応

ストレージログに出るエラーに対応するために,以下のパッケージを apt で導入する必要があります.

$ sudo apt install udisks2 udisks2-lvm2 udisks2-btrfs

ただし,これらのパッケージ導入後も残念ながら以下のエラーが表示されます.

Error initializing module ‘iscsi’: /usr/lib/x86_64-linux-gnu/udisks2/modules/libudisks2_iscsi.so: cannot open shared object file: No such file or directory

エラーの内容から,libudisks2_iscsi.so を含むパッケージを導入しなければならないことが分かりますが,残念ながら対応のパッケージがいまのところ見つかりません(Red Hat 系のパッケージはあるが,Debian 系のものがない).ただし,ファイル名からわかる通り,iscsi を使わなければ問題がなさそうなので,とりあえず今のところは本エラーへの対応は保留しています.

SSL 対応

このままだとブラウザで Cockpit にアクセスすると「危険なサイト」と表示されるため, Cockpit の証明書を入れ替えます.

まず,本件についての公式の情報は,

SSL/TLS Usage

です.これに従い,実際に以下のように証明書を入れ替えています.ただし,macmini.crt が自分で用意した証明書,macmini.key が対応する秘密鍵ファイルです.

# Cockpit が利用中の証明書のチェック
$ sudo /usr/lib/cockpit/cockpit-certificate-ensure --check
Would use certificate /etc/cockpit/ws-certs.d/0-self-signed.cert

# 証明書ファイルの移動
$ sudo mv macmini.crt /etc/cockpit/ws-certs.d
$ sudo mv macmini.key /etc/cockpit/ws-certs.d
$ sudo chown root:root /etc/cockpit/ws-certs.d/macmini.crt
$ sudo chown root:root /etc/cockpit/ws-certs.d/macmini.key
$ sudo chmod 644 /etc/cockpit/ws-certs.d/macmini.crt
$ sudo chmod 600 /etc/cockpit/ws-certs.d/macmini.key

# 再起動後
$ sudo /usr/lib/cockpit/cockpit-certificate-ensure --check
Would use certificate /etc/cockpit/ws-certs.d/macmini.crt

なお,Let’s encrypt の無償の証明書発行サービスを用いた SSL 化については例えば,

などの記事を参照して頂ければと思います.

KVM の導入

KVM の導入は以下の手順で行いました.

  1. KVM パッケージの導入
  2. Cockpit-machines パッケージの導入
  3. ブリッジネットワークの追加
https://amzn.to/4f8Vdqp

KVM パッケージの導入

KVM の導入自体は apt で必要なパッケージを導入し,サービスを起動し,ユーザーを登録するだけです.

$ apt -y install qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin
$ systemctl enable --now libvirtd
$ systemctl status libvirtd
# usermod -aG kvm hyt
# usermod -aG libvirt hyt

Cockpit-machines パッケージの導入

これも apt で Cockpit-machine パッケージを導入するだけです.

$ sudo apt install cockpit-machines

なお,導入直後はなぜか Cockpit メニュー項目が英語表記 (Machines) でしたが,これは再起動することで日本語表記(仮想マシン)となりました.

ブリッジネットワークの追加

KVM を追加すると,デフォルトで virbr0 という名称の仮想インターフェースが追加され,アドレスとして 192.168.122.1/24 が割り当てられます.また,この virbr0 には NAT が設定されていて,標準で KVM の仮想マシンはこの virbr0 経由でインターネットへの疎通が確保されるようです.

しかし,この方式だと,ホストマシン等から直接仮想マシンに接続できず,不便です.このため,多くの方が この virbr0 とは別のブリッジインターフェースを作り,仮想マシンで利用しているようなので,私の場合もこれに従い,以下の手順でブリッジインターフェースを作成しました.なお,enp3s0f0 は ethernet インターフェース名であることにご注意ください.

  1. enp3s0f0 の固定IP化と NetManager の管理下への移行
    $ sudo nmcli con add type ethernet con-name enp3s0f0 ifname enp3s0f0 ip4 192.168.0.100/24 gw4 192.168.0.1
  2. dummy インターフェースの削除
    $ sudo nmcli c delete fake0
    # Cockpit の「ネットワーキング」から削除でも可
  3. /etc/systemd/resolv.conf の書き換え
    $ sudo vi /etc/systemd/resolv.conf
    DNS=192.168.0.1
    #FallbackDNS=
    Domains=example.net
    #DNSSEC=no
    #DNSOverTLS=no
    #MulticastDNS=no
    #LLMNR=no
    #Cache=no-negative
    #CacheFromLocalhost=no
    #DNSStubListener=yes
    #DNSStubListenerExtra=
    #ReadEtcHosts=yes
    #ResolveUnicastSingleLabel=no
    #StaleRetentionSec=0
  4. /etc/netplan/50-cloud-init.yaml の書き換え
    $ sudo vi /etc/netplan/50-cloud-init.yaml
    network:
      version: 2
      ethernets:
        enp3s0f0:
          dhcp4: false
          addresses:
          - 192.168.0.100/24
          routes:
          - to: default
            via: 192.168.0.1
          nameservers:
            addresses:
            - 192.168.0.1
            search: [example.net]
    -------
    # この部分は以下のようにする方が良いかもしれません(2024/11/15追記)
    network:
      version: 2
      ethernets:
        enp3s0f0:
          optional: true
  5. 再起動
  6. Cockpit の「ネットワーキング」の「ブリッジの追加」を選択し,
    名前: bridge0
    ポート: enp3s0f0
    として「追加」

なお,手順1と4が被っているように見えますが,手順4を省略すると,systemd-networkd-wait-online.service が起動せず,結果,ssh や Cockpit での接続にしばらくの間不具合が生じます.ここで「しばらくの間」と書いたのは,2分経過すると,systemd-networkd-wait-online.service の起動がキャンセルされることで ssh や Cockpit への接続が行えるようになるからです.つまり,設定しなくても(失敗しても)2分待てば使えるようになりますが,この場合も Cockpit に systemd-networkd-wait-online.service のエラーが表示されたままになってしまいます.

おわりに

ということで,最低限,Cockpit で KVM で仮想マシンを動かせるようになりましたが,そもそも KVM 自体に慣れていないため,まだわからないところだらけです.

ということで,KVM についてはいろいろ勉強しなければならないので,この辺りについてはまた別記事でまとめたいと考えています.

以上!

https://amzn.to/4f8Vdqp
AppleGadget
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました