PHP の error_log に syslog を指定した際に他のログと混ざらないようにする

PHP のランタイムのエラーログですが、ファイルを指定するより syslog 経由にしたほうが何かと楽です。
ファイルの場合は、ユーザ権限で実行している cli でのエラーと httpd でのエラーの両方を記録するために、
パーミッションをもしかしたら 777 とかにする必要があるかもしれませんが、
syslog の場合は特にそんなこと気にする必要がありません。

php.ini で下記の設定をするだけなのですが、これだけだとちょっと都合が悪いです。

sudo vim /etc/php.ini

error_log = syslog


というのも送信されるログのファシリティは user なので、例えば CentOS 6 だと /var/log/messages に出力されます。
他のログと混ざるので都合が悪いです。

じゃあ、ということで user.* を全部受けると、例えば yum でのインストールログも出力されるのでこれまた都合が悪いです。

で、本題ですがファシリティが user かつタグ (プログラム名) が httpd (mod_php) または php (cli) の場合だけ専用のログに出力するようにします。
一見めんどくさそうですが、CentOS 6 デフォルトの rsyslog だと、比較的簡単に設定できます。

sudo vim /etc/rsyslog.d/php.conf

$Umask 0000
$RepeatedMsgReduction off

$FileCreateMode 0644
$template php_log,"/var/log/php.log"

if ($syslogfacility-text == 'user') and \
   (($programname == 'httpd') or ($programname == 'php')) then \
       -?php_log

sudo /etc/init.d/rsyslog restart

で、syslog 経由なので、ログローテートも /etc/logrotate.d/syslog に /var/log/php.log を書いておけば OK です。

Mac OS X 10.8 Mountain Lion + Eclipse で Scala 開発環境を作るメモ

  いつもすぐ忘れるのでメモ。

1. Eclipse 3.7.3 (Indigo) のインストール

   Eclipse 3.7 (Indigo) をダウンロード。パッケージは好みだけど、Eclipse Classic をダウンロードしてる。
   なお、4.2 (Juno) ではなく、3.7 (Indigo) を使う理由は単に Indigo のほうがもっさりしていないから。

   ダウンロードしたファイルを展開して、/Application にコピー。
   プロジェクト毎に、Eclipse を使い分けるようにしているので、/Application/eclipse/eclipse-3.7.2_<プロジェクト名> のようにしている。

2. Scala-IDE をインストール

   Eclipse の [Help]-[Install New Software...] から普通にインストール。
   Scala 2.9.x を使う場合は、下記を指定。

http://download.scala-ide.org/sdk/e37/scala29/stable/site

   Scala 2.10.x を使う場合は、下記を指定。

http://download.scala-ide.org/sdk/e37/scala210/stable/site

   インストールするパッケージは、下記だけ。
・Scala IDE for Eclipse
・ScalaTest for Scala IDE

- refs.: Scala IDE for Eclipse
  http://scala-ide.org/

- refs.: Download the 3.0 Release of the Scala IDE for Eclipse - Scala IDE for Eclipse
  http://scala-ide.org/download/current.html

3. Eclipse Marketplace Client のインストール

   Eclipse Marketplace は、プラグインの検索とインストールができるサイト。そのクライアントをインストールする。
   Eclipse の [Help]-[Install New Software...] から

Indigo - http://download.eclipse.org/releases/indigo

  を選択して、「Marketplace Client」で検索しインストールする。

- refs.: Introducing the Eclipse Marketplace Client | Eclipse Plugins, Bundles and Products - Eclipse Marketplace
  http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=1012

4. Subversive - SVN Team Provider (+ SVN Kit) のインストール (Subversion を使う場合)

   ちなみに、git を使う場合は、EGit とか使わないで、コマンドラインか SourceTree を使ってる。

   Eclipse の [Help]-[Eclipse Marketplace...] で、「Subversive」を検索しインストール。
   本体と、Localization だけ選択。
   インストール後、再起動するとコネクタのインストール画面が出るので、使用する Subversion のバージョンに合わせた SVN Kit をインストールする。

5. Glance プラグインのインストール

   インクリメンタルサーチの Glance プラグインをインストールする。
   これは、Marketplace からインストールする。

- refs.: Glance - Eclipse plug-in providing extensible useful incremental text search in Eclipse
  http://ystrot.github.com/glance/

- refs.: Eclipseを改善するインクリメンタルサーチプラグイン「Glance」がオススメ!
  http://did2memo.net/2012/11/06/eclipse-iterative-search-plugin-glance/

