2012年1月30日月曜日

PostgreSQL91のインストールメモ

postgresql84を入れていたテスト用の仮想マシンなので削除。

/etc/yum.repos.d/CentOS-Base.repo の[base]と[updates]のセクションの最後に以下を追加。

exclude=postgresql*


パッケージを取得
# wget http://yum.pgrpms.org/reporpms/9.1/pgdg-centos91-9.1-4.noarch.rpm
登録
# rpm -i pgdg-centos91-9.1-4.noarch.rpm
インストール
# yum postgresql91
起動設定
# chkconfig postgresql-9.1 on
初期化
# service postgresql-9.1 initdb
起動
# service posgresql-9.1 start


コマンド関係が、/usr/pgsql-9.1/bin/以下になっているので注意。

ストリーミング・レプリケーションとかしてみたいなぁ。

2012年1月25日水曜日

.forwardでPHPにメールを食わせる

.forwardファイルを使ってPHP等のプログラムにメールを処理させることがありますが、ちょっと躓いたのでメモ。

まず、何もなければ、.forwardファイルに以下のように書けばいい。

> vi .forward
"| /usr/bin/php /home/john/sciptfile.php"

(john, scriptfile.phpあたりは任意でっせ。)

ところが、smrshが動作していると簡単には実行してくれません。
勝手にプログラム起動して処理するなということです。
smrshに許可してもらうには、/etc/smrsh内に実行ファイルのリンクを作成してやればよい。

こんなコマンド↓
> ln -s /usr/bin/php /etc/smrsh/php

とここまではよく見かけます。
しかし今回はこれでうまくいきませんでした。

.forwardファイル内の記述が問題のようで、絶対パスは無視されたりいろいろ制約があるようです。
詳細は偉い人に聞いてください。すいません。

でどうするかというと。

.forwardに記述する内容を単純化するためシェルスクリプトを1つ作成します。

> vi scriptcall.sh
#!/bin/sh
/usr/bin/php /home/john/sciptfile.php

↑こんな単純なファイル。

作成したシェルスクリプトに実行権限をつけて、smrshで実行できるようにシンボリックリンクを作成。

> chmod 755 /etc/smrsh/scriptcall.sh
> ln -s /usr/bin/scriptcall.sh /etc/smrsh/scriptcall.sh


.forwardファイルの内容を以下の用に変更

>vi .forward
|sciptcall.sh

以上でjohnさんにメールが来るとプログラムにメールが渡されます。

exim4 mailq一括削除


exim4のmailqの一括削除方法で、いいのがあった。

http://www.fukudat.com/wiki/ja/%E7%8E%84%E7%AE%B1/exim4

# for msgid in `mailq | grep '<.*>' | cut -c11-27`; do
> echo $msgid
> exim4 -Mrm $msgid
> done

ありがとう。

2012年1月18日水曜日

VMWare CentOS メモ


VMWare PlayerでCentOS最小インストール済みのイメージを動かしたときのメモ。

■キーボードのコンフィグ
USキーボードからJISキーボード

/etc/sysconfig/keyboard

KEYBOARDTYPE="pc"

KEYTABLE="jp106"

■SELinuxをオフ(テスト用だし)
/etc/sysconfig/selinux

SELINUX=enforcing

SELINUX=disabled

モードの確認は、コマンド getenforce で可能。


■yumで必要なものを入れる。



■ネットワーク
system-config-network コマンドでCUIのネットワーク設定画面が出るのでこれで簡単に済ませれる。
実際には/etc/sysconfig/network-scripts/ifcfg-eth0 を編集している。

手書きで設定する場合は以下のファイル等。
/etc/hosts
/etc/resolv.conf
/etc/sysconfig/network


■iptables
/etc/sysconfig/iptables

このあたり↓を「-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited」の前に追加

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

必要に応じて開放するポートを増やす。


■VMWareの共有フォルダ
設定したが、結局SSHかFTPでファイルを送った方が楽なのであまり使わなかったので割愛。




2011年9月16日金曜日

PostgreSQL 8.4 デフォルトのエンコード

PostgreSQL 8.4からロケール周りの変更で、initdb時に指定したエンコード以外でcreatedb仕様とするとエラーになるようだ。

# createdb -E UTF8 uft8db
→エラー

今まで何台かのサーバでやってたけど気づかなかった。
redhat EL4のPostgreSQLだとinitdb時のエンコードがSQL_ASCIIなのか?
プロバイダ提供のインストーラがこけたのでyumで入れなおしたからか?

HINTにtemplateと同じ文字コードを使うか、template0をテンプレートとして使う、とあります。
文字コードはutf-8にしたいので以下のようにして作成。

# createdb -E UTF8 uft8db -T template0

-T template0でなにか問題起こったりすることはあるのだろうか?
問題があったら追記しよう。

2011年7月9日土曜日

ビデ鑑

先日(6/19)のフナ橋ライブのビデオ鑑賞会。

昔は夜集まって酒飲んでうだうだ的な感じだったのが、いまや昼集合・子供とたわむれつつな感じ。
時の流れを感じます。

ビデオ見てみると、結構いい感じじゃないですか。

個人的にもビデオにするとベースは荒が目立たなくなるので結構よくできているように見える。


今日見るからいいやと思ってアップしてもらってたyou tubeは下のアドレス。
http://www.youtube.com/user/funabashimacco
これでどこからでも見れる。

2011年7月6日水曜日

PHP Services_JSON について

PHP5.1.6が動いているサーバとjQueryとの間でJSONでやり取りをさせたときにはまった内容。

まず、PHP5.3とjQueryではPHP内のjson_encodeを利用してJSONデータを作成してブラウザに送り込んで問題なかったのだが、PHP5.1.6+IE+jQueryで問題発生。(FFは問題なし)

json_encodeが利用できるのは、PHP5.2以降か、PHP5.1の場合はPECLで入れたときのみなので、サーバがPHP5.1.6でサーバ内をいじれない環境だったので、以前使ったことのあるServices_JSONでjson_encodeの代わりをさせようとした。
ところが、JSONの受信時にIEではダウンロードのダイアログが出てしまいうまく受け取れない。

Services_JSONが勝手にhttpヘッダーをはいていたことが判明。
詳しくは下記サイト。

http://rd.uniba.jp/blog/2010/03/26/

IEでは正式なContent-type: application/jsonを受け付けてくれないようで。
httpヘッダーをはかないように、encode()メソッドの代わりにencodeUnsafe() を利用することにして一段落。


そしてさらに、IEだとJSONのデータ内の<>'"&などもエスケープしてやる必要がある。(左の5つの内どれだけ変換してやる必要があるかは調べてない。とりあえず5つとも変換してやればうまくいった。)


そこでServices_JSONに少し手を加える。
json_encode($obj, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);を実行したときのデータを下にこんな感じのを入れてやる。



case $ord_var_c == 0x3C:
//<
$ascii .= '\u003C';
break;
case $ord_var_c == 0x3E:
//>
$ascii .= '\u003E';
break;
case $ord_var_c == 0x27:
//'
$ascii .= '\u0027';
break;
case $ord_var_c == 0x22:
//"
$ascii .= '\u0022';
break;
case $ord_var_c == 0x26:
//&
$ascii .= '\u0026';
break;


う~んべたべたでぜんぜんスマートじゃない。


がとりあえず動くようになった。