RaspberryPiにProxmoxVEをインストールする

### 2021/11/16追記

**Raspberry Pi OS Bullseyeがリリースされたことに伴い、記事を更新しました。
こちらをご覧ください。**
https://qiita.com/wancom/items/c6b5ca66ab421d696beb

---------------

[某散財系鯖主](https://www.youtube.com/channel/UCEOXpbYUlbKwt2tFvqKQ2xg)が[ProxmoxVE](https://ja.wikipedia.org/wiki/Proxmox_VE_(仮想化プラットフォーム))という仮想化プラットフォームについて話していました。

ちょうど最近、仮想化基盤について興味が出てきていたので試したいと思いつつamd64のマシンが手元にないため羨ましく眺めていました。
使えそうなマシンといえばRaspberryPiだけしかないので流石に無理でしょうと思いつつ調べたらこんなものが。

https://www.reddit.com/r/Proxmox/comments/n4d7ev/now_running_proxmox_on_a_raspberry_pi_4_cluster/?utm_source=amp&utm_medium=&utm_content=post_body

はい。早速やってみましょう！！

ちなみに上記のページにもありますがRaspberryPi4の4GB以上のモデルを使用してください。

# TL;DR
- 64bit版のRaspberryPiをダウンロードして書き込む。
自分はこのバージョンのOSをダウンロードしましたが、おそらく他のバージョンでも大丈夫だと思います。
[2021-03-04-raspios-buster-arm64.zip](https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2021-04-09/2021-03-04-raspios-buster-arm64.zip)
他のバージョンは[ここから](https://downloads.raspberrypi.org/raspios_arm64/images)探してみてください。  
**2021/7/23追記**
上記はデスクトップ版のイメージですが、ちゃんと探してみたら64bit版のlite版もありました。
[2021-05-07-raspios-buster-arm64-lite.zip](https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2021-05-28/2021-05-07-raspios-buster-arm64-lite.zip)
2021/7/23現在最新の上記のイメージでも正常に動くことを確認したので、特に理由がなければこちらを使用したほうが余計なパッケージもないためいいかもしれません。
最新バージョンは[ここから](https://downloads.raspberrypi.org/raspios_lite_arm64/images/)探してみてください。



- IPアドレスを固定する

``` /etc/dhcpcd.conf
# 下記を自分の環境に合わせて追記する。
interface eth0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
```

- `hosts`ファイルを修正する  
`hosts`ファイルを修正しないとProxmoxが正常に起動できないので注意してください。

``` /etc/hosts
# おそらく下記のような行があると思うのでコメントアウトまたは削除し、
# 127.0.1.1 		raspberrypi

# 代わりに下記のように2で割り当てたIPアドレスと対応する行を追加する
192.168.0.11		raspberrypi
```

- RaspberryPi用のProxmoxを提供しているAPTリポジトリを追加する

```
curl https://gitlab.com/minkebox/pimox/-/raw/master/dev/KEY.gpg | sudo apt-key add -
curl https://gitlab.com/minkebox/pimox/-/raw/master/dev/pimox.list | sudo tee /etc/apt/sources.list.d/pimox.list
sudo apt update
```

- Proxmoxをインストールする

```
sudo apt install pve-manager
```

- 最後に再起動する

# 簡単に解説
自分も最近始めたてで詳しくないので細かい言及は避けますが、少しだけ。

## 64bit版のRaspberryPi OSをインストールする
今回は通常使われている32bit版のOSではなく、ベータ扱いの64bit版のOSを使用しました。
これは64bit版のlinuxでは仮想マシンで使用するKVMに対応しているためです。
KVMに対応していると仮想マシンの性能が大きく向上します。
興味がある方はKVMについて調べてみてください。

## /etc/hostsファイルを修正する
自分で試した時に最初`127.0.1.1         raspberrypi`の項目を残していたところ、Proxmoxのサービスが正常に起動できませんでした。
そこまで苦戦する箇所ではありませんが、何かうまくいかない時は/etc/hostsファイルを確認してみてください。
ちなみにホスト名を変更する場合は`raspberrypi`をホスト名に合わせてください。

## RaspberryPi用のProxmoxを提供しているaptリポジトリを追加する
有志がRaspberryPi用にパッチを当てたProxmoxのバイナリ版を配布しているようなのでそれをありがたく使わせてもらいます。
大丈夫だとは思いますが、第3者のリポジトリは自己責任で利用してください。
ここではgpg鍵の登録とリポジトリを追加する参照設定を行い、最後にパッケージリストの更新をしています。

## Proxmoxをインストールする
最後にProxmoxをインストールします。
通常は`proxmox-ve`を入れるようなのですが、参考にした掲示板の書き込みによるとカーネル周りでトラブルが起きるかもしれないとのことだったので`pve-manager`をインストールしています。

# ちょっと試してみる
ProxmoxをインストールしたらやはりVMを起動してみたいですよね。少しだけ試してみましょう。

## Proxmoxにログインする
インストールが終わったら初めに`root`アカウントにパスワードを設定します。

```
sudo passwd
```

`root`アカウントのパスワードを設定したら`https://192.168.0.11:8006/`にアクセスしてみましょう。
自己署名証明書なのでアクセス時に警告画面がでますが、そのまま気にせすアクセスします。
そうするとログインを求められるのでrootアカウントでログインしましょう。
`User name`に`root`を、`Password`に先ほど設定したパスワードを入力します。
`Realm`は`Linux PAM standard authentication`を選択してください。
![Screen Shot 2021-07-19 at 10.01.33 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155364/e1eb1fcf-1ac6-49f1-0e57-2c5900645f9b.png)
最後に`Login`をクリックすればProxmoxにログインできるはずです。
`No valid subscription`というアラートが出ますが、気にせず`OK`で閉じてください。

## ストレージを追加する
自分はRaspberryPiで立てたNFSのファイルサーバがあったのでそれをVMの保存先にするためストレージを追加します。他にもCIFS(Samba)やCephなど様々なストレージに対応しています。
左のツリービューで`Datacenter`を選択し、右のビューの`Storage`を選択、上の`Add`をクリックして追加するストレージの種類を選択します。
あとは表示に従って設定をし、ストレージを追加します。

## ネットワークを使用するためブリッジを追加する
仮想マシンをインターネットに接続するためにブリッジを追加します。
ブリッジは仮想のネットワークスイッチのようなものです。
左のツリービューで`Datacenter`->`raspberrypi`(ノード)を選択し、右のビューの`System`->`Network`を選択、上の`Create`をクリックして`Linux Bridge`を選択します。
`IPv4/CIDR`にサーバのIPアドレスとネットマスクを、`Gateway(IPv4)`にルータのIPアドレスを、Bridge portsに`eth0`(使用しているNIC)を入力します。
最後にCreateをクリックします。
![Screen Shot 2021-07-19 at 10.14.04 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155364/4cb3cde7-0e02-37e1-133e-0b358c2b9a94.png)
これだけではまだ設定が完了していないので上の`Apply Configuration`をクリックします。
ここでおそらく`ifupdown2`がないと言われると思うので、左の`Shell`でターミナルを開き、インストールしましょう。

```
apt install ifupdown2
```
インストールが終わったら戻ってもう一度`Apply Configuration`をクリックします。

## インストールディスクイメージをアップロードする
VMを作成する前にインストーラーを用意しておきましょう。
Ubuntuの公式サイトから`arm64`向けのインストールイメージをダウンロードします。`amd64`は使用できないので注意してください。
ダウンロードしたら、Proxmoxに戻り、左のツリービューで`Datacenter`->`raspberrypi`(ノード)->`local`(ストレージ)を選択します。
右の`ISO Images`を選択し、上の`Upload`をクリックして、イメージファイルをアップロードします。
ちなみに自分はすでにファイルサーバ上にあったためそれをProxmoxのディレクトリ内にコピーして使用しました。

## VMを作成、起動する
長らくお待たせしました。ようやくVMを起動する準備が整いました。
右上の`Create VM`をクリックします。あとは画面の指示に従って設定してください。
気をつける点は

- `General`の`Name`でVMの名前をつける
- `System`の`BIOS`で`OVMF(UEFI)`を選択し、`Add EFI Disk`にチェックを入れ、`Storage`で保存先を選択する
(なぜか`SeaBIOS`だとインストーラが起動しませんでした。)

ぐらいだと思います。
なぜかデフォルトで追加される`CD/DVD Drive`の`IDE`が原因で起動しないため、仮想マシンを起動する前に設定を変更します。
左のツリービューで`Datacenter`->`raspberrypi`(ノード)->`VM`(追加した仮想マシン)を選択します。
右の`Hardware`を選択し、`CD/DVD Drive(ide*)`を`Remove`して、`Add`をクリック、`CD/DVD Drive`を選択します。
一番上の`IDE`を`SCSI`に変更し、隣の番号を空いているものに設定します。
あとは下の項目でインストールディスクイメージを選択し、`Create`をクリックします。
![Screen Shot 2021-07-19 at 10.44.37 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155364/3d56a8ae-cbcb-ff64-c60c-ab19d3fb95e8.png)
最後に設定が終わったら右上の`Start`をクリックして仮想マシンを起動してください。
近くにある`Console`->`noVNC`で仮想マシンの画面を表示できます。

# あとがき
意外とこの手の記事はなさそうだったので忘れる前に記事にしてみました。
個人的にはRaspberryPiでも思った以上に動いて面白いと思いました。
ただ、ファイルサーバを使用しているためか、IOが遅いのでなんとかしたいところです。
~~（あとRaspberryPi4追加で2台欲しいな…）~~

バーっと書き上げたので誤字、脱字、間違い等があるかもしれません。
その際はご指摘いただければ幸いです。

# Reference
- https://www.youtube.com/channel/UCEOXpbYUlbKwt2tFvqKQ2xg
- https://ja.wikipedia.org/wiki/Proxmox_VE_(仮想化プラットフォーム)
- https://www.reddit.com/r/Proxmox/comments/n4d7ev/now_running_proxmox_on_a_raspberry_pi_4_cluster/?utm_source=amp&utm_medium=&utm_content=post_body
- https://gitlab.com/minkebox/pimox