ChefとVagrantとBerkshelfとPostgreSQL 9.3beta
opscodeにあるPostgreSQLのcookbookでPGDGの9.3beta2をインストールするメモ。
9.3が正式リリースになればcookbook側で対応してくれると思いますが、それまでのつなぎとしてどうぞ。
使ってるcookbookはこれ。centos6.4で試してます。deb系はごめん。
http://community.opscode.com/cookbooks/postgresql
自分はVagrant+Berkshelfでゴニョゴニョしてるのでこんな感じで書いてます。
Vagrantfileの中身はこんな感じ。
config.vm.provision :chef_solo do |chef| chef.json = { :postgresql => { :version => "9.3", :enable_pgdg_yum => true, :pgdg => { :repo_rpm_url => { :"9.3" => { :centos => { :"6" => { :i386 => "http://yum.postgresql.org/9.3/redhat/rhel-6-i386/pgdg-centos93-9.3-1.noarch.rpm", :x86_64 => "http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm" } } } } }, :client => { :packages => ["postgresql93", "postgresql93-devel"] }, :server => { :packages => ["postgresql93-server"], :service_name => "postgresql-9.3" }, :contrib => { :packages => ["postgresql93-contrib"] }, :dir => "/var/lib/pgsql/9.3/data", ## ------------------------------------------------------------- ## postgresユーザのパスワードはこれ↓で生成した値を指定する(必須) ## $ echo -n 'HOGEHOGE' | openssl md5 | sed -e 's/.* /md5/' ## ------------------------------------------------------------- :password => { :postgres => "6f2b5c2d20ab4dd08e8ee8c2b1c9b0b8" }, ## ------------------------------------------------------------- ## 以下はお好みで。 ## ------------------------------------------------------------- :config => { :listen_addresses => "*" }, :pg_hba => [ {:type => 'local', :db => 'all', :user => 'postgres', :addr => nil, :method => 'ident'}, {:type => 'local', :db => 'all', :user => 'all', :addr => nil, :method => 'ident'}, {:type => 'host', :db => 'all', :user => 'all', :addr => '127.0.0.1/32', :method => 'md5'}, {:type => 'host', :db => 'all', :user => 'all', :addr => '::1/128', :method => 'md5'}, {:type => 'host', :db => 'all', :user => 'all', :addr => '172.16.0.0/16', :method => 'md5'}, ], } } chef.run_list = [ "recipe[postgresql::server]", "recipe[XXXXXXXX::setup_postgresql]", # 後述 ] end
recipeですが、pythonのcookbookを使ってpsycopg2をインストールするときにpg_configが見つからないと文句を言われたので、pathの通ったところにシンボリックリンクを張るようにしています。
あとはついでにcreateuserとcreatedbも実行するように追加。
recipes/setup_postgresql.rbの中身はこんな感じ。
link "/usr/bin/pg_config" do to "/usr/pgsql-9.3/bin/pg_config" end execute "create-user" do user "postgres" command "createuser -s foo" not_if "psql -U postgres -c \"select * from pg_user where usename='foo'\" | grep -q foo", :user => "postgres" end execute "create-database" do user "postgres" command "createdb -O foo bar" not_if "psql -U postgres -c \"select * from pg_database WHERE datname='bar'\" | grep -q bar", :user => "postgres" end
データベースのデフォルトのエンコーディングがja_JP.UTF-8じゃないよーという人は、postgresのインストールより前にlocaleを設定するようにするか、createdbのオプションで指定すると良いと思います。
ruby使いじゃないうえにchefもよくわかっていないので、変なところがあるかも。