Closed7

検証用にProxmoxサーバーを建てる

namn1125namn1125

いつか別で記事にするかもしれないけどそのための端書

動機 : 最近Tauriフレームワーク等の記事を書くにあたり、記事に書かれた内容の再現性の確認を取れる環境の需要が自分の中で増している。

Linuxを動かす仮想環境は色々あるけどもWindowsに関しては少ない。Windows Pro等であれば最初からWindowsサンドボックスが存在するが、この仮想環境は再起動ができず、ソフトウェアのインストール等の操作が挟まる場合検証には不向きである。

そこで、Windows仮想環境も構築できるという噂を聞きProxmoxサーバーを建てることとした。なお他の手段については未検討である。

namn1125namn1125

公式サイト: https://www.proxmox.com/en/

どこか個人ブログ見ても良かったかもしれないけど詰まるまでは公式を参考にしてみる。

https://www.proxmox.com/en/proxmox-ve/get-started

1. Download ISO image

最新版(執筆時点 Proxmox VE 8.0 ISO Installer )のISOイメージを公式から取ってくる。

https://www.proxmox.com/en/downloads/item/proxmox-ve-8-0-iso-installer

起動用USBを作れとのことなのでその手のソフトでUSBに焼く。今回はbalenaEtcherを使用した。

ちなみに詳細は省くもののRufusだと上手く行かなかった。

(なおスクショを載せようか迷ったが特に迷うところがなかったので省略)

namn1125namn1125

2. Boot from USB or CD/DVD

空っぽなSSD付きのまっさらな鯖にUSBを挿し、起動順序をUSB優先にして起動。

Proxmoxブート

デフォルトで選ばれているグラフィカルを選択。

Iagree

規約に同意。

TargetHarddisk

「一番下で選ばれているTarget Harddiskに勝手にパーティション作ってインストールするけどおk?」といった内容。

選ばれているディスクが空のディスクであることを確認してNext

location

地域を選ぶ...こういうときいつも英語か日本語か迷うけどタイムゾーン優先で素直に日本にしておくのが吉

password

パスワードとEメールを指定。Eメールに色々通知してくれるらしい?便利

network

ホスト名とIPアドレス、ゲートウェイ、DNSサーバを聞かれる。LANで運用する場合ホスト名は好きに付けて良いのかな...?(その場合 .local をつければ良いが、それで良いか要確認かも...あんまり良くない)

IPアドレス、ゲートウェイ、DNSサーバのIPアドレスはIPv4かIPv6かで統一されている必要がある。隠す必要はなかったけど一応黒塗りにしている

summary

設定項目の要約が出る。問題がなければInstall!

wait

待ちます。完了するとInstallation Success!という表示が出て(☑を入れていれば)再起動されます。

スクショ取り逃したorz

namn1125namn1125

3. Configure the host machine

ここからはLAN上のPCからアクセスする。筆者の場合は、対象の8006ポートからアクセスできるよと案内された。

http :// ローカルIP :8006

こんな感じのURLを打つとログイン画面が出た。

login

「ユーザ名なんて設定していないが?」と思ったけどrootで良いらしい。良いのか

パスワードはインストール時に指定したものです。

no_valid_subscription

有効なサブスクが無いと言われてもねぇ...こちとら始めたばかりなのですよ()

とりあえずUbuntuとWindowsの仮想環境を建てるところまでやってみます。

詰まったので検索...

https://paradigmshift.x0.to/2021/06/20/669/

ISOイメージをアップロードすれば良いみたい

upload_button

右上のアップロードボタンを押すとファイル選択ダイアログが出るのでファイルを選んでアップロード

upload

iso_images

いい感じ

画面右上に「VMを作成」というあからさまなボタンがあるのでここからVMを作っていきます

create_vm

OS

他いっぱい設定項目があるけどとりあえず動かしたいだけなので全部デフォルトで!

default

起動したら「コンソール」タブから画面が見れます!

console

この後は普通にインストールして...なので次は本命のWindowsを確認して終わりたいと思います。

namn1125namn1125

当初は簡単にWindows環境について記述して終わるつもりだったが、出来心で中古で買ってしまい持て余していたグラボGeForce GTX TITAN Xを導入しようと思ったところWindows環境を整える数倍面倒だったので、関連事項を先にメモすることにした。

このスクラップが無事に完成し、もし問題がなければ順番を並び替えるなりなんなりしようと思う。

SSHの確認とaptエラー対策

Proxmox環境自体で開発したり等はありえないものの、設定ファイルの編集はWeb管理画面だときついものがあるため、SSHからエディタでやってみる。

$ ssh root@ローカルIP

大抵のlinuxマシン同様デフォルトでsshdが立ち上がっているのでLAN内からなら容易にアクセスできる。Vimは苦手なのでついでにここでEmacsを入れておこうと思う

apt update が無償版を使っているがゆえにエラーを吐いてしまうらしく次の記事に従い対応した

https://qiita.com/KEINOS/items/09fab2295ac32265bcaf

もう一個エラーになるリポジトリを参照していたらしく、/etc/apt/sources.list.d/ceph.listの内容もコメントアウトする必要があった

/etc/apt/sources.list.d/ceph.list
-deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
+#deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
namn1125namn1125

以降コマンドは管理者プロンプト # であるとする。気をつけて打とう。

NVIDIAグラボをパススルーする

次の記事様がとても参考になった。というか色々参照するとむしろ迷う。

https://qiita.com/disksystem/items/0879f379e2bbc7a08675

もう少し詳細が知りたい場合Arch wikiが詳しかった。(ProxmoxではなくKVMやQEMUに関連した記事)

