2013年5月14日火曜日

Windows7にrubyをインストール

■環境
Windows7 64bit
インストールするrubyのバージョンは2.0.0とします

■ruby&gemインストール
  1. http://rubyinstaller.org/downloads/にアクセス
  2. Ruby 2.0.0-p0 (x64)をクリックしてWindows用のexeインストーラをダウンロード
  3. ダウンロードが完了したらインストーラを実行
  4. インストールの途中で「Ruby の実行ファイルへ環境変数PATHを設定する」にチェック
  5. あとは気にせずインストール
  6. デフォルトでインストールすると「C:\Ruby200-x64」にインストールされます
  7. コマンドプロンプトを開いてバージョンを確認
  8. ruby -v
    ruby 2.0.0p0 (2013-02-24) [x64-mingw32]
    
  9. gemのインストールも確認
  10. gem -v
    2.0.0
    

■Development Kitインストール
  1. rubyのインストーラをダウンロードした同様のサイトからDevKit-mingw64-64-4.7.2-20130224-1432-sfx.exeをダウンロード
  2. C:/ruby_dev_kitフォルダを作成しそこでダウンロードしたインストーラを実行しファイルを展開
  3. 展開した C:/ruby_dev_kit に移動し「ruby dk.rb init」を実行
  4. config.yml ができるので編集、以下の一行を追加(rubyをインストールしたパスを追加)
  5. - C:/Ruby200-x64
  6. ruby dk.rb review
  7. ruby dk.rb install(INFOレベルのログが表示されエラーがでなければDevelopment Kitのインストール成功)
  8. gem update ができるようになっていることを確認

こんな簡単にインストールできるようになったんですね。。。

■トラブルシューティング
・gem installに失敗して以下のエラーがでる
ERROR: Could not find a valid gem 'bundler' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/latest_specs.4.8.gz)

-> gem install bundler -r --source http://rubygems.org/
-> のように一時的にhttpを使うようにしてinstallする

・Jekinsからrubyが認識されない
Jenkins側にまだ環境変数の情報が反映されていません
一度Jenkinsを再起動してください
それでもダメな場合はrubyをインストールするときに環境変数に反映するチェックボックスがONになっていたか確認してください

2013年5月9日木曜日

回線のお引越しメモ【Biglobeとauひかり】

■背景
自宅が引越しをするのでインターネットも引越しする
現在はauひかりとauひかり電話をプロバイダをbiglobeで契約中している
要件としては電話番号はそのまま使えるようにして、ネットは使えればなんでもよい
というわけで以下2つのパターンに絞り込んでいろいろネットで調べたり電話して聞いたりしたのでまとめておく

1. wimaxに移行し電話番号をそのまま残す
wimaxにした場合、現在申し込んでいるauひかりのプランをbiglobeで変更しなければならない
その場合、auひかりのプランからベージックプランという基本はネットができないがIDを保持するためのプランに変更する
※厳密にはダイヤルアップならできるみたい
その場合の料金は
ベージックプラン+wimax
⇒210円+3,591円=3,801円
になります
そして電話を残す必要があるのですが、auひかり電話はネット回線が必須要件で
今回は回線撤去になるので、auひかり電話を続けることはできません
なのでKDDIが別途「メタルプラス電話(auおうち電話)」という固定電話用のサービスを提供しているのでそれに変更します
この手続はbiglobeではできないので、biglobeでベーシックプランに変更する前にKDDIに問い合わせてメタルプラス電話に切り替えます
メタルプラスは月額1,470なので、合計は
⇒210円+3,591円+1,470円=5,271円
になります。また請求は3,801円がbiglobeから1,470円がKDDIからとなります

メリットとしては回線移転の手続きがいらない
デメリットとしてはbiglobeとKDDIの両方で手続きをしなければいけない、料金が高くなる

