RaspberryPiのインストールイメージ書き換え方法

こんにちは、Kanazawa.IoTの井澤です。

普段、IoT で色々なセンサーデータを集約したり、データをAWSへ投入したりするときには Raspberry Pi (以下 RPi) を使うのがお手軽です。

一方で、幾つものRPi を使ったり、何度も環境を作って試したりする際に、インストール後に毎回同じ初期設定をするのは段々と苦痛になってきます。
例えば、WiFiの接続のための設定や、シリアルコンソールの設定などがこれにあたります。

そこで、自分のための最低限の設定をあらかじめインストールイメージに書き込んでおくことで、インストール後にすぐに目的の開発に着手することが出来るようになります。

今回は RPi のインストールイメージ(Raspbian stretch Lite)の編集方法について説明していきたいと思います。

以下の作業は RPi 上で実行することを想定しています。
つまり RPi のイメージを RPi 上で編集するという、ニワタマ問題を若干感じつつ説明していきたいと思います。

まずは、インストールイメージをダウンロードします。https://www.raspberrypi.org/downloads/raspbian/

現在の最新のイメージは以下のzipです。
2018-03-13-raspbian-stretch-lite.zip

これを展開すると同名のimgファイルとなります。
2018-03-13-raspbian-stretch-lite.img

このインストールイメージは2つのパーティションから構成されています。
fdiskコマンドで確認してみましょう。

pi@raspberrypi:~ $ fdisk -l 2018-03-13-raspbian-stretch-lite.img
Disk 2018-03-13-raspbian-stretch-lite.img: 1.7 GiB, 1858076672 bytes, 3629056 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa8fe70f4
Device                                Boot Start     End Sectors  Size Id Type
2018-03-13-raspbian-stretch-lite.img1       8192   93802   85611 41.8M  c W95 FAT
2018-03-13-raspbian-stretch-lite.img2      98304 3629055 3530752  1.7G 83 Linux
pi@raspberrypi:~ $

一つ目がFATで、二つ目がext4となっています。
FATの方は、bootした際に /boot 以下にマウントされます。
ext4のほうが / になります。
例えば、/boot/config.txt であればFATの方を書き換える必要がありますし、/etc/以下のファイルであれば、ext4の方を書き換える事になります。

つぎにそれぞれのマウント方法について説明していきます。

先程の fdisk の出力中の Start の数字を使っていきます。

FATの場合

sudo mount -t vfat -o loop,offset=$((512*8192)) 2018-03-13-raspbian-stretch-lite.img /mnt

ext4の場合

sudo mount -t ext4 -o loop,offset=$((512*98304)) 2018-03-13-raspbian-stretch-lite.img /mnt

これで、/mnt 以下にマウントされるので、必要に応じてファイルを書き換えます。

書き換えが済んだらアンマウントしておきます。

sudo umount /mnt

これで 2018-03-13-raspbian-stretch-lite.img をSDカードに dd するだけで、
自分カスタムな環境になっているはずです。

後でわからなくならないように、カスタムしたインストールイメージファイルは名前を変えておくと良いでしょう。