Raspberry Pi OSのRootfs ROM化 ― RAMディスク化しつつ、パッケージを追加する方法

andrew_soracom Verified Supplier Rep

私はRaspberry PiでRAM Diskを有効にし、Soracom connectivityを取り入れながら読み取り専用のルートファイルシステムを実装するプロセスを模索しています。

テスト環境

  • Raspberry Pi 3 Model B+
  • Raspberry Pi OS (Lite; 32bit; 2020-12-02)
  • Soracom SIM SKU#4573326590334

Soracom SIMをアクティベートする:

RAMディスクと読み取り専用ルートファイルシステムのセットアップを行う前に、以下の手順でSoracom SIMをアクティベートして下さい。

  • Soracom SIM SKU#4573326590334をRaspberry Pi に挿入します。
  • Raspberry Piをインターネットに接続します。
  • Soracomのプラットフォーム(https://console.soracom.io/)にアカウントを登録します。
  • 登録が完了したら、Soracomコンソールにログインし、SIMマネジメントセクションに進みます。
  • Soracom SIM SKU#4573326590334を探し、SIMのIDをクリックします。
  • 表示される指示に従ってSIMをアクティベートし、必要な設定を完了します。

RAMディスクを有効にします:

RAMディスクを有効にするには、以下の手順に従います。

  • ターミナルを開き、以下のコマンドを実行します。
ruby

$ sudo raspi-config nonint enable_overlayfs $ sudo systemctl reboot 
  • 再起動後、Raspberry Piはoverlayfsを使ってRAMディスクから起動します。

RAMディスクを無効にします:

RAM Diskを無効にし、microSDカードから起動したい場合は、以下の手順に従ってください。

  • ターミナルを開いて、以下のコマンドを実行します。
ruby

$ sudo raspi-config nonint disable_overlayfs $ sudo systemctl reboot 
  • 再起動後、Raspberry Piは microSDカードから起動します。

現在の設定の確認

現在のRAMディスク構成を確認するには、以下のコマンドを実行します。

shell

$ sudo raspi-config nonint get_overlay_now && echo "enabled" || echo "disabled"

このコマンドは、RAMディスクが有効か無効かを表示します。

概要

Raspberry Pi OSのルートファイルシステムを読み取り専用に変換する作業は、「RaspberryPi: Read-only Root-FS(using overlayfs)」と題されたメモに記載された手順に基づいて行われます。メモに記載された手順をさらに調査し、個人用にパッケージ化します。

「RaspberryPi:Read-only Root-FS(using overlayfs)」というタイトルのメモに示されているように、変換作業はoverlayfsを利用しています。

コマンドの実行後

コマンドを実行した後、以下のコマンドを使ってファイルシステムの設定を確認することができます。

bash

$ df -h /dev/mmcblk0p2 30G 1.1G 28G 4% /mnt/root-ro tmpfs 464M 712K 463M 1% /mnt/root-rw overlay 464M 712K 463M 1% / $ mount /dev/mmcblk0p2 on /mnt/root-ro type ext4 (ro) tmpfs on /mnt/root-rw type tmpfs (rw) overlay on / type overlay (rw)

Raspberry Piの設定と、独自のパッケージの構築を行います。

オーバーレイを使用して読み取り専用のルートファイルシステムに変換する手順に従った後、パッケージとソフトウェアをインストールするには2つのオプションがあります。

オプションA:SDカードを読み書きRW(read/write)として実装し、通常通り起動を行います。

オプションB:SDカードをRWとして再実装してから、chrootを使用します。

オプションA:SDカードをRWとして実装し、起動します。

  • /boot/config.txtファイルを開き、initramfs initrd.gzという行をコメントアウトにより実行しないようにします。変更を保存し ます。
  • Raspberry Piを再起動します。これでSDカードから通常どおり起動します。
  • Raspberry PiのOSがSDカードから通常通り起動しますので、aptコマンドを使用したり、必要なファイルを編集したりすることができます。
  • 必要に応じて再起動し、読み取り専用RO(read-only)モードに戻します。

オプションB:SDカードをRWとして再実装し、chrootを使用します。

  1. mnt/root-roを読み書きRW(read/write)としてマウントし、chrootを使って以下のコマンドを実行します。
shell

$ sudo -s # mount -o remount,rw /mnt/root-ro # chroot /mnt/root-ro # mount -t proc proc /proc
  1. 必要な設定を行い、パッケージをインストールします。D-Busなどの必要な通信サービスが正常に実行できることを確認します。

  2. 必要に応じてクリーンアップし、Raspberry Piを再起動します。

Raspberry Piの永久データストレージ

ログのような永久的なデータを保存するには、initramfsの下部にローカル記憶領域を実装することができます。

結論
Raspberry PiにRAMディスクと読み取り専用のルートファイルシステムを実装し、Soracom接続を組み込むことができました。これらの技術的なステップに従うことで、Raspberry Pi IoTプロジェクトのパフォーマンスとセキュリティを最適化することができます。




オリジナル・ソース(English)