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関係)が動作している必要があるので動作しない場合は各プロセスの起動状況を見るのもいいでしょう

ご参考までに

2012年7月30日月曜日

【ruby】RedmineのAPIを使ってみた

前回Redmineのインストールを行いましたらRedmineにはAPIも備わっているそうです

http://www.redmine.org/projects/redmine/wiki/Rest_api

というわけで今回はRedmineのAPIを使ってみたいと思います

■概要
チケットの一覧を取得して、チケットのID一覧をテキストファイルに出力します

■設定
RedmineでAPIを使うには設定が必要です
オグインした状態で管理→設定→認証と進み「RESTによるWebサービスを有効にする」にチェックをつけます
その後右上の個人設定のリンクに進むと右のメニューバーらしきところにAPIアクセスキーが出現しているので、表示を押下しアクセスキーを取得しておきましょう

またポートは3000番でアクセスするので、APIを実行するサーバからRedmineサーバへは3000番を許可しておきましょう
両方共Redmine上であるならば特に必要なないと思われます

■ソースコード
require 'net/http'
require 'rexml/document'

request = "http://hostname:3000/issues.xml?key=accessKey"; # =>先ほど取得したキーとRedmineサーバのホスト名またはIPアドレスを入力してください

def getXML(request)
  url = URI.parse(request);
  req = Net::HTTP::Get.new(url.path);
  res = Net::HTTP.start(url.host, url.port) {|http|
    http.request(req);
  }
  return res.body;
end

def parseXML(xml)
  doc = REXML::Document.new xml;
  File.open('result.txt','w'){|f|
    doc.elements.each("*/issue/id") {|element|
      f.puts(element.get_text);
    }
  }
end

xml = getXML(request);
parseXML(xml);

適当にファイル名を設定しrubyで実行するとresult.txtというファイルの中に番号のリストが記載されているはずです
doc.elements.each("*/issue/id")で実際のデータを取得しているので、この値を変更すれば取得できるXMLの値も簡単に変更できます

お試しあれ

2012年7月28日土曜日

【ruby】chefのインストール方法

■事前
rubyはインストール済み
gemはインストール済み
※インストール方法
http://kakakikikeke.blogspot.com/2012/04/centos56ruby.html

■バージョン
ruby 1.9.3p125
gem 1.8.24

■インストールコマンド
gem update --system
結構長い
gem uddate
かなり長い
gem install ohai --no-rdoc --no-ri --verbose
Successfully installed systemu-2.5.1
Successfully installed mixlib-cli-1.2.2
Successfully installed mixlib-config-1.1.2
Successfully installed mixlib-log-1.4.1
Successfully installed ipaddress-0.8.0
Successfully installed ohai-6.14.0
gem install chef --no-rdoc --no-ri --verbose
Successfully installed mixlib-authentication-1.1.4
Successfully installed mixlib-shellout-1.0.0
Successfully installed bunny-0.8.0
Successfully installed net-ssh-2.2.2
Successfully installed net-ssh-multi-1.1
Successfully installed moneta-0.6.0
Successfully installed chef-10.12.0
useradd -d /home/chef -s /bin/bash -m chef

chefユーザは作成しておいたほうがcookbooksとかを使う場合にはよいとおもいます
参考までに

2012年7月27日金曜日

【Java】Wicket1.5.7のインストールと初回設定方法

これが完成形です
今回はeclipse(Indigo)で動作できるようにインストール、設定を行なっていきます



では、簡単な手順です

1. プロジェクトの作成
「Dynamic Web Project」でプロジェクトを作成します
※日本語版だと「動的Webプロジェクト」です

2. 必要なライブラリをダウンロードしてきます
■Wicket(1.5.7)
http://wicket.apache.org/
■slf4j(1.6.6)
http://www.slf4j.org/download.html
■velocity(1.7)
http://velocity.apache.org/download.cgi
■log4j(1.2.17)
http://logging.apache.org/log4j/1.2/
■commons collections(3.2.1)
http://commons.apache.org/collections/download_collections.cgi
■commons lang(2.6)
http://commons.apache.org/lang/download_lang.cgi
⇒残念ながら2.6じゃないとWicket1.5.7だと動かないようです

ダウンロードしたらjarファイルをプロジェクトのWEB-INF/lib配下に配置します

3. ソースコードとXMLファイルを作成
以下3つのファイルをsrc配下に作成します。パッケージはご自由に
web.xmlはWEB-INF直下に配置します
  • Test.java
  • TestPage.java
  • TestPage.html
  • web.xml

Test.java
package wtest;

import org.apache.wicket.protocol.http.WebApplication;

public class Test extends WebApplication {
 
 public Class getHomePage() {
  return TestPage.class;
 }
 
}

TestPage.java
package wtest;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class TestPage extends WebPage {

 private static final long serialVersionUID = 3882115259282452848L;

 public TestPage() {
  add(new Label("message", "Hello World!"));
 }
}

TestPage.html
<html>
<body>
 <span wicket:id="message">Message goes here</span>
</body>
</html>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
   PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
   "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
 <display-name>wtest</display-name>
 <filter>
  <filter-name>Test</filter-name>
  <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
  <init-param>
   <param-name>applicationClassName</param-name>
   <param-value>wtest.Test</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Test</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
