今日改めてやった作業メモ
chef, chef-solo, knife, knife-soloの役割がいまいちわかってなかったので
http://ka-zoo.net/2013/06/chef-solo-knife-solo-%E5%B0%8E%E5%85%A5%E3%83%A1%E3%83%A2/
を読みながらまんまやってみただけのメモ。
knife-soloを使った作業にgit管理が加わった感じ。
細かい説明は昨日のとほぼ同じなので省く。
$ knife solo init chef-repo
File existsとかエラーが出るけどできてる。
$ cd chef-repo $ git init $ git add . $ git commit -m "First commit." $ git log $ knife cookbook create mybook -o site-cookbooks $ git add . $ git commit -m "Added mybook for cookbook." $ git log
$ knife solo prepare vagrant@192.168.33.10
- レシピを書く
$ emacs site-cookbooks/mybook/recipes/default.rb
package "httpd" do action :install end service "httpd" do action :start end
$ emacs nodes/192.168.33.10.json
{ "run_list":["mybook"] }
- 実行
$ knife solo cook vagrant@192.168.33.10 /Library/Ruby/Gems/1.8/gems/chef-11.6.0/lib/chef/mixin/path_sanity.rb:26: warning: Insecure world writable dir /Users/fuzzy31u/bin in PATH, mode 040777 Running Chef on 192.168.33.10... Checking Chef version... Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.6.0 Compiling Cookbooks... Converging 2 resources Recipe: mybook::default * package[httpd] action install - install version 2.2.15-28.el6.centos of package httpd * service[httpd] action start - start service service[httpd] Chef Client finished, 2 resources updated
やたー!できたー。
うん、昨日はいろんな記事を参考にしすぎてごちゃごちゃなってたけど今日はよく理解した。うん。
VMでChefを実行してみる
前回、前々回で、MacOS上にゲストOSが起動しChefを実行できる環境が整いました。
引き続きchef-soloとknife-soloで手軽に環境構築をする - Bouldering & Com.を参照。
いざ、レシピ作りへ。
knifeで雛形が作れるということで利用。
- レシピを作る
$ knife cookbook create base -o cookbooks
cookbooksというディレクトリの中にbaseというディレクトリが作られ、さらにその中にテンプレっぽいディレクトリ群ができた。
$ emacs cookbooks/base/recipes/default.rb # # Cookbook Name:: lesson # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # log "message" do message "This is the message that will be added to the log." level :info end directory "/tmp/tmpdir" do mode "0755" action :create end
- 実行対象として設定
$ emacs nodes/192.168.33.10.json {"run_list":[ "recipe[base]" ]}
- chef実行
cd cookbooks/ knife solo cook -i ~/.vagrant.d/insecure_private_key vagrant@192.168.33.10 Converging 0 resources Chef Client finished, 0 resources updated
とか言われてうまくいかない。
WARNING: Local cookbook_path '/var/chef/cookbooks' does not exist
とか出てるからどっかにパスを設定する必要がありそうだ。
- Vagrantfileを編集
今度はVagrantとChef-soloの基本 かなり分かってないこと多いです · GitHubを参考に。
$ emacs Vagrantfile config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "/path/to/chef/cookbooks" chef.add_recipe "base" end
に書き換え。
$ vagrant reload
エラーらしきものが出てない。いけたのか。
- ゲストOSで確認
$ ll /tmp/ drwxr-xr-x 2 root root 4096 Aug 12 09:15 tmpdir
いたいた。何か時計あってないけど。
煮え切らないけど一連の流れは一応いけた。
knife-soloを使ってChef環境を構築
前回の続き。
今回はknife-soloでゲストOSにchef環境をつくる。
chef-soloとknife-soloで手軽に環境構築をする - Bouldering & Com.を見ながら。
すべてホストOS(Mac側)での作業です。
- chef, knife-soloのインストール
$ sudo gem install chef $ sudo gem install knife-solo
- knifeの設定ファイルを作る
$ knife configure Password: WARNING: No knife configuration file found Where should I put the config file? [/path/to/.chef/knife.rb] Please enter the chef server URL: [https://machine-name:443] Please enter an existing username or clientname for the API: [username] Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] Please enter the path to a chef repository (or leave blank): ***** You must place your client key in: /path/to/.chef/username.pem Before running commands with Knife! ***** You must place your validation key in: /etc/chef-server/chef-validator.pem Before generating instance data with Knife! ***** Configuration file written to /path/to/.chef/knife.rb
# Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network :private_network, ip: "192.168.33.10"
最後のコメントアウトを外す
-
- ~/.ssh/configの設定
$ emacs ~/.ssh/config Host 192.168.33.10 User vagrant Port 22 IdentityFile "~/.vagrant.d/insecure_private_key"
- knife-soloでゲストOSにchef環境をインストール
$ knife solo prepare vagrant@192.168.33.10 Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 6790 101 6790 0 0 913 0 0:00:07 0:00:07 --:--:-- 13942 Downloading Chef 11.6.0 for el... Installing Chef 11.6.0 warning: /tmp/tmp.pJDflK3i/chef-11.6.0.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY Preparing... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef! Generating node config 'nodes/192.168.33.10.json'...
ssh設定したけどどうにもconnection refuseされて困ってたけどvagrant halt, vagrant upで再起動したらいけた。
てかそもそもknife, knife-soloとは。
・knife:chefに同梱されてる管理ツール。
・knife-solo:knifeを使うためのプラグイン。chefのレシピをいちいちgithubとかから経由しなくてもローカルで作ったレシピをrsyncしてリモートでchef-soloを実行してくれるらしい。
開発メモ#5 : Amazon Linux で knife-solo を使って chef-solo 実行 - naoyaのはてなダイアリー
連携メモ
GitHubからHipChatへ通知などなどを行いたいので連携させてみた。
http://help.hipchat.com/knowledgebase/articles/64389-github-integration
admin権限じゃないと無理っぽい。
- (HipChat)APIでアクセスするためのOAuth Tokenを発行
Atlassian + Slack | Atlassian
Create an API token here (group admins only). をクリック
Labelは空欄でもおk
- (GitHub)連携したいプロジェクトのSettings > Service Hooks > HipChat
MacOS X上に仮想環境を構築
ローカルのデスクトップ環境にゲストOSを搭載したメモ。
目的は
・違うMacになってもさくっと環境移行したい(もーすぐ新しいMacがくる…!
・プロジェクトの人数増えてもさくっと環境構築さしたい
あたり。
VirtualBoxとVMWare Fusion(有料)がいいよって言われてちょっと調べた。
・VMWare Fusion:Win<->Macの移行が楽
・VirtualBox:無料、周りで使ってる人多い
VirtualBox vs. VMware Fusion - BitArts
で、私の場合はVirtualBoxで充分そうなのでそちらで。
- VirtualBoxのインストール
Downloads – Oracle VM VirtualBox
からダウンロード、インストール
- Vagrantのインストール
Download - Vagrant by HashiCorp
からダウンロード、インストール
- Vagrant Boxをダウンロード
A list of base boxes for Vagrant - Vagrantbox.es
から好きなものを。
私はCentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.12, Chef 11.4.4, Puppet 3.1.1)にしてみた。
$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box $ vagrant init centos64 $ vagrant up
- sshしてみる
$ vagrant ssh Welcome to your Vagrant-built virtual machine. [vagrant@localhost ~]$
とりあえずインストールしてsshでCentOS環境に入れましたよってとこまで。
あと、これがとってもわかりやすかった。
初心者のための Vagrant, Chef, VirtualBox の関係 - Qiita
MacPortsのアンインストール&Homebrewのインストール
ある時から
$ sudo port selfupdate
すると
---> Updating MacPorts base sources using rsync MacPorts base version 2.0.3 installed, MacPorts base version 2.1.3 downloaded. ---> Updating the ports tree ---> MacPorts base is outdated, installing new version 2.1.3 Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: shell command failed (see log for details)
て言われるようになった。
XcodeをアップデートしてCommand Line Tools入れるといいよ!って書いてあったから準じたんだけど変わらず。
もうちょい粘ってもよかったんだけどここらでHomebrewに乗り換えてみることに。
お世話になりましたMacPorts。長年ありがとう。
で、まずはMacPortsのアンインストール。
$ sudo port -fp uninstall --follow-dependents installed %% sudo rm -rf \ /opt/local \ /Applications/DarwinPorts \ /Applications/MacPorts \ /Library/LaunchDaemons/org.macports.* \ /Library/Receipts/DarwinPorts*.pkg \ /Library/Receipts/MacPorts*.pkg \ /Library/StartupItems/DarwinPortsStartup \ /Library/Tcl/darwinports1.0 \ /Library/Tcl/macports1.0 \ ~/.macports
環境変数から/opt/local系を削除
$ emacs ~/.bash_profile
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
試しに何かインストール。
$ brew install git
静的ファイルリリースの自動化
css, jsのリリース作業自動化について検討してみた。
SERVER=サーバのIP TARGET_DIR=${WORKSPACE} CSS=${TARGET_DIR}/css/*.css JS=${TARGET_DIR}/build/*.js IMG=${TARGET_DIR}/img/sprite/ APACHE_PATH=/path/to/apache ID_RSA_PATH=/path/to/jenkins/.ssh/id_rsa # grunt for js chmod 700 sh/jenkins-grunt.sh ${TARGET_DIR}/sh/jenkins-grunt.sh # compass for css export PATH=/usr/local/bin:$PATH; compass compile sass/ # rsync # css rsync -avz -e ssh ${CSS} user@${SERVER}:${APACHE_PATH}/htdocs/web/css/ ssh -i ${ID_RSA_PATH} user@${SERVER} chmod 777 ${APACHE_PATH}/htdocs/web/css/* # js rsync -avz -e ssh ${JS} user@${SERVER}:${APACHE_PATH}/htdocs/web/js/ ssh -i ${ID_RSA_PATH} user@${SERVER} chmod 777 ${APACHE_PATH}/htdocs/web/js/*.js # img ssh -i ${ID_RSA_PATH} user@${SERVER} rm ${APACHE_PATH}/htdocs/web/img/sprite/* rsync -avz -e ssh ${IMG}/*.png user@${SERVER}:${APACHE_PATH}/htdocs/web/img/sprite/
こんな感じで一応できた。
ちなみにchmodとかしてるのはテスト環境だからであって本番環境では必要ない。
jenkins-grunt.shは
https://github.com/fuzzy31u/static-jenkins-skeleton/blob/master/sh/jenkins-grunt.sh