ほぼ雑記的メモ
Raspberry PIのFreeBSD では freebsd-upgradeが使えません。(2018年12月25日現在)
そこでソースからパッチが配布されたときなど、自分でビルドをしないといけません。当然 Raspberry PI上でのビルドは遅すぎて鼻血が出そうになるので別マシン(母艦)でビルドするのが常套手段ではないかと思います。
FreeBSDでのクロスコンパイルは簡単で makeのパラメータとして、 TARGET, TARGET_ARCH, KERNCONFなどの パラメータをソースツリーで適切に指定してやるだけです。例えば以下のリンクにはSDを母艦でmountして インストール(またはアプデート)するやり方が書いてあります。
Installing and updating FreeBSD 11.0 release on a Raspberry Pi – solence
このようなやりかたでもよいのですが、本ブログでは別のやり方を紹介します。 それは、FreeBSDに標準であるパッケージの管理を利用する方法です。
FreeBSDの pkgは実はシステムのbaseでも使えるようになっています。 そこで、母艦でクロスビルドしbaseのパッケージを作成し、Web上に配置し、 Raspberry PIで pkgコマンドでアップデートをするという作戦です。
とりあえずチェックアウト先のディレクトリは /home/hogehoge/releng/12.0としておきます
# svn checkout http://svn.freebsd.org/base/releng/12.0 /home/hogehoge/releng/12.0
違うバージョンをビルドしたいときは 12.0を適切なものに置き換えてください。
以下のコマンドで行います。
# cd /home/hogehoge/releng/12.0 # make TARGET=arm TARGET_ARCH=armv6 KERNCONF=RPI2 buildworld # make TARGET=arm TARGET_ARCH=armv6 KERNCONF=RPI2 buildkernel # make TARGET=arm TARGET_ARCH=armv6 KERNCONF=RPI2 packages
各コマンドの意味は説明するまでもないので省略します。母艦のSPECにもよりますが、問題がなければ数時間後に/usr/obj/home/hogehoge/releng/12.0/repo/FreeBSD:12:armv6 以下にbaseのパッケージのレポジトリが作成されます。
このbaseのパッケージレポジトリにあるファイルやリンク(latestというシンボリックリンクがあると思います)をhttpでアクセス可能な場所にコピーします。ここでは
https://pkgbase.guru.gr.jp/FreeBSD-base/FreeBSD:12:armv6
でアクセスできる場所に置いてみました。
以下の設定ファイルをラズパイ側で作成します。
/usr/local/etc/pkg/repos/FreeBSD-base.conf:
FreeBSD-base: { url: "https://pkgbase.guru.gr.jp/FreeBSD-base/${ABI}/latest", enabled: yes }
Raspberry PI側で
# pkg update -r FreBSD-base # pkg upgrade
をするとビルドしたものが(必要なら)インストールされます。 なお、以下のページを参考にしました
PkgBase - FreeBSD Wiki
面倒な点としてfreebsd-updateと違って設定ファイルがマージされないことがあること。 pkgのソースをみると pkg add で設定ファイルをmergeをする仕組みは入っているようですが、 うまい感じにマージをしてくれないファイルが多々ありました。3way mergeが必要なので、1つ前の設定ファイルがなんであるかわからないといけないので、それが分からない以上やむを得ないのかな?という気もします。実際上記wikiでは mergemasterまたは etcupdateを使えとあります。ただどちらの場合であっても /usr/srcが必須でしょう(未検証)
ただ実際は/etc以下でいじくるファイルはごく一部です。単純に上書きできない場合は当該ファイルが pkgnewという拡張子が付加されて保存されるようなので、私はfindでさがして手動で修正するということにしました。
またbaseに追加された/削除されたというのが判断できないので上記wikiに記述してあるコマンド
$ diff <(pkg rquery -r FreeBSD-base %n) <(pkg query -e '%o = base' %n) | grep "^[<>]"
で判断して手動で追加/削除をする必要もあります。
なお、上記URLは暫く残しておきます。興味がある方は自己責任でどうぞ。
Powered by Red Leaf ( Rev. c78c769f2 ), © Issei Numata, 2007-2021