hatenob

プログラムって分からないことだらけ

一人Web開発~第2夜(2) サーバ共通設定

ひとまず簡易的に実行環境を整える作業に入ります。
プラットフォームの環境設定は手で行わず、原則Chefを使って実施します。

元のChefリポジトリのcommonクックブックを見直します。

Chefクックブック

以前Oracle12cインストール時に使ったもののうち、時刻同期を主目的としています。

# Install packages

pkgs = [ \
  "git" \
  , "ntp" \
]

pkgs.each do |pkg|
  package pkg do
    action :install
  end
end

# Setup timezone

file "/etc/localtime" do
  action :delete
  force_unlink true
  not_if {File.readlink("/etc/localtime") == "/usr/share/zoneinfo/Asia/Tokyo"}
  notifies :create, "link[/etc/localtime]", :immediately
end

link "/etc/localtime" do
  to "/usr/share/zoneinfo/Asia/Tokyo"
  action :nothing
end

# Setup ntpd

cookbook_file "/etc/ntp.conf" do
  mode 00644
  notifies :restart, "service[ntpd]"
end

service "ntpd" do
  action [:enable, :start]
end
  1. gitとntpパッケージのインストール
  2. タイムゾーンの設定。JSTじゃない環境でやったことはないのだけれど、VMのイメージを海外から取得するとどうなっているか分からないので設定する。
  3. ntp.confの設定と設定後のNTPデーモンの起動設定。

ntp.confの中身はこんな感じ。

# panicを起こす時差(0は起こさない)
tinker panic 0

driftfile /var/lib/ntp/drift

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1

# NICTのサーバを参照
server ntp.nict.jp

Chefロール設定

一応ロールとして定義しておきます。

# roles/common.json
{
  "name" : "common",
  "default_attributes" : {},
  "override_attributes" : {},
  "json_class" : "Chef::Role",
  "description" : "",
  "chef_type" : "role",
  "run_list" : [
    "recipe[common]"
  ]
}

実行

ひとまずnodesの設定はクックブック単位で実行できるようにしておきたいので、ファイル名もそのようにつける。本当は、クックブックを適用するホスト名でつけるのが正しいけれど、今回はchef-solo -jで実行するので、Chefのルールから外れてます。

# nodes/common.json
{
  "name" : "common",
  "default_attributes" : {},
  "override_attributes" : {},
  "run_list" : [
    "role[common]"
  ]
}

本当は、roles/common.jsonを指定して実行できるかと思ったのだけれど、エラーが出てうまくいかなかったので深く調べずnodesの下にも似たようなのを作りました。

これでchef-solo実行して正常終了すれば最初の第一歩完了。

# chef-solo -j nodes/common.json