Gentoo ラズパイ関連

gentoo-on-rpi-64bit 初期セットアップ

ココに書いてあるものをなぞった このページにラズパイで Gentoo を便利に稼働させる細かいノウハウがあるので一読した方が良い。これを作った sakaki- 氏すごい。 Gentoo 一般についてはGentoo Linux amd64 ハンドブック:Gentoo での作業にまとまっている。

条件

  • Linux マシン( Ubuntu 21.04 ) で行った。
  • 解凍に zstd が必要
  • Xfce, LibreOffice, VLC, Kodi, GIMP などを含むデスクトップ環境を選択した(ライトイメージもある)
  • ライトイメージの場合、解凍されたファイル名も異なるので読み替えが必要

手順

SD カードが刺さっているパスを確認する

SD カードを Linux マシンに刺した上で /var/log/syslog を確認するか lsblk で確認する。

$ sudo lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 223.6G  0 disk
├─sda1   8:1    0   300M  0 part /boot/efi
└─sda2   8:2    0 223.3G  0 part /
sdb      8:16   1  28.9G  0 disk
├─sdb1   8:17   1   255M  0 part
└─sdb2   8:18   1  28.6G  0 part

私の場合は /dev/sdb で認識されていた。

イメージのダウンロード、解凍、書き込み

※ SD カードが認識されているパスによってコマンドが変わるので注意 私は /dev/sdb だった。

作業用ディレクトリ作成

tmpdir=$(date +%Y%m%d%H%M) && mkdir $tmpdir && cd $tmpdir

デスクトップ版をダウンロードと展開

wget -c https://packages.genpi64.com/genpi-aarch64-desktop-latest.img.zst
zstd -d genpi-aarch64-desktop-latest.img.zst -o genpi-aarch64-desktop-latest.img
sudo dd if=genpi-aarch64-desktop-latest.img of=/dev/sdb bs=1M status=progress; sudo sync

ライト版をダウンロードと展開

wget -c https://packages.genpi64.com/genpi-aarch64-lite-latest.img.zst
zstd -d genpi-aarch64-lite-latest.img.zst -o genpi-aarch64-lite-latest.img
sudo dd if=genpi-aarch64-lite-latest.img of=/dev/sdb bs=1M status=progress; sudo sync
ラズパイに SD カードと LAN ケーブル、電源とディスプレイ、キーボードを接続して起動、ログイン

ssh demouser@IP アドレス でログインできる。

id: demouser pass: raspberrypi64 でログインできる。

  • ssh で外部から作業した方が捗るので IP アドレスを確認する。
  • デフォルトで sshd が起動しているので IP アドレスが分かっているならいきなり ssh ログインで良い。
  • 外部から ssh demouser@IP アドレス でログインできることを確認する

以下は sudo -s で root になって行う。

ロケール設定

下記は sudo -s で root になってから行う。

echo 'ja_JP.UTF-8 UTF-8' >> /etc/locale.gen
locale-gen
locale_num=$(eselect locale list | grep ja_JP.utf8 | awk '{print $1}' | sed -e 's/\[//' -e 's/\]//')
eselect locale set $locale_num && . /etc/profile
echo -e 'LINGUAS="ja"\nL10N="ja"' >> /etc/portage/make.conf

参考 LINGUAS

タイムゾーン設定
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo "Asia/Tokyo" > /etc/timezone
swap 追加

5GB の swap 領域を作成する例。 GCC のコンパイルにかなりのメモリを使うため 5GB 用意する。

mkdir /var/cache/swap/
cd /var/cache/swap/
truncate -s 0 ./swapfile
chattr +C ./swapfile
btrfs property set ./swapfile compression none
dd if=/dev/zero of=swapfile bs=128M count=40
chmod 0600 ./swapfile
mkswap ./swapfile
swapon ./swapfile
echo '/var/cache/swap/swapfile swap swap defaults 0 0' >> /etc/fstab

参考 Btrfs 特有の問題がある Btrfs だと copy-on-write や圧縮機能をオフにしないと swap ファイルが作れない。 なるほど。逆に失敗してくれるのはよく出来てる。

最新にアプデ

/etc/portage/make.conf で使用する CPU 数を減らす

MAKEOPTS="-j16 -l16"

16 コア利用する、となっているが gcc のコンパイルに失敗するので 5 プロセス程度に留める ↓ 2021/07/18 に Github の問題提起されているされているので、将来的に値が変わるかも

MAKEOPTS="-j5 -l5"

2021/10/09 時点だと問題があるパッケージがあるので、一時的に見送るパッケージ

echo -e '>sys-apps/coreutils-8.32-r1\n>=sys-devel/gcc-11.2.0' >> /etc/portage/package.mask/package.mask

アップデート ここを参考にした

sudo emerge --sync
sudo dispatch-conf     # portageが書き換える設定を確認して反映
sudo emerge --ask --update --deep --newuse --with-bdeps=y @world

portage のレポジトリの状況によっては @world でのアップデートに失敗する事もある。 その場合はアップデートする範囲を狭くする意図で @system で行ってみると上手くいく場合がある。 また portage コマンドが古い場合があるので、新しくしておく(新しい EAPI が出ている場合、emerge がうまく行かなくなる場合がある)

