2020年1月16日木曜日

RaspberryPiのFreeBSDをrebuild

  RaspberryPiのFreeBSDはバイナリアップデートがサポートされていない
 パッチが公開されたとき、ソースからビルドしなおすことになるのだけど、今までやってみたことがないので試してみることにした。
 いわゆるmake world。
 「 ソースを用いた FreeBSD のアップデート」にあるとおりにやっていく。

 まずはソースをもってくる。これだけでも大変だった。でもsvnで管理されているから次からは差分アップデートになるはず。
 次は「make -j4 buildworld」——。
 延々、コンパイルが走ったあと、落ちる 1
 何度も試しあと、ようやく原因がわかる。メモリ不足だった。out of swapとか、なんとか。
 swapファイルを3Gにしてもだめだったのでそこであきらめた。
 最終的に「-j」指定なしでなんとか、終了した。

 次に「make buildkernel」——。
 落ちる。なんで? 「-j」なしなのに。ディスク容量をチェックしてみたら今までに見たことのない「-1G」という表示。なんじゃ、それ。いずれにしても32GのSDカードではリビルドするのに足りないらしい。「/usr/obj」の下が18Gもあった。
 無理か。
 色々、考えてUSDで外付けのハードディスクをマウントする。「/mnt」——そこへ中身を移動して「/usr/src」と「/usr/obj」のシンボリックリンクを張る。ところが、「make buildkernel」は継続できたのに「make installworld」に失敗してしまった。
 しかたなく、「make buildworld」からリトライ。
 成功。
 「make buildkernel」成功。
 「make installworld」成功。

 今にしても思えば、「/mnt」にマウントするのではなく、「/usr/obj」にマウントしてもよかった。
 「/usr/src」は差分アップデート用に残しておきたいので。

 まぁ、リビルトができることはわかっただけでも収穫。
 日単位で時間はかかったけど。

Footnotes:

1

最初、「-j」なしでやっていたのだけど、あまりにも時間がかかるので「-j4」でやっていた。