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年10月29日月曜日

GlassFishでwarファイルをデプロイしてみた

前回GlassFishの管理画面までログインできる環境を作成したので今回はwarファイルのデプロイまでやってみたいと思います
前回:http://kakakikikeke.blogspot.com/2012/10/centosjavaglassfish.html

①管理画面にログイン
画面左側の「Application」押下します


②Deploy画面に遷移する
Application画面の右ペインにある「Deploy」を押下します


③warファイルを選択してデプロイする
今回はサンプルにJenkinsを使用してみます
http://mirrors.jenkins-ci.org/war/latest/jenkins.war

参照からダウンロードしたjenkins.warを選択します


選択すると下にパラメータの設定を行えます
今回はデフォルトのままでデプロイします
右上にOKがありますので、OKを押下します


完了するとApplicationsの画面で以下のようになります
実際にアクセスしてデプロイできている確認してみましょう


Launchを押下すると別ウィンドウが開きます
httpsかhttpで確認できるので、どちらかを選択すると動作しているか確認できるかと思います

今回はWebUIから行いましたが、RESTAPIやコマンドでもデプロイは実行できるようです
それも試してみたいところではあります


2012年10月28日日曜日

【CentOS】GlassFishをservice登録する起動スクリプトを作成してみた

cd /etc/init.d/
touch glassfish
vi glassfish
以下を追記
GF_HOMEは適宜変更してください
#!/bin/sh
#
# Startup GlassFishServer 3.1.2
#
# chkconfig: 2345 86 16
# description: GlassFish is Java application Server.
# processname: glassfish
# pidfile: /var/run/glassfish.pid
# config: /usr/local/glassfish3/glassfish/config/asenv.conf

# Source function library.
. /etc/rc.d/init.d/functions

GF_HOME=/usr/local/glassfish3/glassfish/

case "$1" in
start)
        log_daemon_msg "Starting application server" "glassfish"
        $GF_HOME/bin/asadmin start-domain
;;
restart|reload|force-reload)
        echo "Error: argument '$1' not supported. Use stop and wait and start." >&2
        exit 3
;;
stop)
        $GF_HOME/bin/asadmin stop-domain
        log_daemon_msg "Stopping application server" "glassfish"
;;
*)

;;
esac
chmod 755 glassfish
chkconfig --add glassfish

これで次回再起動時に自動でglassfishが起動します

お試しあれ!

Gmailで未読メールのみ表示する方法

検索ボックスで

is:unread

簡単

2012年10月26日金曜日

【CentOS】Javaアプリケーションサーバ「GlassFish」をインストール

■環境
  • ゲストOS
  • CentOS release 5.8 (Final)
  • カーネル
  • Linux yoshi3 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
  • GlassFishバージョン
  • 3.1.2.2
■インストール手順
・コマンド
wget "http://download.java.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2.zip"
mv glassfish3/ /usr/local/
基本的には展開してフォルダを移動して完了になります

■起動テスト
・glassfish起動
/usr/local/glassfish3/bin/asadmin start-domain
Waiting for domain1 to start .......
Successfully started the domain : domain1 domain Location: /usr/local/glassfish3/glassfish/domains/domain1
Log File: /usr/local/glassfish3/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
※tomcatのプロセスで8080などを使っている場合は起動に失敗するので事前に停止しておいきましょう

・adminユーザ登録、設定
/usr/local/glassfish3/bin/asadmin --host yoshi3 --port 4848
※ホストを指定してる場合は--hostを指定したほうがよいです。指定しないとlocalhostで解決しようとしてうまく動作しません
asadmin> change-admin-password
※ユーザ名はデフォルトのadminで問題ないです。デフォルトパスワードはおそらく設定されていないので、現在のパスワードは何も入力せずにEnterでいけると思います
asadmin> enable-secure-admin
※上記で設定したadminのパスワードを入力する必要があります
asadmin> stop-domain
asadmin> start-domain

・確認
http://localhost:8080/
にアクセスするとglassfishのサンプルページが表示されます
これで起動していることは確認できます
http://localhost4848/
にアクセスすると管理画面が表示されます
管理画面にログインするためには先ほど設定したadminのパスワードを入力します

・その他コマンド
/usr/local/glassfish3/bin/asadmin lists-domain
動作しているプロセスの確認
/usr/local/glassfish3/bin/asadmin stop-domain
プロセスを停止する
/usr/local/glassfish3/bin/asadmin
を実行するとasadminの対話モードになるので、そこでlist-commandsを実行するとasadminで実行できるコマンドの一覧が表示されます

とりあえず以上でインストールから基本的な設定は完了です
次回は実際にglassfish上でJavaコンテナを動作させてtomcatとの性能比較なんかできたらいいなーって考えています

GlassFish自体の機能はその他にも
  • ロギング設定
  • JVMのパラメータ設定
  • 各種監視設定
  • コンテキストルートの変更
  • DB情報の閲覧
  • プラグインのように機能をどんどん追加できる
などなどいろいろな機能がひとつに実装されているので、非常に便利です。
Tomcatと比べると高速ともよく言われるそうですが、自分的にはこのWebUIの使いやすさと機能の豊富さが非常に素晴らしいと感じています。

■リンク

2012年10月25日木曜日

Vine6でNetworkManagerを無効にしてifcfgの設定を有効にする方法

Vine5から実装されてしまったNetworkManagerですが、
GUIでやると結構簡単にできるっぽいのですが、CUIのときに無効にできる方法を紹介します
また、無効にしたあとにifcfg-ethXの設定ファイルを作成したのにもかかわらず設定が
読み込まれないときの対処方法をご紹介します

①プロセス自体を停止
/etc/init.d/NetworkManager stop

②OS起動時にNetworkManagerを起動させないようにする
ntsysv
で(おそらく)最上段に出てくるNetworkManagerの「*」をはずします
外すのはスペースキーでできます
外したらTABでカーソルを移動しOKのところにカーソルが来たらスペースキーで決定します

③ハードのデバイス情報を確認する
ip link show
これで刺さっているNICのeth情報が確認できます

④ifcfg-ethXを作成する
先ほど確認したNICのeth情報と同じifcfg-ethXを作成します
作成するパスは以下になります
/etc/sysconfig/network-scripts/ifcfg-ethX

記載する事項はいろいろとあります、以下を参考にしてみてください
http://trac.vinelinux.org/wiki/LegacyNetwork
ちなみに自分は以下のように設定しました

DEVICE=eth4
BOOTPROTO=dhcp
ONBOOT=yes
#HWADDR=
#NM_CONTROLLED="yes"
DNS1=8.8.8.8
DNS2=8.8.8.8
TYPE=Ethernet
IPV6INIT=no
USERCTL=no

⑤networkをONにする
chkconfig network on
旧ネットワーク管理プロセスを起動時にONにします
NetworkManagerがあがってこなくなるので、こちらをあげないとIPアドレスが取得できなくなります

これでシステム自体をリブートするとifcfgに書かれた設定が反映され
NetworkManagerが無効になっています


ただー
ip link showで設定されていたeth情報を変更する方法がわかりませんでしたw
自分はeth4, 5と設定されていてそれをeth0, 1に直したかったのですが
どこをいじってもずっとeth4, 5のままでした。
うーんなんでだろうと・・・
もしかするとデフォルトだと無線NICの内容とかがすでにeth0, 1, 2を使っているのかもしれないですね

まぁとりあえずの目標は達成できたのでOK

2012年10月22日月曜日

ブラウザで気持ち悪いスライドが作れるサービス「prezi」を試してみた

①ユーザ登録

http://prezi.com/index/

でユーザ登録します
お持ちのfacebookアカウントと連携できるので、作成したpreziはすぐに誰かと共有することができます

無料登録も可能ですが、有料版にするとより充実したサービスを受けられるようです

http://prezi.com/pricing/

主にはストレージの容量やオリジナルのロゴ、githubのようなプライベート空間も持てるようです

②スライド(prezi)の作成



マイページのようなページから「New prezi」を押下します
TitleとDescriptionを設定するダイアログが出現するので入力します
入力すると画面が遷移して、templateを選択するダイアログが表示されるので選択しましょう
自分はBrainstormingを選択しました



preziを編集できる画面に遷移します
基本的にはすべてここで編集ができます

左したに各スライドのOverviewがあるのでそれを選択するとそれぞれのスライドが編集できるようになります

