PostgreSQL 9.3をknife-soloでインストールする [Chef]
postgresqlのCookbookを用意
Cookbookは、以下のOpsCodeのpostgresql(3.0.4)を使用します。
http://community.opscode.com/cookbooks/postgresql
gitもtarも使える前提で、かつ、プロキシ設定も使える、Opscodeのアカウントも用意して環境がセットアップされているとして、以下のコマンドで、cookbookをリポジトリにインストールします。
(自分は、knife cookbook site installしたときのgitの動きがイマイチわかっていないので、downloadしています)
C:\Users\hoge\chef-repo\cookbooks> knife cookbook site download apt
C:\Users\hoge\chef-repo\cookbooks> knife cookbook site download build-essential
C:\Users\hoge\chef-repo\cookbooks> knife cookbook site download openssl
rsyncをvagrant up時にセットアップするようにする
rsyncがknife-soloの起動側と設定される側にないとknife-soloは動かないので、自動的にセットアップするように起動時にChefで動くようにします。
また、あちこちにプロキシの設定を事前にしておかないといけないので、これも自動的に設定するようにします。
具体的には、vagrantfileにChefを実行するように記述します。
[vagrantfile]
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "base"
config.vm.network :private_network, ip: "192.168.56.201"
# vagrant up のときに bootstrap.sh というスクリプトを実行する
config.vm.provision :shell, :path => "bootstrap.sh"
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "./chef-repo/site-cookbooks","./chef-repo/cookbooks"
chef.http_proxy = "http://proxy.xxxxxx.co.jp:8080/"
chef.https_proxy = "http://proxy.xxxxxx.co.jp:8080/"
chef.run_list = [
"recipe[rsync]"
]
end
end
このとき、vagrantのプラグインであるvagrant-proxyconfを使用しているので、vagrant upする前にインストールしてきます。(最新版1.3.5のvagrantでは不要と思われます)
C:\Users\hoge\chef-repo> vagrant plugin install vagrant-proxyconf
bootstrap.shをvagrantfileから実行しているので、bootstrap.shも用意しておく。内容は、以下の通りです。(あらかじめプロキシの設定をしているのを集約している・・・結局、/etc/environmentだけでいいようです)
[bootstrap.sh]
#!/usr/bin/env bash
HTTP_PROXY="proxy.xxxxxx.xx.jp:8080"
HTTPS_PROXY="$HTTP_PROXY"
# Exit if already bootstrapped
test -f /etc/bootstrapped && exit
echo "Setting HTTP Proxy for /etc/environment"
cat <> /etc/environment
http_proxy="http://$HTTP_PROXY/"
https_proxy="https://$HTTPS_PROXY/"
EOM
date > /etc/bootstrapped
cookbookとして使うのは、
- postgresql
- apt
- build-essential
- openssl
site-cookbooksとして
- rsync
を作っている。
rsyncのレシピを用意する
Cookbookを用意します。
C:\Users\hoge\chef-repo> knife cookbook create rsync -o site-cookbooks
rsyncのレシピを書きます。[C:\Users\hoge\chef-repo\site-cookbooks\rsync\recipes\default.rb]
#
# Cookbook Name:: rsync
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "rsync" do
action :install
end
プロキシの設定をknife.rbに記述しておきます。[C:\Users\hoge\chef-repo\.chef\knife.rb]
cookbook_path ["cookbooks", "site-cookbooks"]
node_path "nodes"
role_path "roles"
data_bag_path "data_bags"
#encrypted_data_bag_secret "data_bag_key"
#knife[:berkshelf_path] = "cookbooks"
http_proxy "http://proxy.xxxxxx.co.jp:8080/"
https_proxy "http://proxy.xxxxxx.co.jp:8080/"
ここまで準備したら、vagrant upを実行します。
C:\Users\hoge\chef-repo> vagrant up
Cookbook「postgresql」をknife-soloで実行する
JSONファイルを以下の内容で用意します。JSONファイルは、chef-repoリポジトリのnodesディレクトリにhostname.jsonのファイル名で作成します。(ここでは、hostnameを「hoge201」として記述している。hostnameは、hostsファイルなどで名前解決されていなければならないので注意すること)
[hoge201.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",
"password": {
"postgres": "e8a48653851e28c69d0506508fb27fc5"
},
"config" : {
"listen_addresses" : "*"
},
"pg_hba" : [
{"type":"local", "db":"all", "user":"postgres", "addr":"", "method":"ident" },
{"type":"local", "db":"all", "user":"all", "addr":"", "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":"192.168.56.0/24", "method":"md5" }
]
},
"run_list" : [
"recipe[postgresql]",
"recipe[postgresql::server]",
"recipe[postgresql::contrib]"
]
}
以下のコマンドにてknife-soloを実行して、postgresqlのCookbookを実行します。C:\Users\hoge\chef-repo> knife solo cook vagrant@hoge201
PostgreSQL9.3のインストールが実行されれば、成功です。この作業で、postgresユーザが作成され、かつ、/var/lib/pgsql/9.3/dataにデータベースが作成されます。
postgresユーザが作成されるのは、yumの動作であり、データベースが作成されるのは、Cookbookの設定です。データベースの位置を変更の場合は、JSONファイルの「dir」の指定の変更でよいと思われます。