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ステップになります。
- build_fluentd_forwarder内のリポジトリを書き換える
- fluent/fluentd_forwarderをインポートしている部分を書き換える
- entrypoints/fluentd_forwarder以下の2ファイル共
前者はbueild_fluentd_forwarderを変えれば何とかなりそうですが、
後者はgoのimportの仕組みがリポジトリ名まで指定する仕組みのため、書き換える以外に良い解決方法が思いつきません。