2013年1月31日木曜日

【VIJava】GuestProcessManagerを使ってVMのプロセス情報を操作するサンプルコード

https://gist.github.com/4633441

2013年1月30日水曜日

【Zabbix】Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer

zabbix_get をしたときにでてきました
おそらくはネットワークの設定かなーと思っていたのですが、まさかでしたので記載しておきます

zabbix_agent.confの「Server=」の部分に記載されているIPによって
そのzabbix-agentがプライベート通信するのかグローバル側で通信するのかが決定する

つまり書かれているIPによって通信するNICが変わってることですね
しらんかったぜよ

ネットワーク系のエラーだったのFWかなーと思ったが・・・まさかでした
冷静になれば確かにと思うんですがね

2013年1月28日月曜日

phpMyAdminで設定の拡張機能を使用する方法

■環境
[root@yoshi3 phpMyAdmin]# 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 phpMyAdmin]# cat /etc/issue
CentOS release 5.8 (Final)
Kernel \r on an \m

phpMyAdminバージョン:5.0.95

■前提
phpMyAdminがすでにインストールされるいる
インストール方法は以下のようにインストールします
http://kakakikikeke.blogspot.jp/2012/11/centos63phpmyadmin.html

■設定手順
cd /var/www/html/phpMyAdmin/examples/
mysql -u username -h hostname -p < create_tables.sql
mysql -u username -h hostname -p < upgrade_tables_mysql_4_1_2+.sql
mysql -u root
CREATE USER 'pma'@'%' IDENTIFIED BY '***';
GRANT SELECT ,INSERT ,UPDATE ,DELETE ,CREATE ,DROP ,FILE ,INDEX ,ALTER ,CREATE TEMPORARY TABLES ,CREATE VIEW ,SHOW VIEW ,CREATE ROUTINE,ALTER ROUTINE, EXECUTE ON * . * TO 'pma'@'%' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
cd /var/www/html/phpMyAdmin/
emacs config.inc.php
以下の部分をコメントアウトし有効状態にします
/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
$cfg['Servers'][$i]['recent'] = 'pma_recent';
/* Contrib / Swekey authentication */
$cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';
このとき$iがサーバの変数参照になっているので、create_tableしたサーバの順番の
箇所に書き換える必要がありますので注意を

■確認
一旦phpMyAdminをログアウトし再度ログインして「この設定を永続的に有効にするには、phpMyAdmin 環境保管領域が必要です。」の警告が表示されないことを確認する
これで拡張設定が使えるようになりました
次回はこの機能を使ってphpMyAdminにログインしているセッションのタイムアウトを時間を設定したいと思います

2013年1月26日土曜日

.emacs設定メモと便利コマンドメモ

■.emacs設定
※chefのcookbooksとしてgithubで公開しました
・cookbooks
https://github.com/kakakikikeke/cookbooks-emacs
・.emacs
https://github.com/kakakikikeke/cookbooks-emacs/blob/master/files/default/dot_emacs
  1. JDEEインストール時の設定
  2. http://kakakikikeke.blogspot.com/2013/03/emacsjavajdee.html
  3. yasnippetインストール時の設定
  4. auto-completeインストール時の設定
  5. auto-java-completeインストール時の設定
  6. http://kakakikikeke.blogspot.com/2013/03/emacsjava.html
  7. anythingインストール時の設定
  8. http://kakakikikeke.blogspot.com/2013/03/emacsanything.html
  9. flymakeインストール時の設定
  10. multi-termインストール時の設定
  11. http://kakakikikeke.blogspot.com/2013/03/emacsmulti-termel.html
  12. キーバインドの変更
  13. 起動時のバッファ設定
  14. バックアップファイルの保存先の指定
  15. ファイルオープン時の警告設定
  16. w3mインストール時の設定
  17. http://kakakikikeke.blogspot.com/2013/03/emacsw3m.html
  18. insert-numberインストール時の設定
  19. http://kakakikikeke.blogspot.com/2013/03/emacslisp.html
  20. split4インストール時の設定
  21. http://kakakikikeke.blogspot.com/2013/04/emacs4elisp.html
  22. emacs serverとして動作する設定
  23. NIFTYCloud SDK for elispインストール時の設定(作成中)
  24. XML Parserインストール時の設定
  25. http://kakakikikeke.blogspot.com/2013/04/emacsxml.html
  26. BufferListをソートするための関数定義とキー割り当て
  27. PHPモードの有効化
  28. Markdownモードの有効化
  29. 動的略語変換用のキーバインド割り当て

