ミニPCにProxmox VEをインストールしてサーバ学習環境を整えてみた


　本記事はテックブログに投稿した内容を再編集したものになります。

# はじめに

　これまでノートパソコンでProxmox VEを動かしていましたが、ミニPCを購入したため、そちらに移行しました。

　本記事ではミニPCにProxmox VE 8.2をインストールして外付けHDDをパススルーし、OpenMediaVaultでNASを構築するところまでの「やってみた」系の記事になります。

※ 2024年11月現在、Proxmox VE 8.3がリリースされましたがインストール当時の8.2を対象バージョンとしています。

## 動作環境

　今回、Proxmox VEのインストールにあたり事前に用意したものは以下の通りです。

- ミニPC
- Proxmox VE 8.2のisoファイルを焼いたUSB（今回はVentoyを使用）
- 外付けHDD

## 注意事項

　本来はOSをインストールする過程が存在するのですが、本記事では詳細を割愛させていただきます。
　必要に応じて公式のインストールガイドをご参照ください。

　なおOSのインストールなどによって生じたいかなる問題も責任は負いかねますので、あらかじめご了承ください。

# Proxmox VEとは

　[Proxmox Virtual Environment](https://www.proxmox.com/en/proxmox-virtual-environment/overview)（Proxmox VE）はオープンソースの仮想化プラットフォームです。
　仮想マシン型のKVMとコンテナ型のLXCをサポートしており、Web UI上から操作できる。という特徴を持ちます。

　ノートパソコンで動かしていた時にはLXCにGrafanaやPrometheusをインストールして監視をしたり、ラズパイで構築していたk3sサーバを立てようと試行錯誤したりしていました。

![Proxmox VEのログイン画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/f45f4acf-a21d-7105-1659-72a71178a74d.png)

# OpenMediaVaultとは

　[OpenMediaVault](https://www.openmediavault.org/)は主に家庭環境や小規模なホームオフィスで使用するように設計されたNASシステムです。

　これまではラズパイにOpenMediaVaultをインストールし、NASとして利用していました。
　今後はProxmox上のVMで動作させていきます。

![OpenMediaVaultのログイン画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/16d2256b-c99a-e641-6da3-10b612ef5a7b.png)

（ログイン画面がかっこいい。。。）

# 【省略】 Proxmoxのインストール

　本記事では詳細を割愛させていただきます。

　なおインストール時は以下のようになります。

![Proxmox VEのインストール画面01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/c0d9b52d-dacc-523b-bea7-0026c679630a.png)
![Proxmox VEのインストール画面02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/56c19e9e-813b-65f0-cb26-fb294afc8344.png)
![Proxmox VEのインストール画面03](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/78d74aff-efe7-c759-e1cb-cf0b127539e0.png)

　インストールが完了すると、WebUIが8006番ポートで動作します。
　今回の場合はミニPCのIPアドレスを192.168.0.200に設定したため、`https://192.168.0.200:8006`にアクセスするとログインウィンドウが表示されます。

![Proxmox VEのログイン画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/f45f4acf-a21d-7105-1659-72a71178a74d.png)

　インストール時に設定したパスワードを入力することでログインできます。
※ 言語を変更すると入力内容が消えてしまうため、日本語に変更する場合は認証情報を入力する前に行う必要があります。

　インストール直後はエンタープライズ用のリポジトリになっているため、サブスクリプションキーが不要なリポジトリに変更します。

　ノードのサイドバーにあるアップデートからリポジトリを選択します。
　追加ボタンを押下し、リポジトリに「No-Subscription」を選択して追加します。

![Proxmoxのリポジトリ変更画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/4a35c055-5160-3675-9aa3-f4272dacebca.png)

# VMの作成

　OpenMediaVaultはVM上で動かします。
　VMを作成する方法はいくつかありますが、今回は[Cloud-init](https://cloudinit.readthedocs.io/en/latest/)イメージをテンプレート化し、それをクローンする形で作成します。

　今回はDebianが提供しているクラウドイメージを使います。

　ノードのサイドバーにあるシェルから次のコマンドを実行します。

```bash
root@pve:~# wget https://cdimage.debian.org/images/cloud/bookworm/20241110-1927/debian-12-generic-amd64-20241110-1927.qcow2
```

　クラウドイメージのダウンロードが完了したら、VMを作成してクラウドイメージをアタッチさせます。

```bash
# VM作成
root@pve:~# qm create --name debian-template2 9002 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virt
io-scsi-pci
# クラウドイメージのアタッチ
root@pve:~# qm set 9002 --scsi0 local-lvm:0,import-from=/root/debian-12-generic-amd64-20241110-1927.qcow2
```

次にCloud-initドライブを追加します。

```bash
root@pve:~# qm set 9002 --ide2 local-lvm:cloudinit
```

　ブート順の変更とxterm.jsを使用するための設定を行なって、テンプレート化前の作業は完了です。

　なお2つ目のコマンドは一部のイメージで動作しない場合もあるようで、その場合はデフォルトに戻す必要があります。

> For many Cloud-Init images, it is required to configure a serial console and use it as a display. If the configuration doesn’t work for a given image however, switch back to the default display instead.
>
> *https://pve.proxmox.com/wiki/Cloud-Init_Support#_preparing_cloud_init_templates*

```bash
# ブート順の変更
root@pve:~# qm set 9002 --boot order=scsi0
# シリアルコンソールの構成
root@pve:~# qm set 9002 --serial0 socket --vga serial0
```

　最後にこのVMをテンプレート化して、そこからOpenMediaVault用のクローンVMを作成します。

```bash
root@pve:~# qm template 9002
root@pve:~# qm clone 9002 123 --name openmediavault2
```

　これでVMが完成しました。
　サイドバーのCloud-initメニューからユーザ名の設定などができるようになったためお好みで設定します。
　今回は、ユーザ名・パスワード、IP構成を設定しました。

![VMサマリー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/7f04853d-92e8-98e2-53af-ccc42484a34c.png)
![VM Cloud-init](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/6048e7f5-8bd6-2cf4-92e0-a15d19db7f0e.png)

　クラウドイメージのアタッチ時にディスク容量を設定しなかったため、現在は自動的に設定されたディスク容量になっています。
　OpenMediaVaultをインストールするには少ないためリサイズをします。

　サイドバーのハードウェアメニュー内にて、ハードディスク（scsi0）を選択します。
　画面上部にあるディスクの動作ボタンからリサイズを押下すると、どれだけディスク容量を増分させるか入力するモーダルが表示されるため、今回は2GiBほど増やします。

![VMのリサイズ画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/c55f36c3-02f6-d240-71f7-eea4eb33efe3.png)

# 外付けHDDのパススルー

　OpenMediaVaultのVMに外付けHDDを[パススルー](https://pve.proxmox.com/wiki/Passthrough_Physical_Disk_to_Virtual_Machine_(VM))します。
※ すでに構築済みのVMにパススルーしているため、実際にはコマンドを実行していません。

```bash
# 上記ドキュメントから抜粋
# ディスクIDの取得
find /dev/disk/by-id/ -type l|xargs -I{} ls -l {}|grep -v -E '[0-9]$' |sort -k11|cut -d' ' -f9,10,11,12
/dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 -> ../../sda
/dev/disk/by-id/wwn-0x5000c500c35cd719 -> ../../sda
/dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 -> ../../sdb
/dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 -> ../../sdc
/dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2 -> ../../sdd
/dev/disk/by-id/wwn-0x5000c500661eeebd -> ../../sdd
# 物理ディスクの追加
qm set 123 -scsi2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC
```

# OpenMediaVaultのインストール

　これにてVM側の準備は完了しました。
　画面上部の開始ボタンを押下し、VMが起動したらコンソールからxterm.jsを選択します。

　Cloud-init画面で設定したユーザ情報でログインしたらOpenMediaVaultをインストールします。
[インストールガイド](https://docs.openmediavault.org/en/latest/installation/on_debian.html)に、

> On [Raspberry Pi OS](https://www.raspberrypi.org/software/operating-systems/) the below instructions only partially work. Please refer to a specific [installation script](https://github.com/OpenMediaVault-Plugin-Developers/installScript)

　と、ありますがDebianでも問題なくインストールすることができたため、ここでリンクされているインストールスクリプトを使います。

```bash
$ sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
```

　しばらくするとインストールが完了します。
　無事にインストールできている場合はVMのIPアドレスにアクセスすることでOpenMediaVaultのログイン画面が表示されます。

ユーザ名に`admin`を、パスワードに`openmediavault`でログインできます。

> **What are the default credentials for the UI?**
>
>  Use the user ‘admin’ and the password ‘openmediavault’ for the first login.
>
> *https://docs.openmediavault.org/en/latest/faq.html*

![OpenMediaVaultのログイン画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/16d2256b-c99a-e641-6da3-10b612ef5a7b.png)

# OpenMediaVaultのセットアップ

※ 以降は今回の記事内で作成したVMではなく、外付けHDDをパススルーしたVMになります。

　OpenMediaVaultのインストールが完了しました。
　今回はSambaサーバをセットアップしてProxmoxのストレージとして追加し、LXCテンプレートをダウンロードしてコンテナを作成するところまで行います。
（当初はNFSサーバをセットアップしてストレージにする予定だったのですが、アクセス権周りでエラーが発生してうまくいかなかったため断念しました。）

　まずは上記でパススルーした外付けHDDをマウントします。
　サイドバーにあるストレージアコーディオンからファイルシステムを選択します。
　デバイス一覧の上部にある「矢印」ボタンを押下してマウント画面を開きます。

![OVM ファイルシステム画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/47acc1e1-fe3e-c0ee-ff63-48bf88dccdad.png)

　そこでパススルーしたデバイスを選択して保存します。
　しばらくすると構成の変更を反映させるか確認されるため、変更します。

　続いて、共有フォルダの作成を行います。
　サイドバーのストレージアコーディオンから共有フォルダを選択し、一覧の上部にある「プラス」ボタンを押下して作成画面を開きます。

![OVM 共有ストレージ画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/d8dbef0b-eca7-0913-0e4d-a3d2c5ae0483.png)

　共有フォルダの名前をお好みで設定し、ファイルシステムに先ほど追加した外付けHDDのデバイスを選択します。
　パーミッションに問題がない場合はそのまま保存をして構成を変更します。

　次にこの共有フォルダを操作するためのユーザを作成します。
　サイドバーのユーザーアコーディオンからユーザーを選択し、一覧上部にある「プラス」ボタン作成を押下してユーザーの作成画面を開きます。

　お好みの設定でユーザーを作成したら、一覧画面で先ほど作成したユーザーを選択して、作成ボタンの2つ隣にある「かぎ」ボタンを押下します。
　共有フォルダーのパーミッションを選択する画面が表示されるため「Read/Write」権限を付与します。

![OVM ユーザ画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/7f33db0d-c641-70d7-fd88-2d81c727b476.png)

　ユーザーの作成とパーミッションの変更を行ったら構成を変更します。

　最後にSambaの設定を行ないます。

　サービスアコーディオン→SMB/CIFSアコーディオン→設定を選択し、設定画面上部にある「有効」のチェックボックスにチェックをつけます。

　次にサービスアコーディオン→SMB/CIFSアコーディオン→共有を選択し、一覧上部にある「プラス」ボタンを選択します。先ほど作成した共有フォルダを選択して保存し、構成を変更します。

![OVM SMB設定画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/03dfb6e7-9f36-c247-611c-3ebddf0303f0.png)
![OVM SMB共有画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/dda31ffe-932a-e8af-971c-096ae0f90810.png)

　これにてOpenMediaVaultで行う作業は終了です。
　smbで共有フォルダにアクセスすることも、Proxmoxのストレージとして使うこともできるようになりました。

　今回は共有フォルダをProxmoxのストレージとして追加します。

　Proxmox VE WebUIに戻ります。
　データセンターのサイドバーにあるストレージを選択して、追加→SMB/CIFSを押下します。

![Proxmox ストレージ追加画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/118d9c29-9f53-eefe-a352-8070857869ae.png)

　モーダルが現れるため、まずは「ID」を入力し、このストレージに保存する「内容」を選択します。
　今回はこのストレージにLXCテンプレートを保存したいため、最低でも「コンテナテンプレート」を選択します。

　続いて、「サーバ」にOpenMediaVaultのIPアドレスを、「ユーザ名」と「パスワード」に先ほど作成したユーザーの情報を入力します。
　すると「Share」にて作成した共有フォルダが選択できるようになります。
　共有フォルダを選択したら追加ボタンを押下してストレージを追加します。

![Proxmox ストレージ追加画面2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/bac35ee2-b7de-700a-d1b0-479295d710a9.png)

　ストレージの追加が完了しました。
　実際にこのストレージにLXCテンプレートをダウンロードしてコンテナを作成してみます。

　先ほど追加したストレージを選択し、サイドメニューにあるCTテンプレートを選択します。
　画面中央上部にあるテンプレートボタンを押下すると、あらかじめ用意されているコンテナイメージの一覧が表示されます。

　今回はコンテナを作成することが目的なため、適当なコンテナイメージを選択してダウンロードします。

![Proxmox LXCダウンロード画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/736eb69f-3246-65a7-1576-f0f5cbc85596.png)

　LXCテンプレートのダウンロードが完了したら、画面上部にある「CTを作成」ボタンを押下します。
　パスワードの入力を求められるため任意のパスワードを入力し、次に進みます。
　テンプレートを選択する画面では追加したストレージと、先ほどダウンロードしたコンテナイメージを選択します。

　あとはお好みの設定をしてコンテナを作成します。

　コンテナの作成が完了するとノード内に新たなコンテナが追加されます。今回の場合はCT102です。

![Proxmox LXC作成画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/2168c515-7792-353e-4715-8ba4a47515db.png)

　最後にこのコンテナを起動してアクセスするところまでやってみます。

　サイドバーにあるオプションを選択し、コンソールモードを「tty」から「shell」に変更します。
　その後、画面上部にある開始ボタンを押下してコンテナを起動させます。

　コンテナが起動したらサイドバーにあるコンソールを選択するとコンテナコンソールにアクセスできます。

![Proxmox LXCコンソール画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594132/c6123d08-d33b-1bc5-8586-c7f7da13be64.png)

# まとめ

　本記事ではミニPCにProxmox VEをインストールしてサーバ学習環境を整えました。

　Proxmox VEはサーバを構築しては削除して、を手軽に行えるためサーバの学習にぴったりだと思います。学習を続けて、さらなる記事にしてきたいと思います。