サーバ構築の最近のブログ記事

CentOS 5.4以降では、IPv6無効化の方法が変わっていたので、忘れないように
書いておく。

# echo 'options ipv6 disable=1' > /etc/modprobe.d/disable-ipv6.conf

上記の設定を行った後、再起動すると適用される。

/etc/modprobe.conf や /etc/sysconfig/network で頑張っても無視されるので、
要注意!

perlとforkとDBI

| コメント(0) | トラックバック(0)

perlでDBIを使った処理でforkさせた際に、ちょっとはまったので、忘れないように書いておく。

親プロセスで、DB接続後にforkする場合、子プロセスにデーターベースハンドルが引き継がれて
しまい、困った事象(親のDB接続が切れる)が発生する。

これを回避するには、親プロセスのDB接続時に「AutoInactiveDestroy => 1」を設定すると、
幸せになれる。

○ソース例


my $conn = DBI->connect($dbname, $dbuser, $dbpass,
	{AutoCommit=>1, PrintError=>0, RaiseError=>0,AutoInactiveDestroy=>1}) ||
        die "OPEN ERROR(1): " . $DBI::errstr;

#  fork
my $pid = fork;
if (!defined $pid) {
	die "fork failed"; # 生成に失敗した
} elsif (!$pid) {
	# 子プロセス本体
	# 子プロセス用DB open
	my $conncd = DBI->connect($dbname, $dbuser, $dbpass,
		{AutoCommit=>1, PrintError=>0, RaiseError=>0}) ||
		die "OPEN ERROR(2): " . $DBI::errstr;
	# 子プロセス処理
	# 子プロセス用DB close
	$conncd->disconnect();
	exit;
}
# 親DB切断
$conn->disconnect();

ただし、"AutoInactiveDestroy"が使えるのは、DBIのバージョンが1.6.14以降の場合のみ。
それ以前の場合は、子プロセススタート時に、「$conn->{InactiveDestroy} = 1」とするとよい。

ちなみに、perlモジュールのバージョン確認は、Module::Infoをインストールしておくと、
簡単に確認できる。


$ module_info DBI

Name:        DBI
Version:     1.52
Directory:   /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
File:        /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/DBI.pm
Core module: no

#サンプル出力のバージョンが残念なバージョンでした...

php 5.3とSmarty 3

| コメント(0) | トラックバック(0)

php 5.3には色々な変更点があるが、Smartyも3系で大きな変更が行われており、
既存システムやサイトを動かそうとすると、はまりどころが多いようです。

現時点で、はまった点を忘れないように書いておきます。

・phpのエラーレポートレベルが変更されている
E_DEPRECATED が追加されていて、将来使えなくなるコードがエラーとして表示される。(標準状態)
ソースを変更しないといけないことには、変わりがないが、取り急ぎ稼働させたい場合は、
レポートレベルを変更して、エラーが出ないようにすることは可能。

error_reporting  =  E_ALL & ~E_NOTICE

error_reporting  =  E_ALL & ~E_NOTICE & ~E_DEPRECATED

・Smarty 3.0.7からpopup系のプラグインが削除されている
吹き出しみたいな感じで使えたpopupプラグインが削除されている。
継続して使いたい場合は、テンプレートに自分で記載するか、自前プラグインを作る必要有り。
(まあ、新しいサイトの場合は、使わないと思うので、大した問題ではないと思う)

・Smartyの"html_options"等のソースが変
html_options等を利用しているテンプレートで、2回目以降の表示の際に、
Call to undefined function smarty_function_escape_special_chars() in /usr/lib64/Smarty/plugins/function.html_options.php
などのエラーが表示されて、異常終了するケースが発生した。
該当のfunctionは、function.html_options.phpの33行目あたりで、require_onceでロードされているが、
キャッシュされた2回目以降の実行でうまくロード出来ない模様。

この問題は根が深そうな感じだが、取り急ぎ動作させるには、require_once → requireにすれば、
動作可能になる。

根本的な原因調査は、継続中。(Smarty本体の可能性が高いと感じている)

phpのincludeとinclude_once及びrequireとrequire_onceは、使いどころをよく考える必要有り。

