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: 31.20200517.3.0
    • x86_64, Stable Stream, ベアメタル
    • ISOイメージをダウンロードしてHyper-V Serverへ保存しておく

やったこと

Ignition ファイル作成

作業PC上で実施します。

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

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

定義とか設定例を参照して作成。
ここではcoreユーザーに対して公開鍵を使ったsshログインをできるようにするだけの設定を行います。

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+dockerで実行する場合
get-content .\ignition.yml |  docker run -i --rm quay.io/coreos/fcct:release --strict  >.\ignition.json
ignition.json
{"ignition":{"version":"3.1.0"},"passwd":{"users":[{"name":"core","sshAuthorizedKeys":["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvoYAoX5t9DAKVyOEwUHd0ErasmeF1380f4/KeVO/SF"]}]}}

変換後のファイルをWebで公開

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

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上記設定仮想マシン作成後、起動する前にセキュアブートを有効にするのチェックを外す
  • 仮想プロセッサ数を増やす(2個にした)

仮想マシンブート

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

インストール

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

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

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

ファイルダウンロード
[core@localhost ~]$ curl -LO http://{作業PCのIP}:8080/ignition.json

※ダウンロードできない場合は作業PCのファイヤウォール設定を確認してください。

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

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

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

後片付け

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

作用PC
docker stop ignition
docker rm ignition

おわりに

Installing CoreOS on Bare Metalを参考にしながらインストール進めました。

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

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