■便利コマンド
矩形文字挿入 Ctrl+x, r, t でマーク設定してある矩形範囲に文字挿入
矩形切り取り Ctrl+x, r, k でマーク設定してある矩形範囲を切り取り
矩形貼り付け Ctrl+x, r, y で現在のカーソル位置から矩形切り取りした情報を貼り付け

.emacs設定反映 ESC-x でミニバッファモードになり eval-buffer を実行
現在のキーバインド一覧表示 ESC-x でミニバッファモードになり describe-bindings

Buffer Listの操作方法
Ctrl+d で削除予約
u で削除予約解除
x で実行
s で保存していないファイルを保存する
1 でバッファを開く

terminalモードを実行する(bashを使うことができるモード)
ESC-x でミニバッファモードになり terminal-emulator
Ctrl+6 b でterminalモードから選択した他のバッファ切り替え
Ctrl+6 o でterminalモードから開いている他のバッファに移動

縦に分割する Ctrl+5 (split-window-vertically)
横に分割する Ctrl+2 (split-window Ctrl+q TAB でタブ文字入力

前回のコマンドを再度実行する Ctrl+x, ESC, ESC

2013年1月25日金曜日

【Jenkins 】FATAL: Could not apply tag jenkins-project____android-data-trade-sample-2

githubにコミットがあったらgithubからのhookを検知してビルドが実行されるジョブでずっと以下のようなエラーが出続けていた

Started by user root
Building in workspace /root/.jenkins/jobs/project____android-data-trade-sample/workspace
Checkout:workspace / /root/.jenkins/jobs/project____android-data-trade-sample/workspace - hudson.remoting.LocalChannel@3ca2d904
Using strategy: Default
Fetching changes from 1 remote Git repository
Fetching upstream changes from git://github.com/kakakikikeke/android-data-trade-sample.git
Seen branch in repository origin/HEAD
Seen branch in repository origin/master
Commencing build of Revision fc5c1e5930cff29f44d5b04f0b8efd98f3c03442 (origin/HEAD, origin/master)
Checking out Revision fc5c1e5930cff29f44d5b04f0b8efd98f3c03442 (origin/HEAD, origin/master)
FATAL: Could not apply tag jenkins-project____android-data-trade-sample-2
hudson.plugins.git.GitException: Could not apply tag jenkins-project____android-data-trade-sample-2
 at hudson.plugins.git.GitAPI.tag(GitAPI.java:737)
 at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:1320)
 at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:1268)
 at hudson.FilePath.act(FilePath.java:851)
 at hudson.FilePath.act(FilePath.java:824)
 at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1268)
 at hudson.model.AbstractProject.checkout(AbstractProject.java:1308)
 at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:679)
 at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:584)
 at hudson.model.Run.execute(Run.java:1516)
 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
 at hudson.model.ResourceController.execute(ResourceController.java:88)
 at hudson.model.Executor.run(Executor.java:236)
Caused by: hudson.plugins.git.GitException: Command "git tag -a -f -m Jenkins Build #2 jenkins-project____android-data-trade-sample-2" returned status code 128:
stdout: 
stderr: 
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@yoshi3.(none)')

 at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:786)
 at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:748)
 at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:758)
 at hudson.plugins.git.GitAPI.tag(GitAPI.java:735)
 ... 13 more