CentOS 5.6とmod_nss

| コメント(1) | トラックバック(0)

mod_nssがインストールされた環境で、CentOSを5.6にアップデートして、httpdを再起動すると、
サイトにアクセス出来ない問題が発生したため、忘れないように記載しておく。

○エラー内容
error.logに下記のようなエラーが出力され、Apacheがまともに起動しない。
[error] NSS_Initialize failed. Certificate database: /etc/httpd/alias.

○原因
CentOS 5.6でアップデートされた「mod_nss-1.0.8-3.el5」が原因。
/etc/httpd/alias/ 配下のdbファイルのパーミッションが変更され、rootのみ読み書き可に
なってしまっており、Apacheの実行アカウントでアクセスできないため、エラーとなる。

アップデート後の/etc/httpd/alias/ 

drwxr-xr-x 2 root root    4096  4月 11 10:46 .
drwxr-xr-x 5 root root    4096  4月 11 10:43 ..
-rw-r----- 1 root apache 65536  7月 10  2008 cert8.db
-rw------- 1 root root    4395  7月 10  2008 install.log
-rw-r----- 1 root apache 16384  7月 10  2008 key3.db
lrwxrwxrwx 1 root root      31  4月 11 10:46 libnssckbi.so -> ../../..//usr/lib/libnssckbi.so
-rw-r----- 1 root apache 16384  7月 10  2008 secmod.db

○対策
/etc/httpd/alias配下のdbファイルのパーミッションを変更し、Apacheの実行アカウントで
アクセス出来る状態にして、httpdを再起動する。
(dbファイルのグループをapacheにして、グループへ読込権限を与える)

対策後の/etc/httpd/alias/

drwxr-xr-x 2 root root    4096  4月 11 10:46 .
drwxr-xr-x 5 root root    4096  4月 11 10:43 ..
-rw-r----- 1 root apache 65536  7月 10  2008 cert8.db
-rw------- 1 root root    4395  7月 10  2008 install.log
-rw-r----- 1 root apache 16384  7月 10  2008 key3.db
lrwxrwxrwx 1 root root      31  4月 11 10:46 libnssckbi.so -> ../../..//usr/lib/libnssckbi.so
-rw-r----- 1 root apache 16384  7月 10  2008 secmod.db

ちなみに、mod_nssをインストールしていない環境は、もちろん影響なし。
こんなアップデートパッケージのエラーは勘弁して欲しい...

どうやら、根本的な原因は、perl-IO-Compressのリポジトリが変更されたことらしい。
rpmforge → rpmforge-extras
ということで、対策には、rpmforgeの設定見直しと個別アップデートが必要になった。

# yum update rpmforge-release

リポジトリのアップデートと、設定ファイル(/etc/yum.repos.d/rpmforge.repo)の変更。
上記のアップデートで、rpmforge.repo.rpmnewが作成されているはずなので、その内容に沿って、
"rpmforge-extras"と"rpmforge-testing"リポジトリを追加。

# yum update --enablerepo=rpmforge-extras perl-IO-Compress
"rpmforge-extras"は、enableにはしていないので、リポジトリを指定してupdateする。
これで、問題は解消される。

あとは、普通に"yum update"でアップデート可能になります。

PHP&PostgreSQLアップデート

| コメント(0) | トラックバック(0)

PHPとPostgreSQLがアップデートしていたので、メインサーバーをアップデートした。

PHP: 5.3.5
PostgreSQL: 9.0.2

両方ともマイナーアップデートなので、特に問題は発生せず、動作も問題なしだった。

ただ、PECLのAPCがいつの間にかアップデートしており、3.1.6(stable)が
2010/11/30にUPされており、これで、PHP 5.3系もAPCをstableで
利用できるようになったのではないかと思われます。
(今までは、betaしか使用できなかった...)

特段、上記の組み合わせで自社サーバーで問題が発生していないので、そろそろ
各種システムでの実装テストを行う必要が出てきたなぁ~

PostgreSQL 9の継続的アーカイブ処理とストリーミングレプリケーションを
試したいが、テストするにも環境構築が大変だなぁ... (-_-;)

