Skip to content

Instantly share code, notes, and snippets.

@repeatedly
Last active November 16, 2016 02:11
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save repeatedly/ebe40d340ce70019255a to your computer and use it in GitHub Desktop.
Save repeatedly/ebe40d340ce70019255a to your computer and use it in GitHub Desktop.
td-agent2について

rpmで問題が起きたのでまとめておく.あと英語で書くと日本の人が読んでくれないのでまず日本語で…

なぜパッケージを分けているのか

非互換のある変更が単なるアップデートで入るのを防ぐため

現在のtd-agentは1.1.19だが,2.0.0と1.2.0があった場合,yum updateでは2.0.0が入ってしまう.これでは,Rubyのバージョンが変わった場合などはgemの再インストールが必要で,単なるアップデートでは起動出来なくなるという問題がある(chefとか使っていれば多分防ぐことは出来るが強制することは出来ない).

Rubyのバージョンアップと依存ライブラリのバージョンアップを分けることが出来ない

もしtd-agentのままでいく場合,いつかは強制的に非互換のバージョンアップをする必要がある.

ユーザがとりあえず今のままで良いからFluentdとか同梱されているgemだけのバージョンが上がった安定したtd-agentが欲しいと思った時,この方法ではそのアプローチは取れない. そのためこの方法では,新しいRubyでtd-agentを試したいという場合に,対応するのが難しい.

rpmで起きた問題

td-agentが入っている状態でtd-agent2をインストールすると,上手く動かないという問題.debでは起きていない. 原因は,rpmのspecでのfilesのミスマッチにより,/etc/init.d/td-agentが消えてしまう.td-agent2はomnibus-rubyで作られているが,omnibus-rubyが利用しているfpmの影響で,specファイルは直接弄ることが出来ない.

https://github.com/jordansissel/fpm/blob/master/templates/rpm.erb

%installとかもこちらで指定出来ないので,対応するのが難しい.

rpmの問題の回避方法

Twitterでのやりとりを含めいくつか案がある

  1. td-agent2ではファイル名などをtd-agent2にする./etc/init.d/td-agentでtd-agentと被っているのが問題なので,/etc/init.d/td-agent2などにする
  2. yum remove td-agent; yum install td-agent2と順序を指定する.
  3. fpmのspecをなんとかして頑張って上書きする
  4. 誰かが超神的な回避策を思いつく

1.はユーザにとってどうなのかという問題.curlとかのコマンドがそうだけど,メジャーバージョンアップしてもコマンドそのものが変わらないパッケージはそれなりにあり,td-agentもそっちの方が嬉しいのかどうか

2.は,これは今回specファイルに違いがあることが原因で,今後のメジャーバージョンアップでは問題は起きないと思われるので,今回だけ我慢してもらう案 chef-td-agentとかで上手く対応出来るのかどうかは調べる必要がある

3.は独自のアドホックなコードがかなり入り込むので,あまりやりたいくない.

今回の問題はrpmだけで起きている感じなので,できればdebとかに影響は与えたくないとは思っている.あと,今回選んだアプローチは後々td-agent3とかにも影響があると思われる.

追記 (5/23)

MariaDBやCDHやHDPやElasticsearchを調べると,パッケージ名は変えずにbaseurlなどのパスにバージョンを含めるアプローチを取っているようだ(from @shun0102). この方法を使えば,td-agent2のようにパッケージ名を分けなくても,td-agentの中でメジャーバージョンをあげつつ,単一のパッケージでリリースを続けることが出来る. が,/etc/init.d/td-agent問題は解決していない

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment