ラベル chef の投稿を表示しています。 すべての投稿を表示
ラベル chef の投稿を表示しています。 すべての投稿を表示

2015年10月6日火曜日

chef-td-agent の cookbooks を chef-client でインストールしてみた

概要

公式では Berkshelf を使用するのが推奨されていますがあえて使わないでインストールしてみました
chef-client を使って実行しています

環境

  • CentOS 6.6 64bit
  • Chef 12.0.3-1 (chef-client)
  • td-agent 0.12.12
  • chef-td-agent (revision : 143057e)

必要なレシピを取得

実行用 json ファイルを作成

  • cd work/td-agent
  • touch td-agent.json
  • vim td-agent.json
{
  "run_list": [
    "td-agent"
  ]
}

実行

  • cd work/td-agent
  • chef-client -z -j td-agent.json -o td-agent

確認

  • which td-agent

    /usr/sbin/td-agent

  • ls -l /etc/td-agent/td-agent.conf

  • td-agent-gem list | grep fluent

2014年8月16日土曜日

Chefを使ってCentOSにLVMを自動構築してみた

chefでLVM環境を自動構築するレシピを書いてみました
最近のchefの流行りはresourceを提供しているライブラリをinclude_recipeして自分でレシピを実行するのが流行りなんですかね

https://github.com/kakakikikeke/cookbooks-create-lvm

2014年4月16日水曜日

chefのnodeの参照の仕方についてメモ

■環境
Chef: 11.12.0
CentOS release 5.10 (Final)

■使い方
attributeで以下にように書くと
default['name'] = "kakakikikeke"
default['age'] = 28
recipesで以下のように参照できる
ruby_block "test_block2" do

  block do
    p node['name']
    p node['age']
  end

end

こんな感じで構造的に書くこともできる
default['info']['name'] = "kakakikikeke2"
default['info']['age'] = 280
参照するときはこんな感じ
ruby_block "test_block2" do

  block do
    p node['info']['name']
    p node['info']['age']
  end

end

chef-solo -j test.json みたいな感じでjsonを指定して実行している場合はjson側でattributeを上書きすることもできる
{
  "run_list":[
    "recipe[test]"
  ],
  "info":{
    "name":"hogehoge"
  }
}
上記の場合はrecipes側の「p node['info']['name']」を上書きする


あとはdefault.rb以外でnodeを定義した場合にはattributes/custom.rbを用意して
default['info']['address'] = "tokyo"
更にcustom.rbを使用する専用のレシピrecipes/custom.rbを用意して
ruby_block "test_block2" do

  block do
    p node['info']['address']
  end

end
そして、実行するjson側でcustom.rbのレシピを実行する必要がある
{
  "run_list":[
    "recipe[test::custom]"
  ],
  "info":{
    "name":"hogehoge"
  }
}


いつも定義と参照の仕方を忘れてしまうのでメモしておく

2013年6月20日木曜日

chefでTomcatをインストールした場合のJVMパラメータ設定方法

以下の方式でchefからTomcatをインストールしているものとします
http://kakakikikeke.blogspot.com/2013/05/opscodecookbooks.html


vi /etc/default/tomcat7


実は上記のファイルに追記します
フォーマットはすでにサンプルが記載されているので見ればわかると思うのですが
http://stackoverflow.com/questions/14926260/multiline-java-opts-in-setenv-sh
な感じで改行を使って記述することもできます

/usr/local/tomcat/default/bin/setenv.sh
を作成しても上記起動スクリプトがcatalina.shを使用せずに直接Javaを実行しているため
JVMが反映されないので注意してください

2013年5月20日月曜日

【chef】No version specified, and no candidate version available for fping

以下のような感じでrecipe[yum::epel]を一番先に書く必要があります

{
  "run_list": [
    "recipe[yum::epel]",
    "recipe[hogehoge]"
  ]
}

先にepelでyum repoを登録しておかないとpackage resourceを実行したときにyum installできずにエラーになります
この辺の依存性解決はやってくれないんですね

2013年5月18日土曜日

【chef zabbix】Option source must be a kind of [String]! You passed {"default"=>"zabbix_agentd.init-rh.erb"}.

emacs /chef-repo/cookbooks3/zabbix/recipes/agent.rb

以下のように変更する
source value_for_platform_family([ "rhel" ] => {"default" => "zabbix_agentd.init-rh.erb"}, "default" => "zabbix_agentd.init.erb")
↓
source value_for_platform_family("rhel" => "zabbix_agentd.init-rh.erb")

