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:
最初、「-j」なしでやっていたのだけど、あまりにも時間がかかるので「-j4」でやっていた。