ここ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使うと大変便利という話。
参考