Raspberry Pi 4向けFedora CoreOS起動メディアの作成手順覚書

先日、microSDカードにFedora 38 Serverをインストールしました。

Raspberry Pi 4でFedora 38 Serverを起動してみました
Raspberry Pi 4でFedora 38 Serverを起動してみました。 初期設定の基本的な部分は、前回のこちらの記事と同じ...

こちらの環境を使用して。Raspberry Pi 4用のFedora CoreOS起動メディアの作成手順を記録させて頂こうと思います。

※23.6.24追記:/bootディレクトリの作成手順を見直しました。その結果、Raspberry Pi 3/4でFedora Linuxを起動し、Fedora CoreOSのブートメディアを安定して作れるようになりました。パーティション構成の変更にも対応しました。


Raspberry Pi 4向けFedora CoreOS起動メディアの作成手順

コンテナ環境では作るのは難しい?

Raspberry Pi OSでFedora CoreOSブートメディアの作成に挑戦しましたが
先日、Raspberry Pi 4でFedora 28 Serverを起動しまして。 Raspberry Pi 4でFedor...

Fedora Linuxを直接起動するのではなく、Raspberry Pi OSのコンテナの中でFedora Linuxを起動してみました。

coreosのインストーラーは、ブロックデバイスにアクセスする必要があるのですが。コンテナからうまくアクセスできず、失敗した状況です。

コンテナの知識が豊富な方でしたら、うまく作れる可能性も御座います。


Raspberry Pi 3でもFedora Linuxは起動可能

aarch64版のFedora Linuxですが、どうもかなり多くのシングルボードコンピュータに対応している感じです。

Raspberry Pi 3で起動することも可能です。

Raspberry Pi 3でFedora Server 38を起動してみました
普通に起動します。 手順など。

シングルボードコンピュータについては、Fedora CoreOSはRaspberry Pi 4のみサポートしていますが。

インストーラーの作成は、他のシングルボードコンピュータでも可能だと思います。私は実際、Raspberry Pi 3でブートメディアを作成しています。


公式インストール手順は2通りの方法

公式ドキュメントはこちらになります。

U-Bootを使用する方法と、EDK2を使用する方法の2種類があるそうです。

ここでは、Fedora ServerをRaspberry Pi 4で起動して、CoreOS環境を作成しますが。Fedora Serverが起動した時点で、すでにU-bootが起動するように、Raspberry Pi 4を設定済みです。

こちらの記事の手順で、ブートローダーを更新することで。

Raspberry Pi 4のブートローダーEEPROMを最新版に更新するには
令和4年、2022年12月現在。Raspberry Pi 4のブートローダーは、このような画面なのですね。ふむふむ。 公式のRaspb...

ハードウェア設定上は、Fedora Serverと、Fedore CoreOSをU-bootで起動する準備ができている状態になります。

まずは、Fedora Serverを起動しましょう


メディア構築環境としてFedora Serverを起動

Fedora ServerはmicroSDカードにインストールしました。

インストール手順はこちらになります。

Raspberry Pi 4でFedora 38 Serverを起動してみました
Raspberry Pi 4でFedora 38 Serverを起動してみました。 初期設定の基本的な部分は、前回のこちらの記事と同じ...

インストール後、最新版にOSを更新後、ルートパーティションを拡張しました。

こちらを使用して、USBストレージでFedora CoreOSが起動するように、起動メディアを作成する流れになります。


必要なツールのインストール

coreosのインストーラーのほか、JSON操作のためのjqをインストールしました。

sudo dnf install -y jq coreos-installer cpio

さて。本格的な構築の前に。


Ignitionファイルの準備

CoreOS初回起動時に使用するIgnitionファイルを作成しておく必要があります。

もしも起動するだけの最低限のIgnitionファイルを用意する場合は、CoreOSの管理ユーザ、coreのパスワードを設定するファイルが良さそうです。

Ignitionはjsonフォーマットの拡張子.ignファイルですが、直接作成するのは難しいため、yamlフォーマットの拡張子.bu Butaneファイルを作成した後、トランスパイルして作成します。

ユーザ設定 users.bu

ユーザ認証は、キーまたはパスワードのハッシュを作成しておき、設定ファイルに記載しておく感じです。

ハッシュの生成は次のコマンドになります。

podman run -ti --rm quay.io/coreos/mkpasswd --method=yescrypt

ユーザ設定用のButaneファイルを作成しておきます。

cat <<EOF | tee users.bu
variant: fcos
version: 1.5.0
passwd:
  users:
    - name: core
      password_hash: <生成したパスワードのhash>
EOF

コマンドで生成したところ、ハッシュの部分が書き換わった気がしますが・・・テキストエディタでusers.buを開いて確認しておきましょう。

Butaneファイルをトランスパイル

作成したusers.buをトランスパイルしてみましょう。

butaneコマンドのエイリアスを作っておきました。

#エイリアスを作っておきます
alias butane='podman run --rm --interactive       \
              --security-opt label=disable        \
              --volume ${PWD}:/pwd --workdir /pwd \
              quay.io/coreos/butane:release'

先程作成した、users.buをトランスパイルします。

butane --pretty --strict users.bu > users.ign

最低限の.ignファイルができました。

最低限、こちらのignファイルでCoreOSを動かして、コンソールにログインすることが可能です。

ちなみにこちらでcoreユーザでコンソールにログインできますが、SSHは既定ではパスワード認証に対応していないそうです。SSHログインしたい場合は、パスワードハッシュではなくキーを作成するか、SSHでパスワードハッシュを有効にするignファイルを作成しておく必要があります。

他のIgnitionファイルの作成

