ここ1年くらい自分が担当しているサービスで使ってるNginxとか自前ビルドが必要なソフトは
RPMを作らずビルドサーバでビルドしたバイナリをpuppetで管理して、
プロダクション環境にはpuppetやらデプロイツールなりで、バイナリ差し替え配布している。
(epelとかにrpmがあって、それがそのまま使えれば、基本的にそれを使ってるので、
自前ビルドしているパッケージはごく少数です。)
なんでRPMを作らないかは@hirose31さんのブログを読むと分かります!!
バージョンアップ、脆弱性対応、モジュールを追加などのたびにビルドし直さないといけなくて、
普通にやってると結構面倒くさい作業なので、Vagrantを使ってビルドしてる。
具体的にNginxを例に説明すると、下記のような感じのファイルを用意して、vagrant up
だけでバイナリが作成される。
上の例だと
/tmp/build/nginx-1.7.1/objs/nginx
にバイナリが出来上がるので、
それをpuppetのリポジトリに入れて、puppet各サーバで流して終わり。
アップデートや、モジュールを追加する場合は、provision.sh
を修正するだけで、
ビルドが終わったらvagrant destroy
でビルドサーバを削除。
Vagrantfile
とprovision.sh
をgit管理しておけば、ビルド環境もバージョン管理が出来るし、
たいていこういう作業は忘れた頃に発生して毎回過去のissueを探したり面倒くさいので
Vagrant使うと大変便利という話。
参考