なかなか魅力的な機能がてんこ盛りのPostgreSQLを試しに自社サーバーでアップグレードしてみました。

早速、メジャーアップグレードにありがちな、引っかかった部分があったので、
忘れないように、書き留めておきます。

○引っかかった部分
Movable Type OpenSource

○問題
管理ページにログインできない。
"Can't use string ~ as an ARRAY ref while 'strict refs' in use"といった
エラーメッセージが出力される。

○原因
bytea型の出力がデフォルトで 16進形式となったことが原因。
"author_meta_vblob"テーブルにbytea型が使われている。

○回避策
postgresql.confで、bytea型の出力形式を変更可能なので、とりあえず他に
影響ないようだったら、以前の出力形式に戻す。

#bytea_output = 'hex'

bytea_output = 'escape'

もちろん、postgresql.confの変更の後は、PostgreSQLの再起動が必要です。

9.0のリリースノートは読んではいたが、自分が設計していないものになると、
何を使っているかは分からないので、使ってみないとやはり分からないものです。

○PostgreSQL 9.0リリースノート
http://www.postgresql.jp/document/9.0/html/release-9-0.html

ツイートボタンの設置

| コメント(0) | トラックバック(0)

Twitter公式のツイートボタンが公開されたので、設置してみた。

設置方法は、簡単で、Twitterにログインした状態で、下記のサイトにアクセスして、
設置したいボタンタイプを選んで、表示されたソースコードを、ページの任意の
位置に貼り付けるだけです。

ツイートボタン

このボタンのメリットは、

  • 自動的にページタイトルとページのURLが短縮URLでツイート文と
    して挿入された状態で、別ウィンドウが開く。
  • そのページのツイート数が表示出来る。(まだ安定していないかな?)
  • ツイートしてもらうと、フォローのお勧めが表示される

といった感じです。

このページにも、ツイートボタンを付けているので、ツイートしてみてください。

MeCabのインストール

| コメント(0) | トラックバック(0)

サービスとして提供しているものもあるので、忘れないようにMeCabのインストール
方法を書いておく。

○MeCabのインストール
ソースファイルを公式サイトからダウンロードして、インストールする。
文字コード指定を忘れないこと。
prefixのデフォルトは、/usr/local/

$ tar zxfv mecab-X.X.tar.gz
$ cd mecab-X.X
$ ./configure --with-charset=utf8
$ make
$ make check
$ su -
# make install

○MeCab辞書をインストール
辞書ファイルを公式サイトからダウンロードして、インストールする。
文字コード指定を忘れないこと。

$ tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
$ mecab-ipadic-2.7.0-XXXX
$ ./configure --with-charset=utf8
$ make
$ su -
# make install

上記2つをインストールすることで、/usr/local/binにパスが通っていれば、
mecabが利用可能になります。

PHP上から、MeCabを使うには、php_mecabをインストールする方法が、
スマートと思われます。
ただし、php 5.3環境でそのままコンパイルするとエラーになるので、ソース修正が
必要です。

上記のような環境ができあがると、例えば、郵便番号データーを辞書ファイル化して
住所を分ち書きしたりできます。

PHPで都道府県、市区町村、町域名以降の住所分割を高速に行う方法

これを応用して、住所から郵便番号を取得できるようになります。

TLECがダウンしている件

| コメント(0) | トラックバック(1)

Spamassassinの定義ファイルは、TLECのファイルをベースに利用していたのですが、
ここのところ、TLECのサイト自体に接続出来なくなっていました。

どうしてかなと、思って調べてみたところ、どうやらTLECのサイトは終了してしまった
ようです。

「user_prefs」は、TLECで公開されていたファイルを作成されていた方が、
個人サイトにて公開&更新を続けておられるようですので、そちらをベースに
使っていきたいと思います。

user_prefsは、下記URLでダウンロード出来ます。

http://www.flcl.org/~yoh/user_prefs

1   2   3   4   

2012年2月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.25
 
 

このアーカイブについて

このページには、過去に書かれたブログ記事のうちサーバ構築カテゴリに属しているものが含まれています。

前のカテゴリはお知らせです。

次のカテゴリは日記です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。