2012.04.04

Category: PHP / Tags:

cronとかでphpを実行する場合の環境変数の設定

cakephp の シェル機能とかつかってバッチ処理をさせたい場合
そのバッチPGの中で、環境変数を設定したい場合

system(’export HOGE=var’);
system(’export FUGA=test’);
system(’/path/comamnd start’);

とかしても、commandには、上記で設定した環境変数はわたらないので注意。
正解は

system(’export HOGE=var ; export FUGA=test ; /path/comamnd start’);

と一つの実行演算子の中にいれてあげよう。

Read More » コメントは受け付けていません。

2012.01.24

Category: Redhat ES(CentOS) / Tags:

library が呼び込めない場合、ld.so.confも確認してみよう

FATAL: could not load library “/usr/local/path/hoge.so”: fuga.so.6: cannot open shared object file: No such file or directory

とかで、そこに、ライブラリ自体はきちんとあるのに
呼び込めない場合は、pathが通ってない可能性があるので

/etc/ld.so.conf

を確認してみる。

/usr/local/lib/
以下にlibraryが有る場合は、ここに上記pathを追加して

-bash-4.1$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib

とかにすれば、pathが通る。

/sbin/ldconfig

で、反映もお忘れ無く。

でもて、本当は、/etc/ld.so.conf に書くより

/etc/ld.so.conf.d

の中に、 local.conf (拡張子が.confのファイル)を作って
そこに書いてあげるべきなのだろうナ。
次からそうしよう。

Read More » コメントは受け付けていません。

2011.12.19

Category: PostgreSQL / Tags:

pgmemcache の install

pgmemcacheのinstallをしようとして、色々つまづいたのでメモ書き。

pgmemcacheの情報を得ようとすると、
memcached+PostgreSQLで実現する
ハイパフォーマンスWebアプリケーション構築
http://www.atmarkit.co.jp/fdb/rensai/memcached/memcached1.html
のページがひっかかる、2008/7/30の記事なので、内容は今も参考になるが前提のモジュールが

pgmemcache_1.2beta1.tar.gz
http://pgfoundry.org/projects/pgmemcache/

libmemcache-1.4.0.rc2.tar.bz2
http://people.freebsd.org/~seanc/libmemcache/

を利用しているので、ここは最新のモノにおきかえたい。
pgmemcache自体は、上記のサイトで最新のモノが取得出来る。現時点では、
pgmemcache_2.0.6 2011-04-26 07:16
がとりあえず、最新。
そして、ここで大きく間違ったのが
libmemcacheでなく、libmemcached (最後にdがつく)が必要になってくる。
(ここで1時間はまったよ・・・)
libmemcachedは、
https://launchpad.net/libmemcached/
にあり、最新は、1.0.2 だが、結論から書くとこれは使わない。
私は、libmemcached 0.48 を利用した。
そう、ここではまった。1.0.2 自体のインストールは問題ないのだが、肝心の
pgmemcacheをインストールしようとすると、makeでこける。
ならばと、pgmemcacheのREADMEに下記の様に書いてあるので

REQUIREMENTS:
=============

