PT2導入日記(4日目)

PT2が動くようになったので、録画環境のセットアップに入ります。

[参考]

PostgreSQLのインストール

次は絶対OS入れるときからセットアップしておく。
今回は自力で入れてみます。

$ sudo aptitude install postgresql postgresql-server-dev-8.4

PostgreSQLの設定とデータベースの作成

ここでここで滅茶苦茶詰まったので、先にやっちゃいます。

$ sudo /etc/init.d/postgresql-8.4 stop PostgreSQLのプロセスを一旦落とす
$ sudo su - ←postgresユーザーになるために一度rootを経由して
# su - postgres ←ユーザーを変更
$ cd 8.4 ←移動。このフォルダはPostgreSQLのバージョンになると思う
$ mv main main.org ←オリジナルのバックアップ
$ mkdir main ←mainを新たに作る
$ chmod 700 main ←権限修正
$ /usr/lib/postgresql/8.4/bin/initdb main ←今回はUTF-8でつくることを目指します。
$ exit ←一旦脱出
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem /var/lib/postgresql/8.4/main/server.crt ←サーバーの鍵を作っておく
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key /var/lib/postgresql/8.4/main/server.key ←上に同じく。ないとエラー出た
# /etc/init.d/postgresql-8.4 start
# su - postgres
$ createuser --no-adduser --no-createdb --password foltia ←「新しいロールにロールを作成する権限を与えますか」と聞かれるので多分yで大丈夫なはず
$ createdb --owner foltia foltia ←新しいDB「foltia」を作る
$ exit ←脱出
# exit foltiaに戻る

で、postgresql.confの設定を変える。

$ diff -u postgresql.conf.org postgresql.conf
--- postgresql.conf.org 2010-06-24 01:52:09.359155082 +0900
+++ postgresql.conf     2010-06-24 03:54:08.309155099 +0900
@@ -56,7 +56,7 @@

 # - Connection Settings -

-#listen_addresses = 'localhost'                # what IP address(es) to listen on;
+listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
@@ -446,7 +446,7 @@
                                        # encoding

 # These settings are initialized by initdb, but they can be changed.
-lc_messages = 'ja_JP.UTF-8'                    # locale for system error message
+lc_messages = 'C'                      # locale for system error message
                                        # strings
 lc_monetary = 'ja_JP.UTF-8'                    # locale for monetary formatting
 lc_numeric = 'ja_JP.UTF-8'                     # locale for number formatting

下側の変更は、ログの出力を英語に切り替えています。
そのままだと文字化けしてしまうので、何のエラーなのか全く分からなくなってしまう罠に陥ってしまったので^^;
[参考]


次にアクセス制限関係の設定。
この後にCPANのインストールを行うのだが、PostgreSQLにアクセスするためのモジュールのインストールするときに盛大にコケました。
その原因に、ここでのアクセス制限があったみたいで。。。
詳しくは後のCPANの項目のところで書きます。
とりあえずは以下のDiffを参照。
postgresユーザーに関してtrustしてあげてください。

$ sudo diff -u  pg_hba.conf.org pg_hba.conf
--- pg_hba.conf.org     2010-06-27 01:27:45.660458221 +0900
+++ pg_hba.conf 2010-06-27 17:52:31.770458053 +0900
@@ -74,7 +74,7 @@
 # (custom daily cronjobs, replication, and similar tasks).
 #
 # Database administrative login by UNIX sockets
-local   all         postgres                          ident
+local   all         postgres                          trust

 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

あとは忘れないようにプロセスの再起動

$ sudo /etc/init.d/postgresql-8.4 restart

ついでにMuninもPostgreSQLプラグイン追加しておく。

$ cd /etc/munin/plugins/
$ sudo ln -s /usr/share/munin/plugins/postgres_connections_db ./
$ sudo ln -s /usr/share/munin/plugins/postgres_xlog ./
$ sudo ln -s /usr/share/munin/plugins/postgres_bgwriter ./
$ sudo ln -s /usr/share/munin/plugins/postgres_checkpoints ./
$ sudo ln -s /usr/share/munin/plugins/postgres_users ./

とりあえずありったけ突っ込んで、実際に使えたプラグインが上の通り。
設定したら他のも使えるのかもしれないけど、よく分からんのでとりあえず放置。

あとはプロセスの再起動

$ sudo /etc/init.d/munin-node restart

PHPのインストール

入ってると思ったのに・・・・・・orz

$ sudo aptitude install php5 phpmyadmin phppgadmin php5-pgsql libpq-dev

phpmyadminphppgadminはセキュリティ上入れない方がよかったかも。
とりあえずAllowの設定を修正しておきます。

$ diff -u apache.conf.org apache.conf
--- apache.conf.org     2010-06-24 01:18:45.169155065 +0900
+++ apache.conf 2010-06-24 01:29:30.769155092 +0900
@@ -6,6 +6,10 @@
        Options FollowSymLinks
        DirectoryIndex index.php

+       Order allow,deny
+       Allow from localhost 192.168.1.0/24
+
+
        <IfModule mod_php5.c>
                AddType application/x-httpd-php .php
$ diff -u apache.conf.org apache.conf
--- apache.conf.org     2010-06-27 19:05:31.940458046 +0900
+++ apache.conf 2010-06-27 19:06:38.790458035 +0900
@@ -10,6 +10,7 @@
 order deny,allow
 deny from all
 allow from 127.0.0.0/255.0.0.0 ::1/128