なんやこれ!なんやこれ・・・
って結構悩んだ
で、結局原因は

glassfish上で動かしていたため

実はちょっと前にアプリサーバをtomcatからglassfishに切り替えてそのときにJenkinsのコンテナもそちらに移動した
確かにそのときは起動したところまでくらいしか確認してなかったからな・・・
まさかそんなところに原因があったとは・・・

ちなみに
Jenkinsでcapistranoを連携しているジョブでも以下のようなログが大量に吐かれてました

Started by user root
Building in workspace /root/.jenkins/jobs/deploy_____shorten-the-url/workspace
[workspace] $ /bin/sh -xe /tmp/hudson4760269984174449186.sh
+ cd /usr/local/cap
+ cap deploy:update_code
/tmp/hudson4760269984174449186.sh: line 3: cap: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

上記もtomcatに戻したらエラー吐かなくなりやした
ってことを考えると環境変数的なやつがglassfish上だと受け継がれてないような気がします
まぁ自分はglassfishあきらめてtomcatにしましたけどね!!w

2013年1月24日木曜日

Zabbixでguestユーザを削除する方法

Zabbixにはデフォルトでguestという名前のユーザが存在しています
こいつはUIからでは消さないみたいで、使わなったりセキュリティ的にあまりよろしくありません
ということで直接DBを操作して削除してみました
mysql -u zabbix -p zabbix
DELETE FROM `zabbix`.`users` WHERE `users`.`userid` = 2
何もしてなければuseridの2番がguestユーザだとは思います
違っていたら適宜変更してSQLを発行してください

UIにログインできないことと他のユーザでログインしてguestユーザがいないことは確認しました
動作的にも何も問題なさそう

Jenkinsでジョブ名に命名規則を設定する方法

1. Jenkinsの管理を開きます


2. システムの設定を開きます


3. 設定画面の上段あたりに「プロジェクト名の制限」という欄があるので一旦チェックをONにしてから規則を入力します
※規則には正規表現が使えます



ジョブが増えてくるとどうしても命名規則でジョブをグルーピングしなければならなくなるのがフリー版の残念なところ
エンタープライズ版はフォルダという概念があるからフォルダで上位を区切ってあげれば簡単にグルーピングできるんですよね

2013年1月23日水曜日

【Linux】ctrl+sで画面が動かなくなってしまった場合の対処方法

ctrl+q

または

ctrl+x, ctrl+q

で抜けれます
Linuxのctrl+sは画面ロックの状態になるキーなので画面ロックの状態になってしまっただけです
慌てず上記コマンドで抜けましょう

ちなみに慌てまくって、キーを押しまくってctrl+qするとそれまでに押したキーが全部ターミナルに送信されてしまいますので、注意してctrl+qはしてください

※xkeymacsを使っているとctrl+qがxkeymacsのON/OFFになってしまうので、一旦xkeymacsを終了する必要があります

2013年1月22日火曜日

【Google】BloggerのAPIを使ってブログ記事を取得する方法

■手順
1. blogIDを取得する
Bloggerのダッシュボード画面から取得できます
ダッシュボードにアクセスした際のURLのにあるblogID=XXXXXの部分
http://support.google.com/blogger/bin/answer.py?hl=en&answer=42191

2. Google API Keysを取得します
Google Accountの登録が必要です
Google Accountを登録したらGoogle API CosoleからBlogger API v3のAPI Keyを取得します
https://code.google.com/apis/console/

※どうやらBlogger API v3のAPI Keyは申請フォームから申請しないと取得できないみたいです
申請が通るとメールでAPI Keyの連絡がくるそうです

3. リクエストを生成する
https://www.googleapis.com/blogger/v3/blogs/{blogID}/posts?fetchBodies=true&key={YOUR_API_KEY}

4. 実行する
生成したリクエストをブラウザをたちあげてURLに貼り実行すればOK
Linux環境があるならばurlコマンド等でも代用出来ます