2. auひかりの回線をそのまま引越しし電話番号をそのまま残す
手続きは全部biglobeで行います
電話またはwebからでも手続き可能です
まず、引越した場合の月額料金は以下
月額基本料金(ネット料金)+VDSL機器レンタル料+設置工事費用+auひかり電話料金
⇒3,570円+420円+1,313円+525円(+通話料)=5,825円
設置工事費用は引越しでもかかります
2年間分を分割で払っているので、全部で31,500円払うことになります
しかもこの料金は途中で解約すると払いきれてない分は解約月に全額一括で支払うことになるので、
引っ越してすぐに解約するととんでもないことになります
もうちょっと詳しく書くと新規契約のときは大抵キャンペーンが適用になっていて工事費とかVDSLレンタル代とかは無料になったりしてます
で、今回は引越しなので引越の場合はキャンペーンが適用にならないので、いきなり払う必要があるということです
電話番号に関してはauひかり同士の引越しになるので「可能であるならば」そのまま電話番号も引き継げます
可能であると表現しているのは電話番号をそのまま使えない可能性があるということで
引越し先が現在と同じ電話の基地局を使うのであれば電話番号は引き継げるのですが、そうでない場合は引き継げないので
全く新しい電話番号に勝手に切り替わります
なので、必ず同じ電話番号が移転先で使えるかを「116」に問い合わせてから引越し手続きをするようにしてください
これを確認しないで手続きしてしまうと引っ越したあとで電話番号が変わってしまったことに気がついて大変なことになりかねません

メリットとしては手続きはbiglobeのみでかつwebで全部行える
デメリットとしては月額料金が高くなる

■結論
で、結局今回はどうしたかというと
auひかりを解約して、新規で回線申込み
をしました、1. 2. どっちも採用しませんでした
理由としては
  • 116にかけたら引越し先では同じ電話番号が使えないことを知った
  • メタルプラス電話で個別に電話を契約しても電話番号が引き継げない
  • 料金が高くなる
  • 手続き的には新規契約とほとんど変わらなかった
  • 新規の回線契約ならばキャンペーンが再度使える
あたりでしょうか

その場合のTODOとしては
  • 新規で回線契約をする必要がある(引越し後でもおk)
  • biglobeでauひかりの回線を解約する必要がある
  • auひかりのモデルを返却する必要がある
  • 回線撤去の立会いが必要になる(かもしれない)
になります
こういうのって知らない人はどうしてるんだろうといつも心配になります
この記事で誰か助かってくれると嬉しいです

2013年5月8日水曜日

【chef】zabbix cookbooksインストール時にNode attributes are read-only when you do not specify which precedence level to set

