ラズパイ5、Gentoo周りのメモ
Posted:
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オフィシャルの説明
- Raspberry Pi Install Guide - Gentoo Wiki
- 他の型番の説明も含む
私が追加、変更して作業したこと
/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」を使った。
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/) を実行する