VirtualBox4.2.10とCeotOS6.6を使用したサーバイメージ作成

VirtualBox4.2.10とCeotOS6.6を使用したサーバイメージ作成を行ったので、手順をメモ。

仮想マシンの作成

  1. VirtualBoxを起動
  2. 仮想マシン」>「新規」をクリック
  3. 仮想マシンの作成ウィンドウで以下を入力し、「次へ」をクリック。
    • 名前:CentOS6.6
    • タイプ:Linux
    • バージョン:Red Hat (64 bit)
  4. 以下を入力し、「次へ」をクリック。
    • メモリーサイズ:1024 MB
  5. 「仮想ハードドライブを作成する」を選択し、「作成」をクリック。
  6. 仮想ハードドライブの作成ウィンドウで「VDI (VirtualBox Disk Image)」を選択し、「次へ」をクリック。
  7. 「可変サイズ」を選択し、「次へ」をクリック。
  8. 以下を入力し、「作成」をクリック。
    • 新しい仮想ハードドライブの名前:CentOS6.6
    • 仮想ハードドライブのサイズ:30.00 GB

CentOSのインストール

  1. 以下のミラーサイトのうちのいずれかからから、「CentOS-6.6-x86_64-bin-DVD1.iso」と「CentOS-6.6-x86_64-bin-DVD2.iso」をダウンロード
    Mirror List
  2. VirtualBox上で先ほど作成した仮想マシンを選択、右クリックで表示されるコンテキストメニューから「設定」をクリック。
  3. 設定ウィンドウ内で「ストレージ」を選択し、「コントローラー: IDE」の「空」を選択。CD/DVDドライブに先ほどダウンロードした「CentOS-6.6-x86_64-bin-DVD1.iso」をマウントする。
  4. 設定ウィンドウの「完了」をクリック。
  5. ISOをマウントした仮想マシンをダブルクリックで起動。
  6. 「Wekcome to CentOS 6.6!」が表示されたら、「Install or upgrade an existing system」を選択
  7. メディアテストの要否を問われた場合、「Skip」を選択
  8. CentOSインストーラが表示されたら、「Next」をクリック。
  9. 言語設定で「Japanese(日本語)」を選択し、「Next」をクリック。
  10. キーボード選択で「日本語」を選択し、「次」をクリック。
  11. ストレージデバイス選択で「基本ストレージデバイス」を選択し、「次」をクリック。
  12. ストレージデバイスの警告が表示された場合、「選択したすべてのデバイスに適用します。」にチェックを入れ、「はい。含まれていません。どのようなデータであっても破棄してください。」を選択し、「次」をクリック。
  13. ホスト名指定で任意のホスト名を入力し、「次」をクリック。
  14. 使用するタイムゾーンで「アジア/東京」を選択し、「次」をクリック。
  15. rootユーザーのパスワードで任意のパスワードを入力し、「次」をクリック。
  16. インストールタイプで「すべての領域を使用する」を選択し、「次」をクリック。
  17. ストレージ構成のディスク書き込みの警告が表示された場合、「変更をディスクに書き込む」をクリックし、フォーマット開始。
  18. フォーマット完了後、追加ソフトウェアと追加レポジトリでそれぞれ任意の項目を選択し、「後でカスタマイズ」を選択して「次」をクリック。
    ※今回は「Basic Server」を選択
  19. インストール完了の画面が表示されたら、「再起動」をクリックして再起動でインストール完了。

Windowsにおける言語パックの追加方法

Windowsアプリの多言語対応開発時、Windowsの言語パックによる言語の切り替えを行おうとしたが、Windows7の場合は標準ではUltimateまたはEnterpriseでしか言語パックの追加ができない模様。

しかしながら、UltimateまたはEnterprise以外であっても、以下のツールを使用すれば言語パックの追加ができるらしい。
Vistalizator - Windows Vista や Windows 7の表示言語変更

今度やってみる。

Node.jsにおけるBuffer型のオブジェクトの判定方法

Node.jsにおいて、オブジェクトの各プロパティを再帰的に評価する処理の中で、処理終了までに想定以上の時間が掛かる不具合が発生。

原因を検証したところ、問題の処理では対象オブジェクトのプロパティの値がオブジェクトの場合はそのオブジェクトのプロパティを再帰的に評価していたが、オブジェクトがBuffer型である場合にオブジェクト内にプロパティが存在しないため、処理が正常に終了していなかったことが判明。

そこで、再帰処理を行う条件を
 「プロパティの値がオブジェクトの場合」
から
 「プロパティの値がオブジェクトでありかつBuffer型オブジェクトでない場合」
に変更。

なお、Buffer型オブジェクトの判定は以下のリンクによると

Buffer.isBuffer(obj)

でいける模様。
Buffer Node.js v0.12.2 Manual & Documentation

上記変更により、無事解決。

Postfixでローカルサーバに対しメールが送信できない問題

先日の問題への対応で、インターネット経由でのメール送信ができないため、ローカルサーバに対しメールを送信することに。

