2012年8月31日金曜日

jconsoleで接続できない場合の対処方法

よくネットで調べると
  • hostname -iで127.0.0.1が引けるとアウト
  • IPアドレス指定だとアウト
  • JMXのポートをFWでオープンにしていなかったのでアウト
というのを目にします

上記を設定しているのに自分はどうしても接続できませんでした

なぜだろうなぜだろうとネットを徘徊すること30分弱・・・
以下の記事を発見しました
http://gmt-24.net/archives/328

これによるとjconsoleで接続するときにはJMXでオープンにしたポート以外でも通信を行なっているとのこと
で、自分は以下のポートをオープンにしたらjconsoleが使えるようになりました

43627

確かにFWの拒否ログに残ってました・・・

2012年8月30日木曜日

【hadoop】hiveのインストール方法と簡単な実行サンプル

■Hiveとは
Hadoop上のHDFSのデータにSQLを使ってアクセスできるクライアントツールです
「hadoop fs」等なかなかに扱いにくHDFSアクセス用のコマンドをSQLでできるようにしようというコンセプト
insert、selectなど作は全てhadoop上でMapReduceアルゴリズムに基づき動作する

■事前
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
Javaの1.6以上とHadoopの0.2以上が必要です
インストールがまだの方は、以下の記事を参考にインストールしてください
Hadoopインストール方法:
http://kakakikikeke.blogspot.com/2012/08/centos56hadoop.html
http://kakakikikeke.blogspot.com/2012/08/hadoop.html
Javaインストール方法:
http://kakakikikeke.blogspot.com/2012/06/centosjenkinsjavatomcatantgit.html

■インストール
wget http://ftp.tsukuba.wide.ad.jp/software/apache/hive/hive-0.9.0/hive-0.9.0.tar.gz
tar xvf hive-0.9.0.tar.gz
mv hive-0.9.0 hive
mv hive /usr/local/
emacs .bashrc
HIVE_HOME=/usr/local/hiveを設定します
PATH=$HIVE_HOME/bin:$PATHを追加します
cd /usr/local/hive/
mkdir logs
cd /usr/local/hive/conf
mv hive-log4j.properties.template log4j.properties
ログの出力先をhive.log.dir=/usr/local/hive/logs/に変更しました
mv hive-env.sh.template hive-env.sh
chmod 755 hive-env.sh
mv hive-exec-log4j.properties hive-exec-log4j.properties
mv hive-default.xml.template hive-site.xml
ログは/usr/local/hive/logs配下に保存されますが、セッション情報などは/tmp/rootに保存されています(rootユーザで実行した場合)

