[Nagois] CentOS 6.5へインストールする

ウェブサイトの稼動監視にオープンソースの監視システムであるNagiosの利用を考え中。とりあえずローカルでVagrantベースのCentOS 6.5の環境にインストールして触ってみたい。

手っ取り早くリポジトリからインストールできないか探す。

公式バージョン履歴によると最新版は4.1.1なので、3.5.1だとかなり古い。

Nagios Core 4.x Version History – Nagios
https://www.nagios.org/projects/nagios-core/history/4x/

リポジトリからの取得は諦めて、公式ドキュメントの手順に従ってインストールする。

公式ドキュメント
Nagios Core Documentation – Table Of Contents
https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/toc.html

Nagios Coreのシステム要件

公式ドキュメントからシステム要件を確認しておく。

System Requirements – About Nagios Core
https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/about.html#requirements

  • Linuxが稼動するネットワーク接続されたマシン
  • Cコンパイラ

Nagios Coreに含まれるCGIを使う場合には以下も必要。

  • ウェブサーバー (Apache推奨)
  • GDライブラリ 1.6.3以降

インストール手順

公式ドキュメントのインストール手順に従う。

Nagios Quickstart Installation Guides
https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/quickstart.html

Prerequisites (事前準備)

必要なソフトをインストール

  • Apache
  • PHP
  • GCCコンパイラ
  • GD開発ライブラリ

1) Create Account Information (アカウント情報の作成)

ユーザ nagios を作成してパスワードを設定する。

Webインタフェース経由で外部コマンド発行を許可するグループ nagcmd を作成して、ユーザnagiosとapacheを追加する。

2) Download Nagios and the Plugins (Nagiosとプラグインのダウンロード)

ダウンロード先ディレクトリを作成する。

NagiosとNagiosプラグインのソースコードをダウンロードする。

3) Compile and Install Nagios (Nagiosのコンパイルとインストール)

ソースコードを解凍する。

ユーザグループ名を添えて、設定スクリプトを実行する。

ビルドする。

インストールする。

4) Customize Configuration (設定のカスタマイズ)

サンプルの設定ファイルを編集して、アラート送信先のメールアドレスを設定しておく。

5) Configure the Web Interface (Webインターフェースの設定)

Apacheのconf.dディレクトリにNagiosのウェブ設定ファイルをインストールする。

ユーザ nagiosadmin を作成する。

Apacheを再起動する。

6) Compile and Install the Nagios Plugins (Nagiosプラグインのコンパイルとインストール)

Nagiosプラグインのソースコードを解凍する。

コンパイルしてインストールする。

7) Start Nagios (Nagiosの起動)

自動起動を設定する。

Nagiosのサンプル設定ファイルをベリファイする。

設定ファイルにエラーが無ければ Nagiosを起動する。

8) Modify SELinux Settings (SELinuxの設定変更)

Fedoraの場合に限る。今回は必要なし。

9) Login to the Web Interface (Webインタフェースへのログイン)

Nagiosのウェブインターフェースにアクセスする。

Basic認証を求められるので、5)の手順で作成したアカウントでログインする

  • ユーザ名: nagiosadmin
  • パスワード: 自分が設定したパスワード

動いた。

Nagios-Core1

[CakePHP] 静的テキストをローカライズする手順メモ

ローカライズ前のコード

コントローラ

ビュー

手順

ビュー中の翻訳対象テキストを <?php echo __(‘テキスト’); ?> に書き直す。

I18n Shellを使って翻訳データを記述したリソースファイルを作成する。

すると、app/Locate/default.pot が作成される。

app/Locate/jpn/LC_MESSAGESフォルダを作成してapp/Locate/default.potをdefault.poとしてコピーする。

そして、ファイルを編集してmsgstrに翻訳したテキストを記述する。

コントローラでConfig.languageを日本語に設定するとビュー内の静的テキストが日本語で表示されるようになる。

表示結果

英語表示 (オリジナル)

boards-eng

日本語表示 (ローカライズ)

boards-jpn

[CakePHP] HTMLヘルパーを使ってテーブルタグを出力する

HTMLヘルパーを使うことでコードが簡潔になる。様々なオプションを指定することも可能。

使用前

使用後

表示結果

オプション無しだと表示体裁は同じになった。

table-html-helper

参考サイト

HtmlHelper — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-libraries/helpers/html.html

[CakePHP] HTMLヘルパーの使い方メモ

参考サイト

HtmlHelper – CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-libraries/helpers/html.html

[CakePHP] コントローラのテストの書き方の基礎

モデルやコンポーネントに対して、コントローラのテストを書くのは大変だ。

モデルやコンポーネントはインプットとアウトプットがはっきりしている。故に直感的にテストケースを思い浮かべることができる。これに対して、コントローラは「何を以ってアクションが成功したと見なすか?」が多岐に渡るため、ぶっちゃけ、テストケースの立案が面倒臭いのである。

クックブックやブログなどを参考に、テスト初心者の自分が理解しておくべき点を整理しておきたい。

まずはクックブックに目を通す

テスト — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/development/testing.html#id23

ヘルパーやモデル、コンポーネントも同様に、CakePHPは ControllerTestCase という コントローラーのテストに特化したクラスを提供します。 このクラスをコントローラーのテストケースの親クラスとすることで、 コントローラーのテストケースを testAction() というメソッドでより簡単にすることができます。 ControllerTestCase は擬似的にコンポーネントやモデルを動かすだけでなく、 redirect() のように潜在的にテストが難しいメソッドの テストも簡単にしてくれます。

testActionで出来ること

アクションの呼び出し

POSTリクエストのシミュレート

GETリクエストのシミュレート

アクションの結果を取得する