■エラー詳細
FATAL: Chef::Exceptions::ImmutableAttributeModification: Node attributes are read-only when you do not specify which precedence level to set. To set an attribute use code like `node.default["key"] = "value"'

■対処方法
zabbix/recipes/server_source.rb
の以下の部分を変更

configure_options = (node['zabbix']['server']['configure_options'] || Array.new).delete_if do |option|
  option.match(/\s*--prefix(\s|=).+/)
end

↓↓↓まるごと以下のように変更↓↓↓

node_options = node['zabbix']['server']['configure_options']
configure_options  = Array.new

if node_options
  node.set['zabbix']['server']['configure_options'].delete_if do |opt\
ion|
    option.match(/\s*--prefix(\s|=).+/)
  end
  node_options.each do |item|
    configure_options << item
  end
end

Chefが11の場合に出ちゃうみたいです
issueにも挙げられてるみたいですが、masterにはまだマージされてないみたいです
あやうく自分でpull requestするところでしたw
やっぱりちゃんとissueは見ないとダメですね
https://github.com/AdallomRoy/zabbix/commit/0ecab38ce4545c479cb52f65b1a1b570baba7857

rabbitmq clusterやってみた

■概要
rabbitmqでclusterを構成を組んだ上でキューの作成やメッセージの送受信をしてみました

■rabbitmqインストール
以下の記事を参考に2台のrabbitmqサーバを作成します
chefによるインストールを紹介していますが、普通にchefじゃなくても大丈夫です
http://kakakikikeke.blogspot.com/2013/05/rabbitmq.html

■cluster構成作成
・スレーブ側操作
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@マスタ側サーバIP
rabbitmqctl start_app
・マスタ側操作
rabbitmqctl cluster_status

クラスタとして追加したサーバはRAMモードとDISKモードというキューの保存方法が異なる形式を選択することができます
DISKモードに変更したい場合は以下の操作をスレーブ側で実行します
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app

クラスタから外したいときは以下の操作をスレーブ側で実行します
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

■キュー作成とメッセージのやりとり
※guestユーザでvhost「/」に対して実行した場合です
rabbitmqadmin --host サーバのIPアドレス declare queue name=testqueue001
rabbitmqadmin --host サーバのIPアドレス list queues
rabbitmqadmin --host サーバのIPアドレス publish routing_key=testqueue001 payload="test message 001" exchange=amq.default
rabbitmqadmin --host サーバのIPアドレス get queue=testqueue001 requeue=false

上記実施後にマスタサーバとスレーブサーバ両方でキューの確認をすると両方のサーバに情報が反映されていることがわかります

■注意事項
The nodes provided are either offline or not running
上記のエラーが出るときはerlang.cookiesという設定ファイルがサーバ同志で共有されてない場合にでます
/var/lib/rabbitmq/.erlang.cookie
上記を共有したあとにrabbitmqを再起動すると直ります

2013年5月7日火曜日

rabbitmqやってみた

■概要
rabbitmqサーバ1台とクライアント1台で簡単なキュー処理をやってみた
ユーザとかvhostとか権限とかもやってみた

■rabbitmqインストール
今回はchefでインストールします、なのであらかじめchefをインストールしておいてください
http://kakakikikeke.blogspot.jp/2013/03/chefomnibus.html
またrabbitmqのchefインストールは以下に必要なcookbooksも含めてまとめています(一番したの方)
http://kakakikikeke.blogspot.jp/2013/05/opscodecookbooks.html

■rabbitmqadminインストール
※rabbitmqctlではクライアントツールとして動作しないのでデフォルトで付属している専用のクライアントツールをインストールする
※15672のWeb-API用のポートを使って通信する
・サーバ側操作
rabbitmq-plugins enable rabbitmq_management
/etc/init.d/rabbitmq-server restart
netstat -an | grep 15672
15672で新しくプロセスが上がっていることを確認する
・クライアント側操作
cd /usr/local/sbin
wget http://サーバ側IPアドレス:15672/cli/rabbitmqadmin
chmod 755 rabbitmqadmin
以下からはクライアント側で操作する

■ユーザとvhostと権限の作成
rabbitmqadmin --host サーバのIPアドレス declare vhost name=testvhost
rabbitmqadmin --host サーバのIPアドレス declare user name=kakakikikeke password=********** tags=testtag
rabbitmqadmin --host サーバのIPアドレス declare permission vhost=testvhost user=kakakikikeke configure=".*" write=".*" read=".*"

rabbitmqではユーザを指定しないとguest:administratorでアクセスされます
vhostも「/」のみが有効になっています
「ユーザ」「vhost」「権限」のつながりをまとめると
ユーザとvhostを作成してvhostに対してどんな権限かと誰が触れるかを設定します

■クライアント・サーバで検証
キューを作成して確認したあとメッセージを送信し受信します

rabbitmqadmin --host サーバのIPアドレス --vhost testvhost --user kakakikikeke --password ********** declare queue name=testqueue001
rabbitmqadmin --host サーバのIPアドレス --vhost testvhost --user kakakikikeke --password ********** list queues
rabbitmqadmin --host サーバのIPアドレス --vhost testvhost --user kakakikikeke --password ********** publish routing_key=testqueue001 payload="test message 001" exchange=amq.default
rabbitmqadmin --host サーバのIPアドレス --vhost testvhost --user kakakikikeke --password ********** get queue=testqueue001 requeue=false

他のアクションコマンドの一覧を表示
rabbitmqadmin help subcommands

AMQP互換のrabbitmqには様々なクライアントが用意されており簡単に触れます
今回は付属のcliツールを使いましたが、他にもいろいろありかつクライアントによっては
実装されていない機能もあるので、結構良し悪しがありそうです

■Tips
キューを作成する際にdurable=falseで作成するとrabbitmqが再起動した後にキューが削除されている

2013年5月4日土曜日

【apache】DocumentRootでindex.cgiを動作させる方法

■環境
CentOS release 6.4 (Final) x86_64
perl v5.10.1

■apache httpdインストール
yum -y install httpd*

■index.cgiの作成
cd /var/www/html
wget http://www.tohoho-web.com/cgi/wwwperl.txt
mv wwwperl.txt index.cgi
※perlのパスだけ書き換える必要があるかもしれない
nkf -w --overwrite index.cgi
chmod 755 /var/www/html/index.cgi

■apache設定
vi /etc/conf/conf/httpd.conf
以下を編集する
Options Indexes FollowSymLinks

Options Indexes FollowSymLinks ExecCGI

#AddHandler cgi-script .cgi

AddHandler cgi-script .cgi

DirectoryIndex index.html index.html.var

DirectoryIndex index.cgi index.html index.html.var

■動作確認
service httpd start
http://localhost/にアクセスして環境変数の一覧が表示されることを確認する

2013年5月2日木曜日

Opscodeで公開されているいろんなcookbooksを試してみた

P.S 20140226
最近この記事のアクセスが増えてきたので一旦内容を精査しました
主な修正点は以下です
細かい部分に関しては各cookbooksの検証結果内に赤字で追記しています
  • git のインストールを事前手順に追加
  • Tomcat7が動作しなくなっていたのを追記
  • Tomcat7 その2の依存ライブラリ修正
  • Jenkinsの実行レシピ名が変更になっていたので修正
  • 誤字脱字修正
  • 体裁修正
  • その他、赤字での追記

■環境
CentOS 6.4 64bit
Chef 11.4.0(chef-soloを使用)

■事前作業
chef-soloのインストール
gitのインストール
yum -y install git
cookbooksディレクトリの作成
cd /; git clone git://github.com/opscode/chef-repo.git
mkdir /etc/chef
vim /etc/chef/solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/chef-repo/cookbooks"]
role_path "/chef-repos/roles"
log_level :debug
以下作業ディレクトリは/chef-repo/cookbookとします

■chef-solo検証
■Java(デフォルト6)
□実行方法
  • git clone git://github.com/opscode-cookbooks/java.git
  • git clone git://github.com/opscode-cookbooks/windows.git
  • git clone git://github.com/opscode-cookbooks/chef_handler.git

vim /chef-repo/cookbooks/java.json
{
  "override_attributes": {
    "java": {
      "install_flavor": "oracle"
    }
  },
  "run_list": [
    "recipe[java]"
  ]
}
chef-solo -j /chef-repo/cookbooks/java.json

□実行結果
  • open-jdk-1.6.0がインストールされた
  • java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.9) (rhel-1.57.1.11.9.el6_4-x86_64) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) ⇒20140228追記:1.6.0_30がインストールされるようになっていた
  • yum installで実施しているみたいだが非常に時間がかかる(賞味30分くらい)
  • Chef::Exceptions::CookbookNotFound: Cookbook windows not found. If you're loading windows from another cookbook, make sure you configure the dependency in your metadata対策
  • 上記2つのcookbooks「windows」と「chef_hander」も必要
  • ※override_attributesに関して
  • chef-soloにoverride_attributesの概念はない roleに対してはoverrideできるが、レシピに記載されているdefaultのattributeに対してchef-soloの場合効果がない override_attributesを指定しないでjsonに直接実行すれば、default_attributeの値を上書きして実行してくれる

■Java(java7へ変更)
□実行方法
  • git clone するものは上記のJava(デフォルト6)と同様

vim /chef-repo/cookbooks/java.json
{
  "java": {
    "install_flavor": "oracle",
    "jdk_version": 7,
    "java_home": "/usr/local/java",
    "oracle" : {
      "accept_oracle_download_terms": true
    }
  },
  "run_list": [
    "recipe[java]"
  ]
}
chef-solo -j /chef-repo/cookbooks/java.json

□実行結果
  • oracle javaの1.7がインストールされた
  • java version "1.7.0_17" Java(TM) SE Runtime Environment (build 1.7.0_17-b02) Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode) ⇒20140228追記:1.7.0_51がインストールされるようになっていた

■Emacs
□実行
  • git clone git://github.com/opscode-cookbooks/emacs.git

vim /chef-repo/cookbooks/emacs.json
{
  "run_list": [
    "recipe[emacs]"
  ]
}
chef-solo -j /chef-repo/cookbooks/emacs.json

□実行結果
  • GNU Emacs 23.1.1 (x86_64-redhat-linux-gnu) of 2012-03-01 on c6b18n3.bsys.dev.centos.org

■Tomcat7
⇒20140228追記:すいません、うまく動作しないようです
FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
が出てうまくインストールできません

□実行
  • git clone git://github.com/opscode-cookbooks/tomcat.git
  • git clone git://github.com/mcortesi/tomcat.git
  • git clone git://github.com/opscode-cookbooks/java.git
  • git clone git://github.com/opscode-cookbooks/windows.git
  • git clone git://github.com/opscode-cookbooks/chef_handler.git
yum -y install yum-plugin-priorities
rpm -Uvh http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm
yum clean all
yum -y update

vim /chef-repo/cookbooks/tomcat.json
{
  "tomcat": {
    "base_version": 7
  },
  "java": {
    "install_flavor": "oracle",
    "jdk_version": 7,
    "java_home": "/usr/local/java",
    "oracle" : {
      "accept_oracle_download_terms": true
    }
  },
  "run_list": [
    "recipe[java]",
    "recipe[tomcat]"
  ]
}
chef-solo -j /chef-repo/cookbooks/tomcat.json

□実行結果
  • opscodeで提供されているtomcatのcookbooksがtomcat7に対応していないためforkして作られたcookbooksを使用する
  • http://blog.cloudpack.jp/2013/01/server-news-centos6-tomcat7-rpm-yum.html
  • jpackageのリポジトリとepelのリポジトリがenable状態になっているとyum updateで失敗するのでepelを無効にしておく必要あり
  • Javaのcookbooksに依存しているのでjavaもcloneする必要あり
  • 普通のtar展開によるtomcatインストールと違ってyumインストールはフォルダが変なところに置かれるのでわかりづらい

■Tomcat7 その2
□実行
  • git clone git://github.com/opscode-cookbooks/java.git
  • git clone git://github.com/opscode-cookbooks/windows.git
  • git clone git://github.com/opscode-cookbooks/chef_handler.git
  • git clone git://github.com/bryanwb/chef-tomcat.git
  • cp -ipr chef-tomcat tomcat (tomcatという自分自身と同じ内容のcookbooksが必要)
  • git clone git://github.com/opscode-cookbooks/ark.git
  • git clone git://github.com/opscode-cookbooks/logrotate.git

vim /chef-repo/cookbooks/chef-tomcat.json

{
  "run_list": [
    "recipe[chef-tomcat]"
  ]
}
chef-solo -j /chef-repo/cookbooks/chef-tomcat.json

□実行結果
  • /usr/local/tomcat/default/bin/version.sh
  • Server version: Apache Tomcat/7.0.32

■MongoDB
□実行
  • git clone git://github.com/kakakikikeke/cookbooks-jpackage.git
  • git clone git://github.com/edelight/chef-mongodb.git
  • cp -ipr chef-mongodb mongodb (mongodbという自分自身と同じ内容のcookbooksが必要)
  • git clone git://github.com/opscode-cookbooks/apt.git
  • git clone git://github.com/opscode-cookbooks/yum.git
  • git clone git://github.com/opscode-cookbooks/python.git
  • git clone git://github.com/opscode-cookbooks/build-essential.git
  • git clone git://github.com/opscode-cookbooks/yum-epel.git
  • git clone git://github.com/opscode-cookbooks/runit.git

vim /chef-repo/cookbooks/chef-mongodb.json
{
  "run_list": [
    "recipe[cookbooks-jpackage]",
    "recipe[chef-mongodb]"
  ]
}
chef-solo -j /chef-repo/cookbooks/chef-mongodb.json

□実行結果
  • MongoDB shell version: 2.4.2
  • ⇒20140228追記:2.4.9がインストールされるようになってました
  • 自作のcookbooksを使って10genのリポジトリを追加しています

■Redis
□実行
  • git clone git://github.com/brianbianco/redisio.git
  • git clone git://github.com/bmhatfield/chef-ulimit.git
mv chef-ulimit ulimit

vim /chef-repo/cookbooks/redisio.json
{
  "run_list": [
    "recipe[redisio::install]",
    "recipe[redisio::enable]"
  ]
}
chef-solo -j /chef-repo/cookbooks/redisio.json

□実行結果
  • redis-cli 2.6.11
  • ⇒20140228追記:2.6.17がインストールされるようになってました
  • 設定ファイルは /etc/redis/6379.conf にある
  • デフォルトのポートは6379でLISTENしている
  • 起動ファイルは /etc/init.d/redis6379 にある
  • sentinelの起動は以下で実施できます(設定ファイルは作成してください)
  • /usr/local/bin/redis-server /etc/redis/sentinel.conf --sentinel

■Jenkins
□実行
  • git clone git://github.com/opscode-cookbooks/apache2.git
  • git clone git://github.com/opscode-cookbooks/iptables.git
  • git clone git://github.com/opscode-cookbooks/chef_handler.git
  • git clone git://github.com/opscode-cookbooks/windows.git
  • git clone git://github.com/opscode-cookbooks/java.git
  • git clone git://github.com/opscode-cookbooks/apt.git
  • git clone git://github.com/opscode-cookbooks/essential.git
  • git clone git://github.com/opscode-cookbooks/ohai.git
  • git clone git://github.com/opscode-cookbooks/yum.git
  • git clone git://github.com/opscode-cookbooks/nginx.git
  • git clone git://github.com/opscode-cookbooks/runit.git
  • git clone git://github.com/opscode-cookbooks/jenkins.git
  • git clone git://github.com/opscode-cookbooks/build-essential.git

vim /chef-repo/cookbooks/jenkins.json
{
  "run_list": [
    "recipe[jenkins::master]"
  ]
}
⇒20140228追記:レシピがserverではなくmasterに名称変更してました
chef-solo -j /chef-repo/cookbooks/jenkins.json

□実行結果
  • URI::InvalidURIError: ruby_block[block_until_operational] (jenkins::server line 52) had an error: URI::InvalidURIError: the scheme http does not accept registry part: :8080 (or bad hostname?
  • なんてエラーが最後にでるのですが、どうやらインストールはできているみたい
  • /var/lib/jenkins/jenkins.war にwarがあります
  • chkconfigには登録されずにrunitで起動しています(/etc/sv/jenkins/run にrunit用のコマンドあり)
  • /etc/service/jenkins にシンボリックリンクがあるので、これを削除すれば自動起動しなくなります
  • sv start/stop/status jenkinsで各種起動や確認ができます
  • /etc/init.d/jenkins start|stopでも起動や停止ができます
  • Error executing action `enable` on resource 'runit_service[jenkins]'
  • rpm -ivh /root/rpmbuild/RPMS/runit-2.1.1.rpm(rpmがない場合はネットから探してくる)
  • Java7インストール時のattributesを指定しないと「openJDK 1.6.0_24」がインストールされます
  • runsvdir -P -H /etc/service でrunsv自体が止まってしまった場合に再起動できます
  • runsv jenkins: fatal: unable to lock supervise/lock: temporary failure
  • rm /etc/sv/jenkins/supervise/lock で一旦lockファイルを削除してからrunsvdirで起動してください
  • 起動ログ等は/var/log/messagesに吐かれています

■RabbitMQ
□実行
  • git clone git://github.com/opscode-cookbooks/rabbitmq.git
  • git clone git://github.com/opscode-cookbooks/erlang.git
  • git clone git://github.com/opscode-cookbooks/apt.git
  • git clone git://github.com/opscode-cookbooks/yum.git
  • git clone git://github.com/opscode-cookbooks/build-essential.git

vim /chef-repo/cookbooks/rabbitmq.json
{
  "run_list": [
    "recipe[rabbitmq]"
  ]
}
chef-solo -j rabbitmq.json

□実行結果
  • rabbitmqctl status | grep RabbitMQ
  • {running_applications,[{rabbit,"RabbitMQ","3.0.4"},

■Zabbix
□実行
  • git clone git://github.com/laradji/zabbix.git
  • git clone git://github.com/opscode-cookbooks/database.git
  • git clone git://github.com/opscode-cookbooks/aws.git
  • git clone git://github.com/opscode-cookbooks/mysql.git
  • git clone git://github.com/opscode-cookbooks/build-essential.git
  • git clone git://github.com/opscode-cookbooks/openssl.git
  • git clone git://github.com/opscode-cookbooks/postgresql.git
  • git clone git://github.com/opscode-cookbooks/apt.git
  • git clone git://github.com/opscode-cookbooks/xfs.git
  • git clone git://github.com/opscode-cookbooks/apache2.git
  • git clone git://github.com/opscode-cookbooks/ark.git
  • git clone git://github.com/opscode-cookbooks/powershell.git
  • git clone git://github.com/opscode-cookbooks/windows.git
  • git clone git://github.com/opscode-cookbooks/chef_handler.git
  • git clone git://github.com/opscode-cookbooks/nginx.git
  • git clone git://github.com/opscode-cookbooks/ohai.git
  • git clone git://github.com/opscode-cookbooks/runit.git
  • git clone git://github.com/opscode-cookbooks/yum.git
  • git clone git://github.com/opscode-cookbooks/ufw.git
  • git clone git://github.com/opscode-cookbooks/firewall.git
  • git clone git://github.com/yevgenko/cookbook-php-fpm.git
  • git clone git://github.com/chocolatey/chocolatey-cookbook.git
mv chocolatey-cookbook/ chocolatey
mv cookbook-php-fpm/ php-fpm

vim /chef-repo/cookbooks/zabbix.json
{
  "run_list": [
    "recipe[yum::epel]",
    "recipe[apache2::mod_php5]",
    "recipe[database::mysql]",
    "recipe[mysql::server]",
    "recipe[zabbix]",
    "recipe[zabbix::database]",
    "recipe[zabbix::server]",
    "recipe[zabbix::web]"
  ],
  "zabbix": {
    "server": {
      "install": true
    },
    "web": {
      "install": true,
      "fqdn": "hostname"
    },
    "agent": {
      "servers": [
        "hostname",
        "hostname"
      ]
    },
    "database": {
      "dbpassword": "mysql",
      "rds_master_user": "mysql",
      "rds_master_password": "mysql"
    }
  },
  "mysql": {
    "server_debian_password": "mysql",
    "server_root_password": "mysql",
    "server_repl_password": "mysql"
  }
}
chef-solo -j /chef-repo/cookbooks/zabbix.json

□実行結果
  • recipe[zabbix]のみを指定するとzabbix_agentのみがインストールされます
  • zabbix-serverのバージョンは2.0.3
  • /opt/zabbix配下にインストールされる
  • Forbiddenになる場合はパーミッションが755になっていることとSELinuxが無効になっていることを確認する
  • chmod 755 /opt/zabbix; chmod 755 /opt/zabbix/*
  • http://localhost/でzabbixの管理画面が表示されます(apacheのDocumentRootに登録される)
  • zabbix-serverインストール時に以下のエラーになる場合はリンクの記事を参考にしてください
  • Node attributes are read-only when you do not specify which precedence level to set
  • http://kakakikikeke.blogspot.com/2013/05/chefzabbix-cookbooksnode-attributes-are.html
  • Option source must be a kind of [String]! You passed {"default"=>"zabbix_agentd.init-rh.erb"}.
  • http://kakakikikeke.blogspot.com/2013/05/chef-zabbixoption-source-must-be-kind.html
  • FATAL: Errno::ENOENT: execute[generate-module-list] (apache2::default line 68) had an error: Errno::ENOENT: No such file or directory - /usr/local/bin/apache2_module_conf_generate.pl /usr/lib64/httpd /etc/httpd/mods-available
  • 理由はわからないがchef-soloを再実行すると上手く動作する
  • zabbixのDBはmysqlがインストールされバージョンは5.1.69、ユーザ名/パスワードはzabbix/mysqlとなる
  • デフォルトのzabbixのユーザ名/パスワードはadmin/zabbixになります

■Squid
□実行
  • git clone git://github.com/opscode-cookbooks/squid.git

vim /chef-repo/cookbooks/squid.json
{
  "run_list": [
    "recipe[squid]"
  ]
}
chef-solo -j /chef-repo/cookbooks/squid.json

□実行結果
  • Squid Cache: Version 3.1.10

■PHP
□実行
  • git clone git://github.com/opscode-cookbooks/php.git

vim /chef-repo/cookbooks/php.json
{
  "run_list": [
    "recipe[php]"
  ]
}
chef-solo -j /chef-repo/cookbooks/php.json

□実行結果
  • php 5.3.3

■Apache2
□実行
  • git clone git://github.com/opscode-cookbooks/apache2.git

vim /chef-repo/cookbooks/apache2.json
{
  "run_list": [
    "recipe[apache2]",
    "recipe[apache2::mod_ssl]",
    "recipe[apache2::mod_proxy_ajp]"
  ],
  "apache": {
    "default_site_enabled": true
  }
}
chef-solo -j /chef-repo/cookbooks/apache2.json

□実行結果
  • Apache/2.2.15
  • 80番ポートにブラウザでアクセスするとapacheのデフォルト画面が見れる

SSLの設定に関して
443番はプロセスがあがってますが、画面は見れない
とりあえず画面をSSLで見れるように設定するには以下を実施する
cd /etc/httpd/sites-available
cp default default-ssl
cd /etc/httpd/sites-enabled/
ln -s /etc/httpd/sites-available/default-ssl 000-default-ssl
emacs 000-default-ssl
以下の部分を修正
ポート番号を修正
80⇒443

SSLの設定を追記
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
cd /etc/httpd/ssl/
openssl genrsa -aes128 1024 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
service httpd restart

■Capistrano
□実行
wget http://community.opscode.com/cookbooks/capistrano/versions/0_7_0/downloads
tar xvzf capistrano.tar.gz
※githubで公開はされてないようです

vim /chef-repo/cookbooks/capistrano.json
{
  "run_list": [
    "recipe[capistrano]"
  ]
}
chef-solo -j /chef-repo/cookbooks/capistrano.json

□実行結果
  • Capistrano v2.15.4
  • インストール自体はgemから実施している様子
  • 依存しているパッケージはないけど、ruby, gemのインストールは必須だと思われる

■Git
□実行
以下依存関係のあるcookbooksです ["build-essential", "dmg", "yum", "runit", "chef_handler", "windows", :git] git://github.com/opscode-cookbooks/... から全てgit cloneしてください

vim /chef-repo/cookbooks/git.json
{
  "run_list": [
    "recipe[git]"
  ]
}
chef-solo -j /chef-repo/cookbooks/git.json

□実行結果
  • git version 1.7.1

■Erlang
□実行
git clone git://github.com/opscode-cookbooks/erlang.git
git clone git://github.com/opscode-cookbooks/apt.git
git clone git://github.com/opscode-cookbooks/build-essential.git
git clone git://github.com/opscode-cookbooks/yum.git

vim /chef-repo/cookbooks/erlang.json
{
  "run_list": [
    "recipe[erlang]"
  ]
}
chef-solo -j /chef-repo/cookbooks/git.json

□実行結果
  • Erlang R14B04 (erts-5.8.5)

■Python
□実行
git clone git://github.com/opscode-cookbooks/python.git
git clone git://github.com/opscode-cookbooks/yum.git
git clone git://github.com/opscode-cookbooks/build-essential.git

vim /chef-repo/cookbooks/python.json
{
  "run_list": [
    "recipe[python]"
  ]
}
chef-solo -j /chef-repo/cookbooks/python.json

□実行結果
  • python 2.6.8