Smartyの利用

http://smarty.php.net/ より適当なディレクトリにSmarty-*.*.*.tar.gzをダウンロード

tar zxvf Smarty-*.*.*.tar.gz

■展開後でてくるlibs/内にはコアとなる Smarty.class.php や Smartyライブラリ が収められているのでlibs/内を任意のディレクトリにコピーする。

■コンテンツを公開するディレクトリに以下のディレクトリを作成する。

templates/ — 作成したテンプレートを格納
templates_c/ — コンパイルされたファイルが格納される
configs/ — 各種設定ファイル作成した場合、そのファイルを格納
cache/ — キャッシュファイルが格納される

※templates_c/ と cache/ にはApacheが書き込めるパーミッションを設定する。

■基本的な利用
$name を表示する。

【/path/to/templates/template.tpl】
<html>
<body>
{$name}
</body>
</html>

【[HomeDir]/public_html/index.php】
<php?
include_once(“/path/to/Smarty.class.php”);

$smarty = new Smarty(); //Smartyオブジェクト生成
$smarty->template_dir = “/path/to/templates”; // テンプレートディレクトリを指定
$smarty->compile_dir = “/path/to/templates_c”; // コンパイルディレクトリを指定

$var = “VarName”;
$smarty->assign(“name”,$var); // Smarty変数に値をアサイン(割り当て)する

$smarty->display(“template.tpl”); // template.tplを出力
?>

ブラウザで[HomeDir]/public_html/index.phpにアクセスして
$name(VarName)が表示されればOK

※Smarty.class.phpのインクルードパスはシステム、又はphp.iniなどで設定してもOK

■Smarty.class.php の拡張
繰り返しディレクトリパスの設定や同じ変数の設定を行わないようにするため、classを継承して一箇所で管理する。又、自前のプラグインを利用するための定義を行う。

□以下のファイルを作成し、任意のディレクトリに配置する。
【/path/to/MySmarty.php】
<?php
// Smartyライブラリを読み込む
include_once(“/path/to/Smarty.class.php”);

class MySmarty extends Smarty {

function MySmarty()
{
$this->template_dir = ‘/path/to/templates’;
$this->compile_dir = ‘/path/to/templates_c’;
$this->config_dir = ‘/path/to/configs’;
$this->cache_dir = ‘/path/to/cache’;
// plugins_dir は配列なので複数定義できる。
// 自前のプラグインを置くディレクトリを最初に指定
$this->plugins_dir = array(‘/path/to/my_plugins’,’plugins’);
// 親クラスのコントラクタを呼び出す
$this->Smarty();
}

}
?>

□/path/to/my_plugins ディレクトリを作成し以下のファイルを格納。
substr()と同じ働きをする修飾子を作成する。

【/path/to/my_plugins/modifier.substr.php】
※ファイル名は「modifier.修飾子.php」とする。(関数の場合はfunction.関数名.php)

<?php
function smarty_modifier_substr ($string, $start, $length = ‘dummy’)
{
if($length == ‘dummy’) return substr($string, $start);
return substr($string, $start, $length);
}
?>
※関数名は「smarty_modifier_修飾子」とする。

□[HomeDir]/public_html/index.phpを以下の様に修正

<?php
//呼び出すクラスを拡張したクラスに変更
include_once(“/path/to/MySmarty.php”);

$smarty = new MySmarty();

$var = “VarName”;
$smarty->assign(“name”,$var);

$smarty->display(“template.tpl”);
?>

□/path/to/templates/template.tplを以下の様に修正

<html>
<body>
{$name|substr:0:3}
</body>
</html>

ブラウザで[HomeDir]/public_html/index.phpにアクセスして
$name(VarName)が3文字(Var)だけ表示されればOK

起動時 X を起動しない(runlevel の設定)

■/etc/inittab を編集する

下記により ランレベル5で /etc/X11/prefdm が実行されてXが起動する。
x:5:respawn:/etc/X11/prefdm -nodaemon

なので、起動時のランレベルを変更する。

下記により起動時のランレベルが決定している。
id:5:initdefault:

数字部分がランレベル。
※0,1,6は停止,シングルユーザーモード,再起動で予約されている。

SSL 設定

■秘密鍵作成
openssl genrsa -des3 1024 > /usr/share/ssl/private/key.pem
※rand — 鍵生成時に用いるファイルで、ランダム性の十分なファイルを指定するとあるが、適当なログファイルなどでもOK。省略するとディフォルトで/dev/urandom,/dev/randomを使用する。
※des3 — 暗号化の方式で一番強力。ほかにdesやideaなどが指定できる。
※1024 — 生成する鍵のbit数。ディフォルト512。パフォーマンスに関わる。512~1024が妥当。

この後、起動時に利用するパスワード入力あり。