③閲覧
編集が完了したら左上にある「show」ボタンを押下すると作成したスライドが閲覧できます
というわけで自分が5分くらいで作成したpreziですw

http://prezi.com/dp-yil74qchz/kakakikeke-test-prezi/

ほぼ何もしていないですが、このインパクトwすごいw
ほかにも音を入れたり、パワーポイントをインポートすることもできるので既存のスライドも恩知を受けることができそうです

④他に気になったこと
  • アイコンはfacebookのやつしか設定できない
  • 無料版だと必ずパブリック公開になってしまう
  • slide-shareとかとの連携はないのかなー


以上ですー
インパクトあるプレゼンがしたい場合には非常に重宝しそうです
お試しあれ

2012年10月20日土曜日

logrotateできない場合の対処方法

2つほど

①必要なフォルダやファイルがない
基本はありえないと思うのですが、ない場合にはエラーとなります
自分は以下のフォルダ/var/log配下になくエラーになってことがあります
mkdir conman
mkdir conman.old
mkdir cups
mkdir radius
mkdir radius/radacct

logrotate -f /etc/logrotate.conf
⇒成功

②syslogとrsyslogの設定ファイルでローテートの定義が被っている
/etc/logrotate.d/配下にsyslogとrsyslogの設定ファイルがある場合にエラーとなる場合があります
どちらかのファイルをどけてlogrotateを実行すると成功する可能性があります
cd /etc/logrotate.d/
mv syslog /var/tmp

logrotate -f /etc/logrotate.conf
⇒成功

ログローテートが失敗するとログが肥大化してとんでもないことになるので、注意が必要がですw

・参考サイト
http://www.itmedia.co.jp/help/tips/linux/l0291.html

2012年10月19日金曜日

【Windows7】WinMergeで特定のファイルを結果に出力しない方法

WinMergeを実行し、ツール→フィルタでフィルタダイアログを表示します
「新規」を押下するとフィルタの公開範囲をどうするかという選択がでるので「プライベートフィルタ」を選択します
以下を貼り付けて保存して閉じます

## This is a directory/file filter template for WinMerge
name: java-class
desc: Javaのクラスファイルを表示しないようにします

## Select if filter is inclusive or exclusive
## Inclusive (loose) filter lets through all items not matching rules
## Exclusive filter lets through only items that match to rule
## include or exclude
def: include

## Filters for filenames begin with f:
## Filters for directories begin with d:
## (Inline comments begin with " ##" and extend to the end of the line)

f: \.class$ ## Filter for filename

#d: \\.*$ ## Filter for directory

するとフィルタの一覧画面の最下部に作成したフィルタが表示されます
作成したフィルタを選択してOKを押下します
するとマージ結果から.classというファイル結果がなくなります

他にもいろいろと応用できそうなので試してみてください

2012年10月18日木曜日

【Windows7】eclipseにAndroidの開発環境を構築してみた

■環境
Windows7 64bit
Eclipse 3.4
Android SDK 20.0.3

■手順
  1. Android SDKのインストール
  2. eclipseへのAndroid SDK プラグインのインストール
  3. eclipseでのAndroid SDK プラグインの設定
  4. Androidプロジェクトの作成
  5. Androidバーチャルデバイスの作成と実行
以上の5つです
1. 5. はeclipseは関係ないので注意してください
eclipseで開発するためのものを先にWindows自体にインストールします

1. Android SDKのインストール
①以下より最新版のSDKをダウンロード
http://developer.android.com/sdk/index.html

②インストーラを実行しインストール開始
特に特別な設定がいるところはないですが、以下に注意点だけ記載しておきます
JavaのSDKが必要で未インストールの場合は先にJDKのインストールが必要になるのでインストールを実施してください
110MBほどディスクの空き容量が必要になります
インストーラ形式でない場合には解凍したフォルダを適当な場所に配置すればOKです
インストールが完了したら「Android SDK Manager」を開きましょう
初回は(おそらく)未インストールのものがあると言われると思いますのでインストールしましょう
「Install 9 packages」と表示されていたので、9つのパッケージを自分はインストールしました
インストールするときはAccept Allしてしまいましょう
プロキシ設定が必要な場合はメニュー場のTools→Optionsからプロキシを設定できます

