Squidをchefでソースからアップデートする
ウェブサーバのリバースプロクシとしてSquidを利用しています。セキュリティ上の理由から、apacheとsquidは細心のソースからビルドして利用しています。いままではこれを数台あるウェブサーバそれぞれで手動でやっていたんですが、chefでやってみました。
まずレシピのテンプレートを作成
$ knife cookbook create squid -o ./site-cookbooks
attributeを準備する
squidのtarballは squid-(version).tar.gz という形式なので、versionのところをattributeとして記述します。次回はこのattributeにかかれたバージョン番号だけを変更すればOK。
ついでにソースを展開するディレクトリもattributeに記述します。
site-cookbooks/squid/attribuites/default.rbに以下を追記。
default['squid'][:version] = "3.4.10" default['squid'][:makedir] = "/home/hoge/squid"
レシピを記述
site-cookbooks/squid/recipes/default.rbにレシピを記述します。
attributeを展開、サービスの定義、Squidをmakeして、notificationでmakeが動作したときだけインストールのスクリプトと、サービスの再起動を実施。
ソースが展開されたディレクトリの有無でmakeするかしないかを判断しています。
install_squidのaction:をnothingにしておかないと、cookしたときに毎度動作してしまいます。
# # Cookbook Name:: squid # Recipe:: default # # Copyright 2014, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # makedir = node['squid']['makedir'] version = node['squid']['version'] service "squid" do supports :status => false, :restart => true, :reload => false action [ :enable, :start ] end script "make_squid" do not_if {File.exists?("#{makedir}/squid-#{version}")} interpreter "bash" user "hoge" group "hoge" cwd node['squid']['makedir'] code <<-EOH wget -nc http://www.squid-cache.org/Versions/v3/3.4/squid-#{version}.tar.gz tar -zxvf squid-#{version}.tar.gz cd squid-#{version} ./configure make -j8 EOH notifies :run , 'script[install_squid]' notifies :restart , 'service[squid]' end script "install_squid" do interpreter "bash" user "root" group "root" cwd node['squid']['makedir'] code <<-EOH cd squid-#{version} make install EOH action :nothing end file "#{makedir}/squid-#{version}.tar.gz" do action :delete end