ラズパイ5、Gentoo周りのメモ

Gentooで使いたい。GenPi64のプロジェクトだと2024/03だと対応はまだの模様

2023/12 あたりに作成したGenPi64プロジェクトのイメージだとRaspberryPI5では起動しなかった。 この辺の機種ごとの際はラズベリーパイではよくあることではある。

ありがたいことに先人がおり起動したので、私が追加で設定したメモを残す。

手順はext4で起動するようになっている。 私が手順を一通り見て「既存のディスクイメージをベースにカーネルと必要なファイルを更新したら起動するのでは?」と思い試してみた。 が、カーネルが認識するファイルシステムがext4だった(カーネル再構築でbtrfsを認識させればよいような気もする) 私がGenPi64で作成したイメージはルートファイルシステムをbtrfsで構成したため起動しなかった。 素直にext4でルートファイルシステムを構成する。

基本的にこの手順で動作する

How to install Gentoo on Raspberry Pi 5 - Gentoo Wiki

私は作業用ディレクトリとして下記にした

WORK=/mnt/gentoo_work
DISK=/dev/sdc
DEST=/mnt/gentoo
mount ${DISK}3 $DEST && mount ${DISK}1 ${DEST}/boot

Gentooオフィシャルの説明

私が追加、変更して作業したこと

/lib/modules の git clone は時間がかかる

先にgitをインストールして/lib/modules用のレポジトリをダウンロードしておいた方が良い

–depth=1 で履歴を取らないようにしておくと早い

cd ${WORK}
git clone --depth=1 https://github.com/raspberrypi/firmware.git

openrcではなくsystemdを使いたかった

stage3のファイルをopenrcではなくsystgemdを利用した。 ダウンロードは下記のarm64の「systemd」を使った。

Downloads – Gentoo Linux

cd ${WORK}
tar xpf /mnt/gentoo_work/stage3-arm64-systemd-20250824T234925Z.tar.xz  --xattrs-include='*.*' --numeric-owner -C ${DEST}/

portage snapshot は jaistからダウンロードした http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/ 昔からありがとう… 北陸先端科学技術大学院大学さん

cd ${WORK} && wget http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/gentoo-latest.tar.xz
mkdir -p ${DEST}/var/db/repos/gentoo
tar xpf ${WORK}/gentoo-latest.tar.xz --strip-components=1 -C ${DEST}/var/db/repos/gentoo

Config.txt に追加

手順のものに更に下記を追加した。普通のUSBポートからの給電で起動したい。

usb_max_current_enable=1

カーネルとファームウェア

/lib/modules と カーネルのバージョンは関係がある。ので、この作業も必要

この手順にあるようにコピー

mount ${DISK}1 ${DEST}/boot
cp ${WORK}/firmware/boot/bcm2712-rpi-5-b.dtb ${DEST}/boot/
cp ${WORK}/firmware/boot/fixup_cd.dat ${DEST}/boot/
cp ${WORK}/firmware/boot/fixup.dat ${DEST}/boot/
cp ${WORK}/firmware/boot/start_cd.elf ${DEST}/boot/
cp ${WORK}/firmware/boot/start.elf ${DEST}/boot/
cp ${WORK}/firmware/boot/bootcode.bin ${DEST}/boot/
cp ${WORK}/firmware/boot/kernel8.img ${DEST}/boot/
cp -r ${WORK}/firmware/boot/overlays ${DEST}/boot/

wifiはファームウェア対応はwifiだけ行った、bluetoothはスキップした

接続はイーサネット経由で行っているだけ

cd ${WORK}
git clone --depth=1 https://github.com/RPi-Distro/firmware-nonfree.git
mkdir -p ${DEST}/lib/firmware/brcm
cp ${WORK}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43455-sdio-standard.bin ${DEST}/lib/firmware/brcm/
cp ${WORK}/firmware-nonfree/debian/config/brcm80211/cypress/cyfmac43455-sdio.clm_blob ${DEST}/lib/firmware/brcm/
cp ${WORK}/firmware-nonfree/debian/config/brcm80211/brcm/brcmfmac43455-sdio.txt ${DEST}/lib/firmware/brcm/
cd ${DEST}/lib/firmware/brcm/
ln -s cyfmac43455-sdio-standard.bin brcmfmac43455-sdio.raspberrypi,5-model-b.bin
ln -s cyfmac43455-sdio.clm_blob brcmfmac43455-sdio.raspberrypi,5-model-b.clm_blob
ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,5-model-b.txt

