Fedora CoreOSをVMware上で動かす

# Fedora CoreOSとは
公式サイトには
『Fedora CoreOSは、コンテナ化されたワークロードを安全かつ大規模に実行するための、自動的に更新される最小限のオペレーティングシステムです』(直訳)
と記載されています。

要するにコンテナ実行特化型の軽量OSです。

歴史が少々複雑で、
CoreOS社が「CoreOS」を提供
↓
名称変更して「Container Linux」になる
↓
CoreOS社がRedHatに買収される
↓
Project Atomicと統合され「Fedora CoreOS」になる（開発成果はRHEL CoreOSに取り込まれる）

という過去をたどっているので、「Fedora CoreOS」と「CoreOS」は全くの別物であることに注意です。

# インストールの前に
大抵のLinux系OSインストーラはネットワークやユーザ設定等を対話式に進めていきますが、Fedora CoreOSは違います。
設定情報を予めIgnitionファイルと呼ばれるものに記述しておき、インストール時はIgnitionファイルを参照してセットアップが行われます

IgnitionファイルはJSON形式ですが、手で書くのはつらいので、YAML形式のFCCファイルからIgnitionファイルを生成する、FCCTというツールが公式で提供されています。

また今回はVMware+OVAでセットアップを行うため、isoインストーラを使用する場合と少し手順が異なります。

# OSセットアップ手順

流れとしてはざっくりこんなかんじです。
1. FCCファイルの記述
2. Ignitionファイルの生成
3. 仮想マシン作成, 起動

以下の設定を行うのが今回の目標です。

* デフォルトで用意されているユーザ `core`にSSHログインするための公開鍵設定
* ホスト名を`fcos1`にする
* 静的ネットワーク設定
 * NIC: `ens192`
 * IP: `192.168.1.1/24`
 * Gateway: `192.168.1.1`
 * Nameserver: `192.168.1.1`

## 1. FCCファイルの記述
とりあえず完成版貼り付け。

```yml
variant: fcos
version: 1.3.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICZ+BJTMKUu0wO0I7PMN89CAiKF77V0HQ/lGy4NXJ1Jx
storage:
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: fcos1
    - path: /etc/NetworkManager/system-connections/ens192.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens192
          type=ethernet
          interface-name=ens192
          [ipv4]
          address1=192.168.1.21/24,192.168.1.1
          dns=192.168.1.1
          dns-search=
          may-fail=false
          method=manual
```

各設定項目についてはこのへん読んでください(説明放棄)。

* Configuring Users :: Fedora Docs
 * https://docs.fedoraproject.org/en-US/fedora-coreos/authentication/
* Setting a Hostname :: Fedora Docs
 * https://docs.fedoraproject.org/en-US/fedora-coreos/hostname/
* Host Network Configuration :: Fedora Docs
 * https://docs.fedoraproject.org/en-US/fedora-coreos/sysconfig-network-configuration/#_via_ignition



## 2. Ignitionファイルの作成
先述の通り、FCCTでFCC→Ignitionに変換します。
FCCTは実行バイナリとコンテナイメージが配布されています。今回はDockerコンテナでいきます。

先程作成したFCCファイルを`hoge.fcc`として保存し、以下のコマンドを実行します。

```sh
docker run -i --rm quay.io/coreos/fcct:release --pretty --strict < hoge.fcc > hoge.ign
```

これで`hoge.ign`にIgnitionファイルが出力されます。
（isoインストーラを使用してOSインストールを行う場合は、このIgnitionファイルをHTTPで公開する必要があります。）

VMwareでは、仮想マシン作成時にBase64エンコードしたIgnitionファイルを直接指定できるので、以下コマンドでIgnitionファイルをBase64エンコードしておきます。

```sh
base64 -w0 hoge.ign > hoge_b64.txt
```


## 3. 仮想マシンの作成, 起動
ダウンロードページからVMware用のOVAファイルを落とします。

* Download Fedora CoreOS
 * https://getfedora.org/coreos/download?tab=metal_virtualized&stream=stable 

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261734/9e5d0d94-a0c1-cb34-4d9e-9a0bafbb75a1.png)


※ここからはESXiの画面になります
「OVFファイルまたはOVAファイルから仮想マシンをデプロイ」を選択します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261734/4ea6ddc4-209c-efe5-3c8e-99091d6593bd.png)

仮想マシンの名前を入力し、OVAファイルをアップロード
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261734/32567d9b-189a-60b6-5a06-a819010f29cb.png)

ストレージ選択とデプロイオプションはお好みで。

`Options`を展開し、設定を入力します。

* Ignition config data
 * IgnitionファイルをBase64エンコードした文字列(先ほど作成したhoge_b64.txtの内容)をペースト
* Ignition config data encoding
 * `base64`を入力
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261734/e738f96e-8a04-b68e-e1ac-0811bec59fb1.png)

あとはVM起動時にIgnitionファイルの設定が反映されます。
設定したIPにpingが通るか、設定したユーザ&鍵でSSHログインできることを確認します。

以上です。最初からpodmanとdockerがインストールされているので、あとは好きなようにコンテナを載せていきましょう。