2010年7月15日木曜日

apacheにmod_rewriteを追加する。

どうも、俺@連続投稿です。

apacheに組み込まれているモジュールを確認する場合は
# httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile
...
で確認できます。今日は「やべっ!RewriteEngine使うためのmod_rewrite入ってねーじゃん!」という場合どうするかのメモです。

まぁ、簡単なのはapacheを --enable-rewrite 追加して再インストールで良いのですが、再インストールできないような場合(例えばapacheを止められないような場合)。

まず適当なDirを作成
# mkdir /usr/local/apache2/my_dir
し、rewrite用のプログラムファイルを持ってきます。
# find /usr/local/src/httpd-2.2.6/ -name "*rewrite*"
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.lo
/usr/local/src/httpd-2.2.6/modules/mappers/libmod_rewrite.la
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.exp
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.a
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.la
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/mod_rewrite.o
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.o
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c
/usr/local/src/httpd-2.2.6/modules/mappers/NWGNUrewrite
...
たくさん出てきます。
ココで必要なのは
「mod_rewrite_c」と「mod_rewirte.h」の2つです。(たぶん

# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c /usr/local/apache2/my_dir
# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.h /usr/local/apache2/my_dir
します。

次にビルドします。
# cd /usr/local/apache2/my_dir
# /usr/local/apache2/bin/apxs -c mod_rewrite.c
とすると
# ls -la
drwxr-xr-x 2 root root 4096 Jul 15 18:54 .libs
-rw-r--r-- 1 root root 154702 Jul 15 18:53 mod_rewrite.c
-rw-r--r-- 1 root root 1340 Jul 15 18:53 mod_rewrite.h
-rw-r--r-- 1 root root 822 Jul 15 18:54 mod_rewrite.la
-rw-r--r-- 1 root root 324 Jul 15 18:54 mod_rewrite.lo
-rw-r--r-- 1 root root 197344 Jul 15 18:54 mod_rewrite.o
-rw-r--r-- 1 root root 0 Jul 15 18:54 mod_rewrite.slo
とたくさんファイルが出来上がります。
次にインストールです。
 # /usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la
完了です。

あとはhttpd.confをいつものように編集すれば完了です。


以上でぇぇぇえぇす。

postgrsql.8.4.xでcreatedb実行時に文字コードエラー

どうも、俺@残業中です。

postgresql.8.4系で
$ createdb hoge_db -E UTF8
createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (EUC_JP)
HINT: Use the same encoding as in the template database, or use template0 as template.
のエラーが出ました。

これはinitdb時に文字コードをEUC-JPで作成したためUTF-8なデータベースが作成できないよ!というエラーです。ちなみにpostgresql8.4系から出るエラーだそうです。

こんな時は、「Use the same encoding as in the template database, or use template0 as template」しましょう。
つまり、template0のテンプレートデータベースを使ってcreatedbしましょう。

$ createdb hoge_db -E UTF8 -T template0
これで出来るはずです。

テンプレートデータベースとはなんじゃらほい?ですが、
PostgreSQL テンプレートデータベースに説明があります。
template1というデータベースはデータベース作成時に元となるテンプレートで、initdbなどした初期設定の情報などが入っています。
template0というデータベースは、初期設定のないテンプレートだそうです。


ちゃんちゃん。

2010年7月7日水曜日

snmpで独自(特定)のプログラム実行結果を取得する

どうも、俺@仕事中です。

今日はsnmpで独自で作成したプログラムの実行結果を取得する方法についてメモです。
snmpd.confに
# vim snmpd.conf
exec foo_program /usr/local/bin/php /etc/snmp/bin/foo.php
exec bar_program /usr/local/bin/php /etc/snmp/bin/bar.php
とし、/etc/snmpd/bin以下に実行プログラムを書きます。
2つ書いたのは、例えばMRTGでデータ取得する場合は2つのデータを必要とするからです。
それぞれのプログラムは適当に
<?php print 10. "\n";
みたいにしておきます。

この場合、snmpでは
.1.3.6.1.4.1.2021.8.1.101.1 /etc/snmp/bin/foo.phpの実行結果
.1.3.6.1.4.1.2021.8.1.101.2 /etc/snmp/bin/bar.phpの実行結果
を取得できます。
一番最後の「1」は、snmpd.confに書いた上からの順番です。

ちなみに
.1.3.6.1.4.1.2021.8.1.100.1 /etc/snmpd/bin/foo.phpの戻り値
.1.3.6.1.4.1.2021.8.1.100.2 /etc/snmpd/bin/bar.phpの戻り値
が取得できます。

テストで
# snmpwalk -v 1 host_name -c community_name .1.3.6.1.4.1.2021.8.1.101.1
10
# snmpwalk -v 1 host_name -c community_name .1.3.6.1.4.1.2021.8.1.101.2
10
で確認してください。

以上でええええええええええす。

2010年7月6日火曜日

postgresqlで日付データをフォーマットさせる

どうも、俺@一生懸命仕事中です。

今日はpostgresqlで日付データをフォーマットして出力する方法についてメモです。
例えばtimestamp型のカラムは
select regist_date from table_name
regist_date
--------------------
2010-06-29 14:53:53
2010-06-29 15:07:03
2010-06-29 17:28:57
2010-07-01 17:07:55
2010-07-06 14:10:33
のような出力になるのですが、これを年月日の部分だけで切り取りたい場合。
※(yyyy-mm-ddの部分だけ表示したい)

そんな場合は
select to_char(regist_date, 'yyyy/MM/dd') from table_name
to_cahr
----------------
2010/06/29
2010/06/29
2010/06/29
2010/07/01
2010/07/06
でも良いし、
select date(regist_date) from table_name
date
----------------
2010-06-29
2010-06-29
2010-06-29
2010-07-01
2010-07-06
でも良いですよー。

以上だよーーーん。