ProxmoxVEのセットアップと利用


# 0. はじめに
自宅で複数のサーバー環境を使用するため、ProxmoxVEを使用した仮想マシンをセットアップする（メモ）。

# 1. ハードウェアの準備
* Linux機、Windows機を含めて5つくらいのゲストOSを想定したハードウェアとした。

| 種類 | 製品名 | 備考 |
|:--|:--|:--|:--|
| ベアボーン | Shuttle スリム型ベアボーン DH270 | [メーカー製品ページ](http://shuttle-japan.jp/dh270/)<br>音と熱を心配していたが、静かで熱も低く一安心。<br>CPUグリスは標準添付でなくナノダイヤモンドグリスを別途購入。 |
| CPU | Intel CPU Core i5-7600 | [メーカー製品ページ](https://ark.intel.com/ja/products/97150/Intel-Core-i5-7600-Processor-6M-Cache-up-to-4_10-GHz)<br>ボードに合わせて、ソケット:LGA1151、TDP:90W以下。 |
| メモリ | Kingston ノート用メモリ DDR4-2400 (PC4-19200) 16GB<br>CL14 1.2V Non-ECC SODIMM | [Amazon商品ページ](https://amzn.to/2Ah9Etu)<br>ボードに合わせてノート用。 |
| SSD | WD 内蔵SSD M.2-2280/512GB/WD Black/PCIe Gen3 NVMe | [Amazon商品ページ](https://amzn.to/2K2XJPP)<br>ボードに合わせてPCIe接続 M.2-2280。 |
* ディスプレイはHDMIで繋いでテレビ（50インチのコンソール！）で代用。マウス、キーボードは適当に調達する。
* ProxmoxVEのインストール用に1GB以上のUSBメモリを用意する。


# 2. 仮想環境の構築
[Proxmox VE 5.2](https://www.proxmox.com/en/)（Webインターフェースを持つ仮想アプライアンス）を使用し、ハイパーバイザーはKVMを選択した。

## 2.1. インストール用USBメモリを作成
USBメモリでのインストールを行う。
※ DVDメディアを想定していたが、ベアボーンがDVDドライブ（AppleのSuperDrive）を認識しなかったため。

以下の作業はmacOSで行う。

1. インストール用isoイメージをダウンロード
	* https://www.proxmox.com/en/downloads
	* 任意のディレクトリにisoイメージ（proxmox-ve_5.2-1.iso）を保存。
1. USBメモリーへのisoイメージ書き込み<br>※ ディスクユーティリティでのフォーマットに失敗したためコマンドラインから実施。
	1. USBメモリの接続状態を確認。

		```
		$ diskutil list
		→ USBメモリーの認識先を確認（例：/dev/disk1）
		```
	1. isoイメージをUSBメモリに書き込む。<br>__※ ddコマンドは書き込み先を誤ると危険のため注意。__

		```
		アンマウント（例：/dev/disk1）
		$ diskutil unMountDisk /dev/disk1

		書き込み（例：/dev/disk1）
		$ cd ＜インストールイメージの保存先＞
		$ sudo dd if=proxmox-ve_5.2-1.iso of=/dev/rdisk1 bs=1m
		```

## 2.2. Proxmox VEのインストール

### 2.2.1. USBブート
USBでブートし、ProxmoxVEのインストールウィザードが表示される。

* このハードの場合
	1. USB2.0（3.0だとドライバがない？）のポートに作成したインストール用USBメモリを刺す。
	1. 電源を入れ、DELETEキーを数回押してBIOS画面に切り替える。
	1. USBでブートできるよう確認、設定変更し、保存して再起動。


### 2.2.2. インストールウィザード
インストールウィザードの指示に従って、インストールを進める。

参考: [Proxmox VEのセットアップ手順（インストール編）](https://qiita.com/juze9/items/15ffe7eb0feed675552e)

1. インストールメニュー: Install Proxmox VEを選択
1. End User License Agreement（EULA）: I agree をクリック
1. Target Harddisk: 
	* インストール先ドライブを選択: 任意（今回はドライブが1つ）
	* ハードディスクオプション: ファイルシステムにXFSを選択
		* CentOS7デフォルトなので安定しているとみて。
		* ZFS、BTRFSは新しいためもあり課題を見かけるので除外。
		* 参考
			* https://qiita.com/sion_cojp/items/c8e015db39ddbf43012e
			* https://qiita.com/sion_cojp/items/bef955bba3dbf9d603f8
1. Location and Time Zone selection
	* Country: Japan
	* Time zone: Asya/Tokyo
	* Keyboard Layout: Japanese
1. Administration Password and E-Mail Address
	* rootユーザーのパスワードとメールアドレスを入力
	* 両方とも後でWebUIから変更可能
1. Network Configuration（例）
	* Hostname: pve.local
	* IP Address: 192.168.1.5
	* Network: 255.255.255.0
	* Gateway: 192.168.1.1
	* DNS Serer: 192.168.1.1
1. インストール開始〜完了、再起動

## 2.2.3. 起動とSSH設定

ProxmoxVEホストを起動し、SSHの設定をする。

1. SSDからブートし、起動を確認する。
	* Proxmox Virtual Environment GNU/Linux を選択して起動する。
	* うまくブートしない場合は、BIOSや参考サイトの方法を確認する。
1. SSHでログインし、パッケージを最新化する
	1. SSHログインできない場合はコンソールからログインして確認
	1. リポジトリを変更する。
		* 参考: https://pve.proxmox.com/wiki/Package_Repositories

		```:/etc/apt/sources.list
		※ サブスクリプションなしのリポジトリを追加

		# PVE pve-no-subscription repository provided by proxmox.com, NOT recommended for production use
		deb http://download.proxmox.com/debian stretch pve-no-subscription
		```
	
		```:/etc/apt/sources.list.d/pve-enterprise.list
		※ Enterprise Repositoryはサブスクリプションキーが必要のため無効化
		
		deb https://enterprise.proxmox.com/debian stretch pve-enterprise
		↓
		#deb https://enterprise.proxmox.com/debian stretch pve-enterprise
		```

	1. パッケージを最新化する。
	
		```
		# apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade
		```
1. クライアントのMac上でSSH鍵を準備し、ProxmoxVEホストに転送する。
	1. sshの公開鍵を作成する。

		```
		$ ssh-keygen -t rsa -C "コメント：利用者のメアドなど"
		→ 保存先、パスフレーズを入力して鍵を作成
		```
	1. ssh鍵をProxmoxに転送する。

		```
		$ ssh-copy-id -i "公開鍵ファイル（xxx.pub)" root@"ProxmoxVEホスト"
		```
1. コンソール or SSH（パスワード）でProxmoxVEホストにログインし、SSHサーバーの認証を公開鍵認証のみにする。
	1. sshdの設定ファイルを編集する。
	
		```:/etc/ssh/sshd_config
		※ Rootはパスワード認証を禁止
		PermitRootLogin yes
		↓
		PermitRootLogin without-password
		
		※ パスワード認証を禁止
		#PasswordAuthentication yes
		↓
		PasswordAuthentication no
		

		※ 以下はそのまま
		#PubkeyAuthentication yes
		ChallengeResponseAuthentication no	
		```

	1. sshdを再起動する。
	
		```
		# /etc/init.d/ssh restart
		```
	1. ログアウトして公開鍵でログインする。
	
		```
		$ ssh -i "秘密鍵ファイル" root@"ProxmoxVEホスト"
		```



# 3. ゲスト環境の作成

Proxmox VEでのLinux機、Windows機のインストール設定。

## 3.1. Linux機のセットアップ

例としてCentOS7を使用する。OSによりGuestOSの設定が少し変わる。

### 3.1.1. VM作成

VMを作成する。

1. Webの管理画面にログインする。
	* https://192.168.1.5:8006/ （※ URLは例）
1. インストールするOSのISOイメージをProxmoxVEホストにアップロード
	1. 管理画面の左ツリービューにて以下を選択
		* データセンター > "ProxmoxVEホスト" > local
	1. 右の詳細ビューにて「内容」を選択
	1. 「アップロード」ボタンをクリックし、ISOファイルをアップロード 
1. 管理画面の右上の「VMを作成」をクリックする。
1. ウィザードの指示に従い、VMの設定を入力する。（内容は例）
	1. 全般
		* ノード: "ProxmoxVEホスト"
		* VM ID: 100 （任意：ツリービューに表示されるID）
		* 名前: vm-lin01 （任意：ツリービューに表示される名称）
	1. OS
		* CD/DVD イメージファイル (iso) を使用する: チェックオン
			* ストレージ: local
			* ISOイメージ: 手順2でアップロードしたISOイメージ
		* Guest OS:
			* 種別: Linux
			* バージョン: 4.X/3.X/2.6 Kernel
	1. ハードディスク
		* バス/デバイス: SCSI
		* ストレージ: local-lvm
		* ディスクサイズ（GiB）: 32 （任意）
		* キャッシュ: デフォルト（キャッシュがありません）
	1. CPU
		* ソケット: 1 （任意）
		* コア: 1 （任意）
		* 種別: デフォルト（kvm64）
	1. メモリー
		* メモリー（MiB）: 512 （任意）
	1. ネットワーク
		* ネットワークデバイスなし: チェックオフ
		* ブリッジ: vmbr0
		* モデル: VirtIO（準仮想化）
1. 内容を確認し、「完了」をクリックする。
1. VM作成処理が実行するため、完了するまで待つ。



### 3.1.2. OSインストール

1. 左ツリービューにて、作成したVMを選択する。
1. 右詳細ビューにて、右上の「起動」をクリックする。
1. 右詳細ビューにて、右上の「コンソール」をクリックしてVMの起動を確認し、コンソールにてインストール作業を行う。
1. ※ OSインストール手順、作業用ユーザーの作成とsudoの設定等は割愛。

## 3.2. Windows機のセットアップ

例としてWindows10を使用する。OSによりGuestOSの設定が少し変わる。

### 3.2.1. VM作成

VMを作成する。

1. Webの管理画面にログインする。
	* https://192.168.1.5:8006/ （※ URLは例）
1. インストールするOSのISOイメージをProxmoxVEホストにアップロード
	1. 管理画面の左ツリービューにて以下を選択
		* データセンター > "ProxmoxVEホスト" > local
	1. 右の詳細ビューにて「内容」を選択
	1. 「アップロード」ボタンをクリックし、ISOファイルをアップロード 
1. 管理画面の右上の「VMを作成」をクリックする。
1. ウィザードの指示に従い、VMの設定を入力する。（内容は例）
	1. 全般
		* ノード: "ProxmoxVEホスト"
		* VM ID: 200 （任意：ツリービューに表示されるID）
		* 名前: vm-win01 （任意：ツリービューに表示される名称）
	1. OS
		* CD/DVD イメージファイル (iso) を使用する: チェックオン
			* ストレージ: local
			* ISOイメージ: 手順2でアップロードしたISOイメージ
		* Guest OS:
			* 種別: Microsoft Windows
			* バージョン: 10/2016
	1. ハードディスク
		* バス/デバイス: IDE 0
		* ストレージ: local-lvm
		* ディスクサイズ（GiB）: 100 （任意）
		* キャッシュ: デフォルト（キャッシュがありません）
	1. CPU
		* ソケット: 2 （任意）
		* コア: 2 （任意）
		* 種別: デフォルト（kvm64）
	1. メモリー
		* メモリー（MiB）: 4096 （任意）
	1. ネットワーク
		* ネットワークデバイスなし: チェックオフ
		* ブリッジ: vmbr0
		* モデル: Intel E1000
1. 内容を確認し、「完了」をクリックする。
1. VM作成処理が実行するため、完了するまで待つ。


### 3.2.2. OSインストール

1. 左ツリービューにて、作成したVMを選択する。
1. 右詳細ビューにて、右上の「起動」をクリックする。
1. 右詳細ビューにて、右上の「コンソール」をクリックしてVMの起動を確認し、コンソールにてインストール作業を行う。
1. ※ OSインストールの手順は割愛。

### 3.2.3. VirtIOドライバの適用

パフォーマンス向上を図るため、ネットワークとハードディスクにVirtIOドライバを適用する。
（VMWare Toolsのようなもの）

1. 以下などからVirtIOドライバをダウンロードする。virtio-win.isoなどと表示されている。
	* この時点では、virtio-win-0.1.141.iso
	* https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
	* https://fedoraproject.org/wiki/Windows_Virtio_Drivers
1. VirtIOのISOイメージをProxmoxVEホストにアップロードする。
	1. 管理画面の左ツリービューにて以下を選択
		* データセンター > "ProxmoxVEホスト" > local
	1. 右の詳細ビューにて「内容」を選択
	1. 「アップロード」ボタンをクリックし、ISOファイルをアップロード

#### 3.2.3.1. ネットワークデバイスのVirtIO化

1. Proxmox側でVirtIOドライバをCD/DVDドライブに設定しておく
1. Windows機のVMをシャットダウンする。
1. 管理画面の左ツリービューにてWindows機のVMを選択し、「ハードウェア」の「ネットワークデバイス」の項目をダブルクリックし、編集する。
	* モデル： Intel E1000 → VirtIO（準仮想化）
	* OKをクリックして保存する。
1. VMを起動すると、デバイスドライバを求めてくるので、手順3でアップロードしたISOをCD/DVDディスクイメージとして指定する。
1. Windows機が起動したらログオンする。
1. ドライバのインストールダイアログが表示されるのでインストールを実行する。
1. デバイスマネージャーでネットワーク関連のドライバを適用する。
	1. Windowsマークを右クリック→デバイスマネージャー を開く。
	1. イーサネットコントローラーでドライバが当たっていないものに対し、ドライバの更新を実行してCD/DVDドライブにあるドライバを選択し、更新する。
	1. ネットワーク関連のドライバを全て適用したら完了。

#### 3.2.3.2. ハードディスクのSCSI VirtIO化

1. Proxmox側でVirtIOドライバをCD/DVDドライブに設定しておく
1. Windows機のVMを起動する。
1. ダミーのハードディスクを追加する。
	1. 管理画面の左ツリービューにてWindows機のVMを選択し、「ハードウェア」にて「追加」→ハードディスク を選択する。
		* バス/デバイス: SCSI 1
		* ストレージ: local-lvm
		* ディスクサイズ（GiB）: 1
		* キャッシュ: デフォルト（キャッシュがありません）
	1. 「追加」をクリックして保存する。
1. デバイスマネージャーでSCSIコントローラー関連のドライバを適用する。
	1. Windowsマークを右クリック→デバイスマネージャー を開く。
	1. SISIコントローラーでドライバが当たっていないものに対し、ドライバの更新を実行してCD/DVDドライブにあるドライバを選択し、更新する。
	1. ドライバを全て適用したら完了。
1. Windows機のVMをシャットダウンする。
1. 管理画面の左ツリービューにてWindows機のVMを選択し、「ハードウェア」の「ハードディスク」の項目をide0→scsi0に変更する。
	1. ハードディスク(ide0)を選択し、「Detach」する。
	1. 未使用のディスク0ができるので、それをダブルクリックして設定する。
		* バス/デバイス: SCSI 0
		* ストレージ: local-lvm
		* ディスクサイズ（GiB）: 100
		* キャッシュ: デフォルト（キャッシュがありません）
	1. 「追加」をクリックして保存する。
1. ハードディスク(scsi0)が設定されていることを確認する。
1. Windows機のVMを起動し、正常にログオンできれば完了。
1. 必要に応じて、手順2で作成したダミーのハードディスクを削除する。
	1. Windows機のVMをシャットダウンする。
	1. ハードディスク(scsi1)を選択し、「Detach」する。
	1. 未使用のディスク0ができるので、それを選択し、「削除」する。