N100搭載ミニPCとProxmox8.2(その2 Proxmox)

この記事は約14分で読めます。

 前回の続きです。N100搭載のミニPCに、仮想サーバーを複数たてるべくProxmox8.2をインストールをしました。

Proxmox VEとは

 一言で表すと、仮想化環境を作成できるプラットフォームです。以下、Wikipediaからの抜粋。

Proxmox VE (Proxmox Virtual Environment, PVE)は、オーストリアのProxmoxサーバソリューション社が開発した、仮想環境構築に特化したLinuxディストリビューションである。

~略~

Proxbox VEはDebianベースのLinuxディストリビューションであり、ProxmoxがインストールされたPCからKVMやLXCなどを使用した仮想マシンやコンテナをホストできる。また、その際の操作をWebインターフェイスを用いて行える。
Wikipedia

 Debianがベースとなって作られているため、DebianをインストールしてからProxmoxをインストールする、といったことも可能です。その場合、カーネルやfirmware、パッケージなどがProxmoxのものに置き換わるようです。

Proxmox8.2のインストール

手持ちのUSBにインストールメディアを作成します。(1.39GB)

公式サイトのダウンロードページより、Proxmox VE 8.2 ISO Installerをダウンロードします。rufusを利用してUSBメモリにISOファイルを書き込みします。

※これはOKで問題ないです。意味はメッセージのとおりで、Linuxの場合はddコマンドで直接書き込みができるISOイメージですということです。

インストール時の設定等

インストール画面時に、設定した内容をまとめておきます。

No.入力画面入力内容備考
1操作選択Install Proxmox VEPVEのインストール
2利用規約I agreeエンドユーザーライセンス
3インストール先デフォルト(/dev/sda)デフォルトはext4
4国、タイムゾーン、キーボードレイアウトjapan
Asia/Tokyo
japanese
5管理者パスワードとEmailパスワード
確認用
Email
rootユーザーのパスワード
Emailは適当でも可
6管理用ネットワークの設定1:eth0
2:pvehome.local
3:192.168.0.5/24
4:192.168.0.1
5:192.168.0.201
管理用ネットワーク設定(環境に応じて以下1~5を設定)
1:ネットワークインタフェース
2:ホスト名(FQDN)
3:IP(CIDR)
4:Gateway
5:DNS Server
7最終確認デフォルト
インストール時の設定

インストールが終われば、USBを外して再起動します。管理用ネットワークで設定したIPでWebインターフェースへのURLが表示されるのでブラウザからアクセスします。

初期設定の確認等

「接続はプライベートではありません」のメッセージが出ますが、下の方にある「詳細設定」からx.x.x.xに進む(安全ではありません)でアクセスします。

有効なサブスクリプションがありませんとのエラーが出ますが無視します。フロントページにアクセス

・初期のストレージ設定。

作成したノード(pvehome)上に、種別と内容の異なる2つのディスクができています。

VMを作成していくと、以下のように、ディスクがどんどん作られていきます。

・初期のSDN設定

※ゾーン、VNets、オプション、IPAMは何もなし

Proxmox環境の事前準備

リポジトリの更新

Proxmoxのサブスクリプションの設定を行います。以下のように、コンポーネントに「enterprise」が付くものは「無効」にして、「追加」からNo-Subscriptionを追加します。

上記でリポジトリの設定ができれば、アップデートから「再表示」をクリック(apt update)し、「アップグレード」(apt upgrade)を行います。

PCI PassThroughの設定

OpenWRTで使用するWANポートとLANポート、ついでにWifiについてもPCIパススルーの設定を行います。

マニュアルやヘルプのPCI(e) Passthroughの項を参照しながら設定を行います。

pciデバイスの確認

root@pvehome01:~# lspci
00:00.0 Host bridge: Intel Corporation Device 461c
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics]
00:0a.0 Signal processing controller: Intel Corporation Platform Monitoring Technology (rev 01)
00:14.0 USB controller: Intel Corporation Alder Lake-N PCH USB 3.2 xHCI Host Controller
00:14.2 RAM memory: Intel Corporation Alder Lake-N PCH Shared SRAM
00:14.3 Network controller: Intel Corporation CNVi: Wi-Fi
00:16.0 Communication controller: Intel Corporation Alder Lake-N PCH HECI Controller
00:17.0 SATA controller: Intel Corporation Alder Lake-N SATA AHCI Controller
00:1a.0 SD Host controller: Intel Corporation Device 54c4
00:1c.0 PCI bridge: Intel Corporation Device 54ba
00:1c.3 PCI bridge: Intel Corporation Device 54bb
00:1c.6 PCI bridge: Intel Corporation Device 54be
00:1d.0 PCI bridge: Intel Corporation Alder Lake-N PCI Express Root Port
00:1d.3 PCI bridge: Intel Corporation Alder Lake-N PCI Express Root Port
00:1f.0 ISA bridge: Intel Corporation Alder Lake-N PCH eSPI Controller
00:1f.3 Audio device: Intel Corporation Alder Lake-N PCH High Definition Audio Controller
00:1f.4 SMBus: Intel Corporation Alder Lake-N SMBus
00:1f.5 Serial bus controller: Intel Corporation Alder Lake-N SPI (flash) Controller
01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
02:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
03:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
04:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
05:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller 980