6. ER Master のインストール

   ER図が書けるプラグインの ER Master をインストールする。
   Eclipse の [Help]-[Install New Software...] から普通にインストール。
   Update Site には、下記を指定する。

http://ermaster.sourceforge.net/update-site/

- refs.: ER Master
  http://ermaster.sourceforge.net/index_ja.html

7. プロパティー・エディターのインストール

   properties ファイルを自動で native2ascii してくれるプロパティー・エディターをインストール。
   これも、Marketplace からインストールできる。
   Marketplace Client で properties で検索し「プロパティー・エディター」をインストールする。

8. Pleiades で日本語化する

   不要であればこれは省略。OSX の場合はちょっと面倒。

   まず、http://mergedoc.sourceforge.jp/ から、Pleiades プラグインをダウンロードする。
   ここでは、1.4.x をダウンロードする。
   ダウンロードしたファイルを展開してできた、pleiades ディレクトリを Eclipse をインストールしたディレクトリの dropins にコピーする。
   つまり、dropins/pleiades になるようにする。

   次に、eclipse.ini (/Applications/eclipse/eclipse-xxxxx/Eclipse.app/Contents/MacOS/eclipse.ini) の最終行に下記を追加。

-javaagent:../../../dropins/pleiades/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

   最後に、Eclipse を -clean オプション付きで起動する。

$ /Applications/eclipse/eclipse-xxxxx/eclipse -clean

  なお、Pleiades で日本語化した場合は、プラグインをインストールするたびに、-clean オプションで起動したほうがいい。
  なので、いろいろプラグインをインストールした最後に日本語化したほうがいいような気がします。

JavaScript で数字を 3 桁ずつカンマで区切る (commify)

var commify = function(s) {
    return s.toString()
            .split('').reverse().join('')
            .replace(/(\d\d\d)(?=\d)(?!\d*\.)/g, '$1,')
            .split('').reverse().join('');
};


- refs.: Perl クックブック (レシピ 2.16)
  4873110378

さくらの VPS (CentOS 6.2) にコマンドライン版 Dropbox をインストールする

  Python 2.6 が必要です。CentOS 5.x は Python 2.4系なので、別途 2.6 系をインストールする必要があります。
  リニューアルしたさくらの VPS は、CentOS 6.2 なので、Python 2.6 がインストールされています。

  なお、Dropbox は特に GUI は不要なので、CUI (CLI) 版のみインストールします。

  • Dropbox CLI をダウンロードします。

$ wget https://www.dropbox.com/download?dl=packages/dropbox.py

  • まずはインストールします。$HOME/.dropbox-dist にバイナリがダウンロードされます。

$ dropbox.py start --install
Starting Dropbox...
Dropbox is the easiest way to share and store your files online. Want to learn more? Head to http://www.dropbox.com/

In order to use Dropbox, you must download the proprietary daemon. [y/n] y
Downloading Dropbox... 100%
Unpacking Dropbox... 100%
Dropbox isn't running!

  • まずは、一回起動します。

$ dropbox.py start
To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&cl ...

  表示されたリンクへアクセスして、Dropbox アカウントにリンクします。

  Dropbox

  • 次に一回停止して、

$ dropbox.py stop
Dropbox daemon stopped.

  • 起動します。

$ dropbox.py start
Starting Dropbox...Done!

  わずかこれだけです。sync すれば、普通に $HOME/Dropbox が使えるようになります。

  なお、デフォルトでは run sync が有効になっていて、 17500/udp でのブロードキャストが行われてうるさいので、
  無効にする方がいいでしょう。無効にしたあとは、Dropbox の再起動をお忘れなく。

$ dropbox.py lansync n

ワイルドカードの SSL 自己署名証明書の作成

  名前ベースのバーチャルホストの検証のために、ワイルドカードなオレオレ証明書を作成。
  なんてことはない、普通のオレオレ証明書の作り方とおなじ。

  • 秘密鍵の作成

$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.....+++
..............+++
e is 65537 (0x10001)

  • CSR の作成

$ openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:GB
State or Province Name (full name) [Berkshire]:Berkshire
Locality Name (eg, city) [Newbury]:Newbury
Organization Name (eg, company) [My Company Ltd]:My Company Ltd
Organizational Unit Name (eg, section) []:section
Common Name (eg, your name or your server's hostname) []:*.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

  • 証明書作成 (10年)

$ openssl x509 -days 3653 -in server.csr -out server.crt -req -signkey server.key
Signature ok
subject=/C=GB/ST=Berkshire/L=Newbury/O=My Company Ltd/OU=section/CN=*.example.com
Getting Private key

  この証明書を使って、特に問題なく、名前ベースのバーチャルホストができた。