Rasp Pi ZERO で動くシステムの OS を Raspbian から Alpine Linux に差し替えた
なぜ?
shutdown 操作なしでの電源断で SD カードの内容が壊れるのを防ぐため
どんなシステム?
機能1 USB から入力されるデータの一部をネット経由でサーバーに上げる
機能2 USB から入力されるデータの一部を接続してある LCD に表示する
USB から入力されるデータ - C94-M8P が送出する RTCM3
データをネット経由でサーバーに上げるプログラム - str2str
データを LCD に表示するプログラム - python で書いた自家製プログラム
どうやった?
・Alpine Linux 3.8.1 - RASPBERRY PI - armhf をダウンロードして、fat32 でフォーマットした sd カードに解凍したものをコピー
・上記 sd カードを RaspPi Zero にセットしてこちらとこちらを参考に OS をセットアップ
・Raspbian でコンパイルした str2str は Alpine Linux では動かなかった。Rasp Pi Zero でコンパイルするために gcc をインストールし、rtklib のソースをインストールしようとしたところで、メモリが足りなくなる。
・Rasp Pi 3B+ を買ってきて 3B+ 向けの sd カードを作成、コンパイルを再挑戦(Zero は RAM 512M だが、3B+ は RAM 1G)。コンパイル成功。
・Rasp Pi 3B+ でコンパイルした str2str を Rasp Pi Zero コピーして動作確認
・Rasp Pi Zero に python2 をインストールして LCD 制御プログラムの動作確認
- pip で sysv_ipc, pymap3d をインストールする必要があったのだが、そのために apk で gcc, python2-dev, musl-dev をインストールする必要があった。gcc, python2-dev, musl-dev をインストールして pip を実行、pip 終了後に gcc, python2-dev, musl-dev をアンインストールした。
・pip でインストールした内容を 'lbu ci -d' の対象とするために 'lbu add /usr/lib/python2.7/site-packages/*' を実行
・/etc/init.d/shoho-getmsg, /etc/init.d/shoho-str2str を作って str2str 、lcd 制御プログラムをサービス化。
・'lbu add /etc/init.d/shoho-getmsg', 'lbu add /etc/init.d/shoho-str2str', 'lbu ci -d' を実行して、必要なファイルを永続化。
ここまででわかったこと
・RAM の半分を RAM-DISK として使い、通常動作中は sd カードに書き込みをしない
・RAM-DISK の内容を sd カードに保存するコマンドは 'lbu ci -d'
・RAM-DISK から sd カードに保存する領域の指定は 'ldu add /xxx/xxx'
- /xxx/xxx/* としないと、サブディレクトリ一式を指定したことにならない
・パッケージ管理は apk (apt でも yum でもない)
・サービス管理は OpenRC (SysVinit でも Systemd でもない)
-普通のプログラムはそのままではサービスにならない。バックグラウンドに回すスクリプトを書く必要がある(Systemd の場合は不要だった)
・サイズが小さい(上記システムが動く sd のファイルサイズが合計で 145MB)
・ファイルフォーマットが FAT32 (Windows で全領域にアクセスできる)
・バックアップ・リストアが楽(FAT32 でファイルサイズが小さいので、Windows で簡単にバックアップできる。リストアは Windows で FAT32 でフォーマットした sd カードにバックアップしたファイルをコピーすれば OK)
0 件のコメント:
コメントを投稿