簡体字中国語からAIで翻訳しました。原文を読む
6月末ごろ、All-in-One ミニマシンを組みました。マザーボードは MSI の B550M PRO-VDH で、Proxmox VE(Debian ベース)をインストールしたところ、lm-sensors で取得できるデータが少なすぎて、温度も全部は取れませんでした
取得できたのはこれだけでした:
root@home:~# sensors
nvme-pci-0100
Adapter: PCI adapter
Composite: +38.9°C (low = -273.1°C, high = +89.8°C)
(crit = +94.8°C)
Sensor 1: +38.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +36.9°C (low = -273.1°C, high = +65261.8°C)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +41.0°C
Tccd1: +40.0°C
Reddit を確認してみると、同じような問題に遭遇している人がいました。原因は、Linux カーネルが MSI B550M シリーズのマザーボードで使われている Nuvoton NCT6687-R コントローラーチップをネイティブサポートしていないことで、自分でサードパーティ製のカーネルモジュールを読み込む必要があります:Fred78290/nct6687d
また、Secure Boot を有効にしているため、カーネルモジュールは署名されていないと読み込めません。そのため、MOK (Machine Owner Key) と DKMS (Dynamic Kernel Module Support) のモジュール自動署名を設定する必要があります
MOK の生成と登録
Debian Wiki の Secure Boot の章によると、Ubuntu と合わせるために MOK は /var/lib/shim-signed/mok/ ディレクトリに置くべきだそうなので、openssl で MOK を生成します:
mkdir -p /var/lib/shim-signed/mok/
cd /var/lib/shim-signed/mok/
openssl req -nodes -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=Kernel Signing MOK/"
openssl x509 -inform der -in MOK.der -out MOK.pem
MOK を作成したら、mokutil で登録します:
mokutil --import /var/lib/shim-signed/mok/MOK.der
求めに従って登録用のワンタイムパスワードを設定し、控えてから再起動します
reboot
次に画面の指示に従って MOK の登録を選択し、先ほど設定したワンタイムパスワードを入力して登録を確定します
起動後に、MOK が正常に登録されたか確認できます:
mokutil --test-key /var/lib/shim-signed/mok/MOK.der
DKMS の設定
自分の Proxmox VE には DKMS が入っていないようなので、手動でインストールします:
apt-get update
apt-get install dkms
次に /etc/dkms/framework.conf を編集し、コメントアウトされている mok_signing_key と mok_certificate を見つけてコメントを外し、先ほどの MOK の場所に変更します
# Location of the key and certificate files used for Secure boot. $kernelver
# can be used in path to represent the target kernel version.
# mok_signing_key can also be a "pkcs11:..." string for PKCS#11 engine, as
# long as the sign_file program supports it.
# (default: /var/lib/dkms):
mok_signing_key=/var/lib/shim-signed/mok/MOK.priv
mok_certificate=/var/lib/shim-signed/mok/MOK.der
モジュールのビルドとインストール
リポジトリをクローンしてビルドします。以下は deb パッケージをビルドしてインストールする手順です。Proxmox VE では build-essential やカーネルヘッダーなど、いくつか足りないパッケージを求められるかもしれません。とにかく足りないものを入れてください (o゜▽゜)o☆
他のディストリビューションでは Fred78290/nct6687d の README.md を参考にしてください
cd /tmp
git clone https://github.com/Fred78290/nct6687d
cd nct6687d
make deb
dpkg -i ../nct6687d-dkms_*.deb
インストールが完了したら /etc/modules ファイルを編集し、nct6687 を追加します:
root@home:~# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
nct6687
あとは再起動するか、modprobe nct6687d でモジュールを読み込みます
sensors-detect を再実行
sensors-detect
あとは y で進めていけば OK です。では、sensors の結果を見てみましょう:
root@home:~# sensors
nct6687-isa-0a20
Adapter: ISA adapter
+12V: 12.12 V (min = +12.12 V, max = +12.14 V)
+5V: 5.08 V (min = +5.07 V, max = +5.08 V)
+3.3V: 3.34 V (min = +0.00 V, max = +3.34 V)
CPU Soc: 998.00 mV (min = +1.00 V, max = +1.00 V)
CPU Vcore: 1.17 V (min = +0.24 V, max = +1.17 V)
CPU 1P8: 1.83 V (min = +1.83 V, max = +1.83 V)
CPU VDDP: 0.00 V (min = +0.00 V, max = +0.00 V)
DRAM: 1.35 V (min = +1.35 V, max = +1.36 V)
Chipset: 784.00 mV (min = +0.78 V, max = +0.89 V)
CPU SA: 694.00 mV (min = +0.69 V, max = +0.86 V)
Voltage #2: 1.52 V (min = +1.52 V, max = +1.53 V)
AVCC3: 3.38 V (min = +3.38 V, max = +3.38 V)
AVSB: 3.34 V (min = +0.00 V, max = +3.34 V)
VBat: 1.83 V (min = +0.00 V, max = +1.83 V)
CPU Fan: 920 RPM (min = 758 RPM, max = 920 RPM)
Pump Fan: 0 RPM (min = 0 RPM, max = 0 RPM)
System Fan #1: 2238 RPM (min = 2097 RPM, max = 2238 RPM)
System Fan #2: 0 RPM (min = 0 RPM, max = 0 RPM)
System Fan #3: 0 RPM (min = 0 RPM, max = 0 RPM)
System Fan #4: 0 RPM (min = 0 RPM, max = 0 RPM)
System Fan #5: 0 RPM (min = 0 RPM, max = 0 RPM)
System Fan #6: 0 RPM (min = 0 RPM, max = 0 RPM)
CPU: +45.0°C (low = +38.0°C, high = +45.0°C)
System: +42.5°C (low = +35.0°C, high = +42.5°C)
VRM MOS: +40.5°C (low = +33.0°C, high = +40.5°C)
PCH: +43.5°C (low = +34.0°C, high = +43.5°C)
CPU Socket: +40.0°C (low = +33.0°C, high = +40.0°C)
PCIe x1: +38.0°C (low = +32.0°C, high = +38.0°C)
M2_1: +0.0°C (low = +0.0°C, high = +0.0°C)
nvme-pci-0100
Adapter: PCI adapter
Composite: +38.9°C (low = -273.1°C, high = +89.8°C)
(crit = +94.8°C)
Sensor 1: +38.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +36.9°C (low = -273.1°C, high = +65261.8°C)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +45.4°C
Tccd1: +42.5°C
じゃじゃーん (≧∇≦)ノ
カーネルアップグレードへの対応
Proxmox VE で apt dist-upgrade を実行してカーネルをアップグレードしたところ、次のようなメッセージが出ました:
dkms: autoinstall for kernel 6.8.8-4-pve was skipped since the kernel headers for this kernel do not seem to be installed.
これは新しいカーネルのヘッダーがインストールされていないためです(以前は特定バージョンのヘッダーをインストールしていました)。ここでは以前インストールした特定バージョンのヘッダーをアンインストールし、proxmox-headers-6.8 メタパッケージ(常に PVE カーネル 6.8 系の最新バージョンを指す)をインストールします。こうすれば apt dist-upgrade を実行するたびにヘッダーもカーネルと一緒に更新されます
reboot した後に dkms autoinstall を実行すれば完了です