wifiを使うためNetworkManagerをビルド

この作業はLANケーブルでネットワーク接続ができてから行う。 NetworkManagerをビルドするためネットワークが必要

先にlocaleを設定しないとglib-utilsがビルドできないので設定する

nano /etc/locale.gen

ja と en のUTF-8を有効にする

ja_JP.UTF-8 UTF-8
en_US.UTF-8 UTF-8

ロケール作成

locale-gen
確認

locale -a | grep ja_JP


ロケール設定

echo ‘LANG=ja_JP.UTF-8’ > /etc/env.d/02locale echo ‘LC_COLLATE=C’ » /etc/env.d/02locale env-update && source /etc/profile

echo “net-wireless/wpa_supplicant dbus” » /etc/portage/package.use/wpa_supplicant USE="-modemmanager -ppp -gtk-doc -introspection -concheck" emerge networkmanager systemctl enable –now NetworkManager


SSIDに接続
`nmcli device wifi list` でスキャンしてから下記で接続する

nmcli device wifi connect “SSID” –ask


確認

ip addr show wlan0


#### fstabはUSBストレージに変更した

手順はSDカードのものだったのでUSB-SSDのもの( /dev/sda )に変更した.
noauto wo kesita

/dev/sda1 /boot vfat noatime,nodev,nosuid,noexec 1 2 /dev/sda2 swap swap defaults 0 0 /dev/sda3 / ext4 noatime 0 0


#### /boot/cmdline.txt をUSB-SSDのものに変更した

dwc_otg.lpm_enable=0 console=tty1 root=/dev/sda3 rootfstype=ext4 rootwait


#### イーサネットの設定で固定IPアドレスにした(systemd/networkdの設定)

