CentOS7をLXCコンテナで運用していた筆者がProxmox7.0にアップグレードして地獄を見た話(解決方法付き)

##Proxmox7.0リリース
私はProxmoxが大好きだ。WindowsもLinuxも、がんばればmacOSだってブラウザで操作出来る。VNCやRDPでアクセスも当然出来る。
ストレージをSSDにしてZFSで束ねれば、ストレージスピードもびっくりするくらい出る。
LinuxはGUIが必要なければLXCで走らせれば、オーバーヘッドはほとんどなく走るし、バックアップもブラウザ経由で簡単に出来る。

そんな大好きなProxmoxの最新版7.0がリリースされたそうなので、

https://forum.proxmox.com/threads/proxmox-ve-7-0-released.92007/

Wikiを見ながら、アップグレードしたのだが

https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0

CentOS7のLXCコンテナが死んでしまった。

##原因
systemdのバージョンが231より低いLXCコンテナは、立ち上がることすらできなくなる模様。
CentOS7とUbuntu16.10なんかは影響があるとのこと。

ここにたどり着くまでに小一時間サービスが止まっちまっているorz
焦ると良いことはありません。
ひとまず、代用のKVMを立ち上げて乗り切っていたが、対応策を見るとブートオプションを書き換えて再起動が必要じゃないかorz。しかも、TypoするとOSが起動しなくなる系ですかorz
またまた各所に再起動をすると全包囲土下座の連絡を行い再起動することで、事なきを得ました。

https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0#Old_Container_and_CGroupv2

書いてあることをまとめると、以下の設定でcgroupv1に戻せるとのことです。

```
$ nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
　　↓
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"

$ update-grub
$ reboot
```

##真の原因
CentOS8のドタバタで代替することは決まっていたが、代替のディストリビューションがテンプテートに降って来なかった。
![qp8bwxrj5j75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253664/0e34d19b-077e-e173-3ccf-1a3cb586cdf9.png)
まだサポート期間が残っているし、CentOS7でぼちぼちやっていこうかと思っていたが、Proxmoxからサポートを切られるとは思わなかった。というか後3年サポートが残っているOSを仮想化ソフトがサポートを切ってくるとは予想外です。
そして、一番悔やまれるのはWikiを最後まで読まなかった自分自身です。

##対策
さてWikiを読むとcgroupv1は将来的にサポートを切っちゃうぜと脅してくる。
 Switch back to the legacy cgroup controller. Note that while it can be a valid solution, it’s not a permanent one. There’s a high likelihood that a future Proxmox VE major release, for example 8.0, cannot support the legacy controller anymore.
普通にUbuntuにLXCを入れてコンテナを探すと、AlmaLinux、Rocky Linux、Oracle Linux、Amazon Linux、Springdale Linuxが出てくることは事前に調査済み。
ほかのディストリも含めた一覧表はこちら。

https://uk.images.linuxcontainers.org/

これをなんとか、Proxmoxに持ってくればOKです。ただし、Amazon Linuxは現行CentOS7互換のためSystemdの問題は解決しないため落選です。

さてよく見ると、Proxmox7.0になったことで、LXCコンテナのテンプレートに新たなボタンが増えています。
![Web キャプチャ_8-7-2021_92326_192.168.1.210.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253664/1bab9123-8ccd-6498-2acb-805eecbaad21.jpeg)

試しに、こいつをクリックすると、他のサイトから直接テンプレートをダウンロード出来る模様。
結論から言うと、CentOS8互換の、amd64アーキテクチャの、ひとまず最新ビルド版の、rootfs.tar.xzファイルを落とせばOKです。

![Web キャプチャ_8-7-2021_9116_192.168.1.210.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253664/babc32de-84d8-d6e5-11a6-55f514fe27c0.jpeg)


配布先のリンクから、好きなディストリの階層を掘り進んで下さい。
https://uk.lxd.images.canonical.com/images/

例えば、Oracle Linuxで行くと、ダウンロード先は以下になります。
https://uk.lxd.images.canonical.com/images/oracle/8/amd64/default/20220601_07:46/rootfs.tar.xz
こいつをリネームして、oracle-linux-8.tar.xzなんぞにしてしまいましょう。

ブラウザ画面で行くと以下のようになります。

| 名称 | 設定値 |
|:-----------|:------------|
|URL|https://uk.lxd.images.canonical.com/images/oracle/8/amd64/default/20220601_07:46/rootfs.tar.xz|
|File Name|oracle-linux-8.tar.xz|


SSHでログインしているなら以下のコマンドを実行してください

```
wget -O /var/lib/vz/template/cache/oracle-linux-8.tar.xz https://uk.lxd.images.canonical.com/images/oracle/8/amd64/default/20220601_07:46/rootfs.tar.xz
```


ダウンロードしたあとは、通常のようにCT作成でコンテナを作れば無事Oracle Linuxが起動します。
上手く起動しなければ、ビルド日やディストリを違うものにしてください。

過去に作ったLXCコンテナでCentOS6,7を上記の8互換のものに置き換え、Ubuntu16.04なんかはアップグレードで18.04や20.04にしてしまえば、cgroupv1とはおさばらできます。

以下のコマンドで元に戻して下さい。

```
$ nano /etc/default/grub
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"
　　↓
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"

$ update-grub
$ reboot
```