matuconとマイコン

ITガジェットが好物です

BerryBoot で最新Raspberry Pi OSの32bit, 64bit をインストールして共存させる

前回の記事で作ったBerryBoot環境に最新のRaspberry Pi OS を入れてみます。OSイメージはSquashFS(SFS)という形式で作るようなので32bitと64bitのOSイメージをそれぞれ作ってインストールします。

イメージダウンロード

Raspberry Pi本家からOSイメージをダウンロードします。 タイミングによっては時間かかります。。32bitの方はミラーサイトがあるようなのでそちらから取得するのも良さそうです。 64bit はベータ版のみのようです。

OS種類 URL
32bit https://www.raspberrypi.org/downloads/raspberry-pi-os/
64bit Beta https://www.raspberrypi.org/forums/viewtopic.php?t=275370

32bitの最新版はリリース日が2020-05-27なので今現在のRaspberry Pi ImagerでインストールされるOSと同じと思われます。zipファイルは解凍しておきます。3倍くらいのサイズになるので気長に待ちます。

$ unzip 2020-05-27-raspios-buster-armhf.zip
$ unzip 2020-05-27-raspios-buster-arm64.zip

OSイメージファイル作成

SquashFSへの変換は以下のサイトを参考にさせていただきました。

www.berryterminal.com

流れはイメージファイルをマウントして内容を若干修正し、ファイル一式をSquashFSへ圧縮します。 まずOSアップデートと必要なソフトをインストールします。

$ sudo apt update && sudo apt full-upgrade
$ sudo apt install kpartx squashfs-tools

イメージファイルの中身をマウントします。

$ sudo kpartx -av 2020-05-27-raspios-buster-armhf.img 
add map loop1p1 (254:0): 0 524288 linear 7:1 8192
add map loop1p2 (254:1): 0 6946816 linear 7:1 532480

$ sudo mkdir /mnt/loop1
$ sudo mkdir /mnt/loop2
$ sudo mount /dev/mapper/loop1p1 /mnt/loop1
$ sudo mount /dev/mapper/loop1p2 /mnt/loop2

中を覗いてみるとloop0p1は/boot の内容のようです。上記サイトにならってloop0p2 の内容のみイメージ化します。

$ ls -al /mnt/loop1/
total 51635
drwxr-xr-x 3 root root     3072 Jan  1  1970 .
drwxr-xr-x 1 root root     4096 Aug  3 09:00 ..
-rwxr-xr-x 1 root root    24095 May 13 09:40 bcm2708-rpi-b.dtb
-rwxr-xr-x 1 root root    24358 May 13 09:40 bcm2708-rpi-b-plus.dtb
-rwxr-xr-x 1 root root    23876 May 13 09:40 bcm2708-rpi-cm.dtb
-rwxr-xr-x 1 root root    23800 May 13 09:40 bcm2708-rpi-zero.dtb
-rwxr-xr-x 1 root root    24536 May 13 09:40 bcm2708-rpi-zero-w.dtb
-rwxr-xr-x 1 root root    25422 May 13 09:40 bcm2709-rpi-2-b.dtb
-rwxr-xr-x 1 root root    25571 May 13 09:40 bcm2710-rpi-2-b.dtb
-rwxr-xr-x 1 root root    26612 May 13 09:40 bcm2710-rpi-3-b.dtb
-rwxr-xr-x 1 root root    27231 May 13 09:40 bcm2710-rpi-3-b-plus.dtb
-rwxr-xr-x 1 root root    25426 May 13 09:40 bcm2710-rpi-cm3.dtb
-rwxr-xr-x 1 root root    41273 May 13 09:40 bcm2711-rpi-4-b.dtb
-rwxr-xr-x 1 root root    52480 May 13 09:40 bootcode.bin
-rwxr-xr-x 1 root root      208 May 27 08:31 cmdline.txt
-rwxr-xr-x 1 root root     1784 May 27 08:11 config.txt
-rwxr-xr-x 1 root root    18693 Jun 24  2019 COPYING.linux
-rwxr-xr-x 1 root root     3153 May 13 09:40 fixup4cd.dat
-rwxr-xr-x 1 root root     5400 May 13 09:40 fixup4.dat
-rwxr-xr-x 1 root root     8421 May 13 09:40 fixup4db.dat
-rwxr-xr-x 1 root root     8413 May 13 09:40 fixup4x.dat
-rwxr-xr-x 1 root root     2663 May 13 09:40 fixup_cd.dat
-rwxr-xr-x 1 root root     6746 May 13 09:40 fixup.dat
-rwxr-xr-x 1 root root     9820 May 13 09:40 fixup_db.dat
-rwxr-xr-x 1 root root     9818 May 13 09:40 fixup_x.dat
-rwxr-xr-x 1 root root      145 May 27 08:31 issue.txt
-rwxr-xr-x 1 root root  5466824 May 13 09:40 kernel7.img
-rwxr-xr-x 1 root root  5801056 May 13 09:40 kernel7l.img
-rwxr-xr-x 1 root root 13945344 May 13 09:40 kernel8.img
-rwxr-xr-x 1 root root  5158072 May 13 09:40 kernel.img
-rwxr-xr-x 1 root root     1594 May 13 09:31 LICENCE.broadcom
drwxr-xr-x 2 root root    16384 May 27 08:10 overlays
-rwxr-xr-x 1 root root   799900 May 13 09:40 start4cd.elf
-rwxr-xr-x 1 root root  3743268 May 13 09:40 start4db.elf
-rwxr-xr-x 1 root root  2252416 May 13 09:40 start4.elf
-rwxr-xr-x 1 root root  3011236 May 13 09:40 start4x.elf
-rwxr-xr-x 1 root root   694052 May 13 09:40 start_cd.elf
-rwxr-xr-x 1 root root  4861512 May 13 09:40 start_db.elf
-rwxr-xr-x 1 root root  2884708 May 13 09:40 start.elf
-rwxr-xr-x 1 root root  3799144 May 13 09:40 start_x.elf

