chefの練習のためにいろいろやってみる。
Mac に knife-solo を install
$ sudo gem install knife-solo
$ rbenv rehash
EC2インスタンス起動
| 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
とりあえずここまで