■実行
start-all.sh(最低でも擬似分散で動作するhadoop環境が必要です)
hive
hive>show databases;
OK
default
Time taken: 6.06 seconds
hive> CREATE TABLE counter (count int, str string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
hive> LOAD DATA LOCAL INPATH '/var/tmp/test.txt' OVERWRITE INTO TABLE counter;
ここで指定しているファイルはローカルファイルです(HDFS上にあるファイルも指定できますが、うまくinsertできませんでした・・・)
あらかじめTSV形式のtest.txtを作成しておいてください
なぜTSVかというとテーブルの定義で「このテーブルはtsv形式ですよ」と宣言しているためです
hive> SELECT * FROM counter;
TSVファイルに書かれている値がインサートされていることがわかると思います
ここで実行してインサートされたデータはファイルとして~/metastore_db配下に保存されます
どうやらApache Derbyが内部的に動作しているようです

■考察
実際に使用するときの流れとしては
  1. hadoop上で解析(頑張ってMapReduceを実装)
  2. 結果の出力ファイルをHDFS上からローカルのある形式で持ってくる(今回はTSV形式)
  3. Hiveを使用してテーブルにインサート
  4. あとはSELECTをうまく使用して結果を取得解析
になるのかなーと勝手に思っています
あとはいきなりHiveでデータを突っ込んでSQLで頑張るかですかね・・・

■参考
https://cwiki.apache.org/Hive/hiveclient.html
JavaからHiveを利用できるクライアントもあるようです
http://wiki.pentaho.com/display/BAD/Loading+Data+into+Hive




2012年8月29日水曜日

GitHubの外部(外向け)グローバルIPアドレス

  • 207.97.227.253
  • 50.57.128.197
  • 108.171.174.178

だそうです。

JenkinsとGitHubを連携しているとHookを使うと思うのですが、その際にIPでポートを絞っている場合には必須になると思います
実は自分はこのIPがわかるまでは全許可で受け付けていましたw
わかってよかったです・・・

P.S 20140206
どうやらGithubのMetaAPIなるもので確認できるようになったようです
https://api.github.com/meta
追記した時点では「192.30.252.0/22」が返ってきました、結構広いな。。。

2012年8月27日月曜日

Vagrantを使って仮想環境を構築してみた

■環境
Windows 7 64bit
Vagrant 1.2.2

■Vagrantとは
バグラントやベイグラントと呼びます
※バグラントとは呼びません、失礼致しました。
Oracle製のVirtualBoxというOSSを使用している仮想化ツールです
VirtualBoxのインストールや設定に関しては過去の記事を参照ください
http://kakakikikeke.blogspot.com/2012/08/oraclewindows7virtualboxvm.html

基本はVirtualBoxで仮想化しローカル環境にVMを作成するツールなのですが
chefやpuppetなどのプロビジョニングツールと連携することでサーバを簡単に壊し、作り直すことができます
テストを流すときとかに何も設定されていない新品のサーバが必要なんてケース多々あると思いますがそんなときに新品のサーバを簡単に作成することができます
詳細はこちら
http://vagrantup.com/v1/docs/getting-started/why.html

Vagrantのバージョンアップに伴いドキュメントもバージョンアップしているようです
http://docs.vagrantup.com/v2/why-vagrant/index.html

■インストール
http://downloads.vagrantup.com/tags/v1.0.3
ダウンロードページも変更しているようなので更新しました
http://www.vagrantup.com/downloads
上記からwindows用のインストーラをダウンロードします

インストールすると自動で環境変数にパスが登録されます
コマンドプロンプトを開いてvagrant -vでバージョンが表示されることを確認します
※C:\HashiCorp\Vagrant\binにインストールされるようです

■Vagrant起動からSSHログインまで
cd C:\vagrant\vagrant

vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
ローカル環境にboxファイルを追加します
vagrantでVMを起動するにはこのboxファイルが必要になります
vagrant init lucid32
追加したboxファイルを初期化します
初期化するとVagrantfileというファイルが作成されます
VagrantでVMを起動するためのルールが記載されているファイルでVMを起動するためにVagrantfileが必要となります
vagrant up
ここでローカルPC上にVMが立ち上がります
初回はboxファイルをダウンロードするので時間がかかります
vagrant box list
登録しているVM(boxファイル)の一覧が表示されます
vagrant ssh
でログインするsshのホスト情報が確認できます
windowsからpoderosaやteraterm等でローカルPCにsshします
自分は以下でsshできました
---
IPアドレス:127.0.0.1
ポート:2222
ID/PW:vagrant/vagrant
---
vagrant halt
でVMをシャットダウンできます
vagrant destroy
でVMを削除します、haltは電源をOFFする動作でdestroyは削除するためサーバ等で操作した設定等はすべて失われます
vagrant -h
他のvagrantコマンドを見ることができます

■Vagrantのアップデート
アップデートしたいバージョンのインストーラをダウンロードサイトから持ってきてインストールすればアップデートできます
http://downloads.vagrantup.com/tags/v1.2.2
過去のバージョンをダウンロードするサイトも変わっていたので更新しました
http://www.vagrantup.com/downloads-archive.html

■Tips
上記に説明では「box add」->「init」->「up」という手順で実施しましたが
vagrant init hashicorp/precise64
vagrant up
の2つの手順でもVMを起動することができます
バージョン1.5(だと思うのですが、間違っていたらすいません)からVagrantCloudという機能ができてここでboxファイルを共有することができるようになりました
その機能のおかげで init の引数にVagrantCloudで公開されている box 名を「username/box_file_name」という形式で指定すると box add と init の処理を同時に実行してくれます
この段階でboxファイルをダウンロードするので、vagrant init hashicorp/precise64 の完了には時間がかかります

2012年8月26日日曜日

【VMware】ESXi5のダウンロード方法

  1. https://my.vmware.com/web/vmware/info/slug/datacenter_cloud_infrastructure/vmware_vsphere_hypervisor_esxi/5_0
  2. にアクセスします
  3. アカウント登録が必要です
  4. すでにアカウントのある方はそのままログインしてください アカウントのない方はCreateAcountでアカウント登録を行なってください
  5. 初回ログイン時にはMy VMwareの利用規約に同意する必要があるので同意します
  6. ログインが完了するとダウンロード画面に遷移するのでRegisterを押下します
  7. ここでもまたアカウントの詳細情報を登録します
  8. これもすでに登録してある人はやる必要がありませんがまだの場合はアカウントの詳細情報を入力する必要があります
  9. 入力が完了したら利用規約に同意して登録します
  10. これでようやくダウンロードすることが可能になります
  11. VMware vSphere Client もここでダウンロードできるようです

結構登録が多くて大変ですが、無料で使えるのを考えると納得でしょう
参考までにー

2012年8月25日土曜日

【Oracle】Windows7へのVirtualBoxのインストール方法と初回VM作成まで

■環境
OS:Windows7 64bit

■インストール
https://www.virtualbox.org/wiki/Downloads
からwindowsのインストーラをダウンロードします
今回ダウンロードしたバージョンは4.1.20になります

インストーラを実行しインストールします
基本的にはデフォルト設定で問題ないですが、途中でオラクル製のドライバのインストールを求められる場合があります





















■仮想マシンの作成
仮想マシンの作成ウィザードではISOからのインストールはしません
仮想マシンの作成が完了したらISOからUbuntuをインストールしていきましょう
ゲストOSのアーキテクチャは32bitを選択しました
64bitを選択する場合はVirtualBoxが動作しているマシンが64bitに対応している必要があります








上記は32bitを選択しています
ここで64bitのUbuntuを選択することも可能です



















■OSのインストール
今回はUbuntuの最新版を使って仮想マシンを作成してみます
以下から事前にダウンロードしておきました
先ほど仮想マシンを作成した際に選択したアーキテクチャの方をダウンロードしてください
http://www.ubuntu.com/download/server/thank-you?distro=server&release=lts&bits=64
http://www.ubuntu.com/download/server/thank-you?distro=server&release=lts&bits=32

まずは作成したVMを起動します




32bitのISOを選択します
ここは作成したVMのアーキテクチャに合わせます





ISOから起動することができました
あとは通常通りUbuntuをインストールしていきましょう



インストール完了です
今回はサーバタイプをインストールしたのでCUIのみです

VirtualBoxからフォーカスを抜ける方法は右Ctrlで抜けられます



以上で終了となります
全体的な感じとしてはVMwarePlayerよりも細かく設定できるなーと感じました
VMwareで使えるディスク形式VMDKでのディスク作成も行えます
UIも直感的で非常に使いやすいと感じました
しいて上げるならコンソールが2バイト文字(日本語)対応していないので、文字化けしちゃうくらいですかねw

あとデフォルトだとNATでインターネットに接続するためのネットワークインタフェースしか刺さっていないので、 ホストオンリーアダプタを刺すことでプライベート側の疎通もできるようになります
ここで刺したインタフェースに対してVirtualBoxをインストールしたWindows7からSSH等でアクセスできるようになります


2012年8月24日金曜日

hadoopで分散処理をやってみた

■概要
前回はhadoopをスタンドアローンモードで実行できるところまで紹介しました
今回は1台で擬似的に分散処理させることができるモード(Pseudo-Distributed Mode)を試してみます

■事前準備、インストール
前回の記事参照
http://kakakikikeke.blogspot.com/2012/08/centos56hadoop.html

■擬似分モードの設定
emacs /etc/hadoop/core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
emacs /etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
emacs /etc/hadoop/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>

ローカルへのsshノンパス設定をします
http://kakakikikeke.blogspot.com/2012/03/10ssh.html

cd /usr/bin
chmod 755 update-hadoop-env.sh stop-mapred.sh stop-jobhistoryserver.sh stop-dfs.sh stop-balancer.sh stop-all.sh start-mapred.sh start-jobhistoryserver.sh start-dfs.sh start-balancer.sh start-all.sh slaves.sh
hadoop namenode -format
start-all.sh
jps
JobTracker,NameNode,DataNode,SecondaryNameNode
が動作していることを確認します

各プロセスのログは/var/log/hadoop/root/配下にあります

動作しているポートは以下になります
netstat -an | grep 50070(NameNode)
netstat -an | grep 50030(JobTracker)
telnet yoshi3 50070
ではどうやらJettyが動作しているようです
ブラウザでアクセスすると現在の分散クラスタの状況が確認できます

■実行
cp -ip /usr/share/hadoop/hadoop-examples-1.0.3.jar .

例1
hadoop fs -put /etc/hadoop input
hadoop fs -ls input/hadoop
hadoop専用の特殊なパスに保存される様子・・・(DFS上に保存されている)

例2
hadoop jar hadoop-examples-1.0.3.jar grep input/hadoop output 'map*'
hadoop fs -ls output
hadoop fs -cat output/part-00000

■停止
stop-all.sh
jps
NameNode系のプロセスが停止していることを確認する


簡単ですが、以上でPseudo-Distributed Modeの紹介を終わります
次は実際に自分の作ったものをhadoopに処理させるところまでやってみたいなー

2012年8月23日木曜日

CentOS5.6にhadoopをインストールする方法

■概要
CentOS5.6にhadoopをインストールして「Local (Standalone) Mode」(スタンドアローンモード)でhadoopを実行してみます

■事前準備
Javaのインストール
http://kakakikikeke.blogspot.com/2012/06/centosjenkinsjavatomcatantgit.html

SSHのインストール
スタンドアローンモードではいらないかもしれません
というかまず入っていないってことはないと思うので気にしないで大丈夫ですw

■インストール
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hadoop/common/hadoop-1.0.3/hadoop-1.0.3-1.x86_64.rpm
rpm -ivh hadoop-1.0.3-1.x86_64.rpm
vi /etc/hadoop/hadoop-env.sh
JAVA_HOMEが正しく設定されているか確認する

自分がrpmからインストールしたときは特に依存関係で怒られることはありませんでしたが、もし怒られた場合は必要に応じてインストールしてみてください

■スタンドアローンモードで実行
cp -ip /usr/share/hadoop/hadoop-examples-1.0.3.jar .
mkdir input
cp -ip /etc/hadoop/*.xml input/
emacs /etc/hadoop/hadoop-env.sh
#export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"
export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"
※128MBだとOutOfMemoryErrorになりました
※実際にメモリの空き容量を見ながら実行したところ150MBほど利用していました
hadoop jar hadoop-examples-*.jar grep input output 'map[a-z.]+'
outputフォルダにgrepで出現した行のカウント結果が出力されます

簡単ですが、hadoop単体での動作は以上です
次は本格的な分散処理とJava以外の動作も試してみたいなーと思ってます

2012年8月22日水曜日

Windows7にVMware Playerをインストールしてみた

■ダウンロード
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/4_0
VMware-player-4.0.4-744019.exeをダウンロードします

■インストール
ダウンロードしたインストール「VMware-player-4.0.4-744019.exe」を実行します
基本的にはしてされているデフォルトの設置で問題ないです
必要があれば変更してましょう















インストールが完了したら再起動します

■設定
VMware Playerを起動します
EULAに同意したあとに実際にVMware Playerが起動します





■サーバを新規作成


新規仮想マシンの作成をクリックします
ISOからサーバを作成するためにISOを選択します
ISOはあらかじめダウンロードしておいてください
※今回はBerry Linxの1.15をインストールしてみます
※Berry Linuxとはhttp://ja.wikipedia.org/wiki/Berry_Linux
まぁ警告が出ていますが気にせずやっていきましょうw


バージョンは無難にFedoraにしておきます


仮想マシン名と場所を選択します
場所はデフォルトの場合はマイドキュメントになります
今回はC:/直下のvmフォルダに仮想マシンのフォルダを作成します


ディスクの容量があまりないので単一ファイルを選択します


もともとのハードについていないので、ハードウェアをカスタマイズかフロッピーとプリンタを削除しました


マシンの作成が開始されます
いろいろと警告が出る場合は基本無視で大丈夫ですw


なんとか起動できたようです
これはCDからのLiveブートになり仮想マシンにOSがインストールされたわけではありません
そもそもBerryLinux自体がライブブートOSになります


とりあえずはvmware-playerを使ってVM上でLinuxを動作させることができました
これでいつでもLinuxがほしいときは簡単に検証等ができそうですね
次やるときは普通にLinuxをインストールしてみたいと思います

2012年8月21日火曜日

【JavaScript】faviconeを円グラフにできるpieconを使ってみた(サンプルあり)

git clone git://github.com/lipka/piecon.git
cp -ip piecon/piecon.min.js /usr/local/tomcat/webapps/ROOT/
cd /usr/local/tomcat/webapps/ROOT/
wget http://kakakikikeke.blogspot.jp/favicon.ico
emacs index.html

<head>
<link rel="icon" href="favicon.ico" />
<script src="./piecon.min.js"></script>
<script>
(function(){
  var count = 0;
  Piecon.setOptions({color: '#ff0084', background: '#bbb', shadow: '#fff', fallback: 'force'});
  var i = setInterval(function(){
    if (++count > 100) {
      Piecon.reset();
      clearInterval(i);
      return false;
    }
  Piecon.setProgress(count);
}, 250);
})();
</script>
</head>


■ポイント
  • favicon.icoはあれば何でも問題ないです
  • デフォルトでは100秒で円グラフが完了する設定になっています
  • 速度は引数2つ目250のところを小さくすると早くなります
  • Piecon.setOptionsで色を設定できます
  • デフォルトだとonLoad後に呼ばれる(っぽいのでロードの進捗率を表示するのは厳しいか)
  • ⇒ボタンをポチポチ押していくと進捗があがるみたいなアンケートページに使えるのか・・・
https://github.com/lipka/piecon
公式は以下です


2012年8月20日月曜日

GitHubAPIを使ってみた(APIv3)

■概要
GitHubのAPIを直接を使って自分のリポジトリにあるREADME.mdファイルを取得してみました
基本的な流れとしては以下を行えばGitHubAPIは使えるようになります
  1. クライアントIDとクライアントシークレットから「アクセストークン」を取得します
  2. アクセストークンを使用してその人だけの情報を取得する
基本GitHubは公開情報なので、GET系を実行するだけならアクセストークンは必要ありません
レスポンスは基本的にはJSONですが指定すればXMLでも取得可能です

アクセストークンを使う場合は以下の記事を参考にしてみてください
http://kakakikikeke.blogspot.com/2012/08/githubapi.html
GET系のAPIは以下の公式URLを参考にしています
http://developer.github.com/v3/libraries/


■使い方
・アカウントの情報を取得する
https://api.github.com/users/kakakikikeke

・Gistの情報を取得する
https://api.github.com/gists
・指定したユーザのGistを取得する
https://api.github.com/users/kakakikikeke/gists

・リポジトリの情報を取得する
https://api.github.com/user/repos
・指定したユーザのリポジトリを取得する
https://api.github.com/users/kakakikikeke/repos
・指定したユーザのリポジトリのREADMEを取得する
https://api.github.com/repos/kakakikikeke/kakabot/readme


URLの最後には「/」がつかないので注意してください
このGET系を使えば情報は簡単に引っ張ってこれそうですね
更新系はちょっと調べてないですが、公式のドキュメントにいろいろかいてありそうです
http://developer.github.com/v3/repos/

2012年8月19日日曜日

GitHubAPIでOAuth認証を使ったアクセストークンを取得する方法

GitHubの情報は基本的には公開情報なのでGETするだけならアクセストークンは必要ないです

GitHubのアクセストークンを取得して可能になることは以下
  • 独自のOAuth認証を作成することができる(よく最近見かける「GitHubアカウントを使う」といったやつです)
  • 更新、削除系の処理を行うことができる
といったところでしょうか

公式のサイトを基本的に参考にはしましたが
http://developer.github.com/v3/oauth/
わりとわかりにくかったので、まとめて見ました
ちょっと下法かもしれませんが参考になればと思います

■取得方法
1.クライアントIDとクライアントシークレットを取得する
  • GitHubのトップページから右上の「Account Settings」を押下
  • 左メニューに「Applications」があるので押下
  • 「Register new application」が右メニューにあるので押下してアプリケーションを登録
「Application Name」「Main URL」「Callback URL」を入力
なんでURLを入れるのかと言うと冒頭でも話をしたとおりにOAuth認証を使用するからです
OAuth認証を実行するURLがMain URLでそこで認証が成功したらリダイレクトするページがCallback URLになります
WebのUIを作るなら考える必要がありますが、特にUIを使用しないのならば適当に入力しましょう
同値でも問題ないです
ただし存在しないURLは入力しないでください
アクセストークンに必要なcodeという情報が取得できなくなります
  • 入力が完了したら「Register application」を投下して登録
  • 再度「Applications」の画面を見ると登録したアプリがあるので押下すると「Client ID」と「Client Secret」があることを確認する
後述しますがここで取得したものがアクセストークンではありません
アクセストークンはこれを使って再度取得します

2.OAuth認証を発生させcode情報を取得する
  • codeを取得するためにOAuth認証を発生させる
  • ブラウザを開いてURLに以下を入力
https://github.com/login/oauth/authorize?client_id=先ほど取得したクライアントID
  • OAuth認証が発生するので自身が持っているアカウントでログイン
  • 先ほど登録した「Callback URL」にリダイレクトされる
ここでURLを見るとリダイレクトされたURLの末尾にcodeというパラメータが付与されているのでメモ
code以下は全てメモしておいてください、stateというパラメータまでメモしてください

3.リクエストを作成してアクセストークンを取得する
  • これまで取得できた情報で以下のリクエストを生成する
https://github.com/login/oauth/access_token?client_id=先ほど取得したクライアントID&client_secret=先ほど取得したクライアントシークレット&code=先ほど取得したcode&state
  • このURLをブラウザでアクセスすると「access_token」というファイルがダウンロードされる
  • ファイルの中身を見るとアクセストークンが記載されている
ファイルの中身がerror=bad_verification_codeとなっている場合はリクエストの生成が正しく行われておりません
取得した情報や最後のstateがしっかり付与されているかどうかを確認しましょう

以上でGitHubAPIのアクセストークンを取得する方法は終了です
ブラウザでアクセストークンを取得するところがかなり下法な気がしますが・・・

2012年8月16日木曜日

【Firefox】選択した部分を翻訳するプラグイン

結構便利だったのでメモしておきます

Google Translator for Firefox
https://addons.mozilla.org/ja/firefox/addon/google-translator-for-firefox/

マウスで選択した状態にしCtrl+F2でその箇所を日本語に変換してくれます
他のタブを開いたり他のブラウザを開いて結果を表示しないので、スマートで使いやすいと感じました
あとはショートカットキーを設定できるのがいいですね

2012年8月15日水曜日

【Jenkins】リモートホストでシェルが実行できるプラグインをやってみた

■名称
Jenkins SSH plugin

■インストール
通常のプラグインのインストール方法と同様です
「Jenkins SSH plugin」を検索してインストールしたらJenkinsを再起動しましょう

■設定方法と確認
Jenkinsのトップから「Jenkinsの管理」「システムの設定」へ
ちょうど真ん中辺りに「SSHリモートホスト」が追加されています
「追加」のボタンを押下すると各入力項目が表示されます
必要な情報を入力しましょう
ちなみに接続できないと以下のようなエラーが表示されます



上記エラーがでないようにユーザ名やパスワードを設定してあげましょう

あとはジョブを作成するとジョブを設定する画面のビルドの項目に新規で
「リモートホストでシェルを実行」が追加されているので、それをビルドとして追加します
先ほど設定した「ユーザ名@ホスト名:ポート番号」がプルダウン上に表示されていると思います
シェルスクリプトの欄にコマンドを並べていけば完成です
(当たり前ですが、そのリモートホストで実行できないコマンドは実行できませんw)
設定が完了したら一度ビルドしてみるといいかもしれません

これでリモートでシェルのテスト等を行えるようになるのかなー
参考まで



2012年8月13日月曜日

【Ruby】Railsを使ってみた(MySQL接続)【サンプルコードあり】

P.S 20140425
だいぶ手順が雑でしたので見直しました、見栄えも修正しております
またCentOS6系でも試してみましたのでCentOS6系の場合はこちらをご参照ください

■概要
Ruby on Railsを使って簡単なアプリを作ってみました
scaffold的なサンプルアプリを作成してみました

■バージョン
CentOS 5.10 64bit
Rails 3.2.7
ruby 1.9.3p125
mysql 5.0.95

■事前
ruby、railsのインストールは必須です
http://kakakikikeke.blogspot.jp/2012/04/centos56ruby.html

足りなかったインストール系は以下
gem install therubyracer
gem install execjs

■rails基本設定
cd /var/tmp
rails new "simpledbform" -d mysql
cd simpledbform/
vi Gemfile
   gem 'therubyracer'
   を追記
rake db:create
   DB作成に関してはこれで代用
rails server
   ブラウザで3000番にアクセスするとRailsのサンプルを表示
   http://localhost:3000/

■controller作成
rails generate controller sdfctl
   sdfctlは好きなアプリ名を入れてください
emacs config/routes.rb
   ここはgenerateしたコントローラの名前を記載します
match 'hello' => 'sdfctl#hello'
match 'bye' => 'sdfctl#bye'

■view設定(controllerとの連携)
touch app/views/sdfctl/hello.html.erb
touch app/views/sdfctl/bye.html.erb
   ここで作成するファイル.erbファイルはテンプレートファイルです
   テンプレートファイルはコントローラで記載したURLマッピングの名称と同値(必須ではないが)にしておくといいです

emacs app/views/sdfctl/hello.html.erb
<h1>Hello</h1>
こんにちは。お元気ですか。
<%= @msg %>
emacs app/controllers/sdfctl_controller.rb
# coding: utf-8
class SdfctlController < ApplicationController
     def hello
          #render :text => 'Hello!' ⇒これは直接テキストを表示する命令、未使用なのでコメントアウト
          @msg = "おげんきだぜー";
     end
                                                                                                                                                                                               
     def bye
          render :text => 'bye!'
     end
end
再起動して/helloにアクセスするとテンプレートを表示

■modelとDB連携
rails generate model name
invoke  active_record
create    db/migrate/20120809010634_create_names.rb
create    app/models/name.rb
invoke    test_unit
create      test/unit/name_test.rb
create      test/fixtures/names.yml

emacs db/migrate/20120809010634_create_names.rb
t.string :first_name
t.string :family_name

rake db:migrate
   migrateコマンドでテーブルを作成
emacs db/seeds.rb
# coding: utf-8
Names.create(:first_name => 'keke', :family_name => 'kakakiki')
Names.create(:first_name => 'keke2', :family_name => 'kakakiki')
emacs app/models/name.rb
attr_accessible :first_name, :family_name
   Can't mass-assign protected attributesのエラーに対応

rake db:seed --trace
   この段階でsimpledbform_developmentにレコードがインサートされるので別途mysqlコマンドで確認
   rails dbconsoleでも確認可能

emacs app/views/sdfctl/hello.html.erb
<h1>Hello</h1>
こんにちは。お元気ですか
<%= @msg %>

<% @name_all.each do |name| %>
[苗字] <%= name.family_name %>, [名前] <%= name.first_name %>

<% end %> 
emacs app/controllers/sdfctl_controller.rb
# coding: utf-8
class SdfctlController < ApplicationController
     def hello
          @sum = 1 + 1
          @msg = "おげんきだぜー";
          @name = Name.all
     end

     def bye
          render :text => 'bye!'
     end
end

rails server
でこの状態で/helloにアクセスするとDBのデータを取得してその値を取得し表示してくれると思います

以上で簡単なサンプルは完了です

■メモ
public/配下が静的ファイルを置く場所
config/routes.rbがリクエストの振り分けを行う、URLのマッピング
controllerのURLマッピングとviewのhtml.erbファイルは密接に関係
MVCモデルの設定ファイルはapp/models, views, controllersがそれぞれ対応
rubyで2バイト文字を先頭で使うときには# coding: utf-8を記載
railsではデータベースを作成する際にmigrateという機能を使用
(DBに直接コマンドを打つのではなくrails特有のスクリプトからDBを構築する手法)
rails serverは毎回行わなくてもMVCの更新でリアルタイムに反映
rubyの「:」はテキストを表している、「:text」「'test'」「"test"」は同値

2012年8月12日日曜日

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

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

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

 <property name="jarname" value="Test.jar" />
 <property name="dir.src" value="src" />
 <property name="dir.lib" value="lib" />
 <property name="dir.dest" value="dest/bin" />
 <property name="javac" value="C:/user/java/6/bin/javac" />

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

 <target name="clean">
  <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="${javac}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <classpath refid="classpath.smx" />
  </javac>
 </target>

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

</project>

今回のポイントは以下
  • サードバーティのJar(俗にいうところのJarライブラリ)も一緒に含めてJarファイルを作成(俗にいうところの実行可能Jarファイル)
  • Tomcatプロジェクトじゃない(笑)

ちなみに前回はこちら
http://kakakikikeke.blogspot.com/2012/07/antjavacclassclassjarbuildxml.html
この2つがあれば大抵のことは実現できる・・・のかw

P.S
実行可能Jarファイルとして作成したいときにはMain-Classのvalueの値をパッケージ名付きの言わばフルパスで記載する必要があります

2012年8月11日土曜日

【Zabbix】zabbix-proxyのインストール方法と設定方法(ディスカバリもあるよ)

かなりいろいろいじって完成したので、ほぼメモレベルです・・・

zabbix-serverの設定はひと通り完了している前提になっています
http://kakakikikeke.blogspot.com/2012/07/zabbixcentoszabbix.html

■zabbix-proxyサーバ
  • zabbix-proxyをrpmからインストール
zabbix-proxy-2.0.0-1.el5.x86_64.rpm
zabbix-proxy-mysql-2.0.0-1.el5.x86_64.rpm
依存するものや足りないものはyumやインターネットから落としたrpmでインストール(mysqlとか)
最終的にrpmは--force --nodepsで入れた
  • heartbeatはインストールしない
  • mysql設定、スキーマ設定(zabbix-serverをインストールするときに読み込むSQLスキーマファイルを同様に読み込む、zabbixユーザの作成を行う)
  • 設定ファイル書換(/etc/zabbix/zabbix_proxy.conf)
パッシプモードで起動すること
zabbix-server、zabbix-proxyのIPの設定とかDBの設定とか
zabbix-proxyは10051でプロセスが起動するようにする
heartbeatをやらないように設定
/etc/hosts変更(zabbix-server、zabbix-proxyのIPとホスト名を記載)

■zabbix-serverサーバ
  • 設定ファイル書換(/etc/zabbix/zabbix_server.conf)
プロキシについて若干ながら変更するところがあった(Proxyで検索すると出てくる)
プロキシとサーバ間のデータのやり取りを行う間隔を設定する
  • WebUIから設定(基本的にはserver側はこれだけ)
  • 分散監視の設定(管理→分散監視)
モードはパッシブでzabbix-proxyのIPを直接指定、DNSもおなじIPで指定
  • ディスカバリの設定(設定→ディスカバリ)
snmpでディスカバリできるように設定、バージョンはv2(snmpに関しては自分がsnmpでディスカバリするようにしたかっただけなので、通常はICMPやSSHで問題ないと思われる)デバイスの固有性を特定する基準はIPアドレスに設定
  • アイテムの作成、テンプレートの追加
snmpで監視するためsnmpのアイテム作成、テンプレート追加
  • ディスカバリで見つけたやつを追加するホストグループを作成
  • アクションの設定(設定→アクション)
作成したアイテムやホストグループがディスカバリで発見されたホストに設定されるようにアクションを設定

■その他
  • zabbix-proxyでDBの整合性が合わないよーなんていうエラーが出たら再構築するしかない
  • 正常に動作している場合はzabbix-serverとzabbix-proxyのログにデータのやり取りを行うログが記載される
  • プロキシ経由のディスカバリが成功すると「監視データ→ディスカバリのステータス」が表示されUPがカウントされていく
  • 以外にはまったのがiptablesでした、10051でサーバとプロキシがやり取りできるようにポート開放の設定はお忘れなく

他にもいろんな困難にぶちあたったような気がするけど覚えてない・・・

2012年8月10日金曜日

failed to update local proxy cofiguration copy: database error

zabbix-proxy2.0を動作させるところでエラーとなりました
おそらくはDBの不整合エラーです
原因は不明ですが、自分が解決したのはzabbixデータベースの再構築でした

また再構築したときはdrop→createとしたあとにschema.sqlのみを再構築したDBに適用しました
他のをやるとまたエラーになってしまいました

DBの再構築以外の復旧方法はちょっとわかりませんでした

備忘録として残しておきます

2012年8月9日木曜日

Mysqlで現在のコネクション数を確認する方法

mysqladmin -u root extended-status | grep -E 'Max|Threads'

  • Max_used_connections・・・これまでに記録された同時接続数の最大値
  • Threads_connected・・・現在開いている接続の数(必ず1以上あります)
  • Threads_created・・・これまでに生成されたスレッド数
  • Threads_running・・・スリープ状態になっていないスレッド数(必ず1以上あります)

2012年8月8日水曜日

【Ruby】フレームワークRackを使ってみた(サンプルコードあり)

RubyとGemは以下の記事を参考にインストールしてください
http://kakakikikeke.blogspot.com/2012/04/centos56ruby.html

■Rackインストール
gem install rack
mkdir /usr/local/rack/
cd /usr/local/rack/

■サンプルプログラム取得
git clone git://github.com/kakakikikeke/kakabot.git
cd kakabot
rackup geme.ru

ブラウザで9292ポートにアクセスすると(実はワタシが作った)kakabot.のサンプルプログラムが動作します
rackは非常に簡単ですw

気になったのはRuby中で日本語などの2バイト文字を使用するときには
  • # coding: utf-8 をRubyファイルの先頭に付与する
  • formタグ等でリクエストを制御するときにはaccept-charsetやenctypeでしっかりとUTF-8と指定する必要がある
ってところです。まぁ当たり前なんですが


2012年8月7日火曜日

【Zabbix 1.8.13】zapcatでJMXを監視する方法

zabbixのバージョン2系ではJMXを監視するのにJavaProxyというProxyを立てることで監視できるようになりますが、1.8系の場合はまだその機能がないです
その場合には「zapcat」と呼ばれるモジュールを使うことでそのモジュールが動作しているポート上でJMXを動作させることでJMXを監視することができるようになります

何はともあれ設定方法です

■設定方法
・zapcatをインストール
http://sourceforge.jp/projects/sfnet_zapcat/downloads/zapcat/zapcat-1.2/zapcat-1.2.zip/
unzip zapcat-1.2.zip
cd zapcat-1.2
mv zapcat-1.2.war /usr/local/tomcat/webapps/
service tomcat restart
http://yoshi3:8080/zapcat-1.2/にアクセス
zapcatのウェルカム画面が表示されれば10052で監視できるようになっています

・JMXの設定
今回はTomcatにJMXの設定を入れ込み値を監視してみます
ps aux | grep java | grep jmx
→何も表示されないことを確認
cd /usr/local/tomcat/bin
touch setenv.sh
chmod 755 setenv.sh
emacs setenv.sh
以下を記載する
---
export CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9012 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
---
→ポート番号は何でもOK
service tomcat start
ps aux | grep java | grep jmx
→JMXの設定が入っている状態でTomcatが起動していることを確認

・Zabbix Serverでホストの設定
zabbixのホスト作成で10052をZabbixエージェントのポートしてホストを作成する
その際にテンプレートの追加で「Template Java」を追加する
エージェントの起動が確認できたら、各アイテム項目が監視できているか確認する
(少しかけているが気にしない)
グラフはすでにいくつか登録してあるので、スクリーンに登録するといいと思います

参考サイト
http://d.hatena.ne.jp/fat47/20110926

基本は2系を使うのがいいと思うんですが、どうしても1.8系でないと・・・という場合には参考にしてみてください
お試しあれー

2012年8月6日月曜日

【Zabbix】UserParameterを指定して好きな値を監視する方法

■バージョン
Zabbix 1.8.13

■zabbix-agentの設定
emacs /etc/zabbix/zabbix_agentd.conf
⇒zabbix_agent.confではないので注意しましょう
以下を追記します
UserParameter=snmpwalk.memTotalReal,snmpwalk -OnQ -v 2c -c public -t 2 -r 1 yoshi3:161 .1.3.6.1.4.1.2021.4.15.0
⇒今回はsnmpでメモリ上でキャッシュしているサイズを取得します
service zabbix-agent restart
zabbix_get -s 127.0.0.1 -ksnmpwalk.memTotalReal
⇒zabbix_getコマンドで設定したUserParameterが取得できているか確認します
⇒-sはホスト名でも指定できますが、うまく取得できない場合があるのでIPアドレスで確認しましょう

■zabbix-serverの設定(WebUIからの設定)

上記の設定のようにアイテムをZabbixのWebUIから新規作成しましょう
アイテムを新規作成する画面に行く方法は
「設定」→「テンプレート」のアイテム欄ををクリックすると
右上に「アイテムの作成」という欄が表示されます

これでテンプレートにアイテムを作成すれば
そのテンプレートを設定されたホストは今回作成したアイテムを監視できるようになります
今回はsnmpでの監視をするようにしたので当たり前ですが、監視対象のサーバにはnet-snmpがインストールされている必要があります

UserParameterを使用すればなんでも好きなモノが監視できるようになりますね
お試しあれ

2012年8月5日日曜日

Redmineの活動ページで「Wiki編集」「メッセージ」「作業時間の記録」をデフォルトで表示する方法

Redmineの活動ページの表示で「Wiki編集」「メッセージ」「作業時間の記録」はデフォルト設定ではチェックがONになっておらず、わざわざONにして再表示する必要があります

またログインをしなおしたりしてもチェックが外れてしまいます

ので今回はそれをデフォルトでチェックONにする方法を紹介します

解決方法は直接ソースコードを編集するしかありませんw
Redmineがインストールしてあるフォルダの
lib/redmine.rb
を編集します

編集するのは以下の部分です

Redmine::Activity.map do |activity|
  activity.register :issues, :class_name => %w(Issue Journal)
  activity.register :changesets
  activity.register :news
  activity.register :documents, :class_name => %w(Document Attachment)
  activity.register :files, :class_name => 'Attachment'
  activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => true
  activity.register :messages, :default => true
  activity.register :time_entries, :default => true
end

下3行赤字の部分がデフォルトではfalseになっているためチェックが入っていません
ここをtrueの設定にすることでデフォルトでONになっています

どうしてUIから設定できるようにしなかったんだw

ちなみにRedmineのバージョンはちょっと古くて1.4.3.stableですw(それがいけないのかもねw)

2012年8月4日土曜日

【Ruby 1.9】ArgumentError: invalid byte sequence in UTF-8

以下2つで対応できました

.encode("UTF-8","UTF-8").gsub(/\r/,"") 」を文字列の最後につける
accept-charset="UTF-8" enctype="UTF-8"」をformの指定で行う

今回のポイントはformからのリクエスト送信ってことですかね
ちゃんとHTMLのformタグの中に文字コードを指定する必要があったみたい

2012年8月2日木曜日

No more variables left in this MIB View (It is past the end of the MIB tree)

のときの速攻対処方法

emacs /etc/snmp/snmpd.conf

に以下を追加

view systemview included .1.3.6.1.

完了したら再起動

service snmpd restart

で値が取得できるようになるはずです

PoderosaのマクロでSSHログイン後にコマンド実行する方法

import Poderosa;
import Poderosa.ConnectionParam;
import Poderosa.Terminal;
import Poderosa.Macro;
import Poderosa.View;
import System.Threading;

var env = new Environment();

// hosts info
var hosts = [{
  hostname: 'hostname',
  ip: 'xxx.xxx.xxx.xxx',
  id: 'username',
  pass: 'password',
  cmd: 'ls -ltr',
  title: 'ls'
 }
]

// Login
var l = hosts.length;
for (var i = 0; i < l; i++) {
 var con = connect(hosts[i].hostname, ConnectionMethod.SSH2, 22, EncodingType.UTF8, hosts[i].id, hosts[i].pass, hosts[i].title);
 wait("$");
 sendln(hosts[i].cmd);
}

function sendln(s) {
 con.TransmitLn(s);
}
 
function wait(s) {
 Thread.Sleep(10);
 var res = con.ReceiveData();
 while(res.indexOf(s) == -1) {
 Thread.Sleep(10);
  res += con.ReceiveData();
 }
}

function connect(host, method, port, encoding, id, password, title) {
 var param = new SSHTerminalParam(method, host, id, password);
 param.Caption = title+"["+host+"]";
 param.Port = port;
 param.Encoding = encoding;
 var connection = env.Connections.Open(param);
 return connection;
}

wait("$")は「$」という文字列が表示されるまで待つメソッドです
たまーに動作しないこともあるので、Thread.Sleep(5000);とかで普通に5秒止めたほうがいい場合もあります
sendlnメソッドは引数で渡したコマンドを実行するメソッドです

あとは以下をダウンロードしてPoderosaにマクロを登録するだけです

http://www.poderosa.org/download/plugins/Macro402.tar.gz
マクロの登録方法は検索すれば出てくると思いますw

参考までに

2012年8月1日水曜日

【Windows】コマンドプロンプトで空白やハイフンを含むファイルの内容を一行ずつ表示するバッチファイル

ちょっと苦戦したのでメモ

@REM Read File and echo
@echo off
for /F "EOL=# TOKENS=* " %%i in (.\test.txt) do @echo %%i

ポイントはEOFとTOKENSの指定でした。。
誰かのためになれば・・・orz