takanaoの作業ログ

takanaoの作業のログなどをつづってみます

netbsd on Raspberry Pi 2 日記(5)

ロスコンパイルでユーザランドを作る

ロスコンパイルでユーザランドを作るのは、以下

$ cd /opt/NetBSD-7.0/usr/src
$ ./build.sh -O ../objarm -T ../toolsarm -m evbarm -a earmv7hf -U -u distribution

これで、母艦側の /opt/NetBSD-7.0/usr/objarmの下に、ユーザランドバイナリなどが生成される。

ただ、このままだと、ターゲットであるRaspberry Pi2に持って行きづらい(パーミッションとかが違うし)ので、 NetBSDの配布物のようにsets/*.tarを作ってから持って行くと便利。

ユーザランドのtarballを作る

$ cd /opt/NetBSD-7.0/usr/src
$ ./build.sh -O ../objarm -T ../toolsarm -m evbarm -a earmv7hf -U -u sets

これで、母艦側の /opt/NetBSD-7.0/usr/objarm/releasedir/evbarm/binary/sets の下に、tarballができる。

$ ls /opt/NetBSD-7.0/usr/objarm/releasedir/evbarm/binary/sets/
MD5     comp.tgz    man.tgz     tests.tgz
SHA512      etc.tgz     misc.tgz    text.tgz
base.tgz    games.tgz   modules.tgz

これらのファイルを、Raspberry Pi 2側に持って行ってから展開すると、 バイナリを更新できる(etc.tgzは除く)。

例えば、/tmpにtarballをコピーしていたら、以下のような感じ

$ ls /tmp
MD5     comp.tgz    man.tgz     tests.tgz
SHA512      etc.tgz     misc.tgz    text.tgz
base.tgz    games.tgz   modules.tgz
$ cd /
$ sudo tar xvpzf /tmp/base.tgz
$ sudo tar xvpzf /tmp/comp.tgz
 :

etc.tgzは、上書きすると設定が消えるので、etcupdateとかでアップデートする。NetBSDの公式の Chapter 33. Updating an existing system from sources あたりに書いているみたい。

$ sudo /usr/sbin/postinstall -s /tmp/etc.tgz check
$ sudo /usr/sbin/postinstall -s /tmp/etc.tgz fix
$ sudo /usr/sbin/etcupdate -s /tmp/etc.tgz