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

0 件のコメント:

コメントを投稿