5. 次のページを取得する
https://www.googleapis.com/blogger/v3/blogs/{blogID}/posts?fetchBodies=true&maxResults=10&pageToken={pageToken}&key={YOUR_API_KEY}
どうやら1ページで取得できる最大の記事数は10件なようです(maxResultsで指定できます)
なので、pageTokenパラメータで次のページに遷移してまた10件と取得しかないと全件取得できません
pageTokenはレスポンスの「nextPageToken」として返却されるのでそれをレスポンスから解析後、次のページにいくためのリクエストを生成するときに埋め込む必要があります

■その他
Blogger API v3.0 リファレンス
https://developers.google.com/blogger/docs/3.0/reference/index

SDK一覧
https://developers.google.com/blogger/docs/3.0/libraries

リクエスト生成ツール
以下のURLでblogIDからAPIをサンプルで実行することができます
https://developers.google.com/blogger/docs/3.0/libraries
Googleってこういうのあるから素敵ですよね


あと実はBlogger APIを使おうとしたのは記事のアクセス数でソーティングできないので、自分で作ろうと思っていたのですが、どうやらアクセス数はAPIでも取れないみたいで結局あきらめましたw
残念・・・

2013年1月21日月曜日

Windows Server 2008R2で追加ディスクを実施する方法

■概要
物理ディスクはすでに接続している状態としてWindowsにそれをドライブとして認識させる方法を紹介します

■手順
1. スタートからコンピュータの管理を開きます


2. ディスクの管理を選択すると追加したディスクが「未割り当て」で存在しているのが確認できます


3. 右クリックからオンラインを選択
選択はすべてデフォルトのままで問題ないです


4. 再度右クリックでディスクの初期化を選択


5. 先ほどとは違う隣の場所(黒く塗られている部分)で右クリックし「新しいシンプルボリューム」を選択
ここも選択はすべてデフォルトで問題ないです


6. 図のようになれば完了です、エクスプローラを開いてファイルやフォルダが作成できることを確認しましょう



ちなみに追加ディスクを削除するときには「ボリュームの削除」を実施して再度黒状態になってから追加ディスクをはずしてください

2013年1月18日金曜日

【シェルスクリプト】ホスト名とユーザを判断して実行するif文

if [ `hostname` == 'yoshi3' -a `whoami` == 'root' ]
then
  hostname
else
  echo "NG"
fi

備忘録として書いておいきます

2013年1月17日木曜日

capistranoでROLESが引数に指定されているか確認する方法

どうってことはなく、capistranoはrubyを記述することができるので
if ENV['ROLES'] != nil
 puts ENV['ROLES']
end
で環境変数を参照すればROLES指定をチェックすることができます
同様にHOSTS等もこれで確認することができます

引数に必ずROLESが指定されていないと実行されない等の条件を付けたいときには使えそうです

2013年1月16日水曜日

【Selenium】[error] Unknown command: 'while'

Selenium IDEはデフォルトではwhileという命令を使用できないようです
拡張のJavaScriptをインストールすると動かせます

  1. https://github.com/darrenderidder/sideflow/blob/master/sideflow.js
  2. からJavaScriptファイルを「goto_sel_ide.js」という名前でダウンロード
  3. Firefoxを起動し、ツールから「Selenium IDE」を起動
  4. オプション→設定を開く
  5. 「Selenium Core 拡張スクリプト(user-extension.js)のパス」という欄にダウンロードしたJavaScriptファイルを設定
  6. OKして一旦Selenium IDEを閉じて再度起動する
  7. whileの構文を使ったテストケースを記載する(以下は100回ループしてリフレッシュするサンプル)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="http://xxx.xxx.xxx.xxx/" />
<title>test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">test</td></tr>
</thead><tbody>
<tr>
    <td>store</td>
    <td>0</td>
    <td>i</td>
</tr>
<tr>
    <td>while</td>
    <td>storedVars.i++&lt;100</td>
    <td></td>