2. eclipseへのAndroid SDK ブラグインのインストール
①eclipseを開き「Help」→「Eclipse Marketplace」でマーケットプレイスのマネージャを開く

②検索にて「android」と検索する

③Android Development Tools for Eclipseが検索されるのでInstallをクリック

④規約が表示されるのでacceptしインストールを実行

⑤インストール後はeclipseを再起動する

3. eclipseでのAndroid SDK プラグインの設定
①eclipseを開き「Window」→「Preferences」→「Android」を選択
初回は警告が表示されるが気にしない
②SDK Locationを設定、さきほどインストールしたSDKのフォルダを選択する
SDKインストール時に全てデフォルトでインストールしているようであれば変更する必要はないかもしれない

4. Androidプロジェクトの作成
①プロジェクトの作成から「Other」→「Android」→「Android Application Project」を選択

②「Applicatoin Name」に「TestApps」と入力しNextを押下
Build SDK と Minimum Required SDK は対応しているAndroidのバージョンの範囲を選択することができます
今回はデフォルトのままで「Android 4.1.2 (API16)」「API 8: Android 2.2 (Froyo)」でプロジェクトを作成します

③次にアイコンを選択します。画像やクリップアート、文字列を選択できます。色やフォントも加工できます。

④Activityのモードを選択します。「Blank Activity」を選択します。「MasterDetailFlow」を選択したい場合にはMinimum Required SDKで「API11」以上を選択する必要があります。

⑤メインのActivityの名前やタイプを選択します。ここもAPI11以下なのでデフォルトのままで大丈夫です。
プロジェクトを作成する直前でSDKのバージョンが未インストールと表示される場合があるので、その場合はインストールしてしまいましょう。

⑥プロジェクトの作成が完了します

⑦プロジェクトの作成が完了するとすでにeclipse上でSDKが動作し、モックを見ることができます

5. Androidバーチャルデバイスの作成と実行
Androidバーチャルデバイスとは実機の仮想版です。実機と同様に動作させることができるので、自分のアプリの動作確認を実機なしで行うことができます

①Android SDK Managerを起動します(eclipseからでなくて大丈夫です)

②「Tools」→「Manage AVDs」を選択します

③Android Virtual Device Managerのダイログが出現しますので、Newを押下します

④仮想デバイスの必要な情報を入力します、ワタシは以下のように作成しました。参考にしてみてください。


⑤作成が完了したらダイアログを閉じて大丈夫です

では、実際にサンプル的なものを実行していきます

⑥「Run Configurations」→「Android Application」→「New」から新しい実行の構成を作成します

⑦右側のウィンドウで「Androidタブ」を選択して作成したプロジェクト名を入力または選択します

⑧「Targetタブ」を選択して先ほど作成した仮想デバイスを選択します

⑨適用したあとに実行すると仮想デバイスが立ち上がりサンプルが動作します


とりあえず以上でアンドロイドを開発できる環境は整いました。
あとはリファレンスを元にコーディングしていきましょう
リファレンス:http://developer.android.com/reference/packages.html

■追記
  • AVDは一度起動しておけばわざわざ閉じる必要はなく再度実行すれば反映される
  • 実行しても反映されない場合には一度プロジェクトをクリーンして再度実行すると反映される場合がある

■追記2 20140413
  • AVDのインストールは最近だとzipを配布して展開するだけになっていたのでインストール方法の部分を修正しました

2012年10月17日水曜日

eclipseで自動フォーマットしたときに勝手に改行させない方法

Ctrl + Shift + F で実行できる自動フォーマット機能
デフォルトだと80文字以上は自動で改行されちゃいます

これを限りなく改行させなくする方法を紹介

ウィンドウ
設定
Java
コード・スタイル
フォーマッター

編集ボタン押下
行折り返しタブ選択
行の最大幅を9999に設定
プロファイル名を変更
OKボタンを押下

上記でいけるはずw

2012年10月16日火曜日

【Java】Apache PDFBoxを試してみた(サンプルソースコード)

https://github.com/kakakikikeke/pdfbox-sample

上記にサンプルコースコードを公開しました。
  1. 画像のカウント
  2. 文字数の抽出
  3. 新規PDFの作成
