更新: おおむね以下の方法で作成したSDカードが http://114.150.218.139:63873/RPi-boot-images/ にあります
systemd が嫌いな人たちが作っているDebian forkの Devuan のSDカードイメージを自作する手順です。SDカードイメージは https://arm-files.devuan.org/ で配布してますが、自作するメリットは
- ラズパイ4用SDカードを作成できる
- btrfs にできる (Raspberry Pi OSでこれをやるのはちょっとむずかしい印象)
- swap パーティションも作れる
- インストールするパッケージを自分で決めることができて、使わないものを最初から入れないようにできる
などがあります。以下の手順はSDカードを作るパソコンではDevuanかUbuntuかDebianが稼働している必要があります。SDカードにインストールするDevuanのバージョンは4 (Chimaera)です。Raspberry Pi OSではないです。だいたい以下のことを自動でやるスクリプトが https://github.com/emojifreak/debian-rpi-image-script にあります
必要パッケージインストール
パソコンのほうで sudo apt-get install qemu-user-static binfmt-support btrfs-progs
として必要パッケージをインストールして下さい。またDevuanの署名鍵のインストールを行って下さい。
SDカードのパーティション切りとフォーマット
- パソコンに空のSDカードを挿入して、
sudo gparted /dev/mmcblk0
としてgpartedを起動します。 - 必要なら「デバイス」→「パーティションテーブルの作成」を選んでパーティションテーブルを作成します(以下スクリーンショット)
- 以下のように起動パーティションを256MB程度でつくります。ファイルシステムをfat32にしてラベルをRASPIFIRMとします。
- 以下のようにルートファイルシステムを作ります。btrfsでもそうでなくてもいいですが、ラベルをRASPIROOTにします。大きさもなんでもいいです。
- スワップパーティションを以下のように作ります。大きさはラズパイの実メモリ量よりも少し大きめにするとよいと思います。ラベルをRASPISWAPとします。
上記の作業を終えると、SDカードのパーティションとファイルシステムは下記のようになるはずです。問題なくできていたらgpartedを終了します。
mmdebstrap によるルートファイルシステムへのラズパイ用パッケージ
基本作業(ラズパイ3または4)
sudo bash
などとしてパソコンのrootプロンプトで以下を実行して下さい。
mount -o async,discard,lazytime,noatime /dev/mmcblk0p2
mmdebstrap --architectures=arm64 --variant=apt --components="main contrib non-free" --include=linux-image-arm64,eudev,kmod,e2fsprogs,btrfs-progs,sysvinit-core,locales,tzdata,openssh-server,bash,apt-utils,whiptail,vim-tiny,less,man-db,ifupdown,isc-dhcp-client,wpasupplicant,crda,raspi-firmware,firmware-brcm80211,firmware-linux-free,firmware-misc-nonfree,keyboard-configuration,console-setup,fake-hwclock chimaera /mnt http://deb.devuan.org/merged/
ラズパイ2の場合の変更
--architectures=arm64
を --architectures=armhf
に変更し linux-image-arm64
を linux-image-armmp
に変更します
ラズパイ0または1の場合の変更
--architectures=arm64
を --architectures=armel
に変更し linux-image-arm64
を linux-image-rpi
に変更します
ラズパイ3または4でメモリ節約のために実行ファイルを32bit版にする場合
--architectures=arm64
を --architectures=armhf,arm64
に変更します。カーネルは linux-image-arm64
のままにします。(これうまく動作してません)
不要なパッケージ
以下のような場合には mmdebstrap の引数に渡すパッケージから以下のものを除くことができます。
- キーボードを使わないなら keyboard-configuration,console-setup は不要
- 無線LANを使わないなら wpasupplicant,crda は不要
- btrfs を使わないなら btrfs-progs は不要
- SSHによるリモートログインをしないなら openssh-server は不要
標準的なパッケージの追加
mmdebstrap の --variant=apt
を --variant=important
または --variant=standard
に置き換えることで、重要なパッケージや標準的なパッケージがインストールされるようになります。
ブートパーティションの作成
mount -o async,discard,lazytime,noatime /dev/mmcblk0p1 /mnt2
cp -Rp /mnt/boot/firmware/* /mnt2
rm -rf /mnt/boot/firmware/*
umount /mnt2
mount -o async,discard,lazytime,noatime /dev/mmcblk0p1 /mnt/boot/firmware
-
/mnt/boot/firmware/cmdline.txt
内のroot=
の部分をroot=LABEL=RASPIROOT
に変更します - ラズパイ3または4でarmhf (32ビット実行ファイル) を動かす場合
/mnt/boot/firmware/config.txt
の先頭にarm_64bit=1
を加え、cp /mnt/usr/lib/linux-image-*-arm64/broadcom/bcm*rpi*.dtb /mnt/boot/firmware
して下さい。
諸々の設定
SDカード上のルートファイルシステムが/mntにあるとして、以下のファイルを適切に設定します。ssh でリモートログインする場合 /mnt/root/.ssh/authorized_keys
に適切な公開鍵を置くか、/mnt/etc/ssh/sshd_config
を編集してパスワードによるrootログインを許可します。
raspi-devuan (好きなように)
LABEL=RASPIROOT / btrfs rw,async,lazytime,discard 0 1
LABEL=RASPIFIRM /boot/firmware vfat rw,async,lazytime,discard 0 2
LABEL=RASPISWAP none swap sw,discard 0 0
options inet6 edns0
nameserver 192.168.1.2
http_proxy=http://192.168.1.2:3128/
https_proxy=http://192.168.1.2:3128/
REGDOMAIN=JP
auto wlan0
iface wlan0 inet dhcp
wpa-ssid あなたのSSID
wpa-psk あなたのパスフレーズ
ARMエミュレーターによる最後の仕上げ
パソコン上で chroot /mnt
としてARMエミュレーターを起動します。ラズパイのルートプロンプトが出てくるので以下の作業をします
passwd root
-
dpkg-reconfigure tzdata
でタイムゾーンの設定をします -
dpkg-reconfigure locales
でロケールの設定をします -
dpkg-reconfigure keyboard-configuration
でキーボード配列を設定します。「Generic 105-key PC (intl.)」→「Japanese」と選びます。 -
fake-hwclock save
で時刻を保存します -
exit
でARMエミュレーターから脱出します
SDカードのアンマウント
umount /mnt/boot/firmware
umount /mnt
以上で、SDカードを抜いてラズパイに挿して電源入れると自家製Devuan 4 Chimaeraが起動します。