アクションの処理によって以下の情報が取得できる。

  • vars – ビューの値
  • view – レイアウト以外の描画されるビュー
  • contents – レイアウトを含む描画されるビュー
  • result – コントローラのアクションが返す値

アクションが成功したかチェックする

ビューに含まれる文字列を調べれば、期待したビューが表示されたかチェックできる

ロケーションを調べれば、期待したリダイレクトが行われたかチェックできる

変数を調べれば、コントローラが正しい変数をビューにセットしたかチェックできる

セッション変数をしらべれば、コントローラが正しい値をセッションにセットしたかチェックできる

参考サイト

[CakePHP] Controllerのテストを書くときに気をつけること – TODO: ブログの名前を考える
http://d.hatena.ne.jp/fullkawa/20120616/p1

CakePHPのControllerの画面遷移のユニットテストってどうやるの | もふもふ技術部
http://j-caw.co.jp/blog/?p=1015

CakePHP2でコントローラーのテストをする時の redirect を無視させない – ハウテレビジョン開発者ブログ
http://blog.howtelevision.co.jp/entry/2014/07/25/151754

cakephpでcontrollerのテストを極める | まとめーたー
http://matomater.com/17151/

sizuhiko – Technote – CakePHPのコントローラテストで注意すること
http://blog.open.tokyo.jp/2013/09/13/cakephp-2.html

CakePHPでAuth認証が必要なコントローラーをテストする – Qiita
http://qiita.com/ran/items/4a31b685f3c25c4f7e01

[PHP] PHPUnitのスタブとモックの違いとは

テスト初心者の自分があちこちのサイトを参考にしながらテストを書いていると、「スタバ」とか「モック」という言葉に頻繁に出くわす。以前PHPUnitの勉強をしたときに見た覚えがあるものの、記憶が怪しいので再勉強。

スタブとモックの違い

PHPUnitのマニュアルでは以下のように説明している。

PHPUnit マニュアル – 第9章 テストダブル
https://phpunit.de/manual/current/ja/test-doubles.html

実際のオブジェクトを置き換えて、 設定した何らかの値を (オプションで) 返すようなテストダブルのことを スタブ といいます。
実際のオブジェクトを置き換えて、 (メソッドがコールされたことなどの) 期待する内容を検証するテストダブルのことを モック といいます。

これではなんとなく解りにくいので、他に説明しているサイトを幾つか探してみる。

RSpec でテストを作るのに役立つ「モック/スタブ」のシンプルな説明 – 酒と泪とRubyとRailsと
http://morizyun.github.io/blog/rspec-model-controller-ruby-rails/

モックとは「「オブジェクトのメソッドがどう呼ばれて何を返すか」というインタフェースも含めたテストのために使う」ものであり、スタブとは「テストをス ムーズに行うために「あるオブジェクトのメソッドが呼ばれたら、ある戻り値を返す」ために使う」ものであるという定義は分かりやすい。

Test DoubleとPHPUnit | akkunchoi@github
http://akkunchoi.github.io/test-double-phpunit.html

特に重要で間違いやすいのが「モック」と「スタブ」だ。英単語では「モック」は模造品、「スタブ」は切り株、切り残しという意味だが、Test Doubleにおいては「モック」は出力の確認、「スタブ」は入力の差し替えを意味する。

言っていることはなんとなく解る気がするんだけど、サイトごとに微妙に違うような気もするな。日本語で明確に定義するのは難しいってことか。

ちなみに僕の見解だとこんな感じ。どうだろ?

  • 「モック」は模擬運用するための模造品
  • 「スタブ」はとりあえず動かすための代用品

サンプルコード付きの参考サイト

モックオブジェクトを利用したテスト – pixiv inside
http://inside.pixiv.net/entry/2014/12/11/192708

PHPUnitのスタブをつかってみた – kitak.blog
http://kitak.hatenablog.jp/entry/2013/11/17/145324

[CakePHP] Class ‘AppController’ not found エラー対処法

bakeでコントローラのクラスを作成しようとしたところ以下のエラーに直面。

これは、コントローラの冒頭で以下の定義を追加することで解決する。

この定義はbakeでクラスを作成したときには自動的に追加されている。無くても実行上は問題ないように見えるが、クラスを手動で作成したときにも追加しておいたほうが良さそう。

bake実行ログ

[PHP] タイムゾーンの設定

ローカルのXAMPP環境でMySQLのdatetime型カラムにNOW()で現在時刻を書き込むと、ローカル時刻からズレた日時が保存された。タイムゾーンが適切に設定されていないらしい。というか、インストール時のデフォルトのままいじっていない。

タイムゾーン設定はc:\xampp\php\php.iniにある。デフォルトはベルリンだった。

php.ini

東京のタイムゾーンに変更するなら以下のように。

ロサンゼルスのタイムゾーンなら以下のように。

[CakePHP] 独自メソッドによるバリデーションを使ってパスワード(再入力)の一致をチェックする

会員制サイトの会員登録画面では、ユーザにパスワードを2度入力させることで入力ミスを防止するUIを使うのが普通だ。

CakePHPでは、独自メソッドによるバリデーションの仕組みを使うことで、入力された2つのパスワードの一致を容易にチェックすることができる。

以下覚え書き的サンプル。

モデル

ビュー

[PHP] PDOではカラム名に変数をバインドできない

PDOで「出来ると思ってやってみたら実は出来なかった」ことがあったので覚え書き。

やろうとしたのはカラム名への変数のバインド。以下サンプル。

実際に試してみたら期待した結果が返らず。以下のように書き直したら期待通りになった。

ネットを検索したら以下の記事がヒットした。

参考サイト

y.okano blog: PHP: PDO ではカラム名に変数をバインドできない
http://yokano-jp.blogspot.com/2014/11/php-pdo.html