zabbix_agentd.init-rh.erbを指定してもいいですが、そっちの起動スクリプトにはstart_stop_daemonが必要なので動かない場合があります

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

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

2013年3月4日月曜日

超簡単chefのインストール方法【Omnibus(オムニバス)】

chefに必要なツールをgemを使わずにインストールできる方法がOpscodeから提供されています
http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac

20140206 P.S
ドキュメントサイトが変更になっていました
ワンライナーインストールに関しては以下のサイトに記載されております
http://www.getchef.com/chef/install/

ネットワークが使える環境で以下のコマンドを実行するだけです

sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash

chef-solo -v
などを実行するとインストールされていることが確認できると思います
実はrubyをインストールしていないので、わざわざrubyやgemをインストールしなくてもchefが使えます
お試しあれ

20130411 P.S
プロキシ経由でオムニバスを実行する場合には
  • curl(引数に--proxy-ntln --proxy)
  • wget(/etc/wgetrc にプロキシ設定を記載)
にプロキシを設定する必要があります

2013年1月9日水曜日

【Chef】had an error: ArgumentError: wrong number of arguments (0 for 1)

かなり初歩的だとは思うのですが、若干ハマったのでメモ

directory "#{node.dir.delete}" do
  recursive true
  action :delete
end

こんな感じでレシピを書いていたらタイトルのようなエラーが・・・
directoryに対する引数がおかしいよというエラーのようです
なぜかこの形式のだとattributes上手く参照できないようです
attributesの設定は以下

default["dir"]["delete"] = "/tmp/tmpdir3"

で調べたらレシピで参照する方法がいけないみたい
正解は以下

directory node["dir"]["delete"] do
  recursive true
  action :delete
end

attributesを参照する場合はnode["key1"]["key2"]という形式で必ず参照しましょう
他にも参照する方法はありますが、上記がChef的には推奨らしいです

2012年12月18日火曜日

Windowsでchef-soloを使用してソフトのインストールを設定をしてみる

■事前準備
http://kakakikikeke.blogspot.com/2012/12/windowschef-solo.html

上記の記事を参考にwindowsにchef-soloをインストールしてください

■cookbooksを配置するフォルダを作成
C:\opscode\chef-repo

のパスになるようにフォルダを作成してください
chef-repoフォルダを作成するだけで大丈夫だと思います。(それ以外はデフォルトで存在していると思います)

■cookbooksのダウンロードと配置
Windows用のgitbashを起動してopscodeの公式cookbooksをダウンロードします
https://github.com/opscode/cookbooks

gitbashがインストールされていない場合には以下の記事を参考にしてgitbashをインストールしてください
http://kakakikikeke.blogspot.com/2012/05/windows7git.html

gitbashを起動したら
  1. C:\opscode\chef-repoに移動し
  2. git clone git://github.com/opscode/cookbooks.gitを実行します

するとopscodeの全てのcookbooksがダウンロードされ配置されます(7-zipのcookbooksがあることも確認できると思います)

■実行前の設定
C:\opscode\chef-repo
配下に7-zip.jsonファイルを作成し、以下のように記述しましょう
{
     "run_list": ["recipe[7-zip]"]
}

また同じ階層にsolo.rbを作成しましょう
以下のように記述してください
cookbook_path ["C:\\opscode\\chef-repo\\cookbooks"]

■chef-solo実行
chef-solo -j 7-zip.json -c solo.rb

-j、-cのオプションで作成したファイルそれぞれのパスを指定しましょう
上記の場合はC:\opscode\chef-repoにすでに移動している場合です

■7zの動作確認
コマンドプロンプトを新たに起動して「7z」とコマンドを実行してみましょう
ヘルプコマンドが表示されるはずです
これが表示されればインストール完了です


また、chef-solo実行時にopenldapのcookbooksでエラーを吐く場合があります
以下を参考にして回避すれば大丈夫です
参考にしてみてください
http://kakakikikeke.blogspot.com/2012/12/cheffatal-nomethoderror-undefined.html

2012年12月16日日曜日