$ ls -al /mnt/loop2/
total 96
drwxr-xr-x  21 root root  4096 May 27 08:09 .
drwxr-xr-x   1 root root  4096 Aug  3 09:00 ..
drwxr-xr-x   2 root root  4096 May 27 08:14 bin
drwxr-xr-x   2 root root  4096 May 27 08:30 boot
drwxr-xr-x   4 root root  4096 May 27 08:05 dev
drwxr-xr-x 109 root root  4096 May 27 08:31 etc
drwxr-xr-x   3 root root  4096 May 27 08:10 home
drwxr-xr-x  16 root root  4096 May 27 08:12 lib
drwx------   2 root root 16384 May 27 08:30 lost+found
drwxr-xr-x   2 root root  4096 May 27 08:05 media
drwxr-xr-x   2 root root  4096 May 27 08:05 mnt
drwxr-xr-x   4 root root  4096 May 27 08:16 opt
drwxr-xr-x   2 root root  4096 May 10 21:59 proc
drwx------   3 root root  4096 May 27 08:15 root
drwxr-xr-x   4 root root  4096 May 27 08:05 run
drwxr-xr-x   2 root root  4096 May 27 08:14 sbin
drwxr-xr-x   2 root root  4096 May 27 08:05 srv
drwxr-xr-x   2 root root  4096 May 10 21:59 sys
drwxrwxrwt   3 root root  4096 May 27 08:31 tmp
drwxr-xr-x  11 root root  4096 May 27 08:16 usr
drwxr-xr-x  11 root root  4096 May 27 08:05 var

イメージ内容修正

$ sudo sed -i 's/^PARTUUID/#\0/g' /mnt/loop2/etc/fstab
$ sudo rm -f /mnt/loop2/etc/console-setup/cached_UTF-8_del.kmap.gz 
$ sudo rm -r /mnt/loop2/etc/systemd/system/multi-user.target.wants/raspberrypi-net-mods.service 
$ sudo rm -r /mnt/loop2/etc/rc3.d/S01resize2fs_once 

イメージ化

$ sudo mksquashfs /mnt/loop2 RaspberryPiOS_32bit_2020-05-27.img -comp lzo -e lib/modules
$ sudo umount /mnt/loop2
$ sudo kpartx -d 2020-05-27-raspios-buster-armhf.img

mksquashfs の引数、オプションは以下の通りです。

引数・オプション 内容
第1引数 イメージ化対象のディレクトリ。
第2引数 出力ファイル名。
-comp 圧縮方法。圧縮率と展開時間のトレードオフでlzo は圧縮率低めで展開時間が早めになります。 コマンドのヘルプを見ると6種類あるようです。
-e 除外するファイル・ディレクトリ指定。

イメージ化もそこそこ時間かかりました。。

同じ操作を64bit のイメージにも行います。zipファイルと同じディレクトリに新しいイメージファイルができるで、一旦ここに置いたままOS再起動します。

OSインストール

BerryBoot の設定画面からイメージファイルを読み込みます。「Add OS」ボタンを長押しするとメニューが出るので、下の項目を選択します。 f:id:mazcon:20200803235703p:plain

USBストレージを差さないと怒られるので、適当なUSBメモリかSDカードを挿します。 f:id:mazcon:20200803235706p:plain

先ほど作ったイメージファイルが以下にあるので読み込みます。 /mnt/data/Debian_Buster_Raspbian_2019.10.img192/home/pi

f:id:mazcon:20200803235720p:plain

ここでもちょっと時間かかります。 f:id:mazcon:20200803235726p:plain

読み込まれました。 f:id:mazcon:20200803235731p:plain

再起動すると新OSが選択できます。 f:id:mazcon:20200803235710p:plain

無事起動です。 f:id:mazcon:20200804105715j:plain

64bit も同じ手順でインストールします。

最後に

Raspberry Pi OSをSquashFSに変換してBerryBootで起動してみました。変換できないディストリビューションもあるようですが、いろいろ試したくなります。