Raspios buster arm64をRaspberry Pi 4B にインストールしてDietPiインストールイメージファイルを作成します

Raspios をラズパイ４BにインストールしてDietPiインストールイメージを作成しDietPiインストールイメージファイルを作成してみます

手順については　https://dietpi.com/docs/hardware/
の　Make your own distribution　というところで説明されています

 x86_64 PC では手順通り特に問題もなく構築できます
 ラズパイでは途中でエラーが数回発生しましたので、覚書として書いてみようと思います

１．準備
　　Raspberry Pi 4B
　　USB接続できるSSD
　　電源供給できるUSBハブ
　　LANケーブルでインターネットへ接続していますのでWIFI接続では試していません
　　インストール用イメージ作成PC（ Linux amd64 )

２．Raspios buster arm64のダウンロード
　　https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2021-05-28/
　　からダウンロードしました
　　お好きな方法でSSDに書き込んでください
　　私は Raspberry Pi Imagerを使いました

３．Raspiosをブート
　　起動するとセットアップが始まります
　　Set　Countryで Use English Languge にチェックをつけておくといいかもしれません
　　Update Software は実行しておきます

４．再起動後　
　　sudo -i
　　bullseye にアップグレードするために、/etc/apt/sources.list に以下の上から４行を追加します
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://deb.debian.org/debian bullseye-backports main contrib non-free

deb http://deb.debian.org/debian buster main contrib non-free
deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
deb http://deb.debian.org/debian buster-updates main contrib non-free

　　apt update
　　apt upgrade
　　メッセージが表示されますので y を入力します
　　途中でメッセージが表示されますので スペースキーを押して最後に q を入力します
　　アップグレード中にリブートしても良いか　というメッセージが表示されるので　yes か no お好きな方を選んでください
　　今回は再起動しませんでした
　　再起動して、cat /etc/os-release で確認してください

５．DietPi インストール環境の作成
　　うまくいくまで試行錯誤を繰り返したので、以下のようなスクリプトを作成しました

\#!/bin/bash

apt update
apt install -y systemd-sysv ca-certificates sudo curl locales gnupg

curl -sSfL http://archive.raspberrypi.org/debian/raspberrypi.gpg.key -o raspberrypi.gpg.key

cp /etc/apt/sources.list.d/raspi.list .

apt-key add raspberrypi.gpg.key
apt update

curl -sSfL https://raw.githubusercontent.com/MichaIng/DietPi/master/PREP_SYSTEM_FOR_DIETPI.sh -o PREP_SYSTEM_FOR_DIETPI.sh

chmod +x PREP_SYSTEM_FOR_DIETPI.sh
./PREP_SYSTEM_FOR_DIETPI.sh

　　これを実行します

![Screenshot at 2021-09-11 21-22-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/e92c46ac-78b8-1bec-917e-8bea77132000.png)

　　Enter キー　を入力します

![Screenshot at 2021-09-11 21-25-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/46b47670-cee2-1d5b-f2c4-471f272673c3.png)

　　名前をローマ字入力します

![Screenshot at 2021-09-11 21-29-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/38dbdb30-eb01-31d1-1f54-a0427ffbbf34.png)

　　Raspberry Pi OS Arm64 を入力します

![Screenshot at 2021-09-11 21-31-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/c75735e9-c045-8623-fc21-551e7c36c713.png)

　　Enterキーを入力します

![Screenshot at 2021-09-11 21-33-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/78ecda60-2877-2a37-f7e3-76a0d95fffda.png)

　　矢印キーで選んで Enterキーを入力してください
　　私はWiFiを使わないので０にしました

![Screenshot at 2021-09-11 21-36-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/ffc94d97-21c7-003b-93b3-385b631128a0.png)

　　Enterキーを入力してください

![Screenshot at 2021-09-11 21-40-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/f0054fd6-8153-c454-6992-2f2ece157316.png)
　　Open subshell を選んでください
　　