【chef】FATAL: NoMethodError: undefined method `length' fornil:NilClass

[2012-12-16T15:58:11+09:00] INFO: *** Chef 10.16.2 ***
[2012-12-16T15:58:20+09:00] INFO: Run List is []
[2012-12-16T15:58:20+09:00] INFO: Run List expands to []
[2012-12-16T15:58:20+09:00] INFO: Starting Chef Run for yoshi2
[2012-12-16T15:58:20+09:00] INFO: Running start handlers
[2012-12-16T15:58:20+09:00] INFO: Start handlers complete.
[2012-12-16T15:58:21+09:00] WARN: Missing gem 'right_aws'
[2012-12-16T15:58:21+09:00] INFO: Missing gem 'mysql'

================================================================================

Recipe Compile Error in C:/opscode/chef-repo/cookbooks/openldap/attributes/default.rb
================================================================================


NoMethodError
-------------
undefined method `length' for nil:NilClass

Cookbook Trace:
---------------
  C:/opscode/chef-repo/cookbooks/openldap/attributes/default.rb:19:in `from_file'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/mixin/from_file.rb:30:in `instance_eval'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/mixin/from_file.rb:30:in `from_file'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:192:in `block in load_attributes'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:230:in `call'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:230:in `block (2 levels) in foreach_cookbook_load_segment'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:229:in `each'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:229:in `block in foreach_cookbook_load_segment'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_cotext.rb:227:in `each'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:227:in `foreach_cookbook_load_segment'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:189:in `load_attributes'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/run_context.rb:65:in `load'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/client.rb:198:in `setup_run_context'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/client.rb:418:in `do_run'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/client.rb:176:in `run'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/application.rb:140:in `run_chef_client'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/application/solo.rb:224:in `block in run_application'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/application/solo.rb:216:in `loop'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/application/solo.rb:216:in `run_application'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/lib/chef/application.rb:72:in `run'
  c:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-10.16.2/bin/chef-solo:25:in `<top (required)>'
  c:/opscode/chef/bin/chef-solo:19:in `load'  c:/opscode/chef/bin/chef-solo:19:in `<main>'
Relevant File Content:
----------------------
C:/opscode/chef-repo/cookbooks/openldap/attributes/default.rb:

 12:  # Unless required by applicable law or agreed to in writing, software
 13:  # distributed under the License is distributed on an "AS IS" BASIS,
 14:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15:  # See the License for the specific language governing permissions and
 16:  # limitations under the License.
 17:  #
 18:
 19>> if domain.length > 0
 20:    default[:openldap][:basedn] = "dc=#{domain.split('.').join(",dc=")}"
 21:    default[:openldap][:server] = "ldap.#{domain}"
 22:  end
 23:
 24:  openldap[:rootpw] = nil
 25:
 26:  # File and directory locations for openldap.
 27:  case platform
 28:  when "redhat","centos"

