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
とりあえずここまで