</web-app>

4. サーバの設定
プロジェクトを右クリックしてRun AsからRun on Serverで実行しましょう
ServerはTomcat7.0で実行します
インストールしていない場合はインストール後にサーバ追加と設定をしましょう

5. 実行
サーバ設定が完了しているなら起動後にlocalhost:8080/wtestにブラウザでアクセスしましょう
Hello Worldが表示されるはずです

これでWicketアプリを開発する環境が整います
参考まで

2012年7月26日木曜日

【Ruby】ruby1.9.3でReadmineをインストールしてみた

■事前準備(必要なパッケージ追加)
yum update -y
rpm -Uvh http://fr2.rpmfind.net/linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
yum -y install gcc make zlib-devel libyaml-devel httpd-devel openssl-devel curl-devel gcc-c++ sqlite* mysql* postgresql* ImageMagick*

■rubyインストール
mkdir ruby
cd ruby/
wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.bz2
tar xvf ruby-1.9.3-p194.tar.bz2
cd ruby-1.9.3-p194
./configure
make
make install
ruby -v
cd /root/ruby/ruby-1.9.3-p194/ext/zlib
ruby extconf.rb
make
make install
cd /root/ruby/ruby-1.9.3-p194/ext/openssl
ruby extconf.rb
make
make install

■gemインストール
cd ..
wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.24.tgz
tar xvf rubygems-1.8.24.tgz
cd rubygems-1.8.24
ruby setup.rb
gem install psych
gem -v
gem install bundle
gem install rails
gem install mocha
gem install rmagick
bundle install

■redmineインストール
cd ..
wget http://rubyforge.org/frs/download.php/76193/redmine-1.4.3.tar.gz
tar xvf redmine-1.4.3.tar.gz
mv redmine-1.4.3 redmine
mv redmine /usr/local/
cd /usr/local/redmine
cp config/database.yml.example config/database.yml
vi config/database.yml
---
production:
adapter: sqlite3
dbfile: db/redmine.db
timeout: 5000
---
rake generate_session_store
rake db:migrate RAILS_ENV=production
rake redmine:load_default_data RAILS_ENV=production
script/server -e production

2012年7月25日水曜日

【MongoDB】fluentで飛ばしたログをMongoDBに格納する方法

MongoDBとfluentがインストールされていることを前提にしています
上記を未インストールの場合は以下を参考にしインストールしてみてください
---
MongoDB
http://kakakikikeke.blogspot.com/2012/07/mongodbperl.html
fluent
http://kakakikikeke.blogspot.com/2012/07/fluentd.html
---

でここまでインストールが完了しているとして以下インストールと設定方法です

fluent-gem install fluent-plugin-mongo
fluentのmongoプラグインをインストールします
emacs /usr/local/fluent/fluent.conf
以下のように設定する

<source>
  type tail
  format apache
  path /var/log/httpd/access_log
  tag mongo.apache
</source>

<match mongo.**>
  type copy
  <store>
    type file
    path /var/log/fluent/access_log
  </store>
  <store>
    type mongo
    database apache
    collection access
    host localhost
    port 27017
    flush_interval 10s
  </store>
</match>

fluentd --config /usr/local/fluent/fluent.conf -vv

これでmongodb側とログファイルにログが記載されるようになります
MongoDBは当たり前ですが、起動している状態で行なってください
storeタグのどちらかを削除すればMongoDBのみやファイル吐き出しのみを操作できます

お試しあれ

2012年7月22日日曜日

【Perl】cpanでインストールしたモジュールを確認する方法

どうせなんで確認できるコマンドを作成しました
perlがインストールされていることが条件です

emacs /usr/local/cpanfind/cpanfind.sh
以下を記載
#!/bin/sh

perl -v 2>&1 > /dev/null