1) libmemcached 0.38 or newer (http://tangent.org/552/libmemcached.html)
2) PostgreSQL 8.4 or newer recommended (http://www.postgresql.org/)

libmemcached 0.38でやってみると、これまたmakeで失敗する。。
(1.0.2か0.38のどちらかは忘れたがsasl周りでのerrorだった)
と言うことで、
pgmemcache_2.0.6 2011-04-26 07:16
よりも少し古いlibmemcachedを(結果として、0.48)ためしたら
無事、(makeで警告はでたが)インストールできました。

ここで、3時間ぐらい・・・はまった。

ちなみに、memcachedは、1.4.10をインストールした。

バージョンの選択さえ間違わなければ、あとは特に問題なかった。

memcached-1.4.10

# tar xvfz memcached-1.4.10.tar.gz
# cd memcached-1.4.10
# ./configure –enable-sasl –enable-sasl-pwdb –enable-64bit

saslあたりのエラーで今回躓いてしまったので、一応optionにつけているだけ。多分いらない。

libmemcached 0.48

# tar xvfz libmemcached-0.48.tar.gz
# cd libmemcached-0.48
# ./configure –help
# ./configure –with-memcached

–with-memcached もたぶんいらない

pgmemcache_2.0.6

# su – postgres //postgres ユーザでmake install
$ tar xvfj pgmemcache_2.0.6.tar.bz2
$ cd pgmemcache
$ make
$ make install

で、インストールはおわり。
pgmemcacheのREADMEにあるとおり

% psql -f /usr/local/postgresql/share/contrib/pgmemcache.sql

で、create function を実行させておく。(postgresqlを起動してからね)

あとは、postgresql.confへ最低限の追記

shared_preload_libraries = ‘pgmemcache’
custom_variable_classes = ‘pgmemcache’

上記は、デフォルトでは、コメントアウトされているので、#をとって、pgmemcacheを記載。

pgmemcache.default_servers = ‘127.0.0.1:11211′

は、デフォルトが決まってるのなら、書いていると楽。

以上でDBを再起動すれば、つかえるはず。

Read More » コメントは受け付けていません。

2011.10.18

Category: Redhat ES(CentOS) / Tags:

自己証明書の作成手順

めったにしないので、当時のメモ書きの保存
Cent5.5 でおこなった。

とりあえず、作業用ディレクトリを作成

mkdir -p /usr/local/ssl/CA
cd /usr/local/ssl

秘密鍵を生成。ここでは2048bitを指定。

openssl genrsa -out example.com.key 2048

csrを作成
csrは2038年問題に対応するため、それより長い日にならないように設定

openssl req -new -days 7300 -key example.com.key -out example.com.csr

設問にはいつも通り回答。

openssl.cnf を修正する。opensslはyumでインストール済み

cp -a /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.org
vi /etc/pki/tls/openssl.cnf

dir は作業ディレクトリとの相対パスの関係で修正
x509_extensionsは、自己署名はv3_caを参照ってことらしい(よくわかってない)ので修正

# diff /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.org
45,46c45
< #dir = ../../CA # Where everything is kept
< dir = CA
---
> dir = ../../CA # Where everything is kept
62,63c61
< #x509_extensions = usr_cert # The extentions to add to the cert
< x509_extensions = v3_ca
---
> x509_extensions = usr_cert # The extentions to add to the cert

生成前に必要なディレクトリとファイルを作成。

# mkdir CA/newcerts
# touch CA/index.txt
# echo 00 > CA/serial

自己著名

# openssl ca -in example.com.csr -out example.com.crt -keyfile example.com.key -selfsign -days 7300

ログ
Certificate is to be certified until Jul 17 07:31:42 2031 GMT (7300 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
の2つの設問に答えています。

Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 0 (0×0)
Validity
Not Before: Jul 22 07:31:42 2011 GMT
Not After : Jul 17 07:31:42 2031 GMT
Subject:
countryName = JP
stateOrProvinceName = Fukuoka
organizationName = example Limited
commonName = example Limited CA
X509v3 extensions:
X509v3 Subject Key Identifier:
C8:7E:13:D1:B8:4F:56:0E:65:22:dd:tt:44:55:21:F5:93:92:1a:07
X509v3 Authority Key Identifier:
keyid:C8:7E:13:D1:a8:bb:cc:dd:ee:ff:D6:74:42:F0:21:F5:93:92:1A:07
DirName:/C=JP/ST=Fukuoka/O=example Limited/CN=example Limited CA
serial:00

X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Jul 17 07:31:42 2031 GMT (7300 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Read More » コメントは受け付けていません。

2011.06.17

Category: Mail, Postfix / Tags:

CentOS5.6 Dovecot postfix SASL で SMTP-AUTH

設定の記録メモ(色々いじったあたのメモだけに別の機会に書き直す必要がありそう。。)

Dovecot
postfix
SASL (cyrus-sasl)
は、すべて yum からinstall
SMTP-AUTHを、dovecot連携で利用する場合は、
修正するファイルは

/etc/postfix/main.cf
/etc/dovecot.conf

SMTP-AUTHを、cyrusで利用する場合は、

/etc/postfix/main.cf
/usr/lib/sasl/smtpd.conf

あたりになる。

ちなみに、 cyrus-sasl-sql を入れていると

postfix/smtpd[28060]: auxpropfunc error invalid parameter supplied
postfix/smtpd[28060]: sql_select option missing
postfix/smtpd[28060]: auxpropfunc error no mechanism available

あたりのログを /var/log/message にはかれる場合がある、その場合はアンインストールすればいいです。(もちろんつかってなければ)

Cyrus-saslと連携する場合は
Postfix SASL Howto
http://www.postfix-jp.info/trans-2.1/jhtml/SASL_README.html
で確認してもらうのがよさげ、その場合の main.cfの設定は

# for Cyrus-SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_sasl_local_domain = $myhostname,$mydomain
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

あたりになります。

smtpd_recipient_restrictionsのところで、

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains, reject

となっているサイトは、postfixが1系だと思うので、2系(2.1系だったかな?)の場合は、check_relay_domains, rejectのかわりに reject_unauth_destination を記載してあげる。
平文の認証を禁止する場合は

smtpd_sasl_security_options = noanonymous

でなく

smtpd_sasl_security_options = noanonymous,noplaintext

とする。

Dovecotと連携する場合は、main.cfに

# fordovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname,$mydomain
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

と記載、上記との変更点はsmtpd_sasl_type = dovecot smtpd_sasl_path = private/auth の部分

で、/etc/dovecot.conf に
auth default {} で囲まれている一番下の方に

socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}

を記載
その他環境によっては
#protocols = imap imaps pop3 pop3s
auth default {} の mechanisms = -> 利用する認証の種類
などは変更しておく。

あとは、inid.d からリスタートさせればOK。上手くいかない場合は

[root@xxx postfix]# postconf -A
cyrus
[root@xxx postfix]# postconf -a
cyrus
dovecot

を確認したり

[root@xxx postfix]# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 www.example.com ESMTP Postfix
EHLO localhost
250-www.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.

とかで、250-AUTH がでるか確認。

http://www.aconus.com/~oyaji/mail2/smtp-auth-tst.htm
あたりを参考にしてください。

Read More » コメントは受け付けていません。

2011.04.02

Category: Mac, Os / Tags:

macportsでhelp2manが原因で、エラーになる場合

ちらちらと、書かれている人もいますが、僕の場合。

sudo port selfupdate
sudo port upgrade outdated

とかしようとおもったら、
help2man あたりで Error がでて継続ができない。
その場合の対処法。

sudo port uninstall autoconf
sudo port uninstall help2man
sudo port uninstall p5-locale-gettext -> 入っていれば
sudo port install p5-locale-gettext
sudo port install help2man
sudo port install autoconf
sudo port install gettext-lint

とりあえず、help2man をアンインストール。依存関係にある、autoconfもアンインストール。
本質的には、p5-locale-gettext との整合性?にあるみたいなので、こちらを最新にする。
で、アンインストールした、help2man autoconf を入れる。

gettext-lint はべつのブログで、対応策の一つにあったので、ついでにいれておいた。

Read More » コメントは受け付けていません。

2011.01.25

Category: PostgreSQL / Tags:

PostgreSQL チューニングの勘所

自分でよく忘れるので、postgresql.conf でできる、チューニングの勘所をメモっておく。
日々追加予定。

※バージョンによって、追加・削除・変更があったパラメータ名が存在するので、
基本的には最新バージョンに向けての加筆・修正となります。
2011.11.25日時点で、ちょっと下書き状態なので、設定値は参考にしないでください。

ケース : 通常運用でのポイント
max_connections -> 100位を限度に調整(あげすぎない)

shared_buffers -> 全体MEMORY量の、10~15% (マニュアルには25%と書いてあったような??)
この値は、過去できるだけ大きくとか、書かれていましたが、それは潤沢なメモリが無い時代の
話であり、今のように、4Gとか8Gとか、のメモリが載っているマシンでは、無駄に共有メモリ
を増やしてここの値を大きくしすぎると、逆に性能がでなくなります。
それは、PostgreSQLが、HDDを読みに行く前に、OS自体のキャッシュが利用されたり
確保したメモリの管理自体に時間をとられたりするためです。

checkpoint_segments -> 10
ここはある程度大きくする事。

ケース : batch等で、毎日大量のデータを投入・及び入替をする場合
http://www.postgresql.jp/document/pg901doc/html/populate.html
が激しく参考になります。
1. 自動コミットをオフにする
-> アプリによっては、背後で、自動commitが働いているので、止められるならとめる。
2. COPYの使用
-> insertよりcopyが圧倒的にはやい
3. インデックスを削除する
-> あとでまとめて張る。
4. 外部キー制約の削除
-> これもあとでまとめて
5. maintenance_work_memを増やす
-> indexをあとでまとめて張る場合等に有効。SETで一時的に増やす事ができる。
  最適値をしりたいです・・・・ default 16Mなんで、一時的になら、128~256Mとかに
  増やしても問題ないかと思います。。。たぶん。
6. checkpoint_segmentsを増やす
-> 通常運用のところで
7. WALアーカイブ処理とストリーミングレプリケーションの無効化
-> これとあとでまとめてした方が良
8. 最後にANALYZEを実行
-> 統計情報を綺麗にし直すのが吉。

あとは、気がついたらかきたします。

Read More » コメントは受け付けていません。

2011.01.18

Category: PHP / Tags:

php-json-ext のインストール

jsonをさわる機会もおおくなってきたのだが、php5.1.x では、defaultで、json moduleが
入っていない。ということは、CentOS 5.x では、defaultではつかえない。。。

なので追加でいれてあげるひつようがある。

http://www.aurore.net/projects/php-json/
から、モジュールを取得。
Version 1.2.1 (SRPM, Win32) – Released 2006-04-01
が最新みたいです。

[root@example src]# wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2
[root@example src]# tar jxvf php-json-ext-1.2.1.tar.bz2
[root@example php-json-ext-1.2.1]# ./configure
[root@example php-json-ext-1.2.1]# make
[root@example php-json-ext-1.2.1]# make install
Installing shared extensions: /usr/lib/php/modules/

あとは、php.iniへの記述
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; extension=msql.so
のセクションあたりに、

extension=json.so

を記載。

apacheを再起動してあげれば終了です。
phpinfo とかで、モジュールが呼び込まれているか確認できます。

Read More » コメントは受け付けていません。

2011.01.14

Category: CakePHP, PHP / Tags:

CakePHP log関数で、オリジナルのファイル名のログファイルを作る

Cakephp 1.3.6

マニュアルを読む限りでは、

デフォルトでは、ログは app/tmp/logs/error.log に記録されます。
第二引数では、記録するログのタイプを定義します。 指定しなかった場合、前述したエラーログのパスに書き出す LOG_ERROR がデフォルトで定義されます。もし LOG_DEBUG に設定した場合は、デバッグログとして app/tmp/logs/debug.log にログが出力されます。

とあり。

$this->log(’A debugging message.’, LOG_DEBUG);

とすると。 app/tmp/logs/debug.log

$this->log(’A error message.’, LOG_ERROR);

とすると。 app/tmp/logs/error.log
に書き出される。
でも、これらのファイル以外に書き出したいので、とりあえずどのような定数があるか調べてみると。
Log_* の定数は

[LOG_EMERG] => 0
[LOG_ALERT] => 1
[LOG_CRIT] => 2
[LOG_ERR] => 3
[LOG_WARNING] => 4
[LOG_NOTICE] => 5
[LOG_INFO] => 6
[LOG_DEBUG] => 7
[LOG_KERN] => 0
[LOG_USER] => 8
[LOG_MAIL] => 16
[LOG_DAEMON] => 24
[LOG_AUTH] => 32
[LOG_SYSLOG] => 40
[LOG_LPR] => 48
[LOG_NEWS] => 56
[LOG_UUCP] => 64
[LOG_CRON] => 72
[LOG_AUTHPRIV] => 80
[LOG_LOCAL0] => 128
[LOG_LOCAL1] => 136
[LOG_LOCAL2] => 144
[LOG_LOCAL3] => 152
[LOG_LOCAL4] => 160
[LOG_LOCAL5] => 168
[LOG_LOCAL6] => 176
[LOG_LOCAL7] => 184
[""LOG_PID" " ] => 1
[LOG_CONS] => 2
[LOG_ODELAY] => 4
[LOG_NDELAY] => 8
[LOG_NOWAIT] => 16
[LOG_PERROR] => 32
[LOG_ERROR] => 2

な感じで存在した。

これらを、第2引数にして、logを出力してみる。

$this->log(’A LOG_EMERG message.’, LOG_EMERG);
$this->log(’A LOG_ALERT message.’, LOG_ALERT);
$this->log(’A LOG_CRIT message.’, LOG_CRIT);
$this->log(’A LOG_ERR message.’, LOG_ERR);
$this->log(’A LOG_WARNING message.’, LOG_WARNING);
$this->log(’A LOG_NOTICE message.’, LOG_NOTICE);
$this->log(’A LOG_INFO message.’, LOG_INFO);
$this->log(’A LOG_DEBUG message.’, LOG_DEBUG);
$this->log(’A LOG_KERN message.’, LOG_KERN);
$this->log(’A LOG_USER message.’, LOG_USER);
$this->log(’A LOG_MAIL message.’, LOG_MAIL);
$this->log(’A LOG_DAEMON message.’, LOG_DAEMON);
$this->log(’A LOG_AUTH message.’, LOG_AUTH);
$this->log(’A LOG_SYSLOG message.’, LOG_SYSLOG);
$this->log(’A LOG_LPR message.’, LOG_LPR);
$this->log(’A LOG_NEWS message.’, LOG_NEWS);
$this->log(’A LOG_UUCP message.’, LOG_UUCP);
$this->log(’A LOG_CRON message.’, LOG_CRON);
$this->log(’A LOG_AUTHPRIV message.’, LOG_AUTHPRIV);
$this->log(’A LOG_LOCAL0 message.’, LOG_LOCAL0);
$this->log(’A LOG_LOCAL1 message.’, LOG_LOCAL1);
$this->log(’A LOG_LOCAL2 message.’, LOG_LOCAL2);
$this->log(’A LOG_LOCAL3 message.’, LOG_LOCAL3);
$this->log(’A LOG_LOCAL4 message.’, LOG_LOCAL4);
$this->log(’A LOG_LOCAL5 message.’, LOG_LOCAL5);
$this->log(’A LOG_LOCAL6 message.’, LOG_LOCAL6);
$this->log(’A LOG_LOCAL7 message.’, LOG_LOCAL7);
$this->log(’A “”LOG_PID” ” message.’, “”LOG_PID” ” );
$this->log(’A LOG_CONS message.’, LOG_CONS);
$this->log(’A LOG_ODELAY message.’, LOG_ODELAY);
$this->log(’A LOG_NDELAY message.’, LOG_NDELAY);
$this->log(’A LOG_NOWAIT message.’, LOG_NOWAIT);
$this->log(’A LOG_PERROR message.’, LOG_PERROR);
$this->log(’A LOG_ERROR message.’, LOG_ERROR);

な感じ。
すると、app/tmp/logs以下に、

debug.log
error.log
0.log
1.log
2.log
3.log
32.log

といった感じで、ファイルができていた。
推測するに、定数の値がそのままファイル名になっている感じ。
LOG_ERRORとLOG_DEBUGはどこかでマッピングされているのだろうけどとりあえすそこまではおっかけない。
一応確かめるために。定数で

[WEBROOT_DIR] => api

とあったので、これでlogを作ってみると

$this->log(’A WEBROOT_DIR message.’, WEBROOT_DIR);

api.log と期待通りにログファイルができた。

なので、簡単にするなら

define(”LOG_ORIGINAL_AUTH”, date(”Ymd”) . “auth”);
$this->log(’A LOG_ORIGINAL_AUTH message.’, LOG_ORIGINAL_AUTH);

とかすれば、日付每のログファイルが作れます。

ただし、フォルダとか別けられないので、そこについては要注意です。次のステップかな。

2010.08.04

Category: Os, Redhat ES(CentOS) / Tags:

vsftp で chroot を使う。

通常、adduserとかで、ユーザを作ると
/home/hoge
という形で、ホームディレクトリができる。
この状態で、
vsftpのchrootを有効にすると、ftpでログインすると当然
/home/hoge より上位のディレクトリにはいけない。
また、
ln -s /var/www/html /home/hoge/www
とシンボリックリンクをはっても、そのディレクトリに
移動する事はできない。

このことを解決するためには。ホームディレクトリを
/var/www/html にしてしまってもいいけどあまり美しくないので。

ホームディレクトリは
/home/hoge
のまま、 chrootは有効で、ftpで接続すると
/var/www/html
に、ログイン出来る様にしたい。これを満たすためには、

/etc/vsftpd/vsftpd.conf
をとりあえず、chrootが使える用に変更

anonymous_enable=No
ascii_upload_enable=YES
ascii_download_enable=YES
ls_recurse_enable=YES
上記の4つは、chrootに関係ないけど、変更

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list_fileに記載しているファイルに、記載されたユーザを
chrootの影響下に置く設定。
別途 chroot_local_user という設定もあるが、これは

chroot_local_userを有効にすると多くのセキュリティ問題、特にアップロードの権限を持つユーザーにとっての問題に遭遇します。この理由で推薦できません。

との事だったので、今回は設定せず。

user_config_dir=/etc/vsftpd/user_conf
を設定して、ユーザ每の設定ファイルを作れるようにする。こちらの設定は
vsftpd.confの設定値を上書きできます。

あとは、
/etc/vsftpd/chroot_list
に、chrootで制御したいユーザ名(例えば、foo)とかき
/etc/vsftpd/user_conf/foo
ファイルを作成して、そのなかに、
local_root=/var/www/html
とかけば、 /home/foo がホームディレクトリのままftpでログインすると
/var/www/html
にログイン出来る様になります。

Read More » コメントは受け付けていません。

« Older Entries