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

Apple
Photo by hyt.

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


2024/12/16追記:優先LAN が安定しない場合は以下の記事の内容をお試し下さい.

Ubuntu 24.04.1 on Macmini (Late 2014) の有線LANを安定させる備忘録
Ubuntu 24.04.1 on Macmini (Late 2014) の有線LANを安定させる備忘録です.Ubuntu24.04.1 を入れて Cockpit KVM サーバーの検証用に利用していた Macmini Late 2014...

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 ...

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo apt-get install --reinstall bcmwl-kernel-source
$ sudo apt-get install --reinstall bcmwl-kernel-source
$ sudo apt-get install --reinstall bcmwl-kernel-source

再起動後,ip a show に,

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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 を起動するだけです.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo apt -y install cockpit
$ systemctl enable cockpit.socket
$ sudo apt -y install cockpit $ systemctl enable cockpit.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 ファイルを作成する.
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    [keyfile]
    unmanaged-devices=none
    [keyfile] unmanaged-devices=none
    [keyfile]
    unmanaged-devices=none
  2. dummy network interface を作成する.
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nmcli con add type dummy con-name fake0 ifname fake0 ip4 1.2.3.4/24 gw4 1.2.3.1
    $ sudo nmcli con add type dummy con-name fake0 ifname fake0 ip4 1.2.3.4/24 gw4 1.2.3.1
    $ 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 で導入する必要があります.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo apt install udisks2 udisks2-lvm2 udisks2-btrfs
$ sudo apt install udisks2 udisks2-lvm2 udisks2-btrfs
$ 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 が対応する秘密鍵ファイルです.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 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
# 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
# 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 で必要なパッケージを導入し,サービスを起動し,ユーザーを登録するだけです.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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
$ 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
$ 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 パッケージを導入するだけです.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo apt install cockpit-machines
$ sudo apt install cockpit-machines
$ 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 の管理下への移行
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nmcli con add type ethernet con-name enp3s0f0 ifname enp3s0f0 ip4 192.168.0.100/24 gw4 192.168.0.1
    $ sudo nmcli con add type ethernet con-name enp3s0f0 ifname enp3s0f0 ip4 192.168.0.100/24 gw4 192.168.0.1
    $ sudo nmcli con add type ethernet con-name enp3s0f0 ifname enp3s0f0 ip4 192.168.0.100/24 gw4 192.168.0.1
  2. dummy インターフェースの削除
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ sudo nmcli c delete fake0
    # Cockpit の「ネットワーキング」から削除でも可
    $ sudo nmcli c delete fake0 # Cockpit の「ネットワーキング」から削除でも可
    $ sudo nmcli c delete fake0
    # Cockpit の「ネットワーキング」から削除でも可
  3. /etc/systemd/resolv.conf の書き換え
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ 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
    $ 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
    $ 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 の書き換え
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    $ 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
    $ 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
    $ 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をコピーしました