if [ $# -ne 1 -o $? -ne 0 ]; then
    exit 1;
fi

find `perl -e 'print "@INC"'` -name $1'.pm' -print
chmod 744 /usr/local/cpanfind/cpanfind.sh
cd /usr/bin
ln -s /usr/local/cpanfind/cpanfind.sh cpanfind

で以下で検索できるようになります
cpanfind MongoDB

お試しあれ

2012年7月21日土曜日

ThinkPad Edge14でビープ音をオフにする方法

BIOSで制御するそうな
Edge14でBIOS画面に入るためには

起動時に「F1」押下


でBIOSモードなれます

あとは

ConfigにKeyBorad Beepの欄があるのでそれをDisableにします

以下を参考にしてみましたー

http://memo-log.9999ch.com/2012/07/12/1653

2012年7月20日金曜日

fluentdのインストール方法と初回設定方法

■概要
rubyとgemのインストールを行っていることが前提となります
過去に以下の記事を作成しているので、未インストールの場合は参考にしてみてください
http://kakakikikeke.blogspot.com/2012/04/centos56ruby.html
また、今回はapacheのアクセスログをfluentで出力するようにするので、apacheもインストールしておいてください

■インストール&サンプル実行
では、fluentのインストールの説明を行います
(コマンドを並べているだけですがw)

yum -y install gcc
gem install fluentd
fluentd --setup /usr/local/fluent/
emacs /usr/local/fluent/fluent.conf
以下を記載します

<source>
  type tail
  format apache
  path /var/log/httpd/access_log
  tag apache.access
</source>

<match apache.access>
  type file
  path /var/log/fluent/access_log
</match>

fluentd --config /usr/local/fluent/fluent.conf -vv &
tailf /var/log/fluent/access_log.*
でapacheのアクセスログがfluentを経由してこちらに出力されているはずです

■備忘録(P.S 20130705)
fluentd --setup
するとデフォルトの /etc/fluent/fluent.conf に設定ファイルを置いてくれます
-c or --config でいちいちパスを指定しなくて済みます

ログの変換例
上記のapacheの設定だと以下のように変換してくれました、確かに読みやすい
hostname - kakakikikeke [05/Jul/2013:09:48:30 +0900] "GET /js/bootstrap.min.js HTTP/1.0" 404 294 "http://referer-server/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0"
↓
2013-07-05T09:48:30+09:00       apache.access   {"host":"hostname","user":"kakakikikeke","method":"GET","path":"/js/bootstrap.min.js","code":"404","size":"294","referer":"http://referer-server/","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0"}

各種設定ファイルのタグの説明
  • source・・・対象のログを指定
  • match・・・sourceのtagとマッチしたログを具体的にどうするか記述、typeでfailを指定するとローカルのファイルにforwardを指定するとserverタグをmatchタグ内で使用することでサーバに転送可能
  • server・・・転送先のサーバ情報を記載
  • store・・・これもmatchタグ内で使用するログの保存をローカル、転送と複数設けたい場合に使用
  • その他・・・http://docs.fluentd.org/articles/out_forward

formatの設定
今回は「apache」というすでにfluentdに実装されているformatを使用しました
これは転送するログのフォーマットがデフォルトのapacheのログフォーマットのままだったので使用出来ました

例えばx-forwarded-forなどをログの出力に追加したりするとapacheのformatは使えなくなります
その場合は自分でformatを作成する必要があります
以下が参考になるかと思いますが、基本は正規表現を使って解析し、独自のタグを付けることでformatを作成します
http://d.hatena.ne.jp/tagomoris/20120715/1342368392

また、formatを独自で作成した場合は「time format」も必ず定義しなければいけなくなるので注意してください
time format を定義しないと「argument out of range」というエラーが出てログが転送されません
サンプルとして独自で作成したformatとtime formatを記載しておきます
format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")? "(?<x-forwarded-for>[^ ]*)"$/
time_format %d/%b/%Y:%H:%M:%S %z
上記サンプルの「[^ ]*」は半角スペースでない文字列の続きを表す正規表現です
「[^\"]*」はダブルクオーテーション以外の連続した文字列を表しています
個人的には「/^(<?<log1>.*) (<?<log1>.*) (<?<log2>.*)$/」みたいな感じでとりあえずスペースで区切って何個か正規表現を作成し実際に転送してみた上でどんなJSONになるか確認しながらやっていくのが簡単にできる方法かなと思います

【Jenkins】Build Pipeline Pluginを使ってみた

基本的な設定方法とポイントを紹介したいと思います

インストールしたプラグイン名はタイトルにもありますが「Build Pipeline Plugin」です
普通にJenkinsのプラグイン管理から行えばインストールできます


まずは完成したものを紹介これを元に設定方法を紹介します


図の赤枠の部分2つ(自動ジョブ実行と手動ジョブ実行)の設定方法を中心に説明していきます

まず、あるジョブが実行された後に自動でジョブを実行させる方法ですが、各ジョブの設定から以下の箇所で設定します


このジョブが完了したあとにデプロイ用のジョブを実行させるわけです
ここでポイントになるので「デプロイ用のジョブ」をあえて作成すること
デプロイ用のジョブはあくまでもデプロイするだけのジョブでSCMなどからソースを取得してbuild.xmlを叩くなどは行いません
単純にデプロイメントのコマンドを実行するだけです
このジョブを作成することがポイント
あとは作成したデプロイ用のジョブを上記の設定でひもづけるだけです
これであるジョブが実行された後に自動で他のジョブを実行することができるようになります

そして、次
冒頭の図で紹介した手動で次のジョブを実行させる方法です
この設定を行うために今回インストールした「Build Pipeline Plugin」が必要になります



「Build Pipeline Plugin」をインストールすると各ジョブの設定に上記の設定が可能となります
(各ジョブの設定画面の一番下にあります)
ここで次に実行するジョブを選択するとジョブの紐付けは行われますが、自動で次のジョブが実行されるということはありません
「Build Pipeline Plugin」の管理画面から手動にてトリガーを実行しない限り次のジョブは実行されません

一応設定はこれで完了です

これを行うことで本番環境へのデプロイを行うときや重要なジョブを実行するときには手動で行い
それまでのテストなどは自動で行うなどかなり柔軟にCI,CDを行うことができるようになります

普通に便利ですよねw
お試しあれ

2012年7月19日木曜日

【GitHub】forkしたリポジトリに変更を加えてpushまでする方法

大まかな流れをメモレベルで

1. GitHub上で自分のアカウントでログインforkしたいリポジトリを表示しforkボタンでforkします
2. ローカルリポジトリにクローンします(git clone [uri])
3. ローカルリポジトリに対していろいろと編集
4. 追加がある場合はリポジトリにインデックス追加(git add .)
5. ローカルリポジトリにコミットする(git commit -m "comment")
5. GitHubにpushする(git push -u origin master)

基本的な流れは通常の使い方と一緒ですが、
pull requestのことを考えると全く同じものに対して編集する必要があるので
.gitignoreで予め制御するべきものは制御するようにしましょう
もし間違って.gitignoreを記載する前にpushしてしまった場合には
git rm --cached xxx
で一旦削除したあとに再度pushするとGitHub側を削除できるので削除したあとに.gitignoreを編集して再度pushしましょう

かなりメモレベルですが参考までに

2012年7月18日水曜日

【Zabbix】Wiindowsにzabbix-agentをインストールして監視に追加する方法

ZabbixサーバでWindowsを監視する方法を紹介します

1.まずはWindows用のzabbix-agentをダウンロード
http://www.zabbix.jp/binaries/zabbix/zabbix-1.8/windows/zabbix_agent-1.8.13-1.JP_installer.exe
以下がダウンロードされていることを確認


2.インストール

インストール先はデフォルトのままでいいでしょう


次へを押下


同意しましょう


インストールするコンポーネントはすべてインストールしましょう


Zabbix Serverを指定します
ホスト名で指定していますが、IPアドレスでも問題ありません
Windowsのホスト名はデフォルトで入力されていると思います。ない場合はコンピュータの右クリックから確認して入力します


サービスの一覧でZabbix Agentが起動していることを確認

cd C:\Program Files\ZABBIX Agent
zabbix_agentd.exe -i --config zabbix_agentd.conf
(サービス一覧で起動していなかったら上記はやりましょう)

3.設定
ZabbixServerにブラウザでアクセスして
設定→ホスト→ホストの作成から今回追加するWindowsサーバの情報を入力していきます
yoshi2という名前でホストを作成しています
yoshi2はプライベートから監視するので10.100.47.214のプライベートIPを入力しています
またテンプレートは「Template_Windows」を選択します
デフォルトで設定されているテンプレートになりますので、追加からテンプレートを設定しましょう



Zabbix Serverと10050というポートで通信剃る必要がありデフォルトでは通信許可がWindowsのファイアウォールでは許可されていないので、設定します
(他にもFW機能を使っている場合は10050ポートを受信をオープンする設定を入れましょう)

4.確認
ここまで設定したらあとはWebインタフェース上で確認
・監視データの一覧に追加されていることを確認
・設定→ホストから追加したホストのZabbix Agentの欄にちゃんと色がついていることを確認
もし監視がちゃんとできていない場合には監視データの一覧にもアラートがあがっているので確認してください
監視ができない多くの原因は監視対象のサーバと10050で通信ができていないことが原因でしょう
Zabbix Serverから「telnet yoshi2 10050」で通信できるかを確認してください

2012年7月17日火曜日

【Zabbix】CentOSへのZabbixインストール方法と初期設定方法

20150306

  • 記事をmarkdownに書き換えたためフォーマットも変更しました
  • MySQLをインストールする手順を追記しました
  • MySQL5.6で文字コードをUTF8にする手順を追記しました
  • ZabbixServer 2.4の場合のスキーマファイルのパスとインポート方法を追記しました

概要

CentOSにZabbixをインストールする方法を紹介します
公式が提供するリポジトリを使ってyumでインストールする方法を紹介します

環境

  • CentOS 5.8 64bit
  • Zabbix1.8.13

インストール

Zabbixのインストール

リポジトリを追加してyumインストールするだけです
リポジトリを追加するためのrpmはLinuxのバージョンとアーキテクチャにより異なるので環境にあったものをインストールしてください

rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/i386/zabbix-jp-release-5-5.noarch.rpm

yum clean all
yum install zabbix zabbix-agent zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql

MySQLのインストール

こちらもMySQLの公式が提供するリポジトリを使ってyumインストールします
mysql-community-release-el5-5.noarch.rpmを公式からダウンロードしてきましょう
ダウンロードはOracleのIDがなくてもダウンロードできます
ダウンロードしたらCentOS上にSCPやらで転送してください

rpm -ivh mysql-community-release-el5-5.noarch.rpm

yum clean all
yum -y install mysql-community-server.x86_64

でOKです
CentOSのBaseリポジトリで提供されているMySQLをインストールしてしまうと5.1系がインストールされてしまいます
またその場合のパッケージ名はmysqlになります
yum -y install mysqlすると古いバージョンがインストールされてしまいますので注意してください

インストールするパッケージ名を確認したい場合は
yum search mysql --disablerepo '*' --enablerepo mysql
等で公式からダウンロードするべきパッケージ名を把握することができます

各種初期設定

MySQLを含めZabbixの構築に必要な初期設定手順を紹介します

MySQLの設定

MySQLの文字コードをUTF8に変更

この設定は必須というわけではありません
必要に応じて実施してください

/etc/my.cnf[mysqld]の部分をにUTF8を使うように追記します
必要に応じてバックアップを取得しておくといいです

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1

default-character-set=utf8 # ここを追加、文字コードをUTF8に変更
#character-set-server = utf8 # MySQL5.5以上の場合はこちら
skip-character-set-client-handshake # サーバに合わせてクライアント側もUTF8に変更

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

他の設定(bufferサイズ等)は自身のインストールするマシンのスペックと相談して決めるといいでしょう

設定を変更したら起動してユーザを作成します

ユーザの追加

まずは起動します

service mysqld start

起動したらrootユーザでパスワードなしでログインしましょう

mysql -u root

mysqlプロンプトになったらgrantコマンドを使って「zabbix」ユーザを追加します
今回はパスワードもzabbixに設定しています

mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> flush privileges;

「zabbix」データベースの作成とスキーマの適用

監視用のデータを保存するためのデータベースを作成します
スキーマ情報はyumでインストールしたパッケージの中に含まれています

mysqladmin create zabbix --default-character-set=utf8
mysql -u root zabbix < /usr/share/doc/zabbix-server-1.8.13/schema/mysql.sql
mysql -u root zabbix < /usr/share/doc/zabbix-server-1.8.13/data/data.sql

ZabbixServerが2.4の場合はスキーマファイルのパスとファイル名が変更されていました
以下のように実行してください

mysql -u root zabbix < /usr/share/doc/zabbix-server-mysql-2.4.4/create/schema.sql
mysql -u root zabbix < /usr/share/doc/zabbix-server-mysql-2.4.4/create/images.sql
mysql -u root zabbix < /usr/share/doc/zabbix-server-mysql-2.4.4/create/data.sql

Zabbixの設定

ZabbixServerの設定ファイルを確認

/etc/zabbix/zabbix_server.confを編集します
最低限確認が必要な項目は

  • DBUser=zabbix
  • DBPassword=zabbix

になります
MySQLおよびZabbixServerがlocalhostで同居して動作させるならその他の設定はそのままでも動作しますが、例えばMySQLは別ホストという場合は「DBHost」や「DBPort」の項目をlocalhost以外に修正してください

ZabbixAgentの設定確認

ZabbixServer上で動作するZabbixAgentの設定ファイルも確認しましょう
設定ファイルは/etc/zabbix/zabbix_agent.confにあります
特に設定変更が必要な箇所はないので問題なければservice zabbix-agent startで起動しましょう

ZabbixServerの初期化

ZabbixServerの初期化はWebUIから実施します
まずはZabbixServerおよびhttpdを起動します

service zabbix-server start
service httpd start

ZabbixServerは10051ポートでLISTENしhttpdは80でLISTENします

http://localhost/zabbix/ にブラウザでアクセスします

各ページで必要な情報を入力します
ポイントは以下の通り

  • DBの設定の部分ではID/PW、zabbix/zabbixを作成しているのでそれを入力します
  • DB接続のテストもできるのでやっておくといいと思います、接続エラーになる場合はACL等やFWの設定を確認してみてください
  • WebUIへのログインはデフォルトで準備されているユーザ「admin/zabbix」でログイン可能です

特に問題なく初期化できると思います
ダッシュボードが表示されたら設定完了です


あとはバシバシ監視対象を追加していけばOKです

参考サイト

2012年7月16日月曜日

MongoDBのインストールとPerlからの簡単な操作まで

■mongoインストール
http://www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.6.tgz/download
tar xvzf mongodb-linux-x86_64-2.0.6.tgz
mv mongodb-linux-x86_64-2.0.6 mongodb
mv mongodb /usr/local/
mkdir -p /data/db
cd /usr/bin/
ln -s /usr/local/mongodb/bin/mongod mongod
ln -s /usr/local/mongodb/bin/mongo mongo
mongod
(mongoDBのデーモンプロセスの起動、1Gのサイズのバイナリファイルを3つほど作成すれば起動完了)
(デーモンを起動したターミナルはそのままにしておく)
mongo
(実際にmongoDBにアクセスしてみる)
(アクセスや操作を行うとデーモンを起動したターミナルにログが出力される)
> db.test.save( { a: 1 } )
> db.test.find()
{ "_id" : ObjectId("4ffd62476fa58b6422ae9873"), "a" : 1 }
(タグを押すと実行できる命令の候補を順送りすることができる)
exit

・基本コマンド参考サイト
http://d.hatena.ne.jp/matsukaz/20110418/1303144042
(基本コマンドはこちらが参考になる)


■perlドライバから操作
(perlを事前にインストールしておくこと)
yum install -y ncftp
(cpanの初期設定で必要になり未インストールだったのでインストール)
perl -v
This is perl, v5.8.8 built for x86_64-linux-thread-multi
cpan
cpan > install Bundle::CPAN
(初期設定がある場合は基本的には全部enter)
(入力しなければいけにあのはftpサーバ、Asia Japan にしてすべてのftpサーバを選択する)
cpan > o conf prerequisites_policy follow
cpan > o conf commit
(この設定をするとyesと求められるところを全て無視することができます)
cpan > force install MongoDB
cpan > force install BSON
cpan > force install Entities::Backend::MongoDB
cpan > force install MojoX::Session::Store::MongoDB
cpan > force install MongoDB::Admin
cpan > force install Mongoose
cpan > force install MongoDBI
cpan > force install MongoX
cd
find `perl -e 'print "@INC"'` -name 'MongoDB.pm' -print
(以下が表示されることを確認する)
./.cpan/build/MongoDB-0.45/blib/lib/MongoDB.pm
./.cpan/build/MongoDB-0.45/lib/MongoDB.pm
emacs perl_to_mongo.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use MongoDB;

my $connection = MongoDB::Connection->new( host => 'yoshi3', port => 27017 );
my $database   = $connection->mydb;
my $collection = $database->things;

my $id   = $collection->insert({ hoge => 'tokyo tyrant'});
my $data = $collection->find_one({ _id => $id });

print "$id\t$data->{hoge}\n";

exit 0;
perl perl_to_mongo.pl
(Can't locate object method "run_command" via package "MongoDB::Database"が出た場合はこちらを参照)
(mongoコマンドからデータがインサートされていることを確認する)

2012年7月15日日曜日

Can't locate object method "run_command" via package "MongoDB::Database"

というエラーが出た

PerlからMongoDBに接続するところでrun_commandなんて無いですよー
と言われてエラーになっている

結構ハマったのでメモしておきます。。。

■環境
perl・・・5.8.8
MongoDB・・・2.0.6
PerlMongoDriver・・・ 0.45

■原因
MongoDB::Connection.pmでrun_commandを呼び出しているが
useしているモジュールの中でrun_commandを定義しているモジュールがない

■解決方法
MongoDB::Connection.pmに呼び出すモジュールを追加する
追加するモジュールはMongoDB::Database.pm
以下、自分で解決したときのコマンドを記載しておく

cd /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/MongoDB
emacs Connection.pm
package MongoDB::Connection;
our $VERSION='0.45';

# ABSTRACT: A connection to a Mongo server

use MongoDB;
use MongoDB::Database;←これを追加する
use MongoDB::Cursor;

use Any::Moose;
use Any::Moose'Util::TypeConstraints';
use Digest::MD5;
use Tie::IxHash;
use boolean;

PerlのMongoDBドライバは実はGitHubで公開されているので、forkして修正してpull requestしようかと思ってます
まぁ自分がそんなにPerlに詳しくないのがいけないんだと思うんですが、これはちょっとひどいと感じてしまいました

・mongodb / mongo-perl-driver
https://github.com/mongodb/mongo-perl-driver/

2012年7月14日土曜日

egrepで空行とコメントを削除して表示する方法

egrep -v "^#" /etc/ssh/sshd_config | egrep -v "^$"

いつも忘れるのでメモw

あとはオリジナルのコマンド化もしてみました

mkdir /usr/local/exgrep
cd /usr/local/exgrep
emacs exgrep.sh

以下を記載する
#!/bin/sh
if [ $# -ne 1 ]; then
    exit 1;
fi
egrep -v "^#" $1 | egrep -v "^$"

chmod 744 exgrep.sh
cd /usr/bin/
ln -s /usr/local/exgrep/exgrep.sh exgrep
exgrep /etc/httpd/conf.d/ssl.conf

でコメントと空行が削除された状態で表示されるはずです
参考までに

2012年7月13日金曜日

keytoolでJavaに証明書をインストールする方法

・事前準備
JAVA_HOME配下のcacertsが存在するパスに移動する必要があります
例えば以下のような
/usr/local/java/jre/lib/security
cacertsというファイルがあれば問題ないです
またこのパスに証明書も配置しましょう
今回は「oreore.crt」という証明書をインストールするとします

■インストール
keytool -import -keystore cacerts -file "oreore.crt" -alias "oreore"

■参照
keytool -list -v -keystore cacerts | grep oreore

■削除
keytool -delete -alias oreore -keystore cacerts -storepass changeit

2012年7月11日水曜日

【Ant】javacでコンパイルしてclassファイルを作成した後にそのclassファイルを元にJarファイルを作成するbuild.xmlを作ってみた

四の五の言わずまずはソースから

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project Hoge">
 <!--this file was created by Eclipse Runnable JAR Export Wizard-->
 <!--ANT 1.7 is required                                        -->

 <property name="jarname" value="Hoge.jar" />
 <property name="dir.src" value="WEB-INF/src" />
 <property name="dir.dest" value="dest/bin" />
 <property name="dir.from.resources" value="resources" />
 <property name="dir.to.resources" value="WEB-INF/classes" />
 <property name="compiler" value="C:/user/java/6/bin/javac" />
 <property name="dir.compiler" value="WEB-INF/lib" />
 <property name="dir.compiler.tomcat" value="C:/user/tomcat/6.0/lib" />

 <path id="classpath.hoge">
  <fileset dir="${dir.compiler}" includes="*.jar" />
  <fileset dir="${dir.compiler.tomcat}" includes="*.jar" />
 </path>

 <target name="copy_resources">
  <echo message="リソースファイルをコピーします(Tomcat起動用)" />
  <copy todir="${dir.to.resources}">
   <fileset dir="${dir.from.resources}">
   </fileset>
  </copy>
 </target>

 <target name="clean" depends="copy_resources">
  <echo message="コンパイル先ディレクトリを削除します" />
  <delete dir="${dir.dest}" />
 </target>

 <target name="mkdir" depends="clean">
  <echo message="コンパイル先ディレクトリを作成します" />
  <mkdir dir="${dir.dest}" />
 </target>

 <target name="compile" depends="mkdir">
  <echo message="コンパイルを行います" />
  <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${compiler}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <classpath refid="classpath.hoge" />
  </javac>
 </target>

 <target name="create_run_jar" depends="compile">
  <echo message="Jarファイルを作成します" />
  <jar destfile="${jarname}" filesetmanifest="mergewithoutmain">
   <manifest>
    <attribute name="Main-Class" value="Hoge" />
    <attribute name="Class-Path" value="." />
   </manifest>
   <fileset dir="${dir.dest}" />
  </jar>
 </target>

</project>

上記何をしているかタグごとに上から説明します
処理的にも順次上から実行している流れになっています

propertyタグ
定数的なものを宣言しておりますここで宣言したものは${hoge}という形で参照することができます

pathタグ
コンパイル(javac)を行う際に必要になるライブラリを指定します

target(name="copy_resources")タグ
設定ファイルをコピーしています
実はTomcat用でWEB-INF/classes配下にプロパティファイルがないとTomcatは見えないのでそこにコピーしてあげています
(今回の趣旨とは少しことなるので無視でいいかもしれません)

target(name="clean")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを削除します
このあとで作成するのですが、なぜ一旦削除するかというと前に作ってclassファイルとかが残っているとjarファイルを作成するときに前のclassファイルを参照してしまう可能性があるので一旦消しています

target(name="mkdir")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを作成します

target(name="compile")タグ
javacを実行します
javacを実行する実際のソースコードがある箇所とそのソースをコンパイルするために必要になるクラスパスのオプションタブを追加しています
クラスパスの設定がうまくいっていない場合はこのコンパイル部分でこけると思います
javacのオプションをいろいろ設定していますが、詳しくは調べてくださいw
大事なのは
encoding="UTF-8" includeAntRuntime="off"
の2つだと思います

target(name="create_run_jar")タグ
コンパイルしてできたclassファイルを元にjarファイル作成します


とまぁbuild.xmlの説明は以上で、こんな感じでjarファイルを作成することはできます
(プロパティファイルのコピーはいらないかもこの中では特殊な制御なのでいらないと思います)

で今回一番ハマったのが、build.xmlをeclipseから実行してantのjavacタグでのコンパイル時に


エラー: \65279は不正な文字です

が出る場合があります
原因はBOM付きのUTF-8で保存されているせい(eclipseのせいなのかなー・・・)
ネットで調べるとWindowsのメモ帳で編集するとBOMがついてしまうそうですがメモ帳で編集した記憶などはない・・・
とりあえずこれを消す方法は
TeraPad
を使います
ファイル→文字/改行コード指定保存
で「UTF-8N」を選択して上書き保存します。どうやらこれで保存するとBOMなしのUTF-8で保存できるようです
eclipse上だけではこれを回避するのは難しいようです

2012年7月9日月曜日

ssh接続が遅い場合の対応方法

/etc/resolv.confで使われていない、使っていないDNSサーバの設定を外す

で一応自分は解決できました
あとは/etc/hostsや/etc/ssh/sshd_configも怪しい場合があるみたいです

2012年7月8日日曜日

【Firefoxアドオン】all reloadリリースノート

■概要
アドオン名
all reload
概要
右クリックからすべてのタブを一度にリロードすることができます
公開サイト
ソースコード:

■使い方

  1. https://addons.mozilla.org/ja/firefox/addon/all-reload/ にアクセスしてプラグインをインストールします
  2. 右クリック内のコンテキストメニューに「all reload」と表示されるので選択すれば全部のタブがリロードされます
  3. コンテキストをメニューを開いて「z」を押してもリロードすることができます

■更新履歴
コミットログを御覧ください
git commit log

2012年7月5日木曜日

【Firefoxアドオン】tab bomberリリースノート

アドオン名:tab bomber
該当:タブ分割して新規のウィンドウで開きます。非常に迷惑なアドオンです。ギャグアプリ的な
公開サイト:
https://addons.mozilla.org/ja/firefox/addon/tab-bomber/
(P.S 20140417)どうやら相当くだらないアプリだったようで、審査でアウトになっちゃったみたいです

ソースコード:
git://github.com/kakakikikeke/tab_bomber.git

Jenkinsのプロキシ設定

・プラグインダウンロード時にプロキシを使う設定
http://d.hatena.ne.jp/kic4o1/20110624/1308914383
・Subversionのクライアントのアクセス時にプロキシを設定
http://daily-postit.blogspot.jp/2010/11/hudsonsvn.html

いろいろとあるようですが、一番手っ取り早いのが以下

nohup java -Dhttp.proxyHost=0.0.0.0 -Dhttp.proxyPort=111 -jar jenkins.war > jenkins.log 2>&1

※IPとポートは適宜変更してください

Tomcatのデプロイ形式でJenkinsを起動している場合にはTomcatの起動スクリプト(catalina.sh)にプロキシ設定を入れて起動するようにすれいいと思います

2012年7月4日水曜日

他のGoogle AdsenseのアカウントとBloggerが連携されているか確認する方法

■背景
Bloggerで持っているアカウント(A)とAdsenseで持っているアカウント(B)が異なっておりBlogger上に掲載する広告をBのAdsenseアカウントの情報で掲載したかった
AでAdsenseのアカウント持っていない理由としては昔Adsenseに申し込みを行ったのだが利用規約に違反していたらしく凍結になってしまったためやむなくBのアカウントと連携することになった

■確認方法
手順1
AのアカウントでBloggerの管理画面にログインし「収益」からBのアカウントと連携する設定を行います
ここでは連携方法については簡単に述べますが
「AdSense アカウントの切り替え」から「別の AdSense アカウントを使用する」のほうにBのアカウントのメールアドレスと郵便番号を入力するとBのGmailにメールが届くのを確認できればOK







※基本的にはここまでできていれば連携できているはずなのですが、今回はこれが本当に連携できているのかをBのアカウントの視点から確認します

手順2
BのアカウントでGoogle Adsenseへログイン
「パフォーマンスレポート」タブをクリック
左メニューから「サイト」をクリック
現在このBのアカウントで広告設定しているサイトの一覧が下部に表示されるので、その中にAのBloggerのサイトが記載されていることを確認する







「ホーム」「アカウント設定」から
一番下「アクセスと認証」でBlogger.comがサードバーティアクセス権に記載されていることを確認する





上記2つが設定されていればBloggerとAdsenseの連携は問題なく行われています
UIは2012/07/04時点でのものになるので、そこはあしからず

2012年7月3日火曜日

【Jenkins】Jenkinsおじさんのアイコンを変更する方法

プラグインは絶対あると思うんだけど、プラグインなしで直接画像を変更したら一応できたのでその方法です。
Tomcatに直接デプロイして使用しているJenkinsの場合の設定方法になります
jarを直接実行している方法とは異なるかもしれません

1. 画像作成
240×323ピクセルのサイズの画像を準備します
※このサイズでなくても問題ないですが、デフォルトのJenkinsおじさんが描画されている画像の大きさがこれなので、合わせたほうが綺麗に描画されると思います
名前は「jenkis.png」にします
できたらJenkinsサーバの「/var/tmp/jenkins.png」あたりに置いておきましょう


2. 配置
cd /usr/local/tomcat/webapps/jenkins/images
cp -ip jenkins.png{,.`date "+%Y%m%d"`}
※一応デフォルトの画像をバックアップしておきます
cp -ip /var/tmp/jenkins.png .
※上書きはYESで回答します


3. 確認
Jenkinsのホーム画面に行って「Ctrl+F5」でリロードします
すると設定した画像になっているはずです
※キャッシュを参照してしまう可能性があるので、キャッシュなしリロード「Ctrl+F5」をやってます
※一応確認しましたが、tomcatをrestartとしてもアイコンが元に戻ってしまうということはありませんでした

2012年7月1日日曜日

【ネットワークのベンチマーク】iperf設定方法と使い方

1. ダウンロード
http://sourceforge.net/projects/iperf/
tarファイルをダウンロードしてLinuxサーバに送ります

2. インストール
./configure --prefix=/usr/local/bin/iperf
make
make install
which iperf
prefixで設定したパスになっていることを確認
※gccが必要になるのでgccがない方はgccをインストールしましょう「yum -y install gcc*」
※makeが必要になるのでmakeがない方はmakeをインストールしましょう「yum -y install make*」

3. 測定
iperf -s -i 1
⇒サーバ側、1秒感覚で表示するように設定
iperf -c yoshi3 -P 10 -i 1 -t 10 -f MBytes
⇒クライアント側、yoshi3サーバに対して10秒間実行し結果を1秒間間隔で表示、多重度は10、単位をメガバイトで統一

結果の見方としては多重で実行した場合には[SUM]と書かれたところを見ればよく

[SUM] 0.0-10.1 sec 2002 MBytes 199 MBytes/sec

例えばこの場合には10多重のうちの1が10秒間で2002MBytes転送することに成功し、ネットワークのスループット的には1秒間に199MBの処理性能があるということを示している

4. その他なんとなく使い方の雑記
iperf -s -u
iperf -c yohi3 -P 1 -i 1 -t 10 -u -b 2000m
UDPモードで実行
サーバ側は「-u」をつけましょう
クライアント側は2000MBのデータを転送してどれくらの帯域制限かかかるか調べられる
これで2000Mbits/secなんて出たら驚きもんです
ちなみに自分の環境では
0.0-10.0 sec 817 MBytes 685 Mbits/sec 0.011 ms 20910/603773 (3.5%)
でした。普通にすげー。

参考にさせていただきました。ありがとうございます。
http://homepage2.nifty.com/protocol/iperf/iperf.htm
http://www.ccna-navi.com/archives/315