Page Cache Controller For Regular File in Go
https://github.com/cubicdaiya/cachectl
ご覧の通りのgithubそして、go言語。まあgo言語はボケ防止に始めようかと思ってたから丁度いい。と思ってたら結構ハマった。言語そのもじゃないところで。
ubuntuでgoを使う自体は簡単 glang-go ( golang-go 2:1-5 ) パッケージを入れればよい。
そこから先であった。go独特のお約束が出てくる。或いはチュートリアルを読めば書いてあるのだろうか。読まずに始める小生が悪いのだろう。小生は取扱い説明書は読まない人種であるからして。
ビルド手順を順番に試すが、初段でいきなり詰まる。
make gom
gomなるビルドツールが自動的に入るって話なのだが、
- root権限が必要
- 内部的に go get -u github.com/mattn/gom をやっていて、それにroot権限が必要らしい。
- github.com/mattn は既にgo業界では有名人らしい ...
- 入ってる筈のgomが何処だか判らない。
go getは何をやってるのか、結論から言うと
- $GOPATH/src にソース展開する。
- github.comから勝手にfetchしてくれる。
- なるほどgoはgithubと仲が良いと。
- デフォルトは GOPATH=/usr/lib/go
- root権限が必要な理由はコレ
- export GOPATH=$HOME としておけば必要ない。
- ビルド成功すると $GOPATH/bin にバイナリが入る。
- 今回の場合は、当然のごとく /usr/lib/go/bin/gom に入ってる。
- しかし/usr/bin/gom にシンボリックリンクを貼るとかはやってくれない。
- GOPATH=/usr にすれば /usr/bin/gom が出来るかと思ったらそうでもなかった。
- GOPATH=$HOME とかにしといて、PATH=$GOPATH/bin:$PATH で通しちゃった方が幸せかもしれない。
ようやく次の手順で進める。
make bundle
ソース同梱のGomfileを使ってビルドが出来るわけだが、ここでまたハマった。依存パッケージの github.com/BurntSushi/toml のビルドに失敗する。
$ sudo go get github.com/BurntSushi/tomlご覧の通りのエラーで進まない。ちなみにこの手の外部パッケージは lib*.a が出来上がるようだ。良くできてる。
# github.com/BurntSushi/toml
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/decode_meta.go:70: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/encode.go:360: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/encode.go:467: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/encode.go:476: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:77: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:263: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:284: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:299: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:316: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:338: function ends without a return statement
/usr/lib/go/src/pkg/github.com/BurntSushi/toml/lex.go:338: too many errors
このエラーメッセージは既知の問題であった。ソースを書き換える必要がありそうだ。
https://groups.google.com/forum/#!topic/golang-nuts/u66fQbfbzEo
うーん、そこまでは今すぐは無理だな。AM2時だし!
その後、ubuntu 14.10で試したらアッサリビルド通りましたorz