Fedora CoreOSをVirtualBoxで試してみた

# Fedora CoreOSとは

[Fedora CoreOS](https://getfedora.org/en/coreos)とは2020年5月26日にサポート終了が発表された[CoreOS](https://coreos.com/)社の[Container Linux](https://coreos.com/os/docs/latest/)(旧CoreOS)の後継となるOSです。

Container Linuxのサポート終了についての詳しい情報は[こちら](https://coreos.com/os/eol/)をご覧ください。

今回はこのFedora CoreOSをVirtualBoxを用いて試してみようと思います。

# Fedora CoreOSのISOイメージの入手

[こちら](https://getfedora.org/en/coreos/download)のダウンロードページからFedora CoreOSのISOイメージをダウンロードします。
Fedora CoreOSには3つのリリースストリームが存在します。

- Stable(安定しており本番環境でも使用可能)
- Test(Stableの前の段階で本番環境で動かせるかをテストするためのバージョン)
- Next(新機能やカーネルの最新バージョンを使用することができる)

今回はStable版の`32.20200824.3.0`を使用します。

# 仮想イメージの作成

VirtualBoxを起動し、「新規」を選択、名前や場所を指定します。
![スクリーンショット 2020-09-14 18.01.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/54fc2872-ef29-fa1b-f3b2-09f320318545.png)

メモリを設定します。今回は8GBを割り当てました。
![スクリーンショット 2020-09-14 18.01.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/f9de665d-0112-4632-238e-504744271ee2.png)

ハードディスクの設定を行います。お好きな大きさにしてください。(今回は8GBにします。)
![スクリーンショット 2020-09-14 18.01.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/eaf222d0-0701-dd0c-2012-322b2abb2e8e.png)

仮想イメージが作成できたら「設定」を選択して、各種設定を行います。

高速化のためにプロセッサー数を1から4に増やします。
![スクリーンショット 2020-09-14 18.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/27119841-8d37-f3c4-7f4e-33598a21bb24.png)

光学ドライブにダウンロードしておいたFedora CoreOSのISOイメージをセットします。
![スクリーンショット 2020-09-14 18.10.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/74172b92-e2a1-d338-58cf-847d2c62b1dc.png)

Fedora CoreOSとは基本的にSSHで接続するのでSSH用のポートフォワーディングを設定します。
![スクリーンショット 2020-09-14 18.11.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/06c9b5fa-ad1b-74e1-71ba-896a4af2063c.png)

# yamlファイルの作成

Fedora CoreOSはIgnitionファイルというファイルを使用してインストール時の初期設定を行います。
初期設定を特定ファイルによって行うことで複数台のインストールを楽にする狙いがあるようです。

ホストマシンで以下のようなyamlファイルを作成します。

```yaml:ignition.yml
variant: fcos
version: 1.1.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - <公開鍵>
```

### `variant`
Fedora CoreOSのIgnitionファイルと識別するための項目です。

### `version`
Ignitionファイルのバージョンを設定します。

### `passwd`
デフォルトで作成されるユーザやグループを設定します。

### `passwd.users`
ユーザの設定をします。

### `passwd.users.name`
ユーザの名前を設定します。
**`core`にした場合は特殊なユーザになり、デフォルトでsudoをパスワードなしで使用することができます。**

### `passwd.users.ssh_authorized_keys`
sshの公開鍵をリストにして貼り付けます。ここで設定した公開鍵でSSH接続できるようになります。

設定項目は他にもあります。詳細は[こちら](https://docs.fedoraproject.org/en-US/fedora-coreos/fcct-config/)をご覧ください。

# Ignitionファイルの生成

作成したyamlファイルはそのままではインストールに使用できません。
インストールではyamlから変換したignファイル(実体はただのjsonファイル)を使用します。
通常のyaml→json変換ツールを使用することもできますが、公式のツールであるFedora CoreOS Configuration Transpiler(FCCT)を使用することで特有の構文エラーを発見することが可能です。

FCCTはDockerまたはPodmanで簡単に実行することが可能です。

```shell
# Podmanを使用する場合はdockerの部分をpodmanに置き換えてください。
docker run -i --rm quay.io/coreos/fcct:release --pretty --strict < ignition.yaml > ignition.ign
```

# Ignitionファイルのホスティング

作成したIgnitionファイルを仮想マシンに渡すためにFedora CoreOSではhttpを利用することを推奨しています。
お手軽なhttpホスティングの例としてpython3を利用したホスティングを例としてあげます。Ignitonファイルが存在するディレクトリで以下を実行してください。

```shell
python3 -m http.server
```

# OSインストール

準備が整ったので仮想マシンにFedora CoreOSをインストールします。
仮想マシンを起動し、ignitionファイルを入手します。

```shell
curl -LO http://<ホストOSのローカルIP>:8000/ignition.ign
```

![スクリーンショット 2020-09-14 21.50.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/8e9aac17-e36b-168b-22ab-9bbb3df9ab2f.png)

以下のコマンドでOSをインストールします。特に確認が入るわけではないのでインストール先のドライブに注意してください。また、インストール先のドライブのパーティションもすべて自動的に削除されます。

```shell
sudo coreos-installer install /dev/sda --ignition-file ignition.ign
```

![スクリーンショット 2020-09-14 21.51.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/0d3dfbd1-bac1-3006-1286-19b5fa674244.png)

インストールに成功したら`sudo shutdown -h now`で一度シャットダウンして仮想マシンの光学ドライブにセットしていたISOイメージを取り外します。

![スクリーンショット 2020-09-14 21.57.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/b1c546ae-befd-f780-571e-797e83fff44c.png)

仮想マシンを起動して、ホストマシンからSSH接続を試してみます。

```shell
# ポート番号はポートフォワーディングで設定したポートを指定してください。
ssh core@127.0.0.1 -p 2222
```

![スクリーンショット 2020-09-14 22.02.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/1db4c9d2-88f0-d9e7-e279-60f6b0a877cf.png)

無事SSH接続できたらOSのインストールは成功です。ここで一度仮想マシンのスナップショットを作成しておくことをおすすめします。もし仮想マシンに問題が発生したり一度リセットしてやり直したいときに便利です。

# Docker&Podmanを試す

Fedora CoreOSにはデフォルトでDockerとPodmanがインストールされています。試しに動作させてみます。

### Docker

```shell
# Dockerはsudoが必要なので注意してください。
sudo docker run hello-world
```

![スクリーンショット 2020-09-14 22.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/99a9e28b-c438-4560-4aa9-f6aa6d6230e1.png)

### Podman

```shell
podman run hello-world
```

![スクリーンショット 2020-09-14 22.06.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628629/32a7a287-1a64-1354-cb4e-5e37fd628d07.png)

# 感想

今回始めてコンテナ向けOSを試してみましたが、導入自体は案外楽だと感じました。
今度DigitalOceanに導入してみようと思います。