Linux software RAID上にProxmox VEをインストールする

#はじめに
フリーで使える仮想アプライアンスのProxmox VEは、ZFSのRAIDのみをサポートしてる。Linux software RAIDはサポート外のためまとまった資料がない。
また、Proxmox VEは仮想マシンのKVM(Qemu)に加えて、コンテナにLXCを採用しているが、一般的に使われているコンテナ技術であるDockerもインストールした。
以下は、参考にしたサイト

- DebianへのProxmoxのインストール
 - https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Stretch
 - https://pve.proxmox.com/wiki/Network_Configuration
- Dockerのインストール
 - https://docs.docker.com/install/linux/docker-ce/debian/
- RAIDインストール
 - https://qiita.com/tukiyo3/items/0fad2226ef655d90b37c
 - https://wiki.debian.org/DebianInstaller/SoftwareRaidRoot

#ベースのDebianのインストール
CDROMイメージよりインストールする。
ディスクは/dev/sda,sdbで、/root:32GB、/home:800GB、残りを仮想マシン専用ディスク領域とする。コンテナのイメージは/homeに保存する。スワップ領域は作成しない。

- Language: 日本語
- Location: 日本
- Keyboard: 日本語
- Hostname: pve
- Domain name: local
- Root password:
- Full name: <作成するユーザ名>
- Username: <作成するアカウント名>
- User password:
- Partitioning:
 - "戻る"からシェルを立ち上げて、パーティションを削除する。必要に応じて以下のコマンドを使う、
  `mount/umount`
  `lvdisplay/lvremove`
  `vgdisplay/vgremove`
  `pgdisplay/pgremove`
  `mdadm --detail --scan/mdmadm --stop`
 - 面倒な場合には、まとめて、
  `dd bs=1G count=1 if=/dev/zero of=/dev/sda`
  `dd bs=1G count=1 if=/dev/zero of=/dev/sdb`
  で、パーティション情報の削除する(こちらがおすすめ)
 - メニューに戻り、RAID1を作成する。
 - LVM(ディスク全体)を選択。
 - "戻る"からシェルを立ち上げて、パーティションの修正する。

```shell
#swapを消す
lvremove /dev/pve-vg/swap
#/rootを消して32GBで再設定
lvremove /dev/pve-vg/root
lvcreate -L 32G -n root pve-vg
#1T残して、/homeを作成
lvcreate -L 800G -n home pve-vg
```
メニーに戻って、作成したパーティションのマウントポイントやラベルを修正

- ソフトウェア
 - SSHサーバのみを選択
- GRUBブートローダインストール
 - 再起動の前に、”戻る"で、RAIDの2つ目のディスクにもインストールする
    (後で grub-install /dev/sdb 等を実行しても可)

#再起動後の設定

```shell
# localeをCに
update-locale LANG=C.UTF-8
LANG=C

# 必要なツールをインストール
apt-get install -y man-db less sudo net-tools tmux unzip

# ネットワーク設定
vi /etc/network/interfaces #固定IPの設定
auto enp4s0
iface enp4s0 inet static
	address 192.168.0.100
	network 192.168.0.0
	netmask 255.255.255.0
	broadcast 192.168.0.255
	gateway 192.168.0.1
	dns-nameservers 1.1.1.1 1.0.0.1
vi /etc/hosts #IPアドレスを修正
systemctl restart networking.service

# ssh設定
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.org
vi /etc/ssh/sshd_config
PasswordAuthentication yes
PermitRootLogin yes
systemctl reload ssh

#####
PCからssh public keyのコピー `ssh-copy-id -i .ssh/id_ed25519.pub root@192.168.0.100`
#####

mv /etc/ssh/sshd_config.org /etc/ssh/sshd_config
systemctl reload ssh
```

#Proxmoxのインストール

```shell
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
apt update && apt dist-upgrade
apt-get install proxmox-ve postfix open-iscsi
(Postfixの設定は、Local onlyを選択)

# 商用版のレポジトリを除く
mkdir /root/config.bak
mv /etc/apt/sources.list.d/pve-enterprise.list /root/config.bak/pve-enterprise.list.bak

# ネットワーク設定
vi /etc/network/interfaces
iface enp4s0 inet manual
auto vmbr0
iface vmbr0 inet static
	address  192.168.0.100
	netmask  255.255.255.0
	gateway  192.168.0.1
	bridge-ports enp4s0
	bridge-stp off
	bridge-fd 0
	dns-nameservers 1.1.1.1 1.0.0.1

# VM用ディスク領域
lvcreate --thin -l 100%FREE pve-vg/thin

#####
Webインターフェースから使用するディスクの設定 (データセンター > ストレージ)
  local (/var/lib/vz)    : ISOイメージ, コンテナテンプレート
  lvm-thin (pve-vg/thin) : ディスクイメージ, コンテナ
#####

# LXCの保存先 /var/lib/vz を /home に移動 & シンボリックリンク
# Proxmox VEのサービスを止める必要があるが、どれを止めれば良いか分からないのでシングルモードで作業
telinit 1
cp -a /var/lib/vz /home
rm -r /var/lib/vz
ln -s /home/vz /var/lib/vz
telinit 5

# Docker & Docker-compose
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce
apt-get install -y python-pip
pip install docker-compose

# 保存先を/home/dockerに変更
systemctl stop docker
mkdir /root/config.bak
cp -a /etc/systemd/system/multi-user.target.wants/docker.service /root/config.bak/docker.service.bak
vi /etc/systemd/system/multi-user.target.wants/docker.service
    ExecStart=/usr/bin/dockerd -H unix:// -g /home/docker
systemctl daemon-reload 
systemctl start docker
```
設定が全て完了したら、もう一度再起動して、きちんと動くか確認。

#なぜZFSを使わないのか?
ZFSでRAIDを組んでインストールした際、約30秒おきにディスクアクセスがあり、自宅サーバーとしてはアクセス音が大きすぎたため。ただし、設定の問題かもしれない。