なぜFedora CoreOSの設定に戸惑う人が多いのか?
USBメモリを差し込み、手動でパーティションを分割し、SSHでログインして/etc/fstabを編集するといった「伝統的」なサーバー構築に慣れているなら、Fedora CoreOS (FCOS) は衝撃的かもしれません。このOSにはグラフィカルなインストーラーが存在しません。何百、何千ものノード規模でのコンテナ運用と自動化のために設計されているからです。
FCOSの核となるのは**Ignition**ファイルです。これは初回起動時のすべての構成指示を含むJSONファイルです。しかし、信じてください、JSONを直接手書きしてはいけません。カンマが一つ多かったり、括弧が一つ足りないだけで、起動時にサーバーがフリーズしてしまいます。そこで、私たちの正気を保つために登場するのが**Butane**です。
ButaneとIgnition:切り離せない名コンビ
スムーズなデプロイのために、これら2つのツールの役割を明確に区別しましょう。
- Ignition: 非常に早い段階の
initramfsフェーズで実行されます。JSONを読み取ってパーティション分割、ディスクフォーマット、ユーザー作成を行います。初回起動時に一度だけ実行されます。 - Butane: トランスレーター(翻訳機)です。非常に読みやすいYAML(
.buファイル)で設定を記述し、Ignitionが理解できるJSONにコンパイルするのを助けます。
200行の複雑なJSONと格闘する代わりに、数十行のクリーンなYAMLを管理するだけで済みます。
30秒でButaneをインストールする
Fedoraでは、DNFを使用して非常に簡単にインストールできます。
sudo dnf install butane
他のディストリビューションを使用している場合は、ホスト環境を汚さないようにPodman経由でButaneを実行するのがおすすめです。これは私がよく使う方法です:
podman run --rm -v .:/pwd -w /pwd quay.io/coreos/butane:release --strict config.bu > config.ign
実践:最初の設定ファイルを作成する
devopsユーザーを作成し、SSHキーを追加して、PodmanでNginxを自動実行するFCOSノードを構築してみましょう。以下の内容でconfig.buファイルを作成します:
1. 基本情報の宣言
variant: fcos
version: 1.5.0
passwd:
users:
- name: devops
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@machine
groups: [sudo, wheel]
注意:variantとversionは必須です。これらが欠けていると、Butaneはすぐにエラーを出力します。
2. Systemdによるサービスの自動化
FCOSには通常のディストリビューションのようにNginxがプリインストールされていません。システム起動時に自動的にイメージをプルしてコンテナを実行するように指示します:
systemd:
units:
- name: nginx-container.service
enabled: true
contents: |
[Unit]
Description=Podmanを使用してNginxコンテナを実行
After=network-online.target
Wants=network-online.target
[Service]
ExecStartPre=-/usr/bin/podman kill nginx
ExecStartPre=-/usr/bin/podman rm nginx
ExecStartPre=/usr/bin/podman pull nginx:latest
ExecStart=/usr/bin/podman run --name nginx -p 80:80 nginx:latest
ExecStop=/usr/bin/podman stop nginx
[Install]
WantedBy=multi-user.target
3. システムファイルの上書き
ホスト名の変更やウェルカムメッセージ(MOTD)の作成が必要ですか?Butaneなら非常にスマートに処理できます:
storage:
files:
- path: /etc/hostname
mode: 0644
contents:
inline: fcos-node-01
- path: /etc/motd
mode: 0644
contents:
inline: "Butaneによって管理されているFCOSノードへようこそ!\n"
Ignitionへのコンパイル
YAMLファイルが完成したら、次のコマンドを使用してJSONファイルを出力します。構文エラーを厳密にチェックするために、常に--strictフラグを使用するようにしています:
butane --pretty --strict config.bu > config.ign
このconfig.ignファイルこそが、AWS、Proxmox、またはVMwareで仮想マシンを作成する際に「User Data」セクションに投入するものです。
実践デプロイにおける重要なヒント
FCOSサーバークラスターをいくつかデプロイした経験から、3つの黄金律を導き出しました:
- SSHキーを忘れるのは「致命的」: FCOSはデフォルトでユーザーパスワードを完全にロックしています。キーがないということは、サーバーから永久に締め出されることを意味します。その場合はインスタンスを削除して作り直すしかありません。
- 空白文字に注意: YAMLはインデント(字下げ)に非常に敏感です。Butaneがコンパイルできないような初歩的なミスを避けるために、VS Codeের YAML拡張機能を使用しましょう。
- 常にローカルで先にテストする: いきなりクラウドにデプロイしてお金を無駄にしないでください。個人のマシンでqemuやvirt-installを使用して、Ignitionファイルがスムーズに起動するか確認しましょう。
終わりに
Butaneは単なる変換ツールではありません。Infrastructure as Code (IaC) の考え方をより身近にする架け橋です。無機質なJSON構造を覚える代わりに、サーバーのあるべき状態の定義に集中できます。Fedora CoreOSの世界に足を踏み入れるなら、Butaneは習得必須のスキルと言えるでしょう。

