今日改めてやった作業メモ

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
  • VMsshできるように設定
    • VagrantFileの設定
  # 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


先ほど発行したTokenを貼りつけてActiveにチェックしUpdate

MacOS X上に仮想環境を構築

ローカルのデスクトップ環境にゲストOSを搭載したメモ。
目的は
・違うMacになってもさくっと環境移行したい(もーすぐ新しいMacがくる…!
・プロジェクトの人数増えてもさくっと環境構築さしたい
あたり。

VirtualBoxVMWare Fusion(有料)がいいよって言われてちょっと調べた。
VMWare Fusion:Win<->Macの移行が楽
VirtualBox:無料、周りで使ってる人多い
VirtualBox vs. VMware Fusion - BitArts
で、私の場合はVirtualBoxで充分そうなのでそちらで。

Downloads – Oracle VM VirtualBox
からダウンロード、インストール

Download - Vagrant by HashiCorp
からダウンロード、インストール

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 ~]$ 


とりあえずインストールしてsshCentOS環境に入れましたよってとこまで。

あと、これがとってもわかりやすかった。
初心者のための 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


次にHomebrewのインストール

$ 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