[2012-12-16T15:58:21+09:00] ERROR: Running exception handlers
[2012-12-16T15:58:21+09:00] ERROR: Exception handlers complete
[2012-12-16T15:58:21+09:00] FATAL: Stacktrace dumped to C:/chef/cache/chef-stacktrace.out
[2012-12-16T15:58:21+09:00] FATAL: NoMethodError: undefined method `length' fornil:NilClass



とまぁこんな感じでchef-solo実行時にエラーになってしまいました。
環境はWindowsです。
いろいろ調べたんですが、どうやってもダメでした。
で結局たどり着いた解は

rm -rf chef-repo/cookbooks/openldap/

ってな感じでcookbooks自体を削除してしまうことでしたw
バグなのかなーと思ったけどとりあえずこれで回避できました

Windowsにchef-soloをインストール

■chef-soloインストール
http://wiki.opscode.com/display/chef/Installing+Chef+Client+on+Windows

上記のサイトからwindowsに必要なchef一式のインストーラをダウンロードしインストールします
以下のリンクの場所になります



インストールは全てデフォルトのままで問題ないです

■インストールの確認
コマンドプロンプトを開いてchef-soloを実行します
以下のように表示されればインストールは完了です



FATALレベルのエラーが出ていますが、これはcookbooksがないので出ているだけです

次回はopscodeで配布しているcookbooksを利用して実際にchef-soloを実行してみたいと思います

2012年11月10日土曜日

chef-serverに自作cookbooksを登録してみた

■環境
chefサーバ、クライアントともに同一サーバ
chefサーバのバージョン:10.16.2

■前提
chefサーバおよびchefクライアント、何かしらのサンプルcookbooksの作成、インストールが必要です
下記のURLを参考にしてください
chefのインストール:http://kakakikikeke.blogspot.com/2012/07/rubychef.html
chef-serverのイントール:http://kakakikikeke.blogspot.com/2012/07/rubycentos56chef-server.html
サンプルcookbooks作成:http://kakakikikeke.blogspot.com/2012/10/centoschefcookbookrecipe.html

■クライアント側でのchef-clientの設定
vi /etc/chef/client.rb
chef_server_url 'http://yoshi3:4000/'
node_name 'yoshi3'

chef_server_urlはサーバのホスト名またはIPアドレスを指定してください
node_nameはクライアント側のホスト名を指定しださい

chefサーバ上に/etc/chef/validation.pemというファイルがあるのでそれをクライアント側の/etc/chef配下に配置します
※今回の場合はサーバとクライアントが同一のサーバですので、すでに存在していると思います

chef-client

エラーなく実行されたあとにchef-serverのwebuiから「Clients」→「Create」を見るとクライアントが登録されています



■クライアント側でのknifeの設定
knife configure --initial
入力するとknifeの初期設定を入力する画面となります
基本的には全てデフォルトで問題ないですので、Enterを入力していきます
ln -s /etc/chef/validation.pem /root/.chef/root.pem
knifeでchef-serverにアクセスするためのユーザの作成とそのユーザ用の鍵を作成します
knifeでアクセスする鍵はchef-clientでアクセスする鍵とは別の鍵となるためknife側でも初期設定が必要になります
※chef-server的には単純にアクセスするユーザとして管理されるので、webuiで見るとClients配下に登録されています

knife node list
登録したクライアントが表示されればchef-serverへknife経由でデータが取得できていることになります

■クライアント側でのknifeを使ってのcookbooksの登録
前回作成したcookbooksがあるのでそれを使用してcookbooksを登録してみたいと思います。
knife cookbook upload test -o /chef-repo/cookbooks/
webuiから「Cookbooks」を参照すれば登録できていることがわかります



■クライアント側でのknifeを使ってのcookbooksとクライアントの紐付け
knife node run_list add yoshi3 'recipe[hosts]'

■クライアント側でのchef-clientの実行
chef-client
先ほど紐付けしたrecipesが適用されます

■まとめ
chef-clientは対象のクライアントへchef-server上にあるcookbooksやrecipesを適用するためのコマンド
chef-clientはクライアントのサーバへ鍵を登録する必要がある
knifeはchef-serverへcookbooksやrecipesを登録、削除するためのコマンドでchef-clientを実施するためのデータを操作するためのコマンド
knifeは実行するユーザごとに鍵を登録する必要がある

2012年11月9日金曜日

【chef サンプルcookbooks】hostsを自動で管理して配布する

chefの構築及びcookbooksの環境作成は以下の記事を参照してください
http://kakakikikeke.blogspot.com/2012/10/centoschefcookbookrecipe.html


■手順(コマンド)
rake new_cookbook COOKBOOK=hosts

cd cookbooks/hosts
touch files/default/hosts

vi recipes/default.rb
cookbook_file "/etc/hosts" do
source "hosts"
mode "644"
end

touch /etc/chef/hosts.json
vi /etc/chef/hosts.json
{
  "run_list": [
    "recipe[hosts]"
  ]
}

chef-solo -j /etc/chef/hosts.json
作ったfiles/default/hostsの内容になっていること確認する


今回はhostsと断定して作成しましたが、hostsに限らずfstabやresolv.conf等でも応用できるとおもいます。
また、templateなども駆使すればnodesやrolesごとに必要な値を埋め込むことも可能かと思います。

いろいろと試してみてください

2012年11月3日土曜日

【chef】recipe内で指定できるResourceコマンドの一覧

http://wiki.opscode.com/display/chef/Resources

上記ページの右側のインデックス一覧が使えるresourceコマンドになります。

正直これだけあればrecipeだけでも相当なことができそうですw
ここにないやつは自前でresources配下に作るしかなさそうです。



2012年11月1日木曜日

【chef】cookbookのtemplatesを使ってみた

■概要
前回までにcookbookのrecipe機能とattributesを使ってchefを実行しましたが、
今回は更にtemplatesを使ってよりchefの理解を深めていこうと思います。
参考:
http://kakakikikeke.blogspot.com/2012/10/centoschefcookbookrecipe.html
http://kakakikikeke.blogspot.com/2012/10/chefcookbookattributes.html

簡単に説明をしてしまうと
  • templatesは設定ファイルをテンプレートとして使いまわせる機能
です。
前回までに書いたrecipeを更に汎用化するために用いる機能です。

■templates設定&実行
cd /chef-repo/cookbooks/test/templates/
vi default/test.conf.erb
hogehoge
     ※とりあえずは適当な内容を記載しておきます。
     ※本来であれば必要に応じた設定ファイルの内容を記載します。

cd /chef-repo/cookbooks/test/recipes
vi default.rb
template "#{node.file.conf}" do
  owner "root"
  group "root"
  mode "0644"
end

cd /chef-repo/cookbooks/test/attributes
vi default.rb
default["file"]["conf"] = "/tmp/test.conf"

chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json
/tmp/test.confが存在しファイルの中身がhogehogeになっていると思います。

こんな感じで設定ファイル等をテンプレート化することで同じ内容の設定ファイルを配ることができます。
今回は更に応用してみます。

■応用
cd /chef-repo/cookbooks/test/templates/
vi /default/test.conf.erb
hogehoge
<% @user.each do |user| -%>
<%= user %>
<% end -%>

cd /chef-repo/cookbooks/test/recipes
vi default.rb
template "#{node.file.conf}" do
  owner "root"
  group "root"
  mode "0644"
  variables({
    :user => node[:file][:conf][:user]
  })
end

cd /chef-repo/cookbooks/test/attributes
vi default.rb
default["file"]["conf"] = "/tmp/test.conf"
default["file"]["conf"][user] = ["kakakikikeke", "yoshi"]

chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json
/tmp/test.confが存在しファイルの中身がhogehogeとkakakikikekeとyoshiになっていると思います。


このようにテンプレート化内の値は別途attributesに記載することもできるので、環境に応じて必要な部分を変更することも可能です。

2012年10月31日水曜日

【chef】cookbookのattributesを使ってみた

■概要
前回はcookbookのrecipe機能だけを使ってchefを実行しましたが、
今回は更にattributesを使ってよりchefの理解を深めていこうと思います。
参考:http://kakakikikeke.blogspot.com/2012/10/centoschefcookbookrecipe.html

簡単に説明をしてしまうと
  • attributesは変数として情報を格納しておくことができる機能
で、前回までに書いたrecipeを更に汎用化するために用いる機能です。

■attributes設定&実行
cd /chef-repo/cookbooks/test/attributes
vi default.rb
default["dir"]["create"] = "/tmp/tmpdir2"
default["dir"]["link"] = "/tmp/link2"

cd /chef-repo/cookbooks/test/recipes
vi default.rb
directory "#{node.dir.create}" do
  mode "0755"
  action :create
end

link "#{node.dir.link}" do
  to "#{node.dir.create}"
end

chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json
/tmp/配下に/tmpdir2とそれに対するシンボリックリンクが貼られていること思います。



こんな感じでデータを外出しして管理できる機能がattributesの機能になります。

2012年10月30日火曜日

【CentOS】chefでサンプルのcookbookとrecipeを作って実行してみた

■概要
chefのサンプルcookbookを作ってサーバをchefからいろいろと弄ってみます
recipeを書いて実際に実行するところまでやってみます
今回はchef-soloという単体で実行できるものを利用してみます
cookbookやrecipeの情報を一括で管理できるchef-serverは今回使用しません

■cookbook&recipe作成
cd /
git clone git://github.com/opscode/chef-repo.git
cd chef-repo
rake new_cookbook COOKBOOK=test
rakeコマンドからcookbooksのひな形を作成します
git cloneしたchef-repoの中にRakefileがあり、それを元にrakeコマンドを実行しています
実行するにはgemによるchefのインストールも必要です(オムニバスインストールしたchefだと上記が実行できません)
cd cookbooks/test/
cd recipes
vi default.rb
directory "/tmp/tmpdir" do
  mode "0755"
  action :create
end

link "/tmp/link" do
  to "/tmp/tmpdir"
end

■solo.rbの作成
cd /etc/chef
vi chef.json
{
  "run_list": [
    "recipe[test]"
  ]
}

vi solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/chef-repo/cookbooks"]
role_path "/chef-repos/roles"
log_level :debug
mkdir /tmp/chef-solo

■実行
chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json
実行後に/tmp/tmpdirが存在し、/tmp/tmpdirにlinkが貼られていればOKです

■実行
solo.rbのcookbooks_pathは配列型なので複数のパスを指定することも可能です

■参考サイト

2012年7月31日火曜日

【ruby】CentOS5.6にchef-serverをインストールしてみた

■事前準備
ruby, gem, chef-sole、javaはインストール済みのこと
http://kakakikikeke.blogspot.com/2012/07/rubychef.html
http://kakakikikeke.blogspot.com/2012/04/centos56ruby.html
http://kakakikikeke.blogspot.com/2012/06/centosjenkinsjavatomcatantgit.html

■必要なパッケージをインストール
yum -y install couchdb erlang rabbitmq-server libxml2-devel zlib-devel

■couchdb設定
emacs /etc/couchdb/default.ini
bind_address = 0.0.0.0を設定する
couchdb
(service couchdb startでスタートするとプロセスがうまく立ち上がりませんでした・・・)
FWのポート5984あいてることを確認し以下にアクセス、couchDBの管理画面が表示されてばOK
http://yoshi3:5984/
http://yoshi3:5984/_utils/

■rabbitMQ設定
service service rabbitmq-server start
rabbitmqctl add_vhost /chef
rabbitmqctl add_user chef testing
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"

■chef-serverのインストールと設定
rpm -Uvh http://rpm.aegisco.com/aegisco/rhel/aegisco-rhel.rpm
gem install chef-server chef-server-api chef-solr chef-server-webui merb
sudo gem install sqlite3-ruby -v 1.2.5
gem list | grep chef
chef (10.12.0)
chef-expander (10.12.0)
chef-server (10.12.0)
chef-server-api (10.12.0)
chef-server-webui (10.12.0)
chef-solr (10.12.0)

cd /etc/
mkdir chef
cd chef
emacs server.rb
--------------------------------以下を記載する--------------------------------
log_level :info
log_location STDOUT
ssl_verify_mode :verify_none
chef_server_url "http://yoshi3:4000/"

signing_ca_path "/var/chef/ca"
couchdb_database 'chef'

cookbook_path [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ]

file_cache_path "/var/chef/cache"
node_path "/var/chef/nodes"
openid_store_path "/var/chef/openid/store"
openid_cstore_path "/var/chef/openid/cstore"
search_index_path "/var/chef/search_index"
role_path "/var/chef/roles"

validation_client_name "chef-validator"
validation_key "/etc/chef/validation.pem"
client_key "/etc/chef/client.pem"
web_ui_client_name "chef-webui"
web_ui_key "/etc/chef/webui.pem"

web_ui_admin_user_name "admin"
web_ui_admin_default_password "adminpass"

supportdir = "/srv/chef/support"
solr_jetty_path File.join(supportdir, "solr", "jetty")
solr_data_path File.join(supportdir, "solr", "data")
solr_home_path File.join(supportdir, "solr", "home")
solr_heap_size "256M"

umask 0022

Mixlib::Log::Formatter.show_time = false
--------------------------------以上を記載する--------------------------------
ホスト名とパスワードの部分は適宜変更してください
chef-solr-installer
chef-solr-installerはchef-solrの初回起動時に必要になるコマンドなので、2回目以降のchef-server起動では必要ないです
chef-expander &
chef-solr &
chef-server -N -e production &
chef-server-webui -p 4040 -e production &
以下のようになっていることを確認する
ブラウザで確認するためFWの4000と4040を開ける
ps aux | grep chef
root 18486 0.0 1.7 160864 9164 pts/2 Sl 16:21 0:00 /usr/local/bin/ruby /usr/local/bin/chef-expander
root 18491 0.5 6.0 174864 30600 pts/2 Sl 16:21 0:04 chef-expander worker #1 (vnodes 0-1023)
root 18505 0.2 13.4 534476 68536 pts/2 Sl 16:22 0:02 java -Xmx256M -Xms256M -Dsolr.data.dir=/var/chef/solr/data -Dsolr.solr.home=/var/chef/solr -jar /var/chef/solr-jetty/start.jar
root 18725 2.5 10.4 239128 53028 pts/2 Sl 16:34 0:02 merb : chef-server (api) : worker (port 4000)
root 18767 8.9 10.1 213488 51620 pts/2 Sl 16:35 0:02 merb : chef-server-webui : worker (port 4040)

http://yoshi3:4040/
にアクセスし、chefのUIが表示されることを確認する
パスワードは設定ファイルに記載してあるものとなる

またchefが原因不明で落ちてしまいアクセスしてもエラーのトレースしか表示されなくなってしまった際には
chef-server -N -e production &
chef-server-webui -p 4040 -e production &
上記の該当プロセスをkillしたあとに再度実行してください

たくさんのプロセス(couchdbやrabbitMQ、chef関係)が動作している必要があるので動作しない場合は各プロセスの起動状況を見るのもいいでしょう

ご参考までに