Fedora CoreOS を Hyper-V Server 2019の仮想マシンに導入してみた

# はじめに

Hyper-V 上の Ubuntu Server 20.04 へkubernetesインストールして動作させてみたら
Hyper-Vによるメモリの割り当てが4GB近く増えました。
もっと軽い環境が欲しかったのでFedora Core OSを試すことにしました。
まずはインストールのみということで。

# 前提 

## 環境

* 【導入先PC】Hyper-V Server 2019
* 【作業PC】Windows 10 Pro 2004
    * Hyper-Vマネージャ
    * Docker for Windows

## インストールするもの

* [Fedora Core OS](https://getfedora.org/ja/coreos/download?tab=metal_virtualized&stream=stable): 31.20200517.3.0
    * x86_64, Stable Stream, ベアメタル
    * ISOイメージをダウンロードしてHyper-V Serverへ保存しておく

# やったこと

##  Ignition ファイル作成

作業PC上で実施します。

Fedora CoreOSは初回起動時にシステム設定して、それ以降は設定を変えない模様。
「変えたければ作り直せばいいじゃない！」 という非常に割り切った考え方です。
システム設定は```Ignition``` というツールを用いて行い、その設定ファイルは以下のように作成します。


###  設定ファイルをyaml形式で作成

[定義](https://github.com/coreos/fcct/blob/master/docs/configuration-v1_1.md)とか[設定例](https://github.com/coreos/fcct/blob/master/docs/examples.md)を参照して作成。
ここではcoreユーザーに対して公開鍵を使ったsshログインをできるようにするだけの設定を行います。

```yml:ignition.yml
variant: fcos
version: 1.1.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-ed25519 AAA... 
```

※ ```ssh-ed25519 AAA...``` 部分にはCoreOSへSSH接続する際の公開鍵を設定します。
※ この程度の内容であれば```version: 1.0.0```でも構わないのですが、新しいものが出たら試したくなりますよね？

### fcctツールでjsonに変換

ツールをダウンロードしてもいいんですが、Dockerを使える環境であればいきなり変換できます。

```powershell:powershell+dockerで実行する場合
get-content .\ignition.yml |  docker run -i --rm quay.io/coreos/fcct:release --strict  >.\ignition.json
```

```json:ignition.json
{"ignition":{"version":"3.1.0"},"passwd":{"users":[{"name":"core","sshAuthorizedKeys":["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvoYAoX5t9DAKVyOEwUHd0ErasmeF1380f4/KeVO/SF"]}]}}
```
### 変換後のファイルをWebで公開

せっかくなのでこれもDockerで公開してみます。

```powershell:powershell+docker
docker run --name ignition  -d -p 8080:80 -v C:\Path\to\ignition.json:/usr/share/nginx/html/ignition.json:ro nginx
```

```http://{作業PCのIP}:8080/ignition.json``` としてアクセス可能になる。インストール終了まで立ち上げておいてください。


## Hyerp-Vの準備

作業PCのHyper-Vマネージャーを使用して、導入先PCにCoreOS用の仮想マシンを立ち上げます。

### 仮想マシン作成

* 名前：FCOS
* 世代：第2世代
* 起動メモリ：2048 MB、動的メモリ使用
* ネットワーク：外部接続あり
* ハードディスク：127GB 可変容量
* ブートイメージにFedora CoreOSのiso指定

### 仮想マシンの設定変更

* CPU上記設定仮想マシン作成後、起動する前に```セキュアブートを有効にする```のチェックを外す
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617842/61e822b3-e1dc-ae60-6127-f2d9b7e7da12.png)
* 仮想プロセッサ数を増やす（2個にした）

### 仮想マシンブート

CoreOSのライブ環境が仮想マシン上で実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617842/31b8080a-b233-935b-0551-d1afe0e5360f.png)

## インストール 

仮想マシンにCoreOSをインストールします。仮想マシン上のCoreOSライブ環境で作業します。

### Ignitionファイルのダウンロード

仮想マシンから、さきほどDockerで立ち上げたWebサーバへアクセスし
Ignition.jsonファイルをダウンロードします。

```shell:ファイルダウンロード
[core@localhost ~]$ curl -LO http://{作業PCのIP}:8080/ignition.json
```
※ダウンロードできない場合は作業PCのファイヤウォール設定を確認してください。


### ISOファイルからインストール

```shell:インストール実行
[core@localhost ~]$ sudo coreos-installer install /dev/sda --ignition-file ignition.json
...
Install complete.
```

あとは再起動して完了。起動後にIgnitionファイルに記載した公開鍵とペアとなる秘密鍵を利用して
SSH接続できるか確認します。

## 後片付け

作業PCにてDockerで立ち上げたWebサーバを止めます。消してしまってもいいです。

```powershell:作用PC
docker stop ignition
docker rm ignition
```

# おわりに

[Installing CoreOS on Bare Metal](https://docs.fedoraproject.org/en-US/fedora-coreos/bare-metal/)を参考にしながらインストール進めました。

* ignitionファイル渡すためにWebサーバ立ち上げるのはちょっと大がかりじゃないの？
* ライブ環境にSSH接続できれば済む話なのでは？

という部分が気になってしょうがないですが、今日のところはここまで。
なお、インストール直後のメモリ使用量は900MBでした。コンパクトでいいですね。