起動時のパラメータ変更・再起動

・BIOS/UEFI

 IOMMUサポートを有効にする必要があります。BIOSによって項目は異なります。

・GRUBのブートパラメータ

IntelCPUの場合は、以下のように GRUB のブートパラメータを変更して IOMMU を有効にする必要があります。

# nano /etc/default/grub

以下の行を変更します。

・変更前

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

・変更後

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

※intel_iommu=onはiommuを有効化する記述
※iommu=onはLinux側からアクセスしないようにする記述

・カーネルモジュールのロード設定

# nano /etc/modules

以下を追加する

vfio
vfio_iommu_type1
vfio_pci

・GRUBのアップデート

# update-grub

・initramfsの再生成(更新)

# update-initramfs -u -k all

・ノード(pvehome01)の再起動

ノードを再起動し、次はいよいよProxmox上にOpenWRT環境の作成です。

(確認)IOMMU有効性の確認

IOMMU enabledとなっているか確認します。

root@pvehome01:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[    0.014769] ACPI: DMAR 0x00000000733D6000 000088 (v02 INTEL  EDK2     00000002      01000013)
[    0.014801] ACPI: Reserving DMAR table memory at [mem 0x733d6000-0x733d6087]
[    0.041349] DMAR: IOMMU enabled
[    0.099762] DMAR: Host address width 39
[    0.099763] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.099769] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 29a00f0505e
[    0.099772] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[    0.099776] DMAR: dmar1: reg_base_addr fed91000 ver 5:0 cap d2008c40660462 ecap f050da
[    0.099778] DMAR: RMRR base: 0x0000007c000000 end: 0x000000803fffff
[    0.099781] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
[    0.099782] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[    0.099783] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.101435] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    0.304681] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[    0.384947] DMAR: No ATSR found
[    0.384948] DMAR: No SATC found
[    0.384949] DMAR: IOMMU feature fl1gp_support inconsistent
[    0.384950] DMAR: IOMMU feature pgsel_inv inconsistent
[    0.384951] DMAR: IOMMU feature nwfs inconsistent
[    0.384952] DMAR: IOMMU feature dit inconsistent
[    0.384952] DMAR: IOMMU feature sc_support inconsistent
[    0.384953] DMAR: IOMMU feature dev_iotlb_support inconsistent
[    0.384954] DMAR: dmar0: Using Queued invalidation
[    0.384957] DMAR: dmar1: Using Queued invalidation
[    0.385595] DMAR: Intel(R) Virtualization Technology for Directed I/O

デバイスのiommuグループの確認

パススルーするデバイスのiommuグループを確認します。パススルーは基本的にこのグループごとにしかできないようです。今回の環境ではLANポートが4つあるため、ぱっと見どれがどれかわからなかったので順番だろうと予想し、0000:03:00.0、0000:04:00.0を割り当てることにしました。

root@pvehome01:~# pvesh get /nodes/pvehome/hardware/pci --pci-class-blacklist ""
class     device    id          iommugroup   vendor  device_name
略
0x020000  0x125c  0000:01:00.0          14   0x8086  Ethernet Controller I226-V
0x020000  0x125c  0000:02:00.0          15   0x8086  Ethernet Controller I226-V
0x020000  0x125c  0000:03:00.0          16   0x8086  Ethernet Controller I226-V
0x020000  0x125c  0000:04:00.0          17   0x8086  Ethernet Controller I226-V                               
0x028000  054f0   0000:00:14.3           4   0x8086

ポートとの関係だけ記録しておきます。

LANポートデバイスIDMACアドレス(Device Srial No)OpenWRT上のIF
ETH00000:01:00.0
ETH10000:02:00.0
ETH20000:03:00.060-be-b4-ff-ff-19-b3-8eLAN
ETH30000:04:00.060-be-b4-ff-ff-19-b3-8fWAN
LANポートとデバイスID

ちなみに実際にパススルーする際にはここのidを設定します。

パススルー後のカーネルドライバーが変わっていることが確認できます。(変更前はigc)

root@pvehome:/etc# lspci -nn -v -s 03:00.0
03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller I226-V [8086:125c] (rev 04)
        Subsystem: Intel Corporation Ethernet Controller I226-V [8086:0000]
        Flags: bus master, fast devsel, latency 0, IRQ 18, IOMMU group 16
        Memory at 80600000 (32-bit, non-prefetchable) [size=1M]
        Memory at 80700000 (32-bit, non-prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
        Capabilities: [70] MSI-X: Enable+ Count=5 Masked-
        Capabilities: [a0] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 60-be-b4-ff-ff-19-b3-8e
        Capabilities: [1c0] Latency Tolerance Reporting
        Capabilities: [1f0] Precision Time Measurement
        Capabilities: [1e0] L1 PM Substates
        Kernel driver in use: vfio-pci
        Kernel modules: igc