の3つのサンプルがあります。詳細は上記をご覧ください。

2012年10月15日月曜日

CentOS5.8でsyslog-ngをインストールしてリモートホストからのログが受信できるところまで設定してみた

■概要
syslogの次世代版と言われているsyslog-ngを(今更ながら興味本位でw)検証してみました
インストール方法とリモートホストからログを受け取れる方法まで紹介いたします
2012/10/12、現在の最新版は3.4みたいです
https://github.com/balabit/syslog-ng-3.4

■環境
[root@yoshi3 ~]# uname -an
Linux yoshi3 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@yoshi3 ~]# cat /etc/issue
CentOS release 5.8 (Final)

yoshi3を受け取り側のホスト
yoshi5を送信側のホストとして設定していきます

■インストール
yum -y install syslog-ng
syslog-ng -V
syslog-ng 2.1.4
yumのリポジトリサーバではあまり新しいバージョンがコミットされてないようです

■起動テスト
service syslog stop
既存のsyslogが起動している場合は停止しましょう
service syslog-ng start
tailf /var/log/messages
他のターミナルでログの状況を確認しながら
logger test-log
で、tailfしているログにログが流れることを確認しましょう
基本的にはこの段階でsyslog-ngへの移行が完了となります

■ログ発信側の設定(yoshi5で行います)
vi /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @yoshi3
今回は/var/log/messagesに流れるログをそのまま転送します
service rsyslog restart
今回は発信側がrsyslogでしたが、全く同じようにsyslogでも行えます
logger test
/var/log/messagesにログが出力されること
ログの受け取り側で「tcpdump udp」を実行してログがきていることを確認します

■ログ受信側設定
cd /etc/syslog-ng/
cp -ip syslog-ng.conf{,.org}
vi syslog-ng.conf
source s_sys {
  file ("/proc/kmsg" log_prefix("kernel: "));
  unix-stream ("/dev/log");        internal();
  udp(ip(0.0.0.0) port(514)); ⇒ 追加する
  tcp(ip(0.0.0.0) port(514)); ⇒ 追加する
}

destination d_yoshi5 { file("/var/log/yoshi5.log"); }; ⇒ 追加する

filter f_yoshi5   { host(yoshi5); }; ⇒ 追加する

log { source(s_sys); filter(f_yoshi5); destination(d_yoshi5); }; ⇒ 追加する
上記5つを追加しましょう。既存の設定ファイルに上書きで問題ないです。
記述する場所もどこでも問題ないですが、念のためそれぞれのセクションの直下に書くとよいと思います。
destinationならdestinationでまとまって記載されているところがあるので、そのすぐ後に記載する
service syslog-ng restart
tailf /var/log/yoshi5.log
をした状態でyoshi5から「logger testyoshi5」を実行してみましょう
yoshi5からのログが表示されると思います
もしこれでも表示されない場合にはFWなどの設定が抜けている可能性があるので、yoshi3で514ポートをtcp、udpともにオープンする設定をしましょう


ちなみに今回の設定だとyoshi5.logとmessagesにもログが流れてしまうのでそれを回避したい場合は既存の設定ファイルを少々いじる必要がありそうです

2012年10月14日日曜日

【Ant】Wicketプロジェクトからwarファイルを作成するbuild.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="war_test" default="create_run_war" basedir=".">

 <property name="app" value="war_test" />
 <property name="dir.src" value="WEB-INF/src" />
 <property name="dir.lib" value="WEB-INF/lib" />
 <property name="dir.dest" value="WEB-INF/classes" />
 <property name="javac" value="C:/user/java/6/bin/javac" />

 <path id="classpath.war_test">
  <fileset dir="${dir.lib}" includes="*.jar" />
 </path>

 <target name="clean_war">
  <echo message="warファイルを削除します。" />
  <delete file="${app}.war" />
 </target>

 <target name="clean_folder" depends="clean_war">
  <echo message="ビルドに必要なフォルダを削除します。" />
  <delete dir="WEB-INF/classes" />
 </target>

 <target name="create_folder" depends="clean_folder">
  <echo message="ビルドに必要なフォルダを作成します。" />
  <mkdir dir="WEB-INF/classes" />
 </target>

 <target name="copy_resource" depends="create_folder">
  <echo message="リソースファイルをコピーします。" />
  <copy includeemptydirs="false" todir="${dir.dest}">
   <fileset dir="${dir.src}/resource" />
  </copy>
  <copy includeemptydirs="false" todir="${dir.dest}">
   <fileset dir="${dir.src}">
    <include name="**/*.html" />
   </fileset>
  </copy>
 </target>

 <target name="compile" depends="copy_resource">
  <echo message="ソースコードコンパイルします。" />
  <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${javac}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <exclude name="resource/" />
   <classpath refid="classpath.war_test" />
  </javac>
 </target>

 <target name="create_run_war" depends="compile">
  <echo message="warファイルを作成します。" />
  <war destfile="${app}.war" webxml="WEB-INF/web.xml">
   <fileset dir="" excludes="**/web.xml" />
  </war>
 </target>