そのSSHログイン時にパスワードハッシュを有効にする設定を含めて、初期設定の基本的なButaneファイルをこちらに記載してみました。

Fedora CoreOS用のButane初期設定ファイル覚書
先日、Raspberry Pi 4でFedora CoreOSを起動してみました。 CoreOSはMobyエンジンを搭載してお...

config.buはmergeとlocal:を使用しているため、トランスパイル時に-dオプションが必要のようです。

butane --pretty --strict -d . config.bu > config.ign

ここでは、先程の記事の内容から、config.ignというIgnitionファイルを作成しておきました。

複数のbuファイルをmergeでまとめた場合、圧縮されて入るのですね。このような内容ですが、うまく動くのでしょうか?(試してない⇒試しました!個別のignファイルを作ってmergeすれば正しく動きます


CoreOS用/bootディレクトリ生成

Ignitionファイルの準備ができたところで。

本格的に起動メディアを作成します。

下記のコマンドで、CoreOS用の/bootディレクトリを、/tmp/RPi4bootに作成します。

※23.6.24追記: 確実にrpmからRaspbery Pi 4のbootディレクトリを作成できるように、手順を修正しました

BOOTDIR=`pwd`/RPI4boot
mkdir -p $BOOTDIR/boot/efi/
RELEASE=37
sudo dnf install -y --downloadonly --installroot $BOOTDIR --release=$RELEASE --forcearch=aarch64 --destdir=$BOOTDIR uboot-images-armv8 bcm283x-firmware bcm283x-overlays

dnfオプションを調整し、rpmパッケージを指定したディレクトリにダウンロードしました。

続いてパッケージから必要なファイルを抽出します。

for rpm in $BOOTDIR/*rpm; do rpm2cpio $rpm | sudo cpio -idv -D $BOOTDIR/; done
sudo mv $BOOTDIR/usr/share/uboot/rpi_4/u-boot.bin $BOOTDIR/boot/efi/rpi4-u-boot.bin
sudo chmod -R go-xrwx $BOOTDIR/boot

以上でRaspberry Pi 4の実機でFedora CoreOSの起動に必要な、/bootの準備ができました。


USBストレージの取り付け

Fedora Linuxを起動したRaspberry Pi 3/4に、Fedora CoreOS起動用のUSBメディアを接続します。

パーティションは消去しておきました。

MBRではなくGPTでパーティションが構成されているため、fdiskコマンドではなくgdiskコマンドを使用しましょう。画面キャプチャはfdiskですが!

sudo wipefs -a /dev/sda
# パーティションをすべて消去
sudo gdisk -l /dev/sda


Fedora CoreOSのインストール

取り付けたUSBメディアに、coreOSをインストールしますが。

先程作成した、Ignitionファイルのファイル名を控えておいてください。下記のコマンドでは、「config.ign」になっておりますので、必要があれば変更しておいてください。

下記のコマンドになります。

FCOSDISK=/dev/sda
STREAM=stable # or `next` or `testing`
sudo coreos-installer install -a aarch64 -s $STREAM -i config.ign $FCOSDISK

メタルイメージのダウンロードが開始され、終わると指定したUSBメディアにインストールされます。どうしても[究極]に目が行って気になってしまいます。

ダウンロードしてからインストールしたい場合

クラスタ用途等、大量にブートメディアを作成する場合はこちらを。xzファイル名は適宜変更してください。

coreos-installer download -a aarch64 -s stable
sudo wipefs -a /dev/sda
FCOSDISK=/dev/sda
sudo coreos-installer install --ignition-file config.ign --image-file ./fedora-coreos-38.20230527.3.0-metal.aarch64.raw.xz -- $FCOSDISK

/efiディレクトリのコピー

最後に、作成したメディアを一時的に/tmp/FCOSEFIpartディレクトリにマウントして、/efiディレクトリにコピーします。

※23.6.24追記:先程設定した$BOOTDIRを使用します。

FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH  | jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM")'.path)
mkdir /tmp/FCOSEFIpart
sudo systemctl daemon-reload
sudo mount $FCOSEFIPARTITION /tmp/FCOSEFIpart
sudo rsync -avh --ignore-existing $BOOTDIR/boot/efi/ /tmp/FCOSEFIpart/
sudo umount /tmp/FCOSEFIpart

以上で完了です。USBストレージにて、Fedora CoreOSを起動する準備ができました。

Raspberry Piの電源を切り、microSDカードを取り外して、USBメディアから起動しましょう。

起動しましたでしょうか?

バージョンは38.20230514.3.0、先程のButaneファイルを使用して、正しくSSHでパスワードログインできるようになりました。


手順の最後。/efiディレクトリのコピーは、Raspberry pi 4の/boot/efiを使用したため、そもそも/tmp/RPi4boot/boot/efi/を作る意味がなかった・・・のは置いておいて。

※23.6.24追記:Fedora Linux起動時の/bootディレクトリを使用せずに、/boot/efiディレクトリをrpmファイルから作成できる手順に変更しました。

もしも起動してcoreユーザでログインできるようでしたら、基本的な流れの部分はOKかと思います。

CoreOSを使用するにあたって、大切なのはIgnitionの作成かと思います。

私の作成した、複数のbuファイルをmergeを使用した、config.buですが。

  • buファイルをmergeすると、うまく動かない。
  • 個別にignファイルをトランスパイルで作成しておいて、config.buの中でignファイルをmergeすれば、正しく動きました。

いろいろと試して手順を調整した結果、ブートメディアを安定して作れるようになりました。

ご興味が御座いましたら、よろしければ、Raspberry Pi 4でFedora CoreOSを起動してみてください!

スポンサーリンク

フォローする

スポンサーリンク