<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BPS株式会社 開発ブログ Beyond Perspective Solutions LTD. &#187; Linux</title>
	<atom:link href="http://www.bpsinc.jp/blog/archives/category/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bpsinc.jp/blog</link>
	<description>BPS株式会社（Beyond Perspective Solutions）のプログラマによる技術・開発などに関してのブログです</description>
	<lastBuildDate>Wed, 20 Jul 2011 08:14:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Monitで自作デーモンの監視</title>
		<link>http://www.bpsinc.jp/blog/archives/1313</link>
		<comments>http://www.bpsinc.jp/blog/archives/1313#comments</comments>
		<pubDate>Mon, 05 Apr 2010 10:03:59 +0000</pubDate>
		<dc:creator>tomotaka</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[伊藤]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1313</guid>
		<description><![CDATA[おひさしぶりです、伊藤です。
今日はプロセス監視ツールMonitで、自作のデーモンプログラムの死活監視と、死んじゃったら(+おかしくなったら)再起動してもらうという仕組みを構築する方法をご紹介したいと思います。
まず、自 [...]]]></description>
			<content:encoded><![CDATA[<p>おひさしぶりです、伊藤です。</p>
<p>今日はプロセス監視ツール<a href="http://mmonit.com/monit/">Monit</a>で、自作のデーモンプログラムの死活監視と、死んじゃったら(+おかしくなったら)再起動してもらうという仕組みを構築する方法をご紹介したいと思います。</p>
<p>まず、自作プログラムですが、どこか適当なところに自分のプロセスIDを記録するファイル(pidファイル)を作ってもらう必要があります。今回作業したマシンはUbuntu Linuxでしたので、/var/run/hoge.pidのような感じで、プロセスIDを格納しただけのファイルを置いておきます。</p>
<p>Monitくんは、このファイルの場所を教えておき、このファイルに記録されているIDのプロセスが死んでいたり、メモリを以上に消費していたり、CPUを100%使っていたり、といった条件で再起動を行わせるよう設定できる便利ソフトです。</p>
<p>Ubuntu Linuxにはパッケージ管理システムaptがあるので、以下のようにしてインストールできます。</p>
<pre>
$ sudo aptitude install monit
</pre>
<p>設定ファイルは/etc/monit/monitrcになります。以下のように書き換え＋書いてやればokです。</p>
<pre>
# 最初の方の基本設定を書き換え
set daemon 120 # 120秒ごとに監視
set alert tomotaka@bpsinc.jp # アラートメールが飛ぶあて先

# (snip)

# 自分のデーモンの監視設定を追加
check process hogehoge
    with pidfile "/var/run/hoge.pid"
    start program = "/home/bps/bin/hoge.sh start"
    stop program = "/home/bps/bin/hoge.sh stop"
    if 2 restarts within 3 cycles then timeout
    if totalmem &#62; 100 Mb then alert
    if cpu usage &#62; 95% for 3 cycles then restart
</pre>
<p>それぞれの意味はなんとなくわかる通りです。起動コマンドはstart program, 停止コマンドはstop programで指定して、メモリを100MB以上消費していたらアラートを投げるなどといった細かい条件を設定できます。より細かい設定項目については<a href="http://mmonit.com/monit/documentation/monit.html">Monitプロジェクトのドキュメント</a>を見てみてください。<br />
TCPによる接続がダメだったら、とかファイルのMD5チェックサムが変わっていたら、パーミッション、inode、タイムスタンプが変わっていたら、などさまざまな条件設定が可能です。<br />
URLのチェックや、SIP、pingのチェックなども条件に設定できます。これはすごい。</p>
<p>とりあえず、自分のデーモンを監視させたいだけでしたらmonitrcにデフォルトで入っている他のデーモン監視設定は全部コメントアウトして、慣れてきたら少しずつコメントアウトをはずしていくのがオススメです。</p>
<p>設定が終わったらmonitを起動してあげましょう。</p>
<pre>
$ sudo /etc/init.d/monit start
</pre>
<p>自分のデーモンが死んでしまったら、ちゃんとmonitによって、再起動されるかどうか？ psで自分が走らせているプロセスを見つけてkillコマンドで殺すと、うまくいっていれば、次にmonitがプロセスをチェックしたタイミングでアラートメールでmonitが再起動した旨を伝えてくれるはずです。</p>
<p>Apacheなどをmonitで監視するという例はよく見かけましたが、自分で作ったデーモンをmonitで監視させるという記事があまり(とくに日本語では)見つかりませんでしたので書いてみました。<br />
デーモンのように、落としてはいけないプログラムを自分ひとりでApacheやMySQLなどのたくさんの人がブラッシュアップしているクオリティに持っていくことは難しいです。<br />
デーモンプログラムにもきちんと例外補足やロギングの仕組みを入れておけば、デバッグもしやすく、落ちにくいプログラムにしていくことが可能ですが、個人で実験できる量というのは24時間365日連続稼動時にアプリケーションが遭遇する無限の可能性の前では、残念ながら十分とは言えないでしょう。またテストのしすぎも費用対効果がよくない場合が多いかと思います。<br />
それでも随時処理を行いたい場合には常駐型のプログラムを作成する必要があるわけで、そんな僕らこそ、Monitを使って可用性を確保するべきではないでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1313/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>chownするときに、グループ名にスペースが入っていた場合</title>
		<link>http://www.bpsinc.jp/blog/archives/1267</link>
		<comments>http://www.bpsinc.jp/blog/archives/1267#comments</comments>
		<pubDate>Fri, 26 Mar 2010 07:00:53 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[ActiveDirectory]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1267</guid>
		<description><![CDATA[ActiveDirectoryと連携していると、Linuxでもスペース入りグループ名をよく使います。
ユーザ名やグループ名にスペースが入っていると、引数の指定がおかしくなってしまうので、バックスラッシュでエスケープしまし [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveDirectoryと連携していると、Linuxでもスペース入りグループ名をよく使います。</p>
<p>ユーザ名やグループ名にスペースが入っていると、引数の指定がおかしくなってしまうので、バックスラッシュでエスケープしましょう。ダブルコーテーションで囲ってはダメです。</p>
<pre class="brush:bash">
$ chown LAB+baba:LAB+domain\ users hogefile
</pre>
<p>簡単ですが気づくまで地味に困っていました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1267/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linuxでファイル所有権を確認するとき、長いユーザ名が切れる</title>
		<link>http://www.bpsinc.jp/blog/archives/1264</link>
		<comments>http://www.bpsinc.jp/blog/archives/1264#comments</comments>
		<pubDate>Thu, 25 Mar 2010 06:45:19 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[ActiveDirectory]]></category>
		<category><![CDATA[ls]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1264</guid>
		<description><![CDATA[ファイルを一覧表示するとき、
ls -l
をすればファイルの所有者、所有グループが確認できます。
しかし、ユーザ名がむやみやたらと長いとき、途中で切れてしまうことがあります。
特に、ActiveDirectoryと連携す [...]]]></description>
			<content:encoded><![CDATA[<p>ファイルを一覧表示するとき、<br />
ls -l<br />
をすればファイルの所有者、所有グループが確認できます。</p>
<p>しかし、ユーザ名がむやみやたらと長いとき、途中で切れてしまうことがあります。<br />
特に、ActiveDirectoryと連携するとグループ名が「ドメイン名+domain users」などになるため、危ないです。</p>
<pre class="brush:bash">
&#91;/home&#93; # ls -l
drwxrwxrwx   17 LAB+inte LAB+doma     4096 Mar 26 09:29 baba/
drwxrwxrwx    3 LAB+admi LAB+doma     4096 Mar 26 08:35 peter/
</pre>
<p>domain usersかdomain adminsかどっちだよ！という感じですね。</p>
<p>ちゃんとしたLinuxなら回避法がありそうですが、今回はQNAPのNASでこの問題が発生しました。<br />
組み込みLinuxなので、コマンドやlsのオプションが少なくて、良い回避策が見つかりません。</p>
<p>そこで、完璧ではないですが、以下の方法を教えてもらいました。<br />
ls -ln</p>
<p>これで、ユーザ名・グループ名の代わりにユーザID・グループIDが表示されるため、面倒ですが事足ります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1264/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSHでパスワードなしログイン</title>
		<link>http://www.bpsinc.jp/blog/archives/1197</link>
		<comments>http://www.bpsinc.jp/blog/archives/1197#comments</comments>
		<pubDate>Fri, 05 Mar 2010 00:18:44 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[馬場]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1197</guid>
		<description><![CDATA[SSHでパスワードなしログインするための環境構築で、基本的なところで躓いてしまいました。
■手順

ssh-keygen -t rsa で、パスフレーズなしのSSH鍵を生成する
~/.ssh/id_rsa.pub を、リ [...]]]></description>
			<content:encoded><![CDATA[<p>SSHでパスワードなしログインするための環境構築で、基本的なところで躓いてしまいました。</p>
<p>■手順</p>
<ol>
<li>ssh-keygen -t rsa で、パスフレーズなしのSSH鍵を生成する</li>
<li>~/.ssh/id_rsa.pub を、リモートホストにコピーする</li>
<li>リモートホストで、cat id_rsa &gt;&gt; ~/.ssh/authorized_keys する</li>
<li>リモートホストで、authorized_keys のパーミッションを600にする</li>
<li>ssh -i (IDファイル) (リモートホスト)</li>
</ol>
<p>だけなのですが、authorized_keys の所有者がrootになってしまっていました。<br />
パーミッションを600にしても、ownerが間違っていたらだめですよね・・・</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1197/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>post-commitフックでsvn updateすると固まる場合</title>
		<link>http://www.bpsinc.jp/blog/archives/606</link>
		<comments>http://www.bpsinc.jp/blog/archives/606#comments</comments>
		<pubDate>Sun, 08 Nov 2009 11:44:24 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[馬場]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=606</guid>
		<description><![CDATA[相変わらず一人前のサーバ管理者目指して修行中の馬場です。
今回練習がてら、自宅サーバでSVN環境を構築したのですが、コミット時に自動でdeploy（svn update）する処理が上手くいかずに苦労しました。
post- [...]]]></description>
			<content:encoded><![CDATA[<p>相変わらず一人前のサーバ管理者目指して修行中の馬場です。</p>
<p>今回練習がてら、自宅サーバでSVN環境を構築したのですが、コミット時に自動でdeploy（svn update）する処理が上手くいかずに苦労しました。</p>
<p>post-commitフックでsvn upするだけなのですが、リポジトリの所有者とコミット者が違う場合、deploy用のディレクトリへの書き込み権限が無くて失敗します。<br />
（さすがにdeploy用フォルダを777にするのは無しという前提です）</p>
<p>例：リポジトリの所有者はbps（bpsグループ）で、コミット者はbaba（bpsグループ）の場合</p>
<pre class="brush:bash">
$vi /home/bps/hoge-project/repos/hooks/post-commit

#↓だとPermission Deniedで失敗するので
svn up /home/bps/hoge-project/deployed

#↓このようにしないといけない
sudo -u bps svn up /home/bps/hoge-project/deployed
</pre>
<p>しかし、これだとsudoの際にパスワードを求められて、Eclipse等からコミットした場合に入力待ちで永久に処理が完了しません。<br />
そこで、この処理だけパスワード無しでsudo出来るようにしないといけないようです。</p>
<p>/etc/sudoersファイルを編集して設定します。専用のvisudoコマンドを使うと安全なようです。</p>
<pre class="brush:bash">
$visudo  

#以下の記述を追加
%bps ALL=(bps)NOPASSWORD:/home/bps/hoge-project/repos/hooks/post-commit
</pre>
<p>これでようやくコミット後にsvn upが実行されました。</p>
<p>システム管理部の先輩が目をつぶっても出来るような作業に、半日近くかかってしまいました。<br />
もっと修行します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/606/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらインターネットにおけるNagios(NRPE) RAID監視スクリプト on CentOS</title>
		<link>http://www.bpsinc.jp/blog/archives/556</link>
		<comments>http://www.bpsinc.jp/blog/archives/556#comments</comments>
		<pubDate>Wed, 28 Oct 2009 03:35:37 +0000</pubDate>
		<dc:creator>hiko</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[中井]]></category>
		<category><![CDATA[CentOS]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=556</guid>
		<description><![CDATA[昨日、さくらインターネットにおけるRAID監視スクリプトに関して記事を書きましたが、これをCentOSで設定しているときに直面した問題とその解決策に関するTIPSです。
結論から述べると、昨日のRAID監視スクリプトの設 [...]]]></description>
			<content:encoded><![CDATA[<p>昨日、さくらインターネットにおけるRAID監視スクリプトに関して<a href="http://www.bpsinc.jp/blog/archives/522">記事</a>を書きましたが、これをCentOSで設定しているときに直面した問題とその解決策に関するTIPSです。</p>
<p>結論から述べると、昨日のRAID監視スクリプトの設定で監視対象をCentOSにした場合、そのままでは動きません。その原因はsudoの設定にあります。</p>
<p>まず、事前に確認すべきこととして、監視対象ホストの端末から以下のコマンドは実行可能ですが、</p>
<pre class="brush:bash">
# sudo -u nagios /usr/lib/nagios/plugins/check_sakura_raid
RAID OK : u0 RAID-1 OK - - - 232.885 ON -
</pre>
<p>監視ホストから下記のコマンドを実行しても監視対象ホストから結果が取得できません。</p>
<pre class="brush:bash">
# /usr/lib/nagios/plugins/check_nrpe -H (hostname) -c check_raid
NRPE: Unable to read output
</pre>
<p>つまり、端末からコマンドを実行した場合は実行できるのにも関わらず、リモートから実行すると何故か実行されないというわけです。</p>
<p>ここで、sudoに関係するログとして/var/log/secureのログに注目します。</p>
<blockquote><p>
Oct 28 11:58:28 localhost sudo:   nagios : sorry, you must have a tty to run sudo ; TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/tw_cli info c0
</p></blockquote>
<p>このログが意味することとしては、端末(tty)でないとsudoが実行できない、ということで<br />
シェル以外から実行した場合（cronなど）sudoが実行できないように設定されています。</p>
<p>これは、CentOSの初期設定で/etc/sudoersファイルに&#8221;Defaults    requiretty&#8221;として設定されていることによるものです。<br />
このため、この問題は該当行をコメントアウトすることで解決します。</p>
<pre class="brush:bash">
# visudo

#Defaults    requiretty
</pre>
<p>これで監視ホストから下記コマンドを実行すると結果が取得できるようになるはずです。</p>
<pre class="brush:bash">
# /usr/lib/nagios/plugins/check_nrpe -H (hostname) -c check_raid
RAID OK : u0 RAID-1 OK - - - 232.885 ON -
</pre>
<p>やはり問題に直面した時は素直にログを追いかけるのが鉄則ですね！</p>
<p>以上です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/556/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらインターネットにおけるNagios(NRPE) RAID監視スクリプト</title>
		<link>http://www.bpsinc.jp/blog/archives/522</link>
		<comments>http://www.bpsinc.jp/blog/archives/522#comments</comments>
		<pubDate>Tue, 27 Oct 2009 03:18:29 +0000</pubDate>
		<dc:creator>hiko</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[中井]]></category>
		<category><![CDATA[投稿者]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=522</guid>
		<description><![CDATA[さくらインターネットの専用サーバRAIDプランでは、RAIDに障害発生した場合、利用者側からさくらインターネットに報告する必要があります。
RAID制御用のコマンドが用意されており手動で状態を確認することは可能ですが、問 [...]]]></description>
			<content:encoded><![CDATA[<p>さくらインターネットの専用サーバRAIDプランでは、RAIDに障害発生した場合、利用者側からさくらインターネットに報告する必要があります。<br />
RAID制御用のコマンドが用意されており手動で状態を確認することは可能ですが、問題があった場合は自動的に通知してくれる仕組みがあると便利です。</p>
<p><a href="http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000494">http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000494</a></p>
<p>弊社では既にNagiosによるサーバ監視体制を構築していますので、今回はNagios(NRPE)プラグインを自作・設定してさくらインターネットのRAID監視を自動化してみようと思います。</p>
<p>しかし、&#8221;RAID制御コマンドがrootでのみ実行可能&#8221;と&#8221;NRPE-serverがrootで起動不可&#8221;という相反する制約があるため、セキュリティ上の制約を考慮したうえでsudoコマンドを利用してＲＡＩＤ制御コマンドを実行することでこの問題を回避します。</p>
<p>では、早速ですが、今回設置の前提となる環境は以下の通りです。</p>
<ul>
<li>監視対象ホストがさくらインターネットの専用サーバRAIDプラン</li>
<li>監視対象ホスト、監視ホストはともにLinux(Ubuntu 8.04)</li>
<li>監視ホストにnagios2, nagios2-commonがインストール済み</li>
<li>監視対象ホストにnagios-nrpe-server, nagios-nrpe-pluginがインストール済み</li>
</ul>
<p>以上の前提を踏まえたうえで、大まかな設定を以下の手順で行います。</p>
<ol>
<li>RAID監視プラグインを監視対象ホストに設置</li>
<li>nagios実行ユーザに対してRAID制御コマンドの実行権限を付与</li>
<li>監視対象ホストで監視ホストからRAID監視を可能にする設定</li>
<li>監視ホストから監視対象ホストに対してRAID監視を行うように設定</li>
</ol>
<h4><span style="text-decoration: underline;"><strong>1. RAID監視プラグインを監視対象ホストに設置</strong></span></h4>
<p>まず、以下のシェルスクリプト（#!/bin/sh以降の行）を監視対象ホストのプラグインディレクトリ（/usr/lib/nagios/plugins）に設置し、実行権限を与えます。<br />
今回はcheck_sakura_raidというファイル名で設置しました。設置後はrootで実行して問題なく実行できることを確認してください。</p>
<pre class="brush:shell">
# cd /usr/lib/nagios/plugins
# vim check_sakura_raid
</pre>
<pre class="brush:bash">
#!/bin/sh
DESC=`/usr/bin/sudo /usr/local/bin/tw_cli info c0 | /bin/grep "RAID-1"`
STATUS=`/bin/echo $DESC | /usr/bin/awk '{print $3}'`
case $STATUS in
  OK) echo "RAID OK :" $DESC; exit 0 ;;
  DEGRADED) echo "RAID WARNING :" $DESC; exit 1 ;;
esac
</pre>
<pre class="brush:shell">
# chmod 755 check_sakura_raid
# ./check_sakura_raid
</pre>
<h4><span style="text-decoration: underline;"><strong>2. nagios実行ユーザに対してRAID制御コマンドの実行権限を付与</strong></span></h4>
<p>nagiosの実行ユーザ（初期設定ではnagios）がＲＡＩＤ制御コマンドを実行できるように細工をしてやる必要がありますので、visudoコマンドなどを使って/etc/sudoersファイルに以下のように設定を追加します。</p>
<pre class="brush:shell">
# visudo
nagios ALL=NOPASSWD: /usr/local/bin/tw_cli
</pre>
<p>上記の設定ではnagiosユーザがパスワード無しでＲＡＩＤ制御コマンドを実行できるように設定していますので、設定後にnagiosユーザで実行可能かどうか確認します。</p>
<pre class="brush:shell">
# sudo -u nagios /usr/local/bin/tw_cli
</pre>
<h4><span style="text-decoration: underline;"><strong>3. 監視対象ホストで監視ホストからRAID監視を可能にする設定</strong></span></h4>
<p>
次に、監視対象ホストのnrpe-serverの設定ファイル（/etc/nagios/nrpe.cfg）に下記の行を追加し、監視対象から設置したプラグインを実行できるように設定します。設定後はnrpe-serverを再起動します。
</p>
<pre class="brush:shell">
# vim /etc/nagios/nrpe.cfg
 command&#91;check_raid&#93;=/usr/lib/nagios/plugins/check_sakura_raid

# /etc/init.d/nagios-nrpe-server restart
</pre>
<h4><span style="text-decoration: underline;"><strong>4. 監視ホストから監視対象ホストに対してRAID監視を行うように設定</strong></span></h4>
<p>最後に監視ホストの監視サービス設定にRAIDを追加します。</p>
<pre class="brush:bash">
# vim /etc/nagios2/conf.d/services_nagios2.cfg

define service {
　　hostgroup_name                  nrpe-raid-servers
　　use                             generic-service
　　service_description             &#91;NRPE&#93; RAID
　　check_command                   check_nrpe_1arg!check_raid
}
</pre>
<p>また、上記で追加したRAID監視設定を監視対象ホストに対して適用します。</p>
<pre class="brush:shell">
# vim /etc/nagios2/conf.d/hostgroups_nagios2.cfg

define hostgroup {
 hostgroup_name nrpe-raid-servers
 alias          &#91;NRPE&#93; RAID servers
 members        server1, server2
}
</pre>
<p>ここまで設定を変更したらnagiosを再起動します。</p>
<pre class="brush:bash">
# /etc/init.d/nagios2 restart
</pre>
<p>最終的に監視ホストのnagiosの管理画面から監視対象ホストのRAIDに関するステータスが表示されるようになれば監視設定は完了です。</p>
<p><img class="aligncenter size-full wp-image-526" title="nagios" src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/10/nagios1.png" alt="nagios" width="500" height="117" /></p>
<p>以上です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/522/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML-RPC</title>
		<link>http://www.bpsinc.jp/blog/archives/175</link>
		<comments>http://www.bpsinc.jp/blog/archives/175#comments</comments>
		<pubDate>Fri, 27 Feb 2009 00:03:05 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XML-RPC]]></category>
		<category><![CDATA[バグ]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=175</guid>
		<description><![CDATA[PHPでXML-RPCを使った記録です。
PEAR::XML_RPC2を使うことにしました。PHP5専用で使いやすそうです。

PHP5以上
cURLのエクステンション

が必須です。
クライアント側では、

requi [...]]]></description>
			<content:encoded><![CDATA[<p>PHPでXML-RPCを使った記録です。<br />
PEAR::XML_RPC2を使うことにしました。PHP5専用で使いやすそうです。</p>
<ul>
<li>PHP5以上</li>
<li>cURLのエクステンション</li>
</ul>
<p>が必須です。</p>
<p>クライアント側では、<br />
<code><br />
require_once './XML/RPC2/Client.php';<br />
$options = array('debug' => true);<br />
$client = XML_RPC2_Client::create('http://www.bpsinc.jp/xmlrpc.php', $options); //URLはダミー<br />
try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;$result = $client->Version(); //関数名はサーバ側で定義したもの<br />
&nbsp;&nbsp;&nbsp;&nbsp;print_r($result);<br />
} catch (XML_RPC2_FaultException $e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($e);<br />
} catch (Exception $e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($e);<br />
}<br />
</code></p>
<p>のように使えます。</p>
<p>しかし、これだとなぜか結果が全部NULLになることがあります。<br />
debugメッセージを見ると、Server Responseは正常なのに、Decoded ResultがNULLになっているように見えます。</p>
<p>この問題、Server側かHttpRequestの実装の問題だと思うのですが、Server ResponseのBodyの最初に改行が入っているのが原因でした。<br />
&quot;\n&lt;?xml version=&quot;1.0&quot;?&gt;&lt;methodResponse&gt; &#8230;&quot;</p>
<p>PEAR/XML/RPC2/Backend/Xmlrpcext/Client.php の112行目付近で、<br />
<code>$result = xmlrpc_decode($body, $this->encoding);</code><br />
となっているところを、<br />
<code>$result = xmlrpc_decode(trim($body), $this->encoding);</code><br />
とすれば直ります。(マルチバイト対応のtrimを書いた方が良いかもしれません)<br />
※XMLRPCEXT拡張モジュールが入っていない場合は、PEAR/XML/RPC2/Backend/PHP/Client.phpになります。</p>
<p>ライブラリを書き換えるのは強引ですが、xmlrpc_decode関数自体がEXPERIMENTALのままですし、あとはHttpRequestやサーバ側を変更しなければ行けないので、スマートな解決方法は思いつきません。<br />
とりあえずresultがnullになる問題は回避できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自宅サーバでSVN出来るようになりました</title>
		<link>http://www.bpsinc.jp/blog/archives/159</link>
		<comments>http://www.bpsinc.jp/blog/archives/159#comments</comments>
		<pubDate>Wed, 04 Feb 2009 14:29:08 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[公開鍵]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=159</guid>
		<description><![CDATA[自宅サーバにSubversionを入れて開発が出来るようにしました。

Subversionでバージョン管理
SVN+SSHでアクセス
認証は公開鍵
クライアントはSubclipse

SSHサーバはすでに構築してあった [...]]]></description>
			<content:encoded><![CDATA[<p>自宅サーバにSubversionを入れて開発が出来るようにしました。</p>
<ul>
<li>Subversionでバージョン管理</li>
<li>SVN+SSHでアクセス</li>
<li>認証は公開鍵</li>
<li>クライアントはSubclipse</li>
</ul>
<p>SSHサーバはすでに構築してあったので、まずはSubversionのインストールして、リポジトリを作成。<br />
<code>aptitude install subversion</code><br />
<code>svnadmin create ~/project/test/svn</code></p>
<p>しかし、Eclipseで鍵認証で入れません。Puttyでは入れるし、Eclipseでもパスワード認証なら入れるのに。<br />
ここで数時間詰まった結果、原因は秘密鍵の形式がPutty形式だという単純なものでした。puttygenで鍵を作ったとき、&#8221;Save private key&#8221;ボタンを押すと、putty形式の秘密鍵が出力されますが、それはSubclipseでは使えません。メニュー&#8221;Conversions&#8221;-&gt;&#8221;Export OpenSSH Key&#8221;で作った秘密鍵を使う必要があります。(公開鍵は共通です)</p>
<p>仕方ないので鍵を作り直し。以前の公開鍵も使いたいので、<br />
<code><br />
ssh-keygen -i -f new.pub &gt;&gt; new_key<br />
cat new_key &gt;&gt; authorized_keys<br />
rm new_key<br />
rm new.pub<br />
</code><br />
のように公開鍵を追加しました。</p>
<p>以上の作業で、Subclipseで鍵認証を使えるようになりました。環境変数の設定が必要という情報が多かったですが、今回は設定無しでも動きました。</p>
<p>その後、サーバ側でCheckoutしないで「svn updateができない」とか言ったり、post-commitが動かないと思ったらbashをbachと書いていたり、ヘボいミスで時間がかかりましたが、何とか使える段階に持って行けました。</p>
<p>引き続き、一人前のサーバ管理者目指して頑張ります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>127.0.1.1</title>
		<link>http://www.bpsinc.jp/blog/archives/154</link>
		<comments>http://www.bpsinc.jp/blog/archives/154#comments</comments>
		<pubDate>Mon, 26 Jan 2009 11:50:15 +0000</pubDate>
		<dc:creator>hiko</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[中井]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=154</guid>
		<description><![CDATA[FTPの設定をしている時にはまったのですが、下記のようなログがでてうまくいかなかったので何なのかと思って調べてみると、
Ubuntu(Debian)のバグ？というか/etc/hostsに勝手に書かれた設定の影響みたいです [...]]]></description>
			<content:encoded><![CDATA[<p>FTPの設定をしている時にはまったのですが、下記のようなログがでてうまくいかなかったので何なのかと思って調べてみると、</p>
<p>Ubuntu(Debian)のバグ？というか/etc/hostsに勝手に書かれた設定の影響みたいです。</p>
<p>&gt; Jan 17 12:34:50 xxxx proftpd[18744] xxxx.xxxxx.xxx: 127.0.1.1:21 masquerading as<br />
127.0.1.1<br />
（あるのかわかりませんが）意図があるのだとしても、これによって動かなくなるソフトウェアはあるようなので、</p>
<p>ネットワーク周りを扱うソフトウェアでかつDebian系列で、はまった時は/etc/hostsの設定を見直してみることをお勧めします。</p>
<p>&lt;参考＞</p>
<p>http://itmst.blog71.fc2.com/blog-entry-100.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/154/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