送信先として「hoge@192.168.***.***」を指定し、Nodemailerからメール送信を試みたところ、Nodemailerから以下のエラーが返る。

{
    "code": "EENVELOPE",
    "response": "5015.1.7Badsenderaddresssyntax",
    "responseCode": 501,
    "domain": "192.168.***.***",
    "exchange": "192.168.***.***",
    "recipients": [
        "hoge@192.168.***.***"
    ]
}

Nodemailerのログだけでは原因が特定できないため、Postfixのログを確認する。

$ sudo vi /var/log/maillog

すると、以下のログが確認できる。

postfix/smtpd[6510]: connect from unknown[192.168.XXX.XXX]
postfix/smtpd[6510]: warning: Illegal address syntax from unknown[192.168.***.***] in MAIL command: <***@192.168.***.***>
postfix/smtpd[6510]: lost connection after MAIL from unknown[192.168.***.***]
postfix/smtpd[6510]: disconnect from unknown[192.168.***.***]

どうやら送信先アドレスの文法エラーの模様。
Postfixの仕様を確認したところ、Postfixのmain.cfを編集することで、送信先アドレスの@以降がIPアドレスの場合を許可されるらしい。

main.cfを編集。

sudo vi /etc/postfix/main.cf

main.cfに以下の一行を追加。

resolve_numeric_domain = yes

Postfixを再起動。

sudo /etc/init.d/postfix restart

この状態で、先ほどと同一の送信先アドレスに対しNodemailerからメールを送信する。
Postfixのログを確認すると、メールの送信に成功したことがわかる。

postfix/smtpd[8123]: connect from unknown[192.168.***.***]
postfix/smtpd[8123]: 41FBD161525: client=unknown[192.168.***.***]
postfix/cleanup[8128]: 41FBD161525: message-id=<***@192.168.***.***>
postfix/qmgr[7847]: 41FBD161525: from=<***@192.168.***.***>, size=53229, nrcpt=1 (queue active)
postfix/smtpd[8123]: disconnect from unknown[192.168.***.***]
postfix/local[8142]: 41FBD161525: to=<hoge@[192.168.***.***]>, relay=local, delay=1.1, delays=0.99/0.08/0/0.05, dsn=2.0.0, status=sent (delivered to command:  /bin/cat > `mktemp /var/tmp/mail.XXXXXXXX`)
postfix/qmgr[7847]: 41FBD161525: removed

WiMAX環境でサーバアプリからのメールの送信ができない問題

FTTH環境で行っていたサーバアプリからのメールの送信が、WiMAX環境ではできなくなっていることが発覚。

原因検証のためサーバアプリのログを確認するも、Nodemailerからエラーは返っていない。

以下のコマンドでPostfixのログを確認すると、メールを送信した形跡が見られない。

$ sudo vi /var/log/maillog

この時点で問題の切り分けができなかったが、Postfixのログ出力レベルが不明であるため、Postfixから先の問題を探る。
メールの送信先はGmailのアドレスを指定していたため、GmailSMTPサーバにpingが通るかを確認。

$ ping smtp.gmail.com

応答が返るので、次にtelnetで25番ポートへの接続を確認。

$ telnet smtp.gmail.com 25

ここで応答が返らない。WiMAXルータ側の設定で25番ポートへの接続を許可するも、やはり応答が返らない。
調べてみると、どうやらUQ WiMAXでは25番ポートをブロックしている模様。
Outbound Port25 Blocking対応を実施していますか? | UQ WiMAX|超高速モバイルインターネットWiMAX2+

上記リンクに従い、25番ポートの代わりにサブミッションポートの587番ポートへの接続を試みる。

$ telnet smtp.gmail.com 587

すると、応答が確認できた。

原因はプロバイダ側のようだが、原因検証に数時間を費やした…。
ネットワーク側の問題でメール送信失敗した場合のPostfixのログ出力ポリシーってどうなってるんだろ。

Droid Xのシステムアップデート手順

手元にあったDroid Xのシステムアップデートを試みる。

アップデートは
 Settings -> System updates
から実施。

インストール対象は以下のバージョン。
 45.621.10.MB810.Verizon.en.US

アップデート手順の詳細forum.xda-developers.com

アップデートバージョンの詳細
How do I update the software on my DROID X?

Node.jsのMailparserモジュールにて、ISO-2022-JPのメールが文字化けする不具合

Node.jsのmailparserモジュールにて、ISO-2022-JPのメールが文字化けする不具合が発生。
原因を探っていたところ、mailparserにバンドルされたiconv-liteモジュールはISO-2022-JPを扱えない模様。

Node.js - Mailparserでiso-2022-jpのメールを取り扱う場合 - Qiita

上記リンクでは
node_modules/mailparser/node_modules/encoding/
配下にnpm install iconvで対応しているが、
node_modules/
配下にnpm install iconvすると、mailparserモジュールからnode_modules/配下のiconvが読み込まれ、メール文字化けの不具合が解消されることを確認。