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への変換は以下のサイトを参考にさせていただきました。
流れはイメージファイルをマウントして内容を若干修正し、ファイル一式を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」ボタンを長押しするとメニューが出るので、下の項目を選択します。
USBストレージを差さないと怒られるので、適当なUSBメモリかSDカードを挿します。
先ほど作ったイメージファイルが以下にあるので読み込みます。
/mnt/data/Debian_Buster_Raspbian_2019.10.img192/home/pi
ここでもちょっと時間かかります。
読み込まれました。
再起動すると新OSが選択できます。
無事起動です。
64bit も同じ手順でインストールします。
最後に
Raspberry Pi OSをSquashFSに変換してBerryBootで起動してみました。変換できないディストリビューションもあるようですが、いろいろ試したくなります。