読者です 読者をやめる 読者になる 読者になる

set setting reset

インフラ関連の小ネタと備忘録

chef の導入メモ

chef

chefの練習のためにいろいろやってみる。

  • mac に knife のインストール
  • リモートサーバに ruby のインストール
  • bash をレシピ化

Mac に knife-solo を install

$ sudo gem install knife-solo
$ rbenv rehash

EC2インスタンス起動

適当にインスタンス起動し ssh できるようにしておく。

information
CentOS
m3.medium
10.0.1.10

EC2 インスタンスに chef-solo をインストール

$ knife solo prepare -i key root@10.0.1.10

404エラーでインストールできない。

$ knife solo prepare -i key.pem root@10.0.1.10
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16519  100 16519    0     0  15139      0  0:00:01  0:00:01 --:--:-- 33643
Downloading Chef 12.0.0.alpha.0 for el...
downloading https://www.opscode.com/chef/metadata?v=12.0.0.alpha.0&prerelease=false&nightlies=false&p=el&pv=6&m=x86_64
  to file /tmp/install.sh.1046/metadata.txt
trying curl...
<span style="color: #cc0000">ERROR 404</span>
Unable to retrieve a valid package!
Please file a bug report at http://tickets.opscode.com
Project: Chef
Component: Packages
Label: Omnibus
Version: 12.0.0.alpha.0

Please detail your operating system type, version and any other relevant details
Metadata URL: https://www.opscode.com/chef/metadata?v=12.0.0.alpha.0&prerelease=false&nightlies=false&p=el&pv=6&m=x86_64
Generating node config 'nodes/*ip address*.json'...

chef のバージョンを指定すると解決できる

http://webuilder240.com/knife_solo_404/

$ knife solo prepare -i ~/.key/key.pem root@*ip address* --bootstrap-version 11.12.0
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16519  100 16519    0     0  15764      0  0:00:01  0:00:01 --:--:-- 33989
Downloading Chef 11.12.0 for el...
downloading https://www.opscode.com/chef/metadata?v=11.12.0&prerelease=false&nightlies=false&p=el&pv=6&m=x86_64
  to file /tmp/install.sh.1193/metadata.txt
trying curl...
url https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.12.0-1.el6.x86_64.rpm
md5 3e4fadc93e3080ec0b2ed811f36cb8bc
sha256  42a29433f83f03fdf75a06ff65c45f0bbdeb44593b45fc0ef1717fbdb7eb8756
downloaded metadata file looks valid...
downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.12.0-1.el6.x86_64.rpm
  to file /tmp/install.sh.1193/chef-11.12.0-1.el6.x86_64.rpm
trying curl...
Comparing checksum with sha256sum...
Installing Chef 11.12.0
installing with rpm...
warning: /tmp/install.sh.1193/chef-11.12.0-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                ########################################### [100%]
   1:chef                   ########################################### [100%]
<span style="color: #cc0000">Thank you for installing Chef!</span>

Berkshelf のインストール

Berkshelfとは、「Chefのcookbookとその依存関係を管理するツール
定義ファイルに使うcookbookを定義しておけば、リポジトリから勝手に依存関係を解消した上で落としてきてくれる

yum でも gem 解決してくれる。

$ sudo gem install berkshelf
$ rbenv rehash

Berksfile の作成

chef-repo 直下に作成

$ cat Berksfile
source "http://api.berkshelf.com/"

cookbook 'rbenv'

cookbook のダウンロード

$ berks vendor vendor/cookbooks

これをしなくても knife-solo bootstrap すると、
都度 chef-repo/cookbooks 配下に DL される模様。

chef-repo の状態。

$ tree ../chef-repo/
../chef-repo/
.
├── Berksfile
├── Berksfile.lock
├── cookbooks
│   ├── Berksfile.lock
│   ├── apt
│   ├── build-essential
│   ├── chef_handler
│   ├── dmg
│   ├── git
│   ├── ohai
│   ├── python
│   ├── rbenv
│   ├── runit
│   ├── selinux
│   ├── windows
│   ├── yum
│   └── yum-epel
├── data_bags
│   └── users
├── environments
├── nodes
├── roles
└── site-cookbooks

Ruby のための Cookbook の作成

$ knife cookbook create rbenv-ruby -o site-cookbooks

site-cookbooks/rbenv-ruby/metadata.rbに追記

depends 'rbenv'

site-cookbooks/rbenv-ruby/recipe/default.rbを以下のように編集。

include_recipe "rbenv::default"
include_recipe "rbenv::ruby_build"
include_recipe "rbenv::rbenv_vars"

rbenv_ruby "2.1.1" do
  ruby_version "2.1.1"
  global true
end

%w[bundler aws-sdk].each do |gem_name|
  rbenv_gem gem_name do
    ruby_version "2.1.1"
  end
end

nodes/10.0.1.10.json を編集

{
  "run_list": [
    "recipe[rbenv-ruby]"
  ],
  "automatic": {
    "ipaddress": "10.0.1.10"
  }
}

実行

current directory を chef-repo にして実行。

$ knife solo cook -i key root@10.0.1.10

bash をレシピ化

http://dqn.sakusakutto.jp/2014/03/chef_execute_script_bash.html

書いてみる

%w{vim mlocate dstat iotop git gcc-c++ mailx tree expect}.each do |pkg|
    package pkg do
        action :install
    end
end

bash "japanize" do
    code "echo \"LANG=\"ja_JP.UTF-8\"\" > /etc/sysconfig/i18n"
end

とりあえずここまで