Penyediaan Fedora CoreOS pada Raspberry Pi 4

Fedora CoreOS menghasilkan artefak ARM 64-bit (aarch64). Citra-citra ini dapat digunakan sebagai sistem operasi untuk perangkat Raspberry Pi 4. Sebelum mencoba menjalankan FCOS pada Raspberry Pi 4, Anda perlu Memperbarui EEPROM ke versi terbaru dan memilih cara Anda ingin melakukan boot pada Raspberry Pi 4. Terdapat dua opsi:

U-Boot adalah cara tradisional Raspberry Pi 4 melakukan boot. Firmware EDK2 merupakan upaya untuk menyediakan lapisan yang menjadikan RPi4 sesuai dengan SystemReady ES (mematuhi SBBR), serupa dengan sebagian besar server ARM 64-bit yang lebih besar.

Memperbarui EEPROM pada Raspberry Pi 4

Raspberry Pi 4 menggunakan EEPROM untuk melakukan boot sistem. EEPROM/Firmware sebelumnya mengalami masalah dalam membaca partisi EFI FAT16, yang digunakan oleh FCOS. Untuk pengalaman terbaik dalam menjalankan FCOS pada RPi4, perbarui EEPROM ke versi terbaru. Untuk memeriksa apakah Anda memiliki versi terbaru, kunjungi halaman rilis raspberrypi/rpi-eeprom dan pastikan versi yang dilaporkan oleh Raspberry Pi Anda saat boot berdekatan dengan tanggal rilis terbaru.

Dokumentasi Raspberry Pi merekomendasikan penggunaan Raspberry Pi Imager untuk membuat disk boot yang dapat digunakan untuk memperbarui EEPROM. Jika Anda menggunakan varian Fedora Linux, Raspberry Pi Imager sudah dikemas dan tersedia di repositori. Anda dapat memasangnya dengan perintah berikut:

dnf install rpi-imager
Anda dapat menjalankan rpi-imager dari dalam kontainer Toolbx dengan sukses.

Jika Anda tidak menggunakan Fedora Linux, Anda perlu mengikuti dokumentasi untuk mendapatkan imager tersebut.

Setelah Anda menjalankan imager (pada Fedora Anda dapat menjalankannya melalui perintah rpi-imager di baris perintah), Anda akan melihat aplikasi imager dimuat:

Aplikasi Raspberry Pi Imager

Pada tahap ini, Anda dapat mengikuti dokumentasi untuk membuat disk dan kemudian memperbarui Raspberry Pi 4 Anda.

Menginstal FCOS dan Boot melalui U-Boot

Untuk menjalankan FCOS pada Raspberry Pi 4 melalui U-Boot, kartu SD atau disk USB harus disiapkan pada sistem lain dan kemudian dipindahkan ke RPi4. Setelah menulis FCOS ke disk, beberapa berkas tambahan perlu disalin ke partisi EFI dari disk FCOS. Lihat Dokumentasi Raspberry Pi untuk membaca lebih lanjut mengenai fungsi berkas-berkas tersebut.

Dalam hal ini, kita dapat mengambil berkas-berkas tersebut dari paket RPM uboot-images-armv8, bcm2711-firmware, bcm283x-firmware, dan bcm283x-overlays yang ada di repositori Fedora Linux. Unduh terlebih dahulu dan simpan di direktori sementara pada sistem Anda:

RELEASE=43 # Rilis Fedora target. Gunakan versi yang sama dengan basis FCOS saat ini.
mkdir -p /tmp/RPi4boot/boot/efi/
dnf download --resolve --releasever=$RELEASE --forcearch=aarch64 --destdir=/tmp/RPi4boot/ uboot-images-armv8 bcm283x-firmware bcm283x-overlays

Sekarang ekstrak isi dari paket RPM tersebut dan salin berkas u-boot.bin yang sesuai untuk RPi4 ke tempatnya:

