Fedora CoreOSを自宅サーバにインストールする
OptiPlex 7010 USFFをひょんなことで入手したので、Fedora CoreOSをインストールしてみた。基本的にはGetting Startedの通りにやればいい…のがよかったけど、そうもいかなったので手順を記したいと思う。
ディスクイメージを入手する
ストリームがStable、Testing、Nextで選べるようだけどとりあえずStableのBare Metal用ISOをダウンロード。ブータブルUSBメモリはPopsicleで作成。
Ignitionファイルを用意する
Getting Startedだと以降の手順はAmazon EC2インスタンスにインストールする例が紹介されており、別のドキュメントを参照する必要があった。
サイトを見回してProvisioning MachinesのうちのInstalling on Bare Metalを発見。前提条件としてIgnitionファイルをHTTPサーバなどでホストしてね、と書いてあるけど面倒くさい、それ以外の方法ないの…?と思った。Ignitionファイルはcoreos-installerというCLIで指定するようなので、コマンドの使い方をみると、 --ignition-file
オプションでローカルからIgnitionファイルを参照することも可能と分かった。
それでIngitionファイルとはなんぞやというと、初回セットアップに使う設定ファイルとして以下の手順で用意するらしい。
- YAMLフォーマットでButaneコンフィグ(
.bu
拡張子のファイル)を書く - ButaneでJSONフォーマットのIgnitionコンフィグ(
.ign
拡張子のファイル)に変換する
Ignitionファイルが用意できたら、Live ISOを起動して coreos-installer install
と sudo reboot
するだけ。なので、Butaneファイルにどんな設定を書くかが一番重要。
初期状態だとcoreアカウントは作成されるけどパスワードもSSHの認証も設定されないので、最低限その辺の設定が必要。
私がやりたかったのは
- SSH接続
- ローカルログイン
- dockerがsudoなしで使える
- sudo時パスワード認証
- mDNSで名前解決
で、以下のドキュメントとディスカッションが参考になった。
- Using an SSH Key
- Using Password Authentication
- Configuring Groups
- Setting a Hostname
- Correct way to enable mDNS on Fedora Server 34?
試行錯誤した結果、以下のように config.bu
をつくった。
variant: fcos
version: 1.4.0
passwd:
users:
- name: <ユーザ名>
ssh_authorized_keys:
- <SSH接続で使用する公開鍵>
password_hash: <podman run -it --rm quay.io/coreos/mkpasswd --method=yescryptして得られるハッシュ>
groups:
- docker
- wheel
storage:
files:
- path: /etc/hostname
mode: 0644
contents:
inline: |
fedora-coreos
- path: /etc/NetworkManager/conf.d/enable-mdns.conf
mode: 0644
contents:
inline: |
[connection]
connection.mdns=2
- path: /etc/systemd/resolved.conf
mode: 0644
append:
- inline: |
MulticastDNS=yes
次はButanファイルをIgnitionファイルにする。コンテナーでBlutanを動作させて変換した。(自分はFedora Silverblueを使っていてpodmanが入っているのでpodmanを使っているけど、dockerでもできるはず)
podman run -i --rm quay.io/coreos/butane:release --pretty --strict < config.bu > config.ign
インストールする
できたIgnitionファイルをブータブルUSBメモリとは別のUSBメモリにコピー。ブータブルUSBメモリとIgnitionファイルをコピーしたUSBメモリをOptiPlex 7010 USFFに挿して起動。
fdisk
で中身をみて、以下のようにディスクが割り当てられていることを確認。
- sda: インストール先のディスク
- sdb: ブータブルUSBメモリ
- sdc: IgnitionファイルをコピーしたUSBメモリ
以下のコマンドを実行。
sudo mkdir /var/usb
sudo mount /dev/sdc1 /var/usb
sudo coreos-installer install /dev/sda --ignition-file /var/usb/config.ign
インストールはほぼほぼ2~3GBをddしたみたいな時間で終わった。終わったら sudo reboot
して素早くUSBメモリを抜く。
しばらくしたら ssh -i <秘密鍵> <ユーザ名>@fedora-coreos.local
でSSH接続可能になった。
感想(とオチ)
設定をIgnitionファイルとして用意すれば、インストール後のセットアップが不要になるのはとても便利だと思った。また、自動でOSアップデートしてくれるらしいので立ち上げっぱなしにしたら放置でいいのも便利だと思った。
一方でIgnitionファイルはあくまで初回セットアップにのみ使うので、インストール後に設定を変更したい場合は他のLinuxディストリビューションと同じように /etc
下にファイルを追加したり編集する必要がある。NixOSだと設定変更時も同じ /etc/nixos/configuration.nix
を弄って nix-rebuild switch
すればいいから、そこは好みが分かれると思った。
インストールできたのはいいけど、OptiPlex 7010 USFFをどこにおくかもどんなふうにEthernetケーブルを引くかも決まっていないので、悩ましいなと思った。