前回の続きです。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 VE | PVEのインストール |
2 | 利用規約 | I agree | エンドユーザーライセンス |
3 | インストール先 | デフォルト(/dev/sda) | デフォルトはext4 |
4 | 国、タイムゾーン、キーボードレイアウト | japan Asia/Tokyo japanese | |
5 | 管理者パスワードと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ポート | デバイスID | MACアドレス(Device Srial No) | OpenWRT上のIF |
ETH0 | 0000:01:00.0 | ||
ETH1 | 0000:02:00.0 | ||
ETH2 | 0000:03:00.0 | 60-be-b4-ff-ff-19-b3-8e | LAN |
ETH3 | 0000:04:00.0 | 60-be-b4-ff-ff-19-b3-8f | WAN |
ちなみに実際にパススルーする際にはここの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