前書き
増税前(2019年9月)に、自作PCパーツをドサッと買いました。
https://twitter.com/ARC_AED/status/1177817660777582592
構成は、下表の通りです。評判の良い第三世代Ryzen CPUを中心に据えつつ、メモリ量を現状の32GBから64GBに増やし、ストレージも複数OSをインストール可能な環境を目指しました。
| 項目 | 単価 | 個数 | 金額(円) | 製品名 |
|---|---|---|---|---|
| マザーボード | ¥17,707 | 1 | ¥17,707 | ASUS AMD AM4 搭載 マザーボード PRIME X570-P/CSM |
| CPU | ¥51,251 | 1 | ¥51,251 | AMD Ryzen 7 3800X with Wraith Prism cooler 3.9GHz 8コア/16スレッド |
| Memory(RAM) | ¥19,800 | 2 | ¥39,600 | Team DDR4 3200Mhz(PC4-25600) 16GBx2枚(32GBkit) |
| SSD | ¥24,900 | 1 | ¥24,900 | WD 内蔵SSD M.2-2280 2TB WDS200T2B0B-EC |
| HDD | ¥8,590 | 2 | ¥17,180 | WD HDD 3.5インチ 4TB WD40EZRZ/AFP2 |
| グラボ | ¥18,560 | 1 | ¥18,560 | MSI GeForce GTX 1650 AERO ITX 4G OC |
| ケース | ¥8,152 | 1 | ¥8,152 | ATX P110 silent |
| 電源 | ¥13,980 | 1 | ¥13,980 | SilverStone Strider Platinumシリーズ 550W 80PLUS |
| 合計金額 | ¥191,330 |
CPUはRyzen 3900X(12コア/24スレッド)以上が魅力的でしたが、
- 3900Xが世界的な品切れ
- 3950X(16コア)やThreadripperは11月以降に発売延期
- ゲームしないため、そこまでコア数が不要
という状態だったので、3800Xを選択しました(実際は、同じ8コアの3700Xで十分だった)。
本記事では、上表のRyzen 3800X環境でDebian10を立ち上げるまでに、自作PC素人(2回目)の私がハマった内容とその解決策を示します。
既知の不具合:systemdのエラーで、ブート失敗
2019年7月に、HW乱数を返す命令RDRANDが常に(-1)を返す不具合があり、RDRANDを使用しているsystemdがエラーとなって、ブート失敗する事が判明しました(参考記事)。
Debian10は、この問題が見つかった時点で、運良く修正パッチが適用されています。しかし、systemdを使用する他のディストリビューションでは修正が反映されていない可能性もあるため、このバグに注意してください。
電源が入らない問題
説明書を読みながら各種パーツを取り付けた後、LEDは光るがCPUファンが回らない問題に遭遇しました。当然、画面には何も表示されませんでした。
https://twitter.com/ARC_AED/status/1177867015270195202
この問題の原因は、配線ミスです。今回使用したマザーボードには、CPUへの電力供給を安定化させるため、電源コネクタを複数ヶ所に差し込めます。
- ATXメインコネクタ(マザーボード用)
- ATX12V(CPU用その1)
- EPS12V(CPU用その2)
ATXメインコネクタ用のケーブルは「メインコネクタ + ATX12V」の二箇所に挿せるようになっていたため、私はその両方に一本のケーブルで電源供給していました。しかし、正しくはメインコネクタだけに刺さなければいけませんでした。この挿し間違いにより、CPUへの電源供給が足りなかったようです。
この事に気づくまでの**原因切り分け方法は、「ケーブル・パーツを一つ抜いてから、電源ONを繰り返す事」**です。地味な方法ですが、一気に全パーツを外すよりも原因特定がしやすいです。ただし、マザーボード上のLEDがどこも点灯していない場合は、電源が駄目な場合もあるので、一気にパーツを外して良いです。
BIOS画面が表示されない問題
電源が入り、ファンが回り始めて喜んだのもつかの間、モニターに何も表示されません。この際の原因切り分け方法は、マザーボードのビープ音です。マザーボードはエラー種類によって、異なるビープ音を鳴らしてくれます。エラー種類(ビープ方式)は、メーカによって差異があると思われるので、メーカHPで確認してください。
https://twitter.com/ARC_AED/status/1177890905337913344
私の場合は、**「グラフィックボードの未検出」**が原因でした。Ryzenでは、CPU番号の末尾に"G"がついていない製品はグラフィック機能が無いです。私はその事実を知らなかったため、夜中にヨドバシカメラで以下のグラボを買ってきました。グラボを挿したらBIOS画面が出てきたので、恥ずかしい失敗でした。
kvm: disabled by biosエラーで停止
Debian10をUSBインストールした後、ブートシーケンス中に"kvm: diasbled by bios"エラーが出ました。KVMはKernel-based Virtual Machineの略で、仮想化技術の一つです。エラーメッセージ通り、BIOSの設定が必要でした。
BIOSの起動方法は、私の使用したマザーボードは"F2"か"Del"です。メーカによって、BIOS起動方法が異なるため、適宜調べてください。KVM有効化の設定手順は、以下の通りです。
- BIOS起動:電源ON後にF2を連打
- BIOS画面のAdvanced Mode(F7) > Tool > EZ Flash 3 Utilityを選択
- BIOS更新方法をInternet経由とし、各質問はYesでEnter
- BIOS更新中は電源が落ちないように注意してください
- BIOS更新後、American Megatrends画面が表示された後、F1を押下
- BIOS画面で、Advanced > CPU Configuration > SVM = Enabledに変更
- F10(Save & Exit)を押下
[the_ad id=“598”]
sev command 0x4 timed out, disabling PSPエラーで停止
KVMエラー解消後、次に出たエラーはPSP無効化についてでした。PSPは、(AMD) Platform Security Processorの略で、セキュリティ関係のHW機能です。BIOSでは設定変更できないため、Kernelの再ビルドが必要でした。具体的には、kernelコンフィグ(.config)のCRYPTO_DEV_SP_PSPオプションを無効化します。
以下に、Kernelの再ビルド・インストール手順を示します。なお、“Alt + Ctrl + F2"でtty2にログインできたため、Ryzen環境(root権限)で実施しています。
まずは、Linux Kernelをビルドできるように、パッケージを導入します。
# apt update
# apt upgrade
# apt install linux-headers-$(uname -r) (注釈) unameコマンドにより、このコマンドを入力しているPCのKernelバージョン用ヘッダを取得
# apt install gawk wget git diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm libncurses5-dev \
lzop flex libelf-dev kmod libssl-dev
次に、Linux Kernelソースコードを取得します。
(注釈) Linux Kernelソースコードを取得
# uname -r (注釈) Kernelバージョンの確認
4.19.67
# apt install linux-source-4.19 (注釈) linux-source-X.Xの"X.X"は、unameコマンドで確認したバージョンを記載
(注釈) 前手順で取得したソースコード(tarball)を展開
# mkdir ~/KERNEL
# cd ~/KERNEL
# tar xf /usr/src/linux-source-4.19.tar.xz
# ls
linux-source-4.19
今回の目的である「PSP無効化設定」および「Debian環境向けLinux Kernel(deb)」を作成するための設定をします。
(注釈) 現在使用しているLinux Kernelのコンフィグを取得
# cd linux-source-4.19/
# cp /boot/config-4.19.0-6-amd64 .config (注釈) /boot下に古いコンフィグが存在
(注釈) make oldconfigで新機能以外は既存設定と同じとし、新機能は無効に設定します。
oldconfig中の選択肢は、全てEnterを押してください。
# make oldconfig
(注釈) PSP無効化(CRYPTO_DEV_SP_PSP = "n")とします。
コンフィグのPATHは、menuconfig中の"/"(検索機能)で調べられます。
# make menuconfig
# vi .config
(注釈) CONFIG_SYSTEM_TRUSTED_KEY=""に変更。変更しないとビルド失敗します。
最後に、Linux Kernelビルド(debパッケージの生成)およびインストールします。dbg情報が付いているdebパッケージは削除し、残りのdebパッケージは全てインストールします。
(注釈) debパッケージを作成するため、ビルドを実施
# make -j16 bindeb-pkg
(注釈) 一つ上の階層にdebパッケージが存在するため、移動
# cd ../
(注釈) dbgという文字列を含むパッケージは、デバッグ情報付きの別バイナリなので不要。
# rm linux-image-4.19.67-dbg_4.19.67-1_amd64.deb
(注釈) ビルド生成物の確認
# ls
linux-4.19.67-falcot_4.19.67-1.diff.gz
linux-4.19.67-falcot_4.19.67-1.dsc
linux-4.19.67-falcot_4.19.67.orig.tar.gz
linux-4.19.67_4.19.67-1.diff.gz
linux-4.19.67_4.19.67-1.dsc
linux-4.19.67_4.19.67-1_amd64.buildinfo
linux-4.19.67_4.19.67-1_amd64.changes
linux-4.19.67_4.19.67.orig.tar.gz
linux-headers-4.19.67_4.19.67-1_amd64.deb
linux-image-4.19.67_4.19.67-1_amd64.deb
linux-libc-dev_4.19.67-1_amd64.deb
linux-source-4.19
(注釈) システムにインストール
# dpkg -i *.deb
# reboot (注釈) OS再起動
ログイン画面(GUI)が出てこない問題
Linux Kernelを入れ替えた後、ブートシーケンスは進むものの、ログもない黒い画面で最終的に停止する問題が発生しました。現象は、
- 画面が一度クリアされ、ログなしの黒い画面で停止
- tty2からdmesgでブートログを確認した結果、エラーなし
- Cinnamon/GNOME3デスクトップ環境を試し、変化なし
でした。
この問題を解決したのは、偶然です。調査中に、私はDebianがnon-free(企業が提供するプロプラエタなfirmware)がデフォルトで導入されない事を思い出し、結果的にログイン画面が出てこない原因がグラボのfirmwareと気づけました。
以下に、non-freeなfirmwareをインストールする手順を示します。使用するグラボ(AMD, NVIDIA)によって、使用するfirmwareが異なりますので、注意してください。本記事はNVIDIA向けの手順であり、AMD向けは別サイトの記事を参考情報として置いておきます。
まずは、/etc/apt/sources.listを更新し、aptコマンドでnon-freeなバイナリを取得できるようにします。具体的には、debもしくはdeb-srcから始まる文の末尾に"non-free"を追加します。
# 注釈:debおよびdeb-srcの末尾に、"non-free"を追加
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
# buster-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
最後に、NVIDIAのグラボ向けのfirmwareを取得します。NVIDIAのfirmwareは複数種類ありますが、今回はその中から必要なfirmwareを探してくれる"nvidia-detect"コマンドを使用しました。
(注釈) /etc/apt/sources.listを更新したため、パッケージ情報を再取得
# apt update
(注釈) nvidia-detectコマンドを用いて、
NVIDIAのfirmwareの中で、どのfirmwareが必要かを調査
# apt install nvidia-detect
# nvidia-detect
Detected NVIDIA GPUs:
07:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU107 [10de:1f82] (rev a1)
Checking card: NVIDIA Corporation TU107 (rev a1)
Your card is supported by the default drivers.
It is recommended to install the
nvidia-driver (注釈) ★ インストールすべきfirmware
package.
(注釈) firmwareのインストール
# apt install nvidia-driver
最後に
以上の手順で、Ryzen 3800X環境でDebian10が動作しました!
新規Hardware(今回はRyzen 3800X)をDebianで試すのは、難易度が高いと感じました。今回のPC組み立てで発生した問題もあまり情報が出てこず、組み立て完了までにトータルで12時間程度かかりました。
Linuxに詳しくない人はユーザ絶対数の多いUbuntuで試すか、まずはWindows10を導入してみた方が作業が楽に進む筈です。Debianはマイナー。
