2週間前、DigitalOcean(海外のVPSサービス)でFreeBSDが使えるようになった、というニュースが飛び込んできました。気になりつつ触れていなかったんですが、ちょっと試してみました。
メモリ1Gで$10/monthのプランでやってみました。前はさくらVPSに自分でOSインストールしてたけど、DigitalOceanはボタンをポチポチするだけでFreeBSDが手に入るというお手軽さでよいですね。しかしながら、毎度のことながらLinux感覚でFreeBSDを使うとところどころつまづきます。Prometheusをビルドした時のメモ。
依存パッケージを入れる
The above requires a number of common tools to be installed, namely
curl
,git
,gzip
,hg
(Mercurial CLI),sed
,xxd
. Should you need to change any of the protocol buffer definition files (*.proto), you also need the protocol buffer compilerprotoc
, v2.5.0 or higher, in your $PATH. (https://github.com/prometheus/prometheus#use-make)
とか書いてるのでこれを入れます。hg
はpy27-hg-git
です。xxd
はvim
を入れればいっしょに入るみたいです。protoc
はprotobuf
パッケージに入っています。golang
はPrometheusがmake
するときに取ってきてくれるので不要みたいです。
$ sudo pkg install curl gzip py27-hg-git vim protobuf
(DigitalOceanのFreeBSDイメージにははじめからsudoが入ってます。便利!)
make
する
ということで、さっそくmake
してみます。
$ cd WORKDIR $ git clone https://github.com/prometheus/prometheus.git $ cd prometheus $ make build
すると、
...なんかエラーが出ます。むむ。
make: "/usr/home/freebsd/repo/prometheus/Makefile.INCLUDE" line 32: Missing dependency operator make: "/usr/home/freebsd/repo/prometheus/Makefile.INCLUDE" line 34: Need an operator make: "/usr/home/freebsd/repo/prometheus/Makefile.INCLUDE" line 36: Need an operator make: "/usr/home/freebsd/repo/prometheus/Makefile.INCLUDE" line 39: Need an operator make: Unknown modifier '%' make: Unknown modifier '%' make: Unknown modifier '%' make: Unknown modifier '%' make: Fatal errors encountered -- cannot continue make: stopped in /usr/home/freebsd/repo/prometheus
なんか文法エラーっぽいです。
gmake
する
それもそのはず、Linuxのmake
とFreeBSDのmake
は違います。Linuxが使ってるmake
をするには、FreeBSDではgmake
しないといけません。
$ sudo pkg install gmake
ということで気を取り直してもう一度ビルドしてみます。
$ gmake build
すると、
...やっぱりエラーが出ます。ぐぬぬ。
TMPDIR=/tmp GOROOT=/home/freebsd/repo/prometheus/.build/root/go GOPATH=/home/freebsd/repo/pr ometheus/.build/root/gopath /home/freebsd/repo/prometheus/.build/root/go/bin/go build -o pro metheus -ldflags " -X main.buildVersion 0.10.0 -X main.buildRevision 4e6a807 -X main.buildBr anch master -X main.buildUser freebsd@nested-headache -X main.buildDate 20150207-02:49:17 -X main.goVersion 1.4" . go build github.com/prometheus/prometheus/web/blob: /home/freebsd/repo/prometheus/.build/roo t/go/pkg/tool/freebsd_amd64/6g: signal: killed Makefile:30: recipe for target 'build' failed gmake: *** [build] Error 1
killedってなんでだろう?と思ってログを見ると、スワップを使いきっていたみたいでした。。
$ sudo less /var/log/messages ...snip... Feb 7 03:30:39 myfreebsd kernel: swap_pager_getswapspace(9): failed Feb 7 03:30:39 myfreebsd kernel: swap_pager_getswapspace(16): failed Feb 7 03:30:39 myfreebsd kernel: swap_pager_getswapspace(3): failed Feb 7 03:30:39 myfreebsd last message repeated 141 times Feb 7 03:30:39 myfreebsd kernel: pid 3902 (6g), uid 1001, was killed: out of swap space
メモリ1GBではgoはビルドできませんよ、という話でした。
と思ったら、再起動してもう一度ビルドするとうまくいきました。なんと。