sudo emerge --ask --quiet --verbose --verbose-conflicts portage
sudo emerge --ask --quiet --verbose --verbose-conflicts --update @system
sudo emerge --ask --quiet --verbose --verbose-conflicts --update --deep @system
ホスト名

sudo vi /etc/conf.d/hostname

wifi

nmtui を使う

NTP 設定

オフィシャル

sudo emerge net-misc/ntp
rc-update add ntpd default

rc-service ntpd status
アカウント追加

Gentoo を使い始める

初回起動時にキーボードや wifi 設定を変えられるアプリが起動しているので必要に応じて変更 ( Application => Setting => RPi Config Tool からでも開ける )

ユーザーの追加と削除( オプション )

ユーザー名は適宜変更

sudo useradd --create-home --groups "adm,disk,lp,wheel,audio,video,cdrom,usb,users,plugdev,portage,cron,gpio,i2c,spi" --shell /bin/bash --comment "tin-machine" tin-machine
sudo passwd tin-machine

ssh 鍵のコピーを ssh クライアントから行う

ssh-copy-id tin-machine@10.10.254.21

新しく作ったユーザーでログインし sudo できることを確認、 元あった demouser の削除

sudo userdel --remove demouser

オプショナルな設定

distccd を起動する
sudo rc-update add distccd default

/etc/conf.d/distccd の DISTCCD_OPTS の IP アドレスを修正。アクセス許可する IP アドレスにする。

クライアント側は https://wiki.gentoo.org/wiki/Distcc/ja を参考に修正。

私の環境だと 3 台の distccd があるので下記のような指定をした。

distcc-config --set-hosts "10.10.254.20 10.10.254.22 10.10.254.25"

/etc/portage/make.conf の MAKEOPTS は下記のように修正した。 ( distccd の持っている CPU 数、クライアント側の CPU 数によって異なる )

MAKEOPTS="-j21 -l2"
シェルに fish を追加
echo ">=dev-libs/libpcre2-10.37-r2 pcre32" >> /etc/portage/package.use/fish
sudo emerge --ask --quiet --verbose --verbose-conflicts fish
dev-vcs/hub (github を便利に使うコマンド)を追加
!!! All ebuilds that could satisfy "dev-vcs/hub" have been masked.
!!! One of the following masked packages is required to complete your request:
- dev-vcs/hub-2.14.2-r1::gentoo (masked by: missing keyword)

というエラーが出たので、 package.accept_keywords に追加

echo "dev-vcs/hub **" >> /etc/portage/package.accept_keywords
emerge --ask --quiet --verbose --verbose-conflicts dev-vcs/hub
lv マルチリンガルのぺージャー
echo "app-text/lv **" >> /etc/portage/package.accept_keywords
emerge app-text/lv
fzf

/etc/portage/package.accept_keywords に

app-shells/fzf \*\*

を追加した上で

sudo emerge --ask --quiet --verbose --verbose-conflicts app-shells/fzf
NFS 用

sudo emerge net-fs/nfs-utils


sudo useradd --create-home --uid 503 --gid 20 --groups "adm,disk,lp,wheel,audio,video,cdrom,usb,users,plugdev,portage,cron,gpio,i2c,spi" --shell /bin/bash --comment "kaoru" kaoru
sudo passwd kaoru

/etc/fstab に追加


10.10.254.10:/homes/kaoru /home/kaoru nfs defaults,noatime,async,nolock 0 0

docker

emerge --ask app-emulation/docker-compose app-emulation/docker
rc-update add docker default
usermod -aG docker tin-machine

※ USE btrfss も試したい。

jq
emerge --ask app-misc/jq
ブラウザ

emerge @preserved-rebuild
sudo emerge www-client/firefox

firefox を使ってみると CPU 使用率は遅いがアプリ動作がもっさりする印象がある。


eix www-client/firefox

で確認すると CPU_FLAGS_ARM="-neon" というフラグがあった。

Advanced SIMD (NEON)


Advanced SIMD 拡張は NEON とも呼ばれ、
メディアおよびデジタル信号の処理に向いた 64 ビットと 128 ビットの SIMD 命令セットである。
8/16/32/64 ビットの整数演算と、32 ビット (単精度) 浮動小数点演算のための SIMD 命令が定義されており、
ARMv7 から利用可能。

ラズパイ 4 であれば ARMv7 のようだ 前世代から大幅パワーアップ!「Raspberry Pi 4 Model B/4GB」紹介編

パッケージの設定を下記のように変更し


echo "www-client/firefox CPU_FLAGS_ARM: neon" >> /etc/portage/package.use/firefox

としてから emerge しなおした。が、駄目だった。更に調べると x86 の情報だけど CPU_FLAGS_X86が見つかった。ありがたい。

cpuid2cpuflags というコマンドが CPU の拡張命令の設定をサポートしてくれるそうな。

/etc/portage/make.conf


Note that this is only effective on x86 and amd64 architectures.

とあるので駄目もとで試す。

またキーボード一体型のラズパイにチャレンジしている人も cpuid2cpuflags を試している。

cpuid2cpuflags をインストールして、全てのパッケージに適用してみる。


emerge --ask app-portage/cpuid2cpuflags
echo "_/_ $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

これで駄目だったら、emerge を実行する際の変数で CPU_FLAG_ARM を設定する。

その他

sudo emerge net-misc/youtube-dl