![Screenshot at 2021-09-11 21-43-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/d5618534-9402-f4b5-1d9b-7e7bb65dfb7b.png)
　　Enterキーを入力します
　　cat /etc/apt/sources.list.d/raspi.list　で確認すると
　　deb https://archive.raspberrypi.org/debian/ bullseye main になっています
　　最初に保存したものが /root にありますので　buster　に戻します
　　cp /root/raspi.list /etc/apt/sources.list.d/
　　apt update
　　exit

![Screenshot at 2021-09-11 21-50-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/9ee7d72c-ad00-ae6f-bd7d-b9ebb7c23071.png)

　　Retry を選択してください
　　処理が継続されます


![Screenshot at 2021-09-11 21-59-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/45dc51c7-8f0b-daaa-90bd-d49efaff40d4.png)
　　Open subshell を選んでください

![Screenshot at 2021-09-11 22-00-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/60079d5e-59b3-e1da-fae7-717e3b28c76d.png)
　　Enterキーを入力します
　　ls /lib/firmware/brcm/　で確認すると
　　ls: cannot access '/lib/firmware/brcm/': No such file or directory
　　なので　mkdir /lib/firmware/brcm/ を入力します
　　exit

![Screenshot at 2021-09-11 22-05-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/08d198d4-de38-b0af-c236-bd9d912e2354.png)
　　Retry を選択してください
　　処理が継続されます


![Screenshot at 2021-09-11 22-08-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/75ad35bc-0942-9a38-9d13-b412c48a8b7c.png)
　　Open subshell を選んでください

![Screenshot at 2021-09-11 22-09-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/d419e8b6-fea9-a7bd-f4bc-b00b09e50c7d.png)
　　Enterキーを入力します
　　 apt-get purge ".*:armhf"　を実行します


![Screenshot at 2021-09-11 22-12-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/686941e2-19a6-c15f-2119-423c65dee7ae.png)
　　Yes, do as I say! を入力します


![Screenshot at 2021-09-11 22-14-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/5b3b1034-383a-e746-3fe3-61251282a441.png)

　　exit を入力します

![Screenshot at 2021-09-11 22-16-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/ed72988d-6d72-ba4a-826b-8ac37e829769.png)
　　Retry を選択してください
　　処理が継続されます

![Screenshot at 2021-09-11 22-17-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/98f83062-5dcb-f97f-fd02-25a2a95701b3.png)
　　お好みで選んでください
　　私は WiFi を使わないので <OK> を選択しました


![Screenshot at 2021-09-11 22-20-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/c0ccd930-aeac-7532-bc8a-4fd638f6bec4.png)
　　これで処理が終了しました

　　シャットダウンします　shutdown -h now
　　ラズパイ本体の電源OFF
　　SSDを取り外します

６．インストールイメージの作成
　　この処理は　amd64のLinux PCで行います
　　Linux を起動します
　　ターミナルで grep "^CONFIG_BLK_DEV_RAM=" /boot/config-$(uname -r) を実行します
　　CONFIG_BLK_DEV_RAM=m　が表示されました
　　メモリ上にRAMディスクを作成します
　　/   　　　   　　１GB　　　ext4
　　/boot　　５１２MB 　　  vfat

　　sudo -i
　　modprobe brd rd_nr=1 rd_size=$((1024*1024 + 512*1024))
　　ls /dev/ram0 で ram0 ができているか確認
　　fdisk /dev/ram0

fdisk (util-linux 2.34) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

デバイスには認識可能なパーティション情報が含まれていません。
新しい DOS ディスクラベルを作成しました。識別子は 0x6fdaee84 です。

コマンド (m でヘルプ): p
ディスク /dev/ram0: 1.51 GiB, 1610612736 バイト, 3145728 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x6fdaee84
コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1): 
最初のセクタ (2048-3145727, 既定値 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3145727, 既定値 3145727): +512M
新しいパーティション 1 をタイプ Linux、サイズ 512 MiB で作成しました。

コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (1 プライマリ, 0 拡張, 3 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (2-4, 既定値 2): 
最初のセクタ (1050624-3145727, 既定値 1050624): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-3145727, 既定値 3145727): 

新しいパーティション 2 をタイプ Linux、サイズ 1023 MiB で作成しました。
コマンド (m でヘルプ): t
パーティション番号 (1,2, 既定値 2): 1
16 進数コード (L で利用可能なコードを一覧表示します): ef

パーティションのタイプを 'Linux' から 'EFI (FAT-12/16/32)' に変更しました。

コマンド (m でヘルプ): p
ディスク /dev/ram0: 1.51 GiB, 1610612736 バイト, 3145728 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x6fdaee84

デバイス    起動 開始位置 最後から  セクタ サイズ Id タイプ
/dev/ram0p1          2048  1050623 1048576   512M ef EFI (FAT-12/16/32)
/dev/ram0p2       1050624  3145727 2095104  1023M 83 Linux

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。
\# fdisk 終了

　　パーティションが作成されましたのでフォーマットします
root@riku:~#　mkfs.vfat /dev/ram0p1
mkfs.fat 4.1 (2017-01-24)
root@riku:~# mkfs.ext4 /dev/ram0p2
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 261888 4k blocks and 65536 inodes
Filesystem UUID: f3459272-e403-417e-aa9c-97d9d286a64c
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

　　フォーマットができましたので blkid で調べます
root@riku:~# blkid /dev/ram0p1 /dev/ram0p2
/dev/ram0p1: UUID="54B9-6945" TYPE="vfat" PARTUUID="6fdaee84-01"
/dev/ram0p2: UUID="f3459272-e403-417e-aa9c-97d9d286a64c" TYPE="ext4" PARTUUID="6fdaee84-02"

ラズパイのSSDをPC接続します
私のPCでは /dev/sdh になりました

マウントポイントを作成します
 mkdir /mnt-ram /mnt-ssd

SSD が自動でマウントされてしまっているので umount します
　　umount /dev/sdh?
　　mount /dev/sdh2 /mnt-ssd
　　mount /dev/sdh1 /mnt-ssd/boot

RAMディスクをマウントします
mount /dev/ram0p2 /mnt-ram
mkdir /mnt-ram/boot
mount /dev/ram0p1 /mnt-ram/boot

こんな感じです
/dev/ram0p2                          1014680     2568    943352   1% /mnt-ram
/dev/sdh2                          230445760   535564 220494600   1% /mnt-ssd
/dev/ram0p1                           523248        4    523244   1% /mnt-ram/boot
/dev/sdh1                             258095    32099    225996  13% /mnt-ssd/boot

SSDからRAMディスクへコピーします
cd /mnt-ssd
tar cf - . | ( cd /mnt-ram; tar xpvf - )

RAMディスクのPARTUUIDを設定します
 /mnt-ram/boot/cmdline.txt の root=PARTUUID=6fdaee84-02 に変更
 /mnt-ram/etc/fstab 最後の２行
PARTUUID=6fdaee84-02 / ext4 noatime,lazytime,rw 0 1
PARTUUID=6fdaee84-01 /boot vfat noatime,lazytime,rw 0 2

SSDとRAMディスクを umount します
 umount /mnt-ssd/boot
 umount /mnt-ssd/
 umount /mnt-ram/boot
 umount /mnt-ram/

RAMディスクの内容をファイルに保存します
 dd if=/dev/ram0 of=DietPi-rpi.img bs=1M

これでインストール用イメージファイルの作成ができあがりました
イメージファイルをSSDに書き込んでブートできればDietPiのセットアップが始まります
RAMディスクの開放は modprobe -r brd です
シャットダウン、再起動でも開放されます

ラズパイをSSDから起動させると以下のような画面が表示されます
![Screenshot at 2021-09-12 00-00-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1061326/79736188-0fc6-fca7-7929-3bb20e853fbf.png)