Raspberry PiにAlpine Linux入れてデスクトップ環境を構築した…い (3)

まさかの前回の続きです。続くとは思わなかった…。  

nitteru.hatenablog.com

色々と試行錯誤を重ねていたら、前回できなかった自動ログインができるようになりました。どうも設定が不足していたようで、lxdmのタイムアウトの設定を追加することで無事に自動ログインできるようになりました。タイムアウトは5秒以上が推奨されていたので下限値の5を設定しました。xfce4のせいかと思って一時OpenBoxを入れてみたんですが結果同じで、lxdmの設定で触れそうな所を、と探していた結果たどり着いた次第です。

timeout=5

/etc/lxdm/lxdm.conf

これでキオスク的な使い方もできそうですね。Raspberry Piの場合、GUIが不要な用途が多そうなのでGUI版の他にCUI版もSDカードの中身をまるごとバックアップして後々の環境構築が簡単になるようにしました。展開してコピーするだけは楽でいいですね。

ここでついでの確認事項としてRaspberry PiのGPIOやSPI、UARTの動作を確認してみました。確認には以前別のディストリ上で動かしていた自作のpythonスクリプトを動かしています。使用したライブラリはRPi.GPIOやpySerial、py-spidevなどです。これらモジュールのpipでのインストール時にいくつか開発環境が必要になります。メモが少しあやふやですが、確か下記3点ぐらいだったと思います。またarmv7版では問題なかったものの、aarch64版ではライブラリがうまく動きませんでした。むりに64bit OSでなくても大きく問題はないと思いますが、これからに期待ですかね。

# apk addlinux-headers alpine-sdk python3-dev

ここまできたら最後に残っているのが永続ストレージ (persistent storage)の扱い。

lbuはデフォルトで/etc直下の管理をしているらしいです(/homeも?)。ではなぜ/etcのみで永続化ができるかというと、詳しい仕様はぱっと見つけられませんでした。公式ドキュメントやソースコードを追ったりはまだできていませんが。とりあえず今できる範囲で調べてみた結果がこちら。

  • インストールしたパッケージは/dev/mmcblk0p1/cacheに保管されている(デフォルト設定時)
  • /etc/apk/worldにインストールしたパッケージ名が記録されている
  • /usrを永続化した後にapk add (パッケージ名)してlbu ci -dする前にリブートすると/usrには残っているが、/etc下の設定は無くなっている
    • /etc/apk/worldにも記録されていない
  • /usr下にインストールされたファイルを消してパッケージ名を/etc/apk/worldに追記し再起動するとインストールされている(キャッシュが残っている場合)

ということで、想像したブートプロセスのイメージがこんな感じ。順番の前後はかなりありそうですが。

  1. ブートローダカーネルの起動
  2. rootfsをtmpfs上に展開
  3. 基本のパッケージをインストール
  4. tar.gzにまとめてあったlbu (/etc)の変更分をオーバーレイで反映 (tmpfs)
  5. /etc/apk/worldにリスト化されているパッケージをインストール

下記サイトでもあるように、この辺りの動作はログに残っているそうです。というか確認を忘れました。後日覗いてい見ます。

unix.stackexchange.com

ここいらの想像が正しいとして、今までの設定だと/usrと/etc以外は永続化されないので例えば/var下にデータを保存するようなソフトは別途lbuの管理下に置く必要がありそうです。もしくは別にUSBメモリなどストレージをマウントしてそちらに逃がす手もありそうですね。

永続ストレージを作ったあとにlbu ci -dを実行しないように、というのも/etc/apk/worldに記録されてしまうとRAM上に展開されるからと考えられます。いや、そう書いてはあるんですが。逆に反映しないと/etc下のファイルがごっそり消えてしまう。lbuの管理対象設定いかんではその他のディレクトリに保存されているデータも永続化されないということで、パッケージのインストールには思ったより工夫が必要そうな感じです。

ある意味当たり前ですが、/etc/apk/worldにインストールされているという記録が残っている場合はapk delで永続ストレージにインストールしたパッケージも消すことができます。逆にlbu ci -dせずに/usrにだけ残っている場合は消すことができません(同パッケージを再度インストールし、すぐにアンインストールで消すことはできました)。

最後に気になるRAMの使用状況。freeコマンドで表示される-/+ buffers/cacheのFreeはCUI版で890MB、GUI版で730MBほどでした。他の情報はメモを消してしまったので機会があればまた今度。とりあえず思ったより使える印象です。

ここにきてようやく、Alpine Linuxの動きがなんとなく見えてきました。シャットダウン処理無しに電源を切られても壊れにくいという利点を生かして、diskless化していない環境で動かしていたものを移行してみたいと思います。