</project>

ポイントはHTMLやらプロパティやらをコピーするところとWEB-INF/classes配下にclassファイルを配置するところでしょうか
前回にwarファイルを作成するbuild.xmlを紹介したのですが、実はあれだけだと本当にwarしかできなく動作しないので、注意してくださいw
Javaのパスは適宜変更して使用してください

2012年10月12日金曜日

【Ant】warファイルを作成するbuild.xmlをつくってみた

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="war_test" default="create_run_war" basedir=".">

 <property name="app" value="war_test" />

 <target name="clean_war">
  <echo message="warファイルを削除します。" />
  <delete file="${app}.war" />
 </target>

 <target name="create_run_war" depends="clean_war">
  <echo message="warファイルを作成します。" />
  <war destfile="${app}.war" webxml="WEB-INF/web.xml">
   <fileset dir="" excludes="**/web.xml" />
  </war>
 </target>

</project>

もともとantには「war」というwarファイルを作成するためのタスクが用意されているので、簡単にできました。
環境はeclipse環境となります。

これでwarのプロジェクトもJenkinsと連携して動かすことができそうです。

2012年10月10日水曜日

【lisp】xyzzyで起動時に指定のファイルを開く方法

(find-file "C:/test/my-test.txt")

ポイントはファイルを指定する際にパスが「\」ではなく「/」だということでしょうか
上記を.xyzzyファイルに記載すれば起動時に指定のファイルが開いています

お試しあれ!

2012年10月9日火曜日

【Java】スレッドダンプを確認する方法

■概要
Javaのスレッドが何をしているのかなーとか具体的に確認したい時に役立つコマンドです

■コマンド
jps
で確認したい対象のJavaプロセスを調べてください
kill -3 プロセス番号
これでログにスレッドダンプを吐き出すように支持できます
Javaのプロセスが吐いているログファイルを見るとスレッドダンプの情報が表示されているはずです
コマンドを一度実行するごとに表示されるので何度か確認したい場合にはループさせるなどして確認してください

jstack -J-d64 -m プロセス番号
2013/12/03追記
jstackを使っても取得できます
jstackの場合も実行した瞬間的なスレッドダンプの情報を取得することができます
jpsで同様にプロセス数を取得して「-m」の引数として実行してください

2012年10月7日日曜日

【MySQL MHA】HAが発生し一旦ダウンしたノードをスレーブとして再度配置する方法

■ダウンしたノードをスレーブとして起動する
mysql> CHANGE MASTER TO
MASTER_HOST = 'mha2',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'replpwd',
MASTER_LOG_FILE = 'mysqld-bin.000001',
MASTER_LOG_POS = 106;
mysql> start slave;

上記のMASTER_LOG_FILEとMASTER_LOG_POSの値は実際にマスタになっているノードで「show master status;」を実行し確認してください

■マネージャノードの設定ファイルを変更して再度スタートさせる
cp -ipr /etc/app1.conf /etc/app2.conf
vi /etc/app2.con

[server1]
hostname=mha1

[server2]
hostname=mha2

[server3]
hostname=mha3

上記のようになっていた部分を
以下のように書き換える

[server1]
hostname=mha2

[server2]
hostname=mha3

[server3]
hostname=mha1

mha1がダウンしたノードで再度スレーブとして起動させるサーバです