■参照時パスワード入力解除
openssl rsa -in /usr/share/ssl/private/key.pem -out /usr/share/ssl/private/key.pem
※inで指定したファイルをoutで書き出す。この場合上書き。
※これを行わない場合、Apache起動ごとにパスフレーズが要求される。
※これを行った場合、セキュリティーは低下する。

再度パスワード入力必要。

■CSR作成
openssl req -new -key /usr/share/ssl/private/key.pem -out /usr/share/ssl/csr.pem

この後、対話的な入力あり。

Country Name 国(例:JP)
State or Province Name 都道府県(例:Miyagi)
Locality Name 市区町村(例:Sendai)
Organization Name 組織(例:Syokunin Co.,Ltd.)
Organizational Unit Name 部署※
Common Name ドメイン
Email Address メールアドレス
A challenge password パスワード※
An optional company name 会社名※

※はEnterで省略

■証明書作成
openssl x509 -in /usr/share/ssl/csr.pem -out /usr/share/ssl/certs/httpsd.pem -req -signkey /usr/share/ssl/private/key.pem

※自分で作成する場合。

■httpd.conf編集例
<IfDefine HAVE_SSL>
Listen 443
SSLSessionCache shm:/var/cache/ssl_gcache_data(524288)
<VirtualHost _default_:443>
DocumentRoot /var/www/html/
SSLEngine on
SSLCertificateFile /usr/share/ssl/certs/httpsd.pem
SSLCertificateKeyFile /usr/share/ssl/private/key.pem
SSLVerifyClient 0
SSLVerifyDepth 10
<Files ~ “\.(cgi|shtml)$”>
SSLOptions +StdEnvVars
</Files>
<Directory /home/httpd/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
CustomLog /var/log/httpd/ssl_request_log \
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
</VirtualHost>
</IfDefine>

■httpd再起動
/etc/rc.d/init.d/httpd restart

postgresql の操作

■データベース作成
createdb [DbName]

■データベース削除
dropdb [DbName]

■DBアクセス
psql [DbName]

■DB一覧
psql -l

■バックスラッシュコマンド
\? — バックスラッシュコマンドヘルプ表示
\h — SQLヘルプ表示
\d [TableName] — テーブル定義表示
\df — 関数一覧表示
\dn — スキーマ一覧表示
\dp — テーブルのアクセス権表示
\dS — システムのテーブル一覧表示
\dt — ユーザーテーブル一覧表示
\dT — 型の一覧表示
\l — データベースの一覧表示
\z — アクセス権付きでデータベースの一覧表示
\! [Command] — システムコマンド実行
\q — psql終了

基本的なSQLクエリ
■テーブル作成
CREATE TABLE [TableName] ([ColumnName] [Type],・・・);

■レコード挿入
INSERT INTO [TableName] VALUES (‘[TextData]’,[IntData],・・・);

■レコードの表示
SELECT * FROM [TableName];

■レコード更新
UPDATE [TableName] SET [ColumnName]='[TextData]’ WHERE ・・・

■レコード削除
DELETE FROM [TableName] WHERE ・・・

■テーブル削除
DROP TABLE [TableName];

postgresql ユーザー作成/削除

■作成
su postgres
create [UserName]

error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory
といったエラー
libreadline.so.5は、/usr/local/lib配下
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH”:/usr/local/lib する。

再度実行
create [UserName]
could not change directory to “/home/[UserName]”
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE

■削除
dropuser [UserName]

postgresql インストールと設定のログ

【インストール】

■インストールディレクトリ作成
mkdir /usr/local/pgsql

■ユーザー作成しておく
useradd postgres
passwd postgres

以降、su postgresで作業

■postgresqlをダウンロード
ftp://ftp.ring.gr.jp/pub/misc/db/postgresql より postgresql-8.1.1.tar.gz を /usr/local/src/ にダウンロード。

■展開
tar zxvf postgresql-8.1.1.tar.gz

■configure
cd postgresql-8.1.1
./configure

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use –without-readline to disable readline support.

readline library がないとのこと
–without-readline するか
readline?をインストール

■readline ?をインストール
ftp://ftp.gnu.org/gnu/ よりダウンロード
tar zxvf readline-5.1.tar.gz
cd readline-5.1
./configure
make
make install

■再度 configure
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use –without-zlib to disable zlib support.

zlib がない。
–without-zlib するか
前段同様zlibをインストール

zlibは
http://www.zlib.net/

■再度 configure
./configure

configure: error:
*** Could not execute a simple test program. This may be a problem
*** related to locating shared libraries. Check the file ‘config.log’
*** for the exact reason.

※またエラー
config.logをconftestで検索すると
./conftest: error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory
といったエラーが2ヶ所。