Perintah berikut untuk mengekstrak isi RPM, penggunaan coreos-installer, serta penyalinan berkas ke partisi ESP harus dilakukan di luar kontainer Toolbx. Pengguna root di dalam kontainer dipetakan ke ID pengguna (UID) yang berbeda dari pengguna root (UID=0) pada host. Menjalankan sebagian dari perintah ini di dalam kontainer dan sebagian lagi di host dapat menyebabkan kesalahan izin atau kepemilikan, serta dapat memengaruhi keberhasilan Anda dalam menginstal Fedora CoreOS.
Di Arch Linux, disarankan untuk memasang rpm-tools daripada rpmextract, sehingga berkas RPM akan didekompres secara otomatis. Jika Anda tidak ingin atau tidak dapat melakukannya, Anda harus menyalurkan keluaran dari rpm2cpio melalui dekompresor yang sesuai, misalnya zstd -d.
for rpm in /tmp/RPi4boot/*rpm; do rpm2cpio $rpm | cpio -idv -D /tmp/RPi4boot/; done
mv /tmp/RPi4boot/usr/share/uboot/rpi_arm64/u-boot.bin /tmp/RPi4boot/boot/efi/rpi-u-boot.bin

Jalankan coreos-installer untuk menginstal ke disk target. Ada berbagai cara untuk menjalankan coreos-installer dan melakukan instalasi ke disk target. Kami tidak akan membahas semuanya di sini, tetapi alur kerja ini paling menyerupai dokumentasi "Menginstal dari kontainer".

FCOSDISK=/dev/sdX
STREAM=stable # atau `next` atau `testing`
sudo coreos-installer install -a aarch64 -s $STREAM -i config.ign $FCOSDISK
Pastikan Anda menyediakan konfigurasi Ignition saat menjalankan coreos-installer.
Fedora CoreOS memiliki pengguna bawaan bernama core yang dapat digunakan untuk menjelajahi sistem operasi. Jika Anda ingin menggunakannya, selesaikan [konfigurasinya](xref:authentication.adoc) dengan menambahkan, misalnya, kunci SSH.

Sekarang mount partisi ESP dan salin berkas-berkasnya:

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

Sekarang ambil USB/kartu SD tersebut, pasangkan ke RPi4, dan lakukan boot.

Proses boot dapat memakan waktu, terutama jika disknya lambat. Bersabarlah. Anda mungkin tidak melihat apa pun di layar selama 20-30 detik.

Menginstal FCOS dan Boot melalui EDK2

Terdapat implementasi firmware EDK2 UEFI untuk RPi4 (pftf/RPi4) yang berupaya menjadikan RPi4 sesuai dengan SystemReady ES (mematuhi SBBR) dan memungkinkan Anda memperlakukan RPi4 seperti perangkat keras server SystemReady lainnya.

Anda dapat menulis firmware ke disk (USB atau kartu SD) dan kemudian melakukan boot/menginstal FCOS sebagaimana pada server bare metal lainnya. Namun, berkas firmware harus berada pada kartu SD atau disk USB dan akan menggunakan slot SD atau slot USB. Tergantung kebutuhan Anda, hal ini mungkin dapat diterima atau tidak. Berdasarkan hal tersebut, Anda memiliki beberapa opsi:

  • Disk Firmware Terpisah (alias "mode disk terpisah")

  • Disk Gabungan Fedora CoreOS + Firmware EDK2 (alias "mode disk gabungan")

Kedua opsi ini dijelaskan dalam bagian berikut. Apa pun opsi yang Anda pilih, pertimbangkan apakah Anda perlu Mengubah batas RAM 3G atau Mengaktifkan Boot DeviceTree.

EDK2: Mode Disk Firmware Terpisah

Dalam mode disk terpisah, firmware EDK2 akan menggunakan slot kartu SD atau slot USB pada RPi4 Anda. Setelah disk firmware terpasang ke sistem, Anda dapat mengikuti dokumentasi instalasi bare metal dan memperlakukan RPi4 seperti perangkat keras server lainnya.

Untuk membuat disk (SD atau USB) dengan firmware di dalamnya, Anda dapat menjalankan perintah seperti berikut:

VERSION=v1.50  # use latest one from https://github.com/pftf/RPi4/releases
UEFIDISK=/dev/sdX
sudo mkfs.vfat $UEFIDISK
mkdir /tmp/UEFIdisk
sudo mount $UEFIDISK /tmp/UEFIdisk
pushd /tmp/UEFIdisk
sudo curl -LO https://github.com/pftf/RPi4/releases/download/${VERSION}/RPi4_UEFI_Firmware_${VERSION}.zip
sudo unzip RPi4_UEFI_Firmware_${VERSION}.zip
sudo rm RPi4_UEFI_Firmware_${VERSION}.zip
popd
sudo umount /tmp/UEFIdisk

Setelah disk ini dipasang ke Pi4 Anda, Anda dapat menginstal FCOS sebagaimana pada server bare metal lainnya.

Disk firmware terpisah harus tetap terpasang secara permanen agar boot di masa depan dapat berfungsi.

EDK2: Disk Gabungan Fedora CoreOS + Firmware EDK2

Dalam mode disk gabungan, firmware EDK2 akan berada di dalam partisi EFI dari Fedora CoreOS, sehingga hanya memerlukan satu disk untuk firmware EDK2 dan FCOS.

Ada beberapa cara untuk mencapai tujuan ini:

  • Instal Langsung di RPi4

  • Siapkan Disk Pi4 di Mesin Lain

EDK2: Instal Langsung Mode Disk Gabungan

Saat melakukan instalasi langsung — artinya Anda melakukan boot (melalui firmware EDK2) ke lingkungan live Fedora CoreOS (ISO atau PXE) dan menjalankan coreos-installer — Anda dapat me-mount partisi EFI (partisi ke-2) dari disk FCOS yang telah diinstal setelah proses instalasi selesai, lalu menyalin berkas firmware EDK2 ke dalamnya:

UEFIDISK=/dev/mmcblkX atau /dev/sdX
FCOSDISK=/dev/sdY
FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH |
                   jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM") | .path')
mkdir /tmp/mnt{1,2}
sudo mount $UEFIDISK /tmp/mnt1
sudo mount $FCOSEFIPARTITION /tmp/mnt2
sudo rsync -avh /tmp/mnt1/ /tmp/mnt2/
sudo umount /tmp/mnt1 /tmp/mnt2

Sekarang Anda dapat melepas disk tambahan dari RPi4 dan mem-boot ulang mesin.

Proses boot dapat memakan waktu, terutama jika disknya lambat. Bersabarlah. Anda mungkin tidak melihat apa pun di layar selama 20-30 detik.

EDK2: Persiapan Disk Mode Gabungan pada Mesin Alternatif

Saat menyiapkan disk RPi4 dari mesin lain (misalnya membuat disk dari laptop Anda), Anda dapat me-mount partisi kedua setelah menjalankan coreos-installer dan mengunduh berkas firmware EDK2.

Pertama, jalankan coreos-installer untuk menginstal ke disk target:

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

Sekarang Anda dapat me-mount partisi kedua dan mengunduh berkas firmware EDK2:

FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH |
                   jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM") | .path')
mkdir /tmp/FCOSEFIpart
sudo mount $FCOSEFIPARTITION /tmp/FCOSEFIpart
pushd /tmp/FCOSEFIpart
VERSION=v1.50  # use latest one from https://github.com/pftf/RPi4/releases
sudo curl -LO https://github.com/pftf/RPi4/releases/download/${VERSION}/RPi4_UEFI_Firmware_${VERSION}.zip
sudo unzip RPi4_UEFI_Firmware_${VERSION}.zip
sudo rm RPi4_UEFI_Firmware_${VERSION}.zip
popd
sudo umount /tmp/FCOSEFIpart

Sekarang ambil USB/kartu SD tersebut, pasangkan ke RPi4, dan lakukan boot.

Proses boot dapat memakan waktu, terutama jika disknya lambat. Bersabarlah. Anda mungkin tidak melihat apa pun di layar selama 20-30 detik.

Firmware EDK2: Mengubah Batas 3G

Jika Anda memiliki Pi4 dengan lebih dari 3G memori, Anda kemungkinan besar ingin menonaktifkan batasan memori 3G. Di menu firmware EDK2, buka

  • Device ManagerRaspberry Pi ConfigurationAdvanced ConfigurationLimit RAM to 3GBDisabled

  • Tekan F10 untuk menyimpan → Y untuk mengonfirmasi

  • Tekan Esc ke menu utama dan pilih reset untuk memulai ulang sistem.

Firmware EDK2: GPIO melalui DeviceTree

Dengan Firmware EDK2 dalam mode ACPI (default), Anda tidak akan mendapatkan akses ke GPIO (misalnya, HAT Pi tidak akan berfungsi). Untuk mendapatkan akses ke pin GPIO, Anda perlu mengubah pengaturannya ke mode DeviceTree melalui menu EDK2.

  • Device ManagerRaspberry Pi ConfigurationAdvanced ConfigurationSystem Table SelectionDeviceTree

  • Tekan F10 untuk menyimpan → Y untuk mengonfirmasi

  • Tekan Esc ke menu utama dan pilih reset untuk memulai ulang sistem.

Setelah boot, Anda seharusnya melihat entri di bawah /proc/device-tree/ dan juga melihat /dev/gpiochip1 serta /dev/gpiochip2:

[core@localhost ~]$ ls /proc/device-tree/ | wc -l
35
[core@localhost ~]$ ls /dev/gpiochip*
/dev/gpiochip0  /dev/gpiochip1
Anda dapat berinteraksi dengan GPIO dari ruang pengguna menggunakan libgpiod serta binding atau alat terkait.