masterha_check_ssh --conf=/etc/app2.cnf
masterha_check_repl --conf=/etc/app2.cnf
masterha_manager --conf=/etc/app2.cnf

これでダウンしたサーバを再度MHAクラスタのスレーブとして登録することが可能です

2012年10月5日金曜日

[error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln178] Got ERROR: Use of uninitialized value $msg in scalar chomp at /usr/local/share/perl5/MHA/ManagerConst.pm line 90

以下で解決できました

vi /usr/local/share/perl5/MHA/ManagerConst.pm

     87 our $log_fmt = sub {
     88   my %args = @_;
     89   my $msg  = $args{message};
     90   $msg = "" unless($msg); ⇒ ここが追加された
     91   chomp $msg;
     92   if ( $args{level} eq "error" ) {
     93     my ( $ln, $script ) = ( caller(4) )[ 2, 1 ];
     94     $script =~ s/.*:://;
     95     return sprintf( "[%s][%s, ln%d] %s\n", $args{level}, $script, $ln, $msg );
     96   }
     97   return sprintf( "[%s] %s\n", $args{level}, $msg );
     98 };

http://code.google.com/p/mysql-master-ha/issues/detail?id=29

お試しあれー

2012年10月4日木曜日

【CentOS 6.2】MySQL MHA環境を構築して動かしてみた

■概要
前回インストールまで行ったので今回はその種サーバ的なものを元にMySQLMHAクラスタを構築して実際に動かしてみました
前回記事:http://kakakikikeke.blogspot.com/2012/10/centos-62mysql-mha_2.html

種サーバと同様のサーバを後3台作成しましょう
クラウド環境ならクローンすれば一瞬で終わりますが、そうでない場合は頑張ってあと3台同じ物を作成してください

また以下の記事では
  • mha0をマネージャノード
  • mha1をマスタノード
  • mha2, mha3をスレーブノード
として動作することを想定しております

■sshノンパス設定
以下の記事を参考にsshのノンパス設定を行なってください
http://kakakikikeke.blogspot.com/2012/03/10ssh.html
sshのノンパス設定は種となっている今回作成した3台+マネージャとなる種の1台の計4台の間で行えるように設定してください
種サーバにsshのノンパス設定を行ったあとに種サーバをクローンするとそれぞれでsshノンパスログインが勝手にできているようになっているので簡単です

■マスタノードの構築
service mysqld start
mysql -u root
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'replpwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFIED BY 'replpwd';
mysql> flush PRIVILEGES;
mysql> quit
vi /etc/my.cnf
log-bin
server-id=10
service mysql restart
mysql -u root
mysql> FLUSH TABLES WITH READ LOCK;
mysql> quit
cd /var/lib/
tar cvf - mysql|gzip -c > /tmp/var_lib_mysql.tgz
mysql -u root
mysql> SHOW MASTER STATUS;
mysql> UNLOCK TABLES;
mysql> quit
scp /tmp/var_lib_mysql.tgz mha2:/tmp
scp /tmp/var_lib_mysql.tgz mha3:/tmp
chkconfig mysqld on

■各スレーブノード構築
service mysqld start
service mysqld stop
cd /var/lib
mv mysql mysql.org
tar xvf /tmp/var_lib_mysql.tgz
cd mysql
rm -f *-bin.?????? *-bin.index
rm -f *.pid *.err
vi /etc/my.cnf
log-bin
server-id=20
service mysqld start
mysql -u root
mysql> CHANGE MASTER TO
-> MASTER_HOST = 'mha1',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'replpwd',
-> MASTER_LOG_FILE = 'mysqld-bin.000001',
-> MASTER_LOG_POS = 106;
mysql -u root
mysql> START SLAVE;
chkconfig mysqld on

■マスタノードへのデータ投入とレプリケーション確認
mysql -u root
mysql> create database zzz;
mysql> grant all privileges on *.* to root with grant option;
mysql> flush privileges;
mysql -u root
show databases;
この段階でスレーブ側にzzzが作成されているのが確認できたので
マスタースレーブ構成のレプリケーション環境は構築できました

■マネージャサーバ設定とMHA構成確認及び起動
vi /etc/app1.cnf
[server default]
# mysql user and password
user=root
password=
ssh_user=root
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1

[server1]
hostname=mha1