ぐぐると、/usr/local/lib/ を LD_LIBRARY_PATH(ライブラリを検索するときの環境変数)に追加するといいかも?といった記事発見。

export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH”:/usr/local/lib

———————————————————
追記
後で知ったが、
/usr/local以下のライブラリを認識してないのだから、
/etc/ld.so.conf に /usr/local/lib を追記して
ldconfig実行
するでもいいかも
———————————————————

■再度 configure
./configure
※今度は通った様子

■コンパイル&インストール
make
make install

以上でインストール終了。

【設定】

■環境変数追加
/home/postgres/.bashrcに追記
PATH=”$PATH”:/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH=”$MANPATH”:$POSTGRES_HOME/man
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH”:”$PGLIB”:/usr/local/lib
export PATH=”$PATH”:/usr/local/pgsql/bin

■DB初期化
※ユーザー postgresで実行
/usr/local/pgsql/bin/initdb –no-locale –encoding=EUC_JP
※ロケールデータベースはバグがある?との記事があり、利用しないオプション
※文字コードはEUCを指定

■設定ファイル
vi /usr/local/pgsql/data/postgresql.conf

silent_mode = on
※デーモンとして動かすオプション

■起動
※ユーザー postgresで実行
pg_ctl -w start

※停止は
pg_ctl -w stop

■稼動チェック
※regression testというツールが付属してる

cd /usr/local/src/postgresql-8.1.1/
make check

※しばらく時間がかかる・・
最終的に下記のような表示がでればOK

======================
All 93 tests passed.
======================

■自動起動
rootで実行

cp /usr/local/src/postgresql-8.1.1/contrib/start-scripts/linux /etc/rc.d/init.d/postgresql
chmod 755 /etc/rc.d/init.d/postgresql
chkconfig –add postgresql

以上で設定完了。
あとはユーザーとDB作成して利用する。

BIND9 インストール 設定

=============== インストール ===============
BINDのインストール状況確認

rpm -qa | grep bind

以下、インストールしたパッケージ
bind-utils-9.2.4-0vl1
bind-devel-9.2.4-0vl1
bind-9.2.4-0vl1

インストールされていなければ、
apt-get install named
又は、rpmを直接とってきて
rpm -ivh [パッケージ名]
で、インストール。

===============   設定   ===============
設定ファイル
/etc/named.conf
各ゾーンファイル
/var/named 配下に置く

以下設定

■/etc/named.conf
ディフォルトで/etc/named.confは存在しないので、作成しつつ記述。
vi /etc/named.conf

options {
// zone ファイルの格納場所
directory “/var/named”;
// BIND の利用を許す範囲を指定
allow-query {
127.0.0.1;
192.168.0.0/24;
};
// ゾーン転送の許可。LAN内用なので必要ないが一応記載。
allow-transfer {
127.0.0.1;
192.168.0.0/24;
};
// 名前解決できないとき、外部DNSへ問い合わせ
forwarders {
***.***.***.***;
***.***.***.***;
};
};

// ルート DNS
zone “.” {
type hint;
file “named.ca”;
};

// localhost の正引き
zone “localhost” {
type master;
file “localhost.zone”;
};

// localhost の逆引き
zone “0.0.127.in-addr.arpa” {
type master;
file “0.0.127.in-addr.arpa”;
};

// 運用ドメイン の正引き
zone “hoge.com” {
type master;
file “hoge.com”;
};

// 192.168.0.* の逆引き
zone “0.168.192.in-addr.arpa” {
type master;
file “0.168.192.in-addr.arpa”;
};

各ゾーンファイル
■ルートDNS
/var/named/named.ca
ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
で取得。

■localhost正引き
localhost.zone

vi /var/named/localhost.zone

$TTL 86400 ;
@ IN SOA root.hoge.com. hoge.com. (
1; Serial
10800; Refresh
3600; Retry
604800; Expire
86400 ); Minimum TTL
IN NS hoge.com.;
localhost. IN A 127.0.0.1;

■localhost逆引き
0.0.127.in-addr.arpa

vi /var/named/0.0.127.in-addr.arpa

$TTL 86400 ;
@ IN SOA root.hoge.com. hoge.com. (
1; Serial
10800; Refresh
3600; Retry
604800; Expire
86400 ); Minimum TTL
IN NS hoge.com.
1 IN PTR localhost.;

■運用ドメイン正引き
hoge.com

vi /var/named/hoge.com

$TTL 86400 ;
@ IN SOA root.hoge.com. hoge.com. (
1; Serial
10800; Refresh
3600; Retry
604800; Expire
86400 ); Minimum TTL
IN NS hoge.com.
IN MX 10 hoge.com.
@ IN A 192.168.0.100
www IN A 192.168.0.100
root IN A 192.168.0.100
rooter IN A 192.168.0.1

