ジャンル不定の日記です。

linux 5.4.12でBuildrootし直した

Orange pi R1ルーター化計画でSPIフラッシュにのるサイズまでOSサイズを削減しようとしてSquashfsを使おうとしたがつまずいたので、まだできてない。
とりあえず5.4.12でBuildrootできた。

最初 Buildroot のmenuconfigで
Kernel Version ---> Latest version (5.4)
にしてやってみたが、これだと5.4.10になった。先日gitからkernelビルドやったときは5.4.11だったので下がってる。
だが、kernelバージョンが変わったときは、
Toolchain ---> Custom kernel headers series (5.3.x)
となってるところを5.4に変えないとmakeがかなり進んでからエラーになった。

で、やり直しの際に、Kernel Versionをgit URLにすることができることに気づいたので5.4.11にしようと思った。
その場合は Custom repository version がブランチ名になるみたい。わかりにくい・・・
でやってみたが、depth指定の方法がわからなく、大量に持ってこようとしてたので強制終了した。

次にtarballのURL指定ができることがわかったのでtarballで指定したが、最新stableが5.4.12に増えてたので5.4.12にした。
ビルドする際、squashfsとinitramfsを作成しようと思って、ext2/3/4のチェックは要らないと思ったので外した。
そしたらimageを作る最終段階でエラー。
squashfsのイメージはできあがったので、それをextで作ったパーティションイメージにコピーして起動しようとしたが起動できなかった。
それでinitramfs経由で起動を試みたりして時間食ったが、断念した。

再度のBuildrootし直しで、
Kernel version (Custom version)
(5.4.12) Kernel version
とすれば5.4.12でBuildrootできることがわかった。
のでmakeしたのだが、最初と同じくToolchain ---> Custom kernel headers series (5.3.x)のままやっちゃって止まった。
のでまたやり直しとなった。

時間かかったが、とりあえず5.4.12で起動するイメージは作成できた。
前回見つからなかったので入れなかったが sudo があったので入れた。
iptablesの後継のnftablesなるものがあったのでiptablesを置き換えてみた。
容量行けそうなんでlighttpd入れた。
のだが前回13MBだったが17MBに増えた。
lighttpdよりuhttpdのが小さそうな気がするが、Archにパッケージがないレベルでマイナーみたいなのでlighttpdにした。
あまり容量に余裕はないか?

Squashfsでどの程度サイズが減るのか確認してみた

Orange pi R1用OSをSPIフラッシュにのせるために16MB未満への容量削減を考えてるが、
一般的な圧縮ファイルシステムは読み込み専用な模様。
読み込み専用のファイルシステムを/に使うなら書き込み可能なファイルシステムを重ねる必要がある。
というわけで、いくつか選択肢はあるようだがカーネルにoverlayfsという重ねるFSはあり、圧縮の方はSquashfsというのがよく使われるぽい。

まず、Squashfsで圧縮した場合、目的が達成できそうか確認のために、Buildrootで作ったext4のrootfsをSquashfsにしてみた。

$ df
ファイルシス   1K-ブロック      使用     使用可 使用% マウント位置
.
.
.
/dev/sdg2            55397     13211      37886   26% /home/user/stock/sbc/opi-r1/mnt
ext4のSDカードをマウントしたが13MB強。
kernelとかは別なんでこれでは16MBをオーバーしちゃう。

$ sudo mksquashfs mnt squashfs.img
$ sudo umount mnt
$ sudo mount squashfs.img mnt
$ df
ファイルシス   1K-ブロック      使用     使用可 使用% マウント位置
.
.
.
/dev/loop0            4864      4864          0  100% /home/user/stock/sbc/opi-r1/mnt
4.8MBまで減った!
mksquashfs は ソースディレクトリと出力イメージファイルを引数にすればgz圧縮してくれるみたい。
他の圧縮タイプも選べる感じ。