[server2]
hostname=mha2

[server3]
hostname=mha3
masterha_check_ssh --conf=/etc/app1.cnf
masterha_check_repl --conf=/etc/app1.cnf
masterha_manager --conf=/etc/app1.cnf
masterha_check_status --conf=/etc/app1.cnf
上記コマンドは別の端末を開いて確認可能
masterha_stop --conf=/etc/app1.cnf
上記コマンドは別の端末を開いて実施
起動した端末でプロセスが終了していることを確認する
このあと動作確認を実施するので起動しておいてください

■MHA動作確認
マスタノードをシャットダウンする
shutdown -h
するとスレーブノードが自動的にマスターに昇格し
他のスレーブノード向き先が昇格したマスターノードに変更されている
スレーブノードにて以下のコマンドを実施して確認してみてください
mysql -u root
mysql> show slave status;
mysql> show master status;

ただ、注意していただきたいのは

ダウンしてしまったマスタは再起動後もマスタとしてして存在し続けます
そのため再起動後はマスタに昇格した元スレーブノードをマスタとして設定したあとに再度ダウンしたマスタをスレーブとして起動してあげる必要があります

そして、もう一点

一度MHAがおきるとマネージャで起動した「masterha_manager --conf=/etc/app1.cnf」のプロセスが死にます
なので、再度マネージャでプロセスを起動する必要があります


■その他
現在のマスターを調べる方法
[root@mha0 ~]# masterha_check_status --conf=/etc/app1.cnf
app1 (pid:4147) is running(0:PING_OK), master:mha1

2012年10月3日水曜日

【Windows】画面の向きを変更するショートカットキー

Ctrl + Alt + 方向キー

でできます。
急に画面の向きが変わってしまったときなどにお試しください

snmpでrocommunityにCIDRを指定する方法

rocommunity communityname 0.0.0.0/0

こんな感じで書けるそうな
snmpwalkでリソースを取得してくるサーバのIPをいちいち書く手間は省けそうですw


2012年10月2日火曜日

【CentOS 6.2】MySQL MHAをインストールしてみた

■環境
CentOS release 6.3 (Final)
2.6.32-220.el6.x86_64

■mysqlインストール
yum -y update
yum -y install mysql mysql-server
yum -y install make
yum -y install openssh-clients
インストールできたmysqlのバージョンは以下でした
Server version: 5.1.61 Source distribution

■perl cpanの設定
yum -y install perl-ExtUtils-MakeMaker perl-CPAN
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 libyaml-devel
yum -y install *YAML*
perl -MCPAN -e shell
cpan> o conf urllist pop ftp://ftp.dti.ad.jp/pub/lang/CPAN/
cpan> o conf urllist push ftp://ftp.jaist.ac.jp/pub/CPAN/ ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
cpan> o conf commit
cpan> upgrade

■mysqlMHAノードのインストール
wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.53.tar.gz
tar xvf mha4mysql-node-0.53.tar.gz
cd mha4mysql-node-0.53
perl Makefile.PL
make
make test
make install

■mysqlMHAマネージャのインストール
wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.53.tar.gz
tar xvf mha4mysql-manager-0.53.tar.gz
cd mha4mysql-manager-0.53
perl Makefile.PL
perl -MCPAN -e shell
cpan> install Log::Dispatch
make
make test
make install

とりあえずこれを複製していけばノードにもマネージャにもなるサーバが構築できます
次回は今回作成したMHA用種サーバを元に実際にMHAクラスタを作成しMHAを検証してみたいと思います

■参考サイト
http://myhome.munetika.mydns.jp/ossdbwiki/index.php/MySQL-MHA%E3%81%AE%E5%B0%8E%E5%85%A5

2012年10月1日月曜日

PerlとCPANとYAML

最近のcpanはyamlを必要としているのでcpanを使う前にyamlのインストールとcpanの初期設定が必要になる場合はあります

Warning (usually harmless): 'YAML' not installed, will not store persistent state

という警告がcpanでinstall実行時に出る場合は以下の設定をやってみましょう

  1. 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
  2. yum -y install libyaml-devel
  3. yum -y install *YAML*
  4. perl -MCPAN -e shell
  5. cpan> upgrade
  6. cpan> install YAML