■LAN逆引き
0.168.192.in-addr.arpa

vi /var/named/0.168.192.in-addr.arpa

$TTL 86400 ;
@ IN SOA root.hoge.com. hoge.com. (
1; Serial
10800; Refresh
3600; Retry
604800; Expire
86400 ); Minimum TTL
IN NS hoge.com.;
IN PTR hoge.com.;
IN A 255.255.255.0;
100 IN PTR hoge.com.;
1 IN PTR rooter.hoge.com.;

■所有者変更
chown named.named /etc/named.conf
chown 644 /etc/named.conf
chown named.named /var/named/*
chown 644 /var/named/*

■/etc/resolv.conf
vi /etc/resolv.conf

nameserver 127.0.0.1

■起動設定
chkconfig named on

■起動
/etc/rc.d/init.d/named start

■デバッグ
エラーなどがあれば、/var/log/messages に出力される。

■うまく起動できたっぽい時のログ
Dec 8 00:13:32 Hoge named: named起動 succeeded
Dec 8 00:13:32 Hoge named[29685]: loading configuration from ‘/etc/named.conf’
Dec 8 00:13:32 Hoge named[29685]: no IPv6 interfaces found
Dec 8 00:13:32 Hoge named[29685]: listening on IPv4 interface lo, 127.0.0.1#53
Dec 8 00:13:32 Hoge named[29685]: listening on IPv4 interface eth0, 192.168.0.100#53
Dec 8 00:13:32 Hoge named[29685]: command channel listening on 127.0.0.1#953
Dec 8 00:13:32 Hoge named[29685]: zone 0.0.127.in-addr.arpa/IN: loaded serial 1
Dec 8 00:13:32 Hoge named[29685]: zone 0.168.192.in-addr.arpa/IN: loaded serial 1
Dec 8 00:13:32 Hoge named[29685]: zone hoge.com/IN: loaded serial 1
Dec 8 00:13:32 Hoge named[29685]: running
Dec 8 00:13:32 Hoge named[29685]: zone 0.0.127.in-addr.arpa/IN: sending notifies (serial 1)
Dec 8 00:13:32 Hoge named[29685]: zone localhost/IN: sending notifies (serial 1)
Dec 8 00:13:32 Hoge named[29685]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 1)
Dec 8 00:13:32 Hoge named[29685]: zone hoge.com/IN: sending notifies (serial 1)
Dec 8 00:13:32 Hoge named[29685]: received notify for zone ‘0.0.127.in-addr.arpa’
Dec 8 00:13:33 Hoge named[29685]: received notify for zone ‘localhost’
Dec 8 00:13:33 Hoge named[29685]: received notify for zone ‘0.168.192.in-addr.arpa’
Dec 8 00:13:33 Hoge named[29685]: received notify for zone ‘hoge.com’

■確認
nslookup か dig で確認。

ntpサーバの設定

/etc/ntp.conf を編集する。

以下設定項目の説明
=========================================================================

# 外部参照先NTPサーバを指定する
# 複数指定が望ましい
server ***.***.***.***

# ローカル・クロック時刻をほかのNTPサーバやクライアントにも提供できるようにする
server 127.1.1.0
fudge 127.1.1.0 stratum 10

# ドリフトファイルのパス(時間誤差値を保存して置くファイル)
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# 認証キーのパス(デフォルト設定のままとする)
keys /etc/ntp/keys

=========================================================================

同期する上位サーバは事前に問い合わせしとく。
ntpq -p ***.***.***.***

回答のサーバ名の前に以下のような記号が付記される。

 ’ ‘(reject) 距離が遠くて捨てられたサーバー
 ’x'(falsetick) falseticker検査で捨てられたサーバー
 ’.'(excess) 参照サーバーが多くて捨てられたサーバー
 ’-‘(outlyer) クラスタリング検査で捨てられたサーバー
 ’+'(candidat) 接続テストに合格し、いつでも参照可能なサーバー
 ’#'(selected) 同期距離が遠いが参照可能なサーバー
 ’*'(sys.peer) 同期中であると宣言されたサーバー
 ’o'(pps.peer) 同期中であると宣言されたサーバー(同期はPPS信号から間接的に行なう。)

=========================================================================

以下実際の設定

server ***.***.***.***
server ***.***.***.***
server ***.***.***.***
server 127.127.1.0
fudge 127.127.1.0 stratum 10
driftfile /etc/ntp/drift
他はコメントアウト

=========================================================================

ntpサーバ起動
service ntpd [start | stop | restart]

chkconfig ntpd on も忘れずに。

時刻確認
ntpq -p で表示されるサーバの前に*が表示されればOK。
(設定後、10分程度経過で反映)