YAPC::Asia Tokyo 2014 の前夜祭でしゃべってきました

YAPC::Asia Tokyo 2014 の前夜祭でしゃべってきました。
本編のトークはrejectされたんですが、縁あって0日目こと前夜祭に登壇することになりました。
当日はHokkaido.pm casualでやってた「ごみ収集カレンダー」の話をしてきました。
ちなみにYAPCは初参加です。

YAPC::Asia Tokyo 2014 前夜祭 - YAPC::Asia Tokyo 2014

自己紹介で触れた号泣県議コンバーターの方がウケた感じもしますがキニシナイ:)
噂には聞いていましたが弾さんがスライドの途中でツッコんできてビビりました。

札幌市の読み上げデータの更新が今月なので、その更新を取り込んで一区切りつけようと思っています。
YAPCで優しくしてくれた方々、懇親会でお話させていただいた方々どうもありがとうございました。

以下、3日間通しての雑感を

  • ネットワーク快適。
  • 受付が丁寧。
  • コーヒー飲み放題よかった。お菓子もたくさんうれしい。
  • ビールもたくさん飲めてお得感すごい。
  • 電源も不自由しなかった。
  • 教室が満員で入れないのがあったのが残念。
  • 物販とかでもっとお金使わせてくれてもいいのよ:)

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もよくわかっていないので、変なところがあるかも。