+allow from 192.168.1.0/24
 # allow from all

 <IfModule mod_php5.c>

phpinfoでPHPがちゃんと生きてるか確認

  • /var/www/phpinfo.php
<?php
	phpinfo()
?>

CPANからPerlモジュールのインストール

[参考]

foltiaを動かすのにいくつかのPerlモジュールが必要になるので、CPANからPerlのモジュールをインストール。
CPANなので初期設定がいくつか。

$ sudo su - ←rootで作業
# perl -MCPAN -e shell cpan shellの起動

自動的に設定しますかと聞かれるが、盛大にエラー吐かれても分からない状態になるので、ここはマニュアル設定。
といってもほとんどデフォルトのままで大丈夫です。
最後に使用するミラーリングサーバーの指定を聞かれるので、このサイトさんを参考にしながら

(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
(3) ftp://ftp.kddilabs.jp/CPAN/
(4) ftp://ftp.nara.wide.ad.jp/pub/CPAN/
(5) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/

あたりのどれかを適当に設定します。
(ググってると他の人は候補が自動的に出てくるらしいけど、なぜかうちは自分で打ち込めって言われた。)


あとはモジュールをインストールするだけ

cpan> install YAML Foltiaで指定はされてないが、他のパッケージを入れるときにWarningが出るので入れておくと吉。
cpan> install Jcode
cpan> install Time::HiRes ←デフォで入ってるかも。
cpan> install Schedule::At
cpan> install DBI ←下のDBD::Pgを入れるのに必要。デフォで入ってるかも。
cpan> install DBD::Pg PostgreSQLに繋ぐためのモジュール。SQL側からアクセス制限かかってたらインストールするときに間違いなくコケます。
cpan> install DBD::SQLite PostgreSQL環境では必要ないが、最新版のFoltiaSQLite対応したおかげで必要なライブラリとして追加された。これがないとPerlスクリプト群がコケます。
cpan> quit
# exit ←rootから出る

あとはずらずらーっとでてくるログを見ながら待つだけ。
ちなみにインストール済みモジュールの一覧を表示させるのはこうするらしい。

$ find `perl -e 'print "@INC"'` -name '*.pm' -print

ついでにPerlDocのインストールもしておく。

$ sudo aptitude install perl-doc
$ sudo aptitude install libpg-perl libdbd-pgsql libdbd-pg-perl
$ perldoc Tile::HiRes ←ライブラリがインストールされてればこれでマニュアルが見れる。インストールできたかどうかのチェックにもなる
$ perldoc perllocal CPANのインストール履歴はこうすれば見れる

また、今回はDBD::Pgのインストールの時に相当手こずった。
大事なことはエラーログはちゃんと読むこと。
また、ライブラリが足らずにインストールできなかった事があったのが以下のパッケージ。

$ sudo aptitude install libpq-dev

もしなかったら入れておきましょう。
最後に、インストール済みのCPANモジュールは結構古いものも多いので、アップデートしておいてもいいかもしれません。

cpan> r ←更新可能モジュールの一覧
cpan> upgrade ←すべて更新

ちなみにすべて更新は滅茶苦茶時間かかりました。

Perlから接続テスト

適当にPerlのコードを書いて、PostgreSQLに繋げるかどうかチェックします。

  • /home/foltia/connect_test.pl
#/usr/bin/perl

use DBD::Pg;

$DBDriv = "Pg";
$DBName = "foltia";
$DBHost = "localhost";
$DBPort = "5432";
$DBUser = "foltia";
$DBPass = "foltia";

# DB Connect
        my $data_source = sprintf("dbi:%s:dbname=%s;host=%s",
                $DBDriv,$DBName,$DBHost,$DBPort);
        my  $dbh = DBI->connect($data_source,$DBUser,$DBPass) ||die $DBI::error;
        print "Connection !!\n";
        $dbh->disconnect();

ただ繋ぐだけのテストコードです。

$ perl connect_test.pl

これですんなり接続できれば御の字ですが、今回はかなり四苦八苦しました。

DBI connect('dbname=foltia;host=localhost;port=5432','foltia',...) failed: fe_sendauth: no password supplied at test.pl line 15
Died at test.pl line 15.
*パスワードが空の場合はこんな風に怒られる。

DBI connect('dbname=foltia;host=localhost;port=5432','foltia',...) failed: FATAL:  password authentication failed for user "foltia"
FATAL:  password authentication failed for user "foltia" at test.pl line 15
Died at test.pl line 15.
*パスワードが間違ってるとこんな風に怒られる。

こんな感じで、怒られまくりです。
createuserでユーザーを作った時にパスワードも設定したはずなのに怒られるので、ニッチもサッチも行きません。
とりあえずパスワードを設定して、その通りにコードを書けば繋がりました。
[超参考]

また、この時点ではPostgreSQLユーザとしてのpostgresはパスワードが設定されていないので
パスワードが必要なログイン方法(passward,md5等)ではpsqlを起動できない。

psqlでのPostgreSQLユーザパスワードの設定
postgres=# alter user ユーザ名 with password 'パスワード';

とありましたので、実際に設定してみました。

$ psql
foltia=> alter user foltia with password 'foltia';

これでもう一度connect_test.plを実行して、接続できればOK。




長くなりそうなので、一旦ここまで。
本当に道のりは険しいですorz