</tr>
<tr>
    <td>refresh</td>
    <td></td>
    <td></td>
</tr>
<tr>
    <td>endWhile</td>
    <td></td>
    <td></td>
</tr>
</tbody></table>
</body>
</html>

※「storedVars」っていう名前の変数は定義されているものだから勝手に小文字にしたりしないでね
(自分はこれで結構はまった・・・)
お試しあれ

参考サイト:http://51elliot.blogspot.jp/2008/02/selenium-ide-goto.html

2013年1月15日火曜日

公開鍵認証sshをパスワード認証sshに切り替えるシェルスクリプト

#!/bin/sh
sed -i -e "s/^PermitRootLogin/\#PermitRootLogin/g" /etc/ssh/sshd_config
sed -i -e "s/^PasswordAuthentication/\#PasswordAuthentication/g" /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
echo "password" | passwd --stdin root

CentOSベースのスクリプトになります

AWSやニフティクラウドのように起動時にシェルスクリプトが実行できる環境があれば
サーバを起動した直後にパスワード認証に変更することも可能になります

ただ、当たり前ですがセキュリティ的にはあまくなりますので、
その辺は自己責任で使用してください。

基本的には救済のときに使用する感じですかね

お試しあれー

2013年1月9日水曜日

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

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

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

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

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

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

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

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

2013年1月8日火曜日

opensslで作成したkeystoreから秘密鍵を抽出する方法

■概要
opensslでCSR(企業情報)を作成する際にkeystoreが同時に作成できますが、
秘密鍵を単体ではなくkeystore埋め込み形式で作成してしまった場合に秘密鍵の抽出は
keytoolでは行えません
別途プログラムを作成して実施する必要があるので、その方法を紹介します

■プログラムダウンロード
以下のサイトにアクセス

http://code.google.com/p/java-exportpriv/

Downloadsからtgzのファイルをダウンロード
ダウンロード後展開するとBase64Coder.javaとExportPriv.javaがあるのでそれをeclipseの適当なパッケージに展開

■設定
パッケージ名がソースに記載されていないので、パッケージ名を入力
実行が必要なので引数に「keystore名」「エイリアス名」「keystoreのパスワード」
エイリアス名は抽出したい秘密鍵のエイリアスを入力します

※わからない場合はkeytoolコマンドを使って直接keystoreを覗いてエイリアス情報を確認してみてください

■実行
ExportPrivを実行します

標準出力にキーの情報が表示されるので、すべて選択してテキストに貼り付けて保存すれば秘密鍵ファイルの作成は完了です

2013年1月7日月曜日

OOM Killerの発生原因と対処方法

■概要
Linux上のメモリをすべて使い果たし空きメモリを確保するためにOOM Killerというプロセスが動作し
既存のプロセスを「無作為」にkillしまくるという仕組み

■発生原因
メモリ不足からのスワップ領域不足
(スワップ領域まで食いつぶすと発生するようです)

■対処方法
  • メモリ増強
  • swap領域増加
  • パラメータチューニング(設定ファイル編集)
  • OOM Killer実行抑止(設定ファイル編集)
(他ググればいろいろとでてきますw)

■エラー文
/var/log/messagesに以下のようなログがでるとOOMが発生しています
Node 0 HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 5*4kB 5*8kB 3*16kB 4* 32kB 4*64kB 2*128kB 1*256kB 0*512kB 2*1024kB 0*2048kB 0*4096kB = 3052kB
Node 0 DMA32: 5*4kB 5*8kB 3*16kB 4*32kB 4*64kB 2*128kB 1*256kB 0*512kB 2*1024kB 0*2048kB 0*4096kB = 5440kB
Node 0 Normal: empty
Node 0 HighMem: empty
1154 pagecache pages
Swap cache: add 1141628, delete 1141308 find 296920/345846, race 0+14
Free swap = 0kB
Total swap = 2152700kB