[参考](https://wiki.archlinux.jp/index.php/Systemd-networkd#.E6.9C.89.E7.B7.9A.E3.82.A2.E3.83.80.E3.83.97.E3.82.BF.E3.81.A7_DHCP_.E3.82.92.E4.BD.BF.E7.94.A8)

/etc/systemd/network/20-wired.network を追加。

dhcpで設定( 2025/08 だとDHCPの設定は上手く動作しない。下の固定IPアドレスだとできる )

[Match] Name=end0

[Network] LinkLocalAddressing=ipv4 DHCP=yes


eth0 固定IPアドレスで設定

[Match] Name=end0

[Network] LinkLocalAddressing=ipv4 # これが無いと “end0: Faild to configure DHCPv6 client No much file or directory” というエラーが出る Address=192.0.2.41/24 Gateway=192.0.2.100 DNS=192.0.2.100


wifi向けの設定は /etc/systemd/network/25-wireless.network を作成

[Match] Name=wlan0

[Link] MTU=1450 ConfigureWithoutCarrier=yes

[Network] DHCP=ipv4 IPv6AcceptRA=no

[DHCP] RouteMetric=1024 UseBroadcast=yes ClientIdentifier=mac



/etc/wpa_supplicant/wpa_supplicant-wlan0.conf に下記の内容を追加

ctrl_interface=/var/run/wpa_supplicant update_config=0 country=JP

network={

ssid="OpenWrt5Ghz"
psk="ここは変更"
key_mgmt=WPA-PSK WPA-PSK-SHA256
priority=20
proto=RSN
pairwise=CCMP
group=CCMP
ieee80211w=1

}



wifi用のwpa_supplicantのsystemdユニットを有効化して起動

sudo systemctl enable wpa_supplicant@wlan0.service sudo systemctl start wpa_supplicant@wlan0.service


systemd-networkd の有効化

sudo systemctl enable systemd-networkd sudo systemctl start systemd-networkd


確認

networkctl status wlan0


#### 一旦、rootでのsshログインを許可

/etc/ssh/sshd_config に追記

PermitRootLogin yes


#### rootパスワードを/etc/shadowに設定
ホストのパスワードをrootにコピーする

rootログイン後、systemdのユニットの自動起動

一旦、ラズパイ自身で起動する 私はホストOSがUbuntuでamd64なので、ラズパイのバイナリをchrootで起動できない

ネットワークケーブル、ディスプレイ、キーボードを繋いでログインすること

アンマウントして起動する

sync && umount ${DEST}/{boot,}
ip l set end0 up
systemctl start systemd-networkd
systemctl enable systemd-resolved
timedatectl set-ntp true
systemctl start systemd-resolved
systemctl enable systemd-resolved
systemctl start sshd
systemctl enable sshd

※ ラズパイは時刻ずれが頻発するので DNSSECの認証に失敗する。対応は下記に。

すぐ使うパッケージのインストール(ansibleが利用するもの)

emerge --sync && emerge app-portage/gentoolkit

トラブル

名前解決できない

まずユニットのステータスを確認 systemctl status systemd-resolved

systemd-resolvedが起動していなければ起動。 systemctl start systemd-resolved

● systemd-resolved.service - Network Name Resolution
     Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-01-24 14:16:16 -00; 2min 41s ago
       Docs: man:systemd-resolved.service(8)
             man:org.freedesktop.resolve1(5)
             https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
             https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
   Main PID: 350 (systemd-resolve)
     Status: "Processing requests..."
      Tasks: 1 (limit: 9446)
        CPU: 50ms
     CGroup: /system.slice/systemd-resolved.service
             └─350 /usr/lib/systemd/systemd-resolved

Jan 24 14:16:16 localhost systemd-resolved[350]: Negative trust anchors: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.>
Jan 24 14:16:16 localhost systemd-resolved[350]: Defaulting to hostname 'linux'.
Jan 24 14:16:16 localhost systemd[1]: Started Network Name Resolution.
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question . IN DNSKEY: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question com IN DS: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question com IN DNSKEY: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question com IN SOA: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question google.com IN DS: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question google.com IN SOA: signature-expired
Jan 24 14:16:26 localhost systemd-resolved[350]: [🡕] DNSSEC validation failed for question google.com IN A: signature-expired
``

上記の場合、DNSSECの検証に失敗している、一時的にDNSSECの検証をオフにオフにする。

nano /etc/systemd/resolved.conf

[Resolve] DNSSEC=no


時刻がずれている可能性がある(私はずれていた)

リアルは3月だけど、ラズパイは1月になってた。

date

Wed Jan 24 14:26:07 -00 2024


インターネット上のNTPサーバーを使用して時刻を同期するには、timedatectlを使用した。

sudo timedatectl set-ntp true


日付が現在のものになった。

date

Sun Mar 24 09:02:17 -00 2024


DNSSECの設定を戻す。

nano /etc/systemd/resolved.conf


再起動して名前解決できるか確認

systemctl restart systemd-resolved


再起動しても起動するようにする。
`systemctl enable systemd-resolved`

# /etc/portage/repos.conf/ を他サーバからコピー

できればGenPi64のイメージからスタートしたい。
ただ2024/04時点だとイメージの用意ができてないのでひとまずコピー。

設定としてgitを用いるので事前に dev-vcs/git をインストールしておく。

コピー後、既存の /var/db/repos/gentoo は手動でrmした上で、一度、emerge --syncしておく
( 既存のディレクトリはrsyncでの--syncなので、gitの--syncと互換性がない )

# トラブルシューティング時のコマンド

- systemd-networkdの状態確認
  - `systemctl status systemd-networkd`
- systemdの設定をリロード
  - `sudo systemctl daemon-reload && sudo systemctl restart systemd-networkd`
- IPアドレス確認
  - `ip addr show end0`
- DHCPでIPが取得できない
  - 一旦、固定IPアドレスで設定

# ansibleをかける場合

[ansible/common](../ansible/common/) を実行する