2015年26週目まとめ

fluentd-forwarderのビルドの仕組み

基本はREADMEの通りにすればビルド出来ますが、やっていることがちょっと複雑なのでメモ。
https://github.com/fluent/fluentd-forwarder

READMEに書いてある一つ目の手順の、
go get github.com/fluent/fluentd-forwarder/entrypoints/build_fluentd_forwarder
で、GOPATH以下にリポジトリがcloneし、
entrypoints/build_fluentd_forwarder内のビルド作業用バイナリが作られます。

次に、bin/build_fluentd_forwarder fluentd_forwarderを実行することで、
さっき作ったbuild_fluentd_forwarderがgo get -uを実行し、
リポジトリをcloneして(既にしているけど)、entrypoints/fluentd_forwarder下をビルドします。

というわけで、

  • go getでbuild_fluentd_forwarderをビルドする
  • build_fluentd_forwarderがgo getでfluentd_forwarderをビルドする。

という流れになっています。

fluentd-forwarderに手を加えてみる

ローカルで変更する場合

fluentd-forwarderに手を加えたい場合、GOPATH下のfluent/fluentd-forwarderを書き換えてビルドするのが最も早い方法です。
build_fluentd_forwarderがcloneしますが、変更はそのままでビルド出来ます。

Forkしたリポジトリに変更を加える場合

Forkしてそこに対して変更をした場合、若干やっかいな事が起きます。

前述したように、build_fluentd_forwarderはgo getを使い、リポジトリをクローンしてビルドします。
そのため、build_fluentd_forwarderの中に書いてあるリポジトリを書き換え、自分のリポジトリに変更する必要があります。

また、entrypoints/fluentd_forwarderはリポジトリルートのファイルを外部ライブラリとしてインポートしています。
そのため、main.goでfluent/fluentd_folwarderをインポートしている部分も、自分のリポジトリに変更する必要があります。

以上の変更を加えることで、Forkした自分のリポジトリからビルドすることが出来ます。

まとめると以下のの2ステップになります。

前者はbueild_fluentd_forwarderを変えれば何とかなりそうですが、
後者はgoのimportの仕組みがリポジトリ名まで指定する仕組みのため、書き換える以外に良い解決方法が思いつきません。