なお公式のwikiもあり詳細も書かれていたが、英弱なのと本作業を行った時に予定がありあまり時間がなかったこともあり、一旦見なかったことにした(おい

Qiita記事そのままの内容を検証していく。

マザーボード(BIOS/UEFI)の設定

重要な操作です。

  • VT-dの有効化 (必須)
  • プライマリグラフィックアダプターをPCIeからオンボードに変える
    • もちろんオンボードGPU付きCPUが乗っている場合のみ。オンボードが無い時はパススルー対象のGPUがロックされないようになんとかする(2枚刺し等)
    • どうしても上記が無理な場合、ROMの吸い出しが要るらしい...?(未検証)
    • ここが一番難易度に影響しそう(オンボの映像出力が常に得られるかという点において)
    • (1敗)

IOMMUの有効化

IOMMUとはwikipedia曰くメインメモリとPCIeデバイスの間に入る管理ユニットらしく、仮想メモリを扱えるようにするものらしい。有効化が必須の模様

ブートローダー(GRUB)の設定 ( /etc/default/grub ) を変更することで有効化する

/etc/default/grub
-GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"

筆者はi5-8500を使用しているためintel_iommu=onの方を追記した。AMDのRyzen等を使用している方はamd_iommu=onとする。オプションに関する解説は元記事参照のこと

設定を反映する。

# update-grub

vfio-pci ドライバが読み込まれるようにする

記事ではここで再起動をするとグラボのHDMIから出力がなくなる、と書かれているが、筆者環境では普通に映った。おそらく仮想化用のドライバ( vfio-pci )があてがわれていないからと思われる。実際、ここまでの段階では nouveau が使われていた。

# lspci -v
...省略...
01:00.0 VGA compatible controller: NVIDIA Corporation GM200 [GeForce GTX TITAN X] (rev a1) (prog-if 00 [VGA controller])
        ...省略...
        Kernel driver in use: nouveau
        Kernel modules: nvidiafb, nouveau

記事に従い/etc/modules/etc/modprobe.d/blacklist.confにモジュールの設定を行う。

/etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
/etc/modprobe.d/blacklist.conf
blacklist pcspkr
blacklist radeon
blacklist nvidia
blacklist nvidiafb
blacklist nouveau
blacklist amdgpu
blacklist vfio

ここで再起動してみたが変わらず。

Arch wikiの方と、元記事の後半を参照すると、text:/etc/modprobe.d/vfio.conf への設定が必要な模様。

まず、 vfio-pci ドライバをあてる対象となるグラボのベンダー/デバイスIDを控える。

# lspci -nn
...省略...
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM200 [GeForce GTX TITAN X] [10de:17c2] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GM200 High Definition Audio [10de:0fb0] (rev a1)
...省略...

/etc/modprobe.d/vfio.conf に先程控えたデバイスを記述する

/etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:17c2,10de:0fb0 disable_vga=1

vfio-pci が先に読み込まれるように/etc/mkinitcpio.confに設定記述

/etc/mkinitcpio.conf
MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd)
HOOKS=(modconf)

CPUベースPCIeに挿している影響か(違うスロットでも映らず。)、プライマリグラボだけでなくCPUのオンボードからも映像出力が無くなってしまったが、設定を戻せば良いだけなのでとりあえずSSHできる今は良しとする。(こういう時のためにシリアルコンソールの使い方を知りたいかもしれない)

↑マザーボードの設定でオンボに出力を変更できることに気づいていなかった時の記述

残りの設定

やっておいた方が良さそうな設定をしておく。公式wikiにも書いてある設定だが、どのような効果があるかはよくわかってない。

/etc/modprobe.d/kvm.conf へ設定:

/etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

/etc/modprobe.d/iommu_unsafe_interrupts.conf へ設定:

/etc/modprobe.d/iommu_unsafe_interrupts.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
namn1125namn1125

書かれているページが見当たらないが大事な設定、Resource Mappingsを行う。

左のタブで、データセンター > Resource Mappingsを選び、PCI Devicesを追加する。

...なにか警告が出ているが大丈夫なはず...

今度こそWindows仮想環境 with GPUを作成していく。(GPUを使わない環境は使わない環境で別に用意した方が良さそう)

だいぶ投稿が空いてしまったので、ストレージのISOイメージにOSのイメージをアップロードしなければならないことをリマインドしておく

「VMを作成」から、仮想環境を作成していく。

「システム」は参照している記事に合わせた。 GPUが「none」ということはつまりWeb上からは見ることができないということだが、それで合っている 。動かす時は物理的にグラボのHDMIから映像出力を得る。

一旦これで「完了」を押す。VMのタブを開いた後、「ハードウェア」からPCIeデバイスの追加等を行う。

USBポートは適当。

virtioドライバーが必要になるのでダウンロード後、OSイメージと同様にストレージ(local 某) > IOSイメージでアップロードし、CD/DVD ドライブから追加。このドライバーは例えばネットワークアダプター等を有効化するために使う。 🪟を右クリックしてデバイスドライバー > ⚠がついているデバイスに充てる。

追加後全体(諸事情で一部異なるかも)↓

最後に /etc/pve/qemu-server/(VM番号).conf でcpuを編集

/etc/pve/qemu-server/(VM番号).conf
-cpu: host
+cpu: host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=whatever,kvm=off,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,smep\
=off,-pcid,-spec-ctrl,-ssbd,-hv-evmcs,+aes

起動して、パススルーしているグラボのHDMIから出力が得られれば成功。駄目な場合、ホストにGPUをロックされている可能性が高い。

このスクラップは2024/03/26にクローズされました