Apacheのインストール

Webサーバとして有名な Apacheを64bit+IPv6環境で検証します

Apacheは Windows系 UNIX系で動作するメジャーな Webサーバです
オープンソース財団の The Apache Software Foundationも設立され
Webサーバ以外のオープンソースソフトも精力的に開発しています
ASFトップページ
上記 The Apache Software Foundationのトップページですが
多数のプロジェクトが管理されていることが分かります

今回 HTTP Server をインストールして 64bit環境 IPv6環境での動作検証を行います

検証環境
CPU AMD PhenomII X4 905e (2.5GHz 4コア)
メモリ 16GB
OS Gentoo-1.12.14ベース Linux-3.0 UTF-8
コンパイラ gcc-4.5.2
Cライブラリ glibc-2.13
Perl 5.12.2
PHP
SQLite autoconf-3070800
BerkeleyDB 5.1.25.NC
PostgreSQL 9.1
MySQL 5.5.15
Oracle 11g Express Edition Release2
LDAP OpenLDAP-2.4.23
Apache httpd 2.2.21
Apache apr 1.4.5
Apache apr-iconv 1.2.1
Apache apr-util 1.3.12

インストール

Apache(本家) から Stable Releaseをダウンロードします
Apacheダウンロードサイト
ダウンロードしたソースを一時ディレクトリに展開します

$ tar -xjf httpd-2.2.21.tar.bz2
$ cd httpd-2.2.21
$ ls -F srclib/
Makefile.in  apr/  apr-util/  pcre/
$
 

srclib/ に含まれている apr apr-util のパッケージを先にインストールする必要があります
これらプログラムは APR(Aapche Portable Runtime)と呼ばれ
OS間の差異を吸収する 共通ライブラリとして機能します
(具体的には メモリ確保 I/O ライブラリリンク スレッド 時刻 ユーザID など)

srclib/ に含まれていない apr-iconv も導入しておきたいので
apr apr-iconv apr-util をまとめて Portable Runtime Project
からダウンロードしておきましょう

aprのインストールは下記のように行いました

$ ./configure --prefix=/usr/apache --enable-threads
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
Configuring APR library

〜

config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing default commands
$ make
make[1]: ディレクトリ `/home/admin/apr-1.4.5' に入ります

〜

make[1]: ディレクトリ `/home/admin/apr-1.4.5' から出ます
$ su
# make install
make[1]: ディレクトリ `/home/admin/apr-1.4.5' に入ります
make[1]: `local-all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/admin/apr-1.4.5' から出ます

〜

/usr/bin/install -c -m 644 build/apr_rules.out /usr/apache/build-1/apr_rules.mk
/usr/bin/install -c -m 755 apr-config.out /usr/apache/bin/apr-1-config
#
 

ビルドを補助するためのコマンドで apr-1-config が使えるようになります

apr-iconvのインストールは apr-utilのインストールと同時に行います
そのためここでは アーカイブの展開だけしておきます

$ tar -xzf apr-iconv-1.2.1.tar.gz
$
 

続いて apr-utilのインストールを下記のように行いました

$ tar -xzf apr-util-1.3.12.tar.gz
$ cd apr-util-1.3.12
$ ./configure --prefix=/usr/apache --with-apr=/usr/apache --with-apr-iconv=../apr-iconv-1.2.1 --with-sqlite3=/usr --with-dbm=db51 --with-pgsql=/usr --with-mysql=/usr/mysql --with-oracle=$ORACLE_HOME --with-odbc=/usr --with-ldap=/usr
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for working mkdir -p... yes

〜

config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: executing default commands
$ make
Making all in ../apr-iconv-1.2.1
make[1]: ディレクトリ `/home/admin/apr-iconv-1.2.1' に入ります
(cd lib;  make CPPFLAGS=" ")

〜

dbd/apr_dbd_odbc.c: In function ‘odbc_start_transaction':
dbd/apr_dbd_odbc.c:1178:32: 警告: 異なるサイズの整数からポインタにキャストされました
/bin/sh /usr/apache/build-1/libtool --silent --mode=link gcc  -g -O2 -pthread       -release 1 -module -rpath /home/admin/lib/apr-util-1 -o dbd/apr_dbd_odbc.la dbd/apr_dbd_odbc.lo -L/usr/lib  -lodbc 
make[1]: ディレクトリ `/home/admin/apr-util-1.3.12' から出ます
$ su
# make install
/usr/apache/build-1/mkdir.sh /home/admin/lib/apr-util-1
Making all in ../apr-iconv-1.2.1

〜

/usr/bin/install -c -m 644 aprutil.exp /usr/apache/lib
/usr/bin/install -c -m 755 apu-config.out /usr/apache/bin/apu-1-config
#
 

apr-iconv関連では apriconv のコマンドが利用できるようになります
あと /usr/apache/lib/iconv/ 配下にやたらと各国語用のモジュールが追加されます
apr-util関連では apu-1-config がビルド補助用に使えるようになり
/usr/apache/lib/apr-util-1/ に各データベース接続用のモジュールが追加されます

–with-apr-iconv の指定により apr-iconvも同時にビルドされますが
インストールされた apu-1-config に修正が必要でした
(apu-1-config –libs とコマンドを叩くと apr-iconv関連のパス修正が必要と分かるでしょう)

29 
30 LIBS="/home/admin/apr-util-1.3.12/../apr-iconv-1.2.1/lib/libapriconv.la           -lexpat"
31 INCLUDES="/home/admin/apr-util-1.3.12/../apr-iconv-1.2.1/include          "
32 LDFLAGS=""
 

LIBSの部分と INCLUDESの部分に ソースディレクトリが指定されてしまっているので修正します
下記のように修正しました

29 
30 LIBS="/usr/apache/lib/libapriconv-1.la -lexpat"
31 INCLUDES=""
32 LDFLAGS=""
 

また検証環境では Oracleが認識されず configure前に下記作業が必要でした

# cd $ORACLE_HOME/lib
# ln -s libclntsh.so.11.1 libclntsh.s
 

つまり -lclntsh 付きの gcc がコンパイルできる必要があるのです
Oracleを使っているのに lib/apr-util-1/に apr_dbd_oracle〜 が見付からない場合は
上記の対応後 apr-utilsの再ビルドが必要です

以上でようやく apache本体のビルドが可能となります

$ tar -xjf httpd-2.2.21.tar.bz2
$ cd httpd-2.2.21/
$ ./configure --prefix=/usr/apache --localstatedir=/var --enable-suexec --with-suexec-caller=www --enable-so --enable-modules="most" --enable-mods-shared="most"
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu

Configuring Apache Portable Runtime library ...

〜

config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
$ make
Making all in srclib
make[1]: ディレクトリ `/home/admin/httpd-2.2.21/srclib' に入ります
Making all in pcre

〜

/usr/apache/build-1/libtool --silent --mode=link gcc -g -O2 -pthread        -o suexec suexec.lo
make[2]: ディレクトリ `/home/admin/httpd-2.2.21/support' から出ます
make[1]: ディレクトリ `/home/admin/httpd-2.2.21' から出ます
$ su
# make install
Making install in srclib
make[1]: ディレクトリ `/home/admin/httpd-2.2.21/srclib" に入ります

〜

mkdir /usr/apache/man/man1
mkdir /usr/apache/man/man8
mkdir /usr/apache/manual
make[1]: ディレクトリ `/home/deer/admin/httpd-2.2.21" から出ます
#
 

configureオプションですが –enable-so は動的モジュール化するのに必須です
–enable-modules="most" –enable-mods-shared="most"
で Apacheのオプション機能をほとんど有効化しモジュール化しています

$ ls /usr/apache/modules/
httpd.exp               mod_authz_user.so  mod_include.so
mod_actions.so          mod_autoindex.so   mod_info.so
mod_alias.so            mod_cgi.so         mod_log_config.so
mod_asis.so             mod_dav.so         mod_logio.so
mod_auth_basic.so       mod_dav_fs.so      mod_mime.so
mod_auth_digest.so      mod_dbd.so         mod_negotiation.so
mod_authn_anon.so       mod_deflate.so     mod_reqtimeout.so
mod_authn_dbd.so        mod_dir.so         mod_rewrite.so
mod_authn_dbm.so        mod_dumpio.so      mod_setenvif.so
mod_authn_default.so    mod_env.so         mod_speling.so
mod_authn_file.so       mod_expires.so     mod_status.so
mod_authz_dbm.so        mod_ext_filter.so  mod_substitute.so
mod_authz_default.so    mod_filter.so      mod_suexec.so
mod_authz_groupfile.so  mod_headers.so     mod_userdir.so
mod_authz_host.so       mod_ident.so       mod_version.so
mod_authz_owner.so      mod_imagemap.so    mod_vhost_alias.so
$
 

特に小容量の Apacheを作りたいなどカスタマイズの必要があれば
–enable-modules="alias cgi" のように個別に指定することも可能です

続いて Apache用の start/stopスクリプトを用意しましょう
下記で紹介するのは Gentoo形式に従ったスクリプトですが
Apacheには apachectlという管理コマンドが付属しているのでシンプルな記載になります

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$

depend() {
        need net.eth0
}

start() {
        ebegin "Starting apache"
        /usr/apache/bin/apachectl start
        eend $?
}

stop() {
        ebegin "Stopping apache"
        /usr/apache/bin/apachectl stop
        eend $?
}
 

次に Apacheの設定ファイルをカスタマイズします
conf/httpd.conf が設定ファイルです
最近の Apacheはモジュールに関する設定を conf/extra/ に分けてインポートする記述のため
httpd.conf本体は だいぶ軽量化しています

httpd.confの修正点は下記の通りです

User www
Group daemon
 

httpd実行アカウントを指定します www のアカウントが既に存在していたので利用しました

ServerAdmin www@mydomain
ServerName www.mydomain:80
 

ServerAdminには管理者メールアドレスを指定します
ServerNameは 公開するHPのFQDNとポート番号を指定します ここは httpdの動作に必須の項目です
(mydomainの DNSに wwwホスト設定の追加もしておきます)

とりあえず最小限の設定は以上です まずは Apacheが動作するかを確認しましょう

# /etc/init.d/apache start
 * Caching service dependencies ...                                       [ ok ]
 * Starting apache ...                                                    [ ok ]
#
 

IPv6クライアントの検証ページでApacheの正常動作を確認しました

 
 

(書きかけですが とりあえずここまで)

IPv6サーバツールへ戻る

PostgreSQLを試してみる

PostgreSQLは 高機能なオープンソースRDBMS(データベース)です

PostgreSQLMySQLと 肩を並べるほどの高機能なオープンソースRDBMSです
日本語環境も充実しているので 日本での普及も進んでいるようです
今回 64bit環境 IPv6環境での動作検証を行います

検証環境
CPU AMD PhenomII X4 905e (2.5GHz 4コア)
メモリ 16GB
OS Gentoo-1.12.14ベース Linux-3.0 UTF-8
コンパイラ gcc-4.5.2
Cライブラリ glibc-2.13
Perl 5.12.2
TCL 8.5.9
libxml libxml2-sources-2.7.8
libxslt libxslt-1.1.26
PAM Linux-PAM-1.1.3
SSL openssl-1.0.0d
OpenLDAP 2.4.23
PostgreSQL 9.1

NPO法人 日本PostgreSQLユーザ会

インストール

ここでのインストール作業は 主に以下の流れを解説しています

  • PostgreSQLソースパッケージのダウンロード
  • ソースコードからのビルドと PostgreSQLバイナリファイル郡のインストール
  • postgresql.conf環境設定 start/stop起動スクリプトの設定
  • データベース領域の新規作成
  • postmasterの起動

早速 PostgreSQLのダウンロードサイトからソースコードをダウンロードします
PostgreSQLダウンロード
ここではソースコードからビルドしますが
パッケージ管理機構を持つシステム用にパッケージ提供もされています

$ tar -xjf postgresql-9.1.0.tar.bz2
$ cd postgresql-9.1.0
$ ls
COPYRIGHT       HISTORY  Makefile  aclocal.m4  configure     contrib  src
GNUmakefile.in  INSTALL  README    config      configure.in  doc
$ ./configure --prefix=/usr --datadir=/usr/share/pgsql --enable-nls --with-pam --with-libxml --with-libxslt --with-perl --with-tcl --with-ldap --with-openssl
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking which template to use... linux
checking whether to build with 64-bit integer date/time support... yes
checking whether NLS is wanted... yes
checking for default port number... 5432
checking for block size... 8kB
checking for segment size... 1GB
checking for WAL block size... 8kB
checking for WAL segment size... 16MB
checking for gcc... gcc

〜

config.status: linking src/backend/port/unix_latch.c to src/backend/port/pg_latch.c
config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
$ make
make -C src all
make[1]: ディレクトリ `/home/admin/postgresql-9.1.0/src' に入ります
make -C port all
make[2]: ディレクトリ `/home/admin/postgresql-9.1.0/src/port' に入ります
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -I../../src/port -DFRONTEND -I../../src/include -D_GNU_SOURCE -I/usr/include/libxml2   -c -o strlcat.o strlcat.c

〜

$ su
# make install

〜

# make install-docs

〜

#
 

–datadir は設定ファイルの置き場所となります (データベース設置場所ではありません)
また事前に libxml2 libxsltなど関連ライブラリがインストールされている必要があります

さらに検証した PostgreSQL-9.1 ではドキュメント類のインストールに
make install-docs が必要でした

次に システム管理者権限の環境変数設定を行っておきます PGLIB PGDATA の2つです
下記の設定を /etc/profile 等に追記してシステムログイン時に反映されるようにします

PGLIB=/usr/lib
PGDATA=/var/db/pgsql
 

PGDATAにデータベース領域をディレクトリで指定します
今後 /var/db/pgsql/ にデータベースを作成しメインで使っていくため指定しています

最後に PostgreSQLを起動/停止するための start/stopスクリプトを作成します
スクリプトの書き方は ディストリビューションによるので下記の例は参考程度のものです
下記は Gentoo用 /etc/init.d/pgsql (root 0755)

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$

depend() {
        need net.eth0
        after apache
        provide pgsql
}

start() {
        ebegin "Starting PostgreSQL"
        su adm -s /usr/bin/bash -c "/usr/bin/pg_ctl start -w -D /var/db/pgsql -s"
        eend $?
}

stop() {
        ebegin "Stopping MySQL"
        su adm -s /usr/bin/bash -c "/usr/bin/pg_ctl stop -D /var/db/pgsql -s -m fast"
        eend $?
}

restart() {
        ebegin "Restarting MySQL"
        su adm -s /usr/bin/bash -c "/usr/bin/pg_ctl restart -w -D /var/db/pgsql -s -m fast"
        eend $?
}

status() {
        su adm -s /usr/bin/bash -c "/usr/bin/pg_ctl status -D /var/db/pgsql"
        exit $?
}
 

基本的に -D データベース領域 を指定して pg_ctl にコマンドを渡す形です
複数のデータベースディレクトリを運営する場合は その分 pg_ctlの行が増えるイメージです
(検証環境では /var/db/pgsql のみの運営とします)

stop や restart で指定している -m fast はシャットダウンモードの指定です
smart(クライアント利用終了待ち) fast(クライアント強制切断) immediate(強制終了)など
3通りモードがあります (詳しくは pg_ctl –helpで)

admアカウントをデータベース管理アカウントとして pg_ctlの各種処理を行っています
(MySQLも admアカウントで運営しているので今回流用しました
通常なら postgresアカウントを作って使うのが一般的です)

以上がインストールまでの一通りの作業です

データベースの運営

ここでは データベースの初期化 設定 IPv6接続確認 まで紹介します

まずは データベースの管理についてですが
PostgreSQLは postmaster 1プロセス毎に 1データベース領域(=ディレクトリ)を管理します
ディレクトリの中に データベース(複数) 各種ログ 設定ファイル が含まれます

ここでは先ほどの start/stopスクリプトで定義したとおり
admアカウントを管理アカウントとする /var/db/pgsql/ を初期化します

# mkdir /var/db/pgsql
# chown adm /var/db/pgsql
# su adm -s /usr/bin/bash -c "initdb $PGDATA"
データベースシステム内のファイルの所有者は"adm"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケールja_JP.utf8で初期化されます。
デフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.utf8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。

ディレクトリ/var/db/pgsqlの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 24MB
設定ファイルを作成しています ... ok

〜

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ンを使用することで変更することができます。

成功しました。以下を使用してデータベースサーバを起動することができます。

    postmaster -D /var/db/pgsql
または
    pg_ctl -D /var/db/pgsql -l logfile start
#
 

ここでは initdbコマンドを直接叩きましたが
pg_ctlからでも同様のことができるので pg_ctlに統一したほうが覚えやすいかもしれません

/var/db/pgsql/ 内が初期化されデータベース領域を利用する準備が整いました

# ls /var/db/pgsql/
PG_VERSION  pg_hba.conf    pg_serial    pg_twophase      postmaster.pid
base        pg_ident.conf  pg_stat_tmp  pg_xlog
global      pg_multixact   pg_subtrans  postgresql.conf
pg_clog     pg_notify      pg_tblspc    postmaster.opts
#
 

ユーザ管理についてですが この時点では
データベース管理ユーザとして initdbを行ったアカウント adm が設定されています

次に設定ファイル postgresql.conf pg_hba.conf pg_ident.conf をカスタマイズします
まず postgresql.conf から設定します
以下は追記/編集した行のみの情報です

data_directory = '/var/db/pgsql'
hba_file = '/var/db/pgsql/pg_hba.conf'
ident_file = '/var/db/pgsql/pg_ident.conf'

listen_addresses = 'localhost,fe80::1***:****:****:***a%eth0'
 

data_directory はデータベース領域そのものを表します
hba_file は pg_hba.conf の置き場所を指定します
ident_file は pg_ident.conf の置き場所を指定しますが
ident認証方式を選択したときに利用されるだけで 今回の検証では ident認証方式は使いません

listen_address は 接続を行うインターフェースを指定するものです
デフォルトは 'localhost' となり外部ホストから接続を受け付けません
IPアドレスを指定することでそのIPで listen()するようになります
(ちなみに PostgreSQL7系まで使われていた tcpip_socket は廃止となっています)
今回 localhost も /etc/hosts では ::1 になっているので完全な IPv6仕様です

続いて認証に関する設定は pg_hba.conf 内で設定します

local    all             all                                     trust
host     all             all             127.0.0.1/32            trust
host     all             all             ::1/128                 trust

host     all             gamer           fe80::1***:****:****:***a/64   md5
 

上3行はローカルホストからの接続設定で 全データベースユーザを無条件に利用可能(trust)
最後1行が追加行で IPv6アドレスのみ許可 パスワード認証(md5)も実施する設定です
(IPv6のアドレスの箇所は伏字で標記しています)
IPv6部分はリンクローカルアドレスを使うことでグローバルからのパケットは届かない仕組みです
gamerというアカウントに制限しているので 後ほど gamerアカウントを作成することにします

pg_ident.conf は今回使いません

以上で データベース領域の初期化と設定が完了です 早速 postmaster を起動しましょう

# /etc/init.d/pgsql start
 * Starting PostgreSQL ...
/usr/bin/postgres: /lib64/libz.so.1: no version information available (required by /usr/lib64/libxml2.so.2)
/usr/bin/postgres: /lib64/libz.so.1: no version information available (required by /usr/lib64/libxml2.so.2)
LOG:  データベースシステムは 2011-09-19 22:52:24 UTC にシャットダウンしました
LOG:  データベースシステムの接続受付準備が整いました。
LOG:  自動バキュームランチャプロセス                                      [ ok ]
# netstat -an | grep 5432
tcp6       0      0 fe80::1***:***:**:5432 :::*                    LISTEN     
tcp6       0      0 ::1:5432                :::*                    LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     43186    /tmp/.s.PGSQL.5432
#
 

IPv6で接続が可能な状態となっています ローカルホストから UNIXドメインソケット接続も可能です
ポート番号も 5432 でデフォルトのままです
(複数の postmasterを運用する場合カスタマイズする必要あります)

データベース領域に データベースを1つ追加します games という名前で作成します

$ createdb -h localhost -U adm games
$
 

-h localhost は接続先データベースホストを指定します localhostならば省略可能です
-U adm は指定必要です データベース管理権限ユーザを指定します

追加ユーザも作っておきましょう
pg_hba.conf では gamer を外部接続用に定義しているので gamerユーザを作成します

$ createuser -U adm gamer
新しいロールをスーパーユーザにしますか? (y/n)n
新しいロールに対してデータベースを作成する権限を与えますか? (y/n)n
新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n
$
 

-P オプションでパスワードを同時に設定することもできますが 次のように DDLで設定します

$ psql -U adm games
psql (9.1.0)
"help" でヘルプを表示します.

games=# alter user gamer encrypted password 'gamer';
ALTER ROLE
games=# \\q
$
 

データベースに接続するために psql コマンドを使いました
データベース接続後 サブシェルが開いて各種コマンドが発行できます

とりあえずローカルホスト上でデータベースに接続できることを確認し
gamerのパスワードを設定しました

では IPv6接続の検証を行います 別ホストの端末から psqlで接続します

$ psql -U gamer -h fe80::1***:****:****:***a%eth0 games
Password for user gamer:
Welcome to psql 8.3.0 (server 9.1.0), the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

WARNING:  You are connected to a server with major version 9.1,
but your psql client is major version 8.3.  Some backslash commands,
such as \d, might not work properly.

games=> \\q
$
 

psql に -h オプションで外部ホストを明示します Linuxでは %eth0 も必要でした
別ホスト側が PostgreSQL-8.3.0 を使っていたので警告が表示されていますが
IPv6での接続性は OKです

ただし 以降のデータベース操作検証は PostgreSQL-9.1.0側のサーバに戻って実施します
理由は別ホスト側の文字コードが EUC-JP サーバ側の UTF-8 と食い違っているため
文字化けするのです

テーブルの作成と動作検証

gamesデータベースまで作成したので
実際にレトロ系テレビゲームのデータを投入して 各種検索もデモします

サンプルデータ tvgames.zip(EUC-JP) をデータベース化します

$ eunzip tvgames.zip
Archive:  tvgames.zip
  inflating: tvgames.txt
$ head -n 10 tvgames.txt | iconv -f euc-jp
ドンキーコング,FC,任天堂,4500,1983-07-15
ドンキーコングJR.,FC,任天堂,4500,1983-07-15
ポパイ,FC,任天堂,4500,1983-07-15
五目ならべ [連珠],FC,任天堂,4500,1983-08-27
麻雀,FC,任天堂,4500,1983-08-27
マリオブラザーズ,FC,任天堂,4500,1983-09-09
ポパイの英語遊び,FC,任天堂,4500,1983-11-22
ベースボール,FC,任天堂,4500,1983-12-07
ドンキーコングJR. の算数遊び,FC,任天堂,4500,1983-12-12
テニス,FC,任天堂,4500,1984-01-14
$
 

ファミコンから プレイステーション1まで 全11429タイトルを納めているので
検証用のデータベース素材としてお手頃です

このデータを格納するテーブルを作成します

$ psql -U gamer games
psql (9.1.0)
"help" でヘルプを表示します.

games=> create table tvgames ( name text, plathome text, company text, price int, release_date date );
CREATE TABLE
games=> \\dt
           リレーションの一覧
 スキーマ |  名前   |    型    | 所有者 
----------+---------+----------+--------
 public   | tvgames | テーブル | gamer
(1 行)

games=> \\d tvgames
    テーブル "public.tvgames"
    カラム    |   型    | 修飾語 
--------------+---------+--------
 name         | text    | 
 plathome     | text    | 
 company      | text    | 
 price        | integer | 
 release_date | date    | 

games=> \\q
$
 

\\dt と叩けば定義されているテーブルを一覧で確認できます
\\d テーブル名 でテーブルの定義も見れます

サンプル tvgames.txtを insert文に加工して SQL投入できるようにします

$ iconv -f euc-jp -t utf-8 tvgames.txt | sed "s/'/''/g" | sed "s/^\\(.*\\),\\(.*\\),\\(.*\\),\\(.*\\),\\(.*\\)$/insert into tvgames ( name, plathome, company, price, release_date ) values ( '\\1', '\\2', '\\3', \\4, '\\5' );/" | less -r > tvgame_insert.txt
$ head -n 10 tvgame_insert.txt
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-07-15' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( 'JR.', 'FC', '任天堂', 4500, '1983-07-15' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-07-15' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( ' [連珠]', 'FC', '任天堂', 4500, '1983-08-27' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-08-27' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-09-09' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-11-22' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1983-12-07' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( 'JR. の算数遊び', 'FC', '任天堂', 4500, '1983-12-12' );
insert into tvgames ( name, plathome, company, price, release_date ) values ( '', 'FC', '任天堂', 4500, '1984-01-14' );
$
 

PostgreSQLでは ' をエスケープするために '' と 2つ重ねて指定します

では作成した insert文を流し込みますが
psql に -f でテキストファイルを指定すれば テキストの内容を順番に実施してもらえます

$ psql -U gamer -f tvgame_insert.txt games
INSERT 0 1

〜

INSERT 0 1
$
 

tvgamesテーブルの完成です
実際に SQLの select構文を使って各種検索をためしてみます まずは10レコード分の表示です

$ PAGER=cat psql -U gamer games
psql (9.1.0)
"help" でヘルプを表示します.

games=> select * from tvgames limit 10;
             name             | plathome | company | price | release_date 
------------------------------+----------+---------+-------+--------------
 ドンキーコング               | FC       | 任天堂  |  4500 | 1983-07-15
 ドンキーコングJR.            | FC       | 任天堂  |  4500 | 1983-07-15
 ポパイ                       | FC       | 任天堂  |  4500 | 1983-07-15
 五目ならべ [連珠]            | FC       | 任天堂  |  4500 | 1983-08-27
 麻雀                         | FC       | 任天堂  |  4500 | 1983-08-27
 マリオブラザーズ             | FC       | 任天堂  |  4500 | 1983-09-09
 ポパイの英語遊び             | FC       | 任天堂  |  4500 | 1983-11-22
 ベースボール                 | FC       | 任天堂  |  4500 | 1983-12-07
 ドンキーコングJR. の算数遊び | FC       | 任天堂  |  4500 | 1983-12-12
 テニス                       | FC       | 任天堂  |  4500 | 1984-01-14
(10 行)

games=> 
 

1983年はファミコンが発売されてから爆発的にヒットする直前です

psqlは PAGER環境変数に設定されたプログラムで selectの結果を表示します
デフォルトの less が一番使い勝手がよいですが ページ送りが不要な場合など cat を指定します

次に 1995年4月1日〜5月1日 の間に発売されたソフトの一覧を表示します between構文を使います

games=> select * from tvgames where release_date between '1995-4-1' and '1995-5-1';
                            name                             |      plathome      |                 company                  | price | release_date 
-------------------------------------------------------------+--------------------+------------------------------------------+-------+--------------
 EMIT Vol.2〜命がけの旅〜                                    | SS                 | 光栄                                     |  8800 | 1995-04-01
 EMIT Vol.3〜私にさよならを〜                                | SS                 | 光栄                                     |  8800 | 1995-04-01
 デイトナUSA                                                 | SS                 | セガ                                     |  6800 | 1995-04-01
 レディーストーカー〜過去からの挑戦〜                        | SFC                | タイトー                                 |  9980 | 1995-04-01
 Dの食卓                                                     | 3DO                | 三栄書房                                 |  8800 | 1995-04-01
 蒼き伝説シュート!                                           | GB                 | バンプレスト                             |  3980 | 1995-04-07
 THE クイズ ギアファイト!                                    | GG                 | セガ                                     |  3800 | 1995-04-07
 クイズ キング・オブ・ファイターズ                           | NG(CD)             | ザウルス                                 |  5800 | 1995-04-07
 得点王3                                                     | NG                 | SNK                                      | 29800 | 1995-04-07
 フォーメーションサッカー95 della セリエA                    | PCE(SCDR2)(AC対応) | ヒューマン                               |  9800 | 1995-04-07
 全日本プロレス2 3・4武闘館                                  | SFC                | 日本コンピュータシステム                 | 10800 | 1995-04-07
 ドラえもん 友情伝説                                         | 3DO                | 小学館                                   |  7800 | 1995-04-07
 SD飛龍の拳外伝                                              | GB                 | カルチャーブレーン                       |  4700 | 1995-04-14
 勝馬予想 競馬貴族EX'95                                      | GB                 | キングレコード                           |  6900 | 1995-04-14
 ワールドヒーローズ2                                         | NG(CD)             | ADK                                      |  5800 | 1995-04-14
 パチ夫くん パチンコランド大冒険                             | PS                 | ココナッツジャパン                       |  6800 | 1995-04-14
 柿木将棋                                                    | SS                 | アスキー                                 |  7800 | 1995-04-14
 ぱずるんでス!                                               | SFC                | 日本物産                                 |  8980 | 1995-04-14
 RES ARCANA                                                  | SFC                | ココナッツジャパン                       |  9500 | 1995-04-14
 EMIT Vol.1 時の迷子                                        | 3DO                | 光栄                                     |  8800 | 1995-04-14
 デビルズコース                                              | 3DO                | 松下電器                                 |  8800 | 1995-04-14
 パドックノート’95                                           | 3DO                | フジテレビジョン                         |  8800 | 1995-04-14
 MYST                                                        | 3DO                | マイクロキャビン                         |  7800 | 1995-04-14
 Jリーグ ライブ'95                                           | GB                 | エレクトロニック・アーツ・ビクター       |  5980 | 1995-04-21
 カオティクス                                                | 32X                | SEGA                                     |  7800 | 1995-04-21
 餓狼伝説3 ROAD TO THE FINALVICTORY                          | NG                 | SNK                                      | 32000 | 1995-04-21
 ギャラクシーファイト UNIVERSAL WARRIORS                     | NG(CD)             | サンソフト                               |  7800 | 1995-04-21
 サイバーリップ                                              | NG(CD)             | SNK                                      |  5800 | 1995-04-21
 ファイヤースープレックス                                    | NG(CD)             | SNK                                      |  5800 | 1995-04-21
 ベースボールスターズプロフェッショナル                      | NG(CD)             | SNK                                      |  4800 | 1995-04-21
 ロボアーミー                                                | NG(CD)             | SNK                                      |  5800 | 1995-04-21
 金沢将棋'95                                                 | PS                 | セタ                                     |  7900 | 1995-04-21
 ママレード・ボーイ                                          | SFC                | バンダイ                                 |  9800 | 1995-04-21
 魔法陣グルグル                                              | SFC                | エニックス                               | 10800 | 1995-04-21
 タクティカルサッカー                                        | SFC                | エレクトロニックアーツビクター           |  9800 | 1995-04-21
 なつきクライシスバトル                                      | SFC                | エンジェル                               | 10800 | 1995-04-21
 真・聖刻                                                    | SFC                | ユタカ                                   |  9800 | 1995-04-21
 真SD戦国伝 大将軍列伝                                       | SFC                | ベック                                   |  9800 | 1995-04-21
 スーパーリアル麻雀P5 パラダイス オールスター4人打ち         | SFC                | セタ                                     |  9800 | 1995-04-21
 リジョイス〜アレサ王国の彼方〜                              | SFC                | やのまん                                 |  9900 | 1995-04-21
 宮路社長のパチンコファン勝利宣言2                           | SFC                | POW                                      |  9800 | 1995-04-21
 スーパートランプコレクション                                | SFC                | ボトムアップ                             |  8900 | 1995-04-21
 紺碧の艦隊                                                  | 3DO                | 徳間書店                                 |  8800 | 1995-04-21
 ぼのぐらし                                                  | 3DO                | アミューズ/バンダイビジュアル           |  8800 | 1995-04-21
 ポリスノーツ パイロットディスク                             | 3DO                | コナミ                                   |  2980 | 1995-04-21
 パズルボブル                                                | NG(CD)             | タイトー                                 |  6800 | 1995-04-27
 赤ずきんチャチャ                                            | GB                 | トミー                                   |  3900 | 1995-04-28
 空想科学少年ガリバーボーイ 空想科学パズル プリッとポン      | GB                 | バンダイ                                 |  3980 | 1995-04-28
 チキチキ天国                                                | GB                 | J・ウイング                              |  3900 | 1995-04-28
 パチ夫くん3                                                 | GB                 | ココナッツジャパン                       |  4800 | 1995-04-28
 魔法陣グルグル 勇者とククリの大冒険                         | GB                 | タカラ                                   |  3980 | 1995-04-28
 TEMPO Jr.                                                   | GG                 | セガ                                     |  3800 | 1995-04-28
 テイルスのスカイパトロール                                  | GG                 | セガ                                     |  3800 | 1995-04-28
 テレビアニメスラムダンク 強豪真っ向対決!                    | MD                 | バンダイ                                 |  8800 | 1995-04-28
 トゥルーライズ                                              | MD                 | アクレイムジャパン                       |  7800 | 1995-04-28
 餓狼伝説3 ROAD TO THE FINALVICTORY                          | NG(CD)             | SNK                                      |  8800 | 1995-04-28
 スロット勝負師                                              | PCE(SCDR2)         | 日本物産                                 |  8500 | 1995-04-28
 ガンナーズ ヘブン                                           | PS                 | ソニー・コンピュータエンタテインメント   |  5800 | 1995-04-28
 ぐっすんおよよ                                              | PS                 | エクシング                               |  6800 | 1995-04-28
 ジャンピングフラッシュ!アロハ男爵ファンキー大作戦の巻       | PS                 | ソニー・コンピュータエンタテインメント   |  5800 | 1995-04-28
 ミスランド まちがい探しゲーム                               | PS                 | アルトロン                               |  5800 | 1995-04-28
 ヴァーチャル ハイドライド                                   | SS                 | セガ                                     |  5800 | 1995-04-28
 アイルトン・セナ パーソナルトーク〜Message for the future〜 | SS                 | セガ                                     |  8800 | 1995-04-28
 輝水晶伝説アスタル                                          | SS                 | セガ                                     |  5800 | 1995-04-28
 三國志4                                                     | SS                 | 光栄                                     | 14800 | 1995-04-28
 スーパーボンバーマン3                                       | SFC                | ハドソン                                 |  8900 | 1995-04-28
 スーパーパチンコ大戦                                        | SFC                | バンプレスト                             |  6900 | 1995-04-28
 牌勢麻雀 凌駕                                               | SFC                | アスキー                                 | 12800 | 1995-04-28
 プラネットチャンプ TG3000                                   | SFC                | ケムコ                                   |  9500 | 1995-04-28
 Jリーグエキサイトステージ'95                                | SFC                | エポック社                               |  9800 | 1995-04-28
 川のぬし釣り2                                               | SFC                | パックインビデオ                         | 10800 | 1995-04-28
 シミュレーションプロ野球                                    | SFC                | ヘクト                                   | 12800 | 1995-04-28
 トゥルーライズ                                              | SFC                | アクレイムジャパン                       | 10900 | 1995-04-28
 3次元格闘ボールズ                                           | SFC                | メディアリング                           |  9800 | 1995-04-28
 タロットミステリー                                          | SFC                | ヴィジット                               |  9800 | 1995-04-28
 初段位認定 初段プロ麻雀                                     | SFC                | ギャップス                               |  9800 | 1995-04-28
 バーチャルカメラマンPart3                                   | 3DO                | ナグザット                               |  8800 | 1995-04-28
 ワールドカップ スーパースタジアム                           | 3DO                | テレビ東京/ギャガ・コミュニケーションズ |  6800 | 1995-04-28
(78 行)

games=>
 

NeoGeoのロムの値段の高さにびっくりしますが スーパーファミコンも1万円越えなど結構な値段です

次に group by 構文を使った機種別ソフト本数の集計です

games=> select plathome, count( name ) from tvgames group by plathome;
       plathome        | count 
-----------------------+-------
 GG                    |   196
 SFC                   |  1391
 PCE(SG)               |     4
 MCD                   |   110
 PCE(SCDR2)            |   235
 NG(CD)                |    99
 FCD                   |   195
 NG                    |   117
 PCE(CDR2)             |    92
 32X                   |    18
 GBC                   |   142
 PS                    |  4439
 SFC(NP)               |    33
 ARCADE CARD専用       |    12
 N64                   |   200
 FC周辺ソフト          |     9
 SS                    |  1212
 VB                    |    19
 GB&GBC               |   201
 GB                    |   767
 64DD                  |     7
 ※バーコードボーイ同梱 |     1
 3DO                   |   215
 FC                    |  1042
 PCE(SCDR2)(AC対応)    |    16
 PCE                   |   229
 MD                    |   416
 PCE(CDR2)(S対応)      |    12
(28 行)

games=>
 

最後に 複雑なクエリを実行して PostgreSQLのパフォーマンスを確認します

名称の先頭部分が一致することを条件にして 5作以上シリーズ化されているゲームを抜き出そうとしてます
例えば「ドラゴンクエスト」をベース名として「ドラゴンクエスト2」「ドラゴンクエスト3」…
を抜き出そうとしています

games=> select gbase.name, gelement.name, gelement.release_date, gelement.plathome, gelement.price from ( select distinct name from  tvgames ) as gbase, tvgames gelement where octet_length( gbase.name ) > 3 and left( gelement.name, char_length( gbase.name ) ) = gbase.name and ( select count( name ) from tvgames gsub where gbase.name != gsub.name and left( gsub.name, char_length( gbase.name ) ) = gbase.name ) >= 4 order by gbase.name, gelement.release_date;

〜

 悠久幻想曲                               | 悠久幻想曲 Ensemble Vol.1                                                                                 | 1998-12-10   | PS               |  3800
 悠久幻想曲                               | 悠久幻想曲Ensemble Vol.2                                                                                  | 1999-02-18   | PS               |  3800
 悠久幻想曲                               | 悠久幻想曲 ensemble vol.2                                                                                 | 1999-03-04   | SS               |  3800
 悠久幻想曲                               | 悠久幻想曲 保存版 PerpetualCollection                                                                     | 1999-10-14   | PS               |  8800
 悠久幻想曲                               | 悠久幻想曲3 パーペチュアルブルー                                                                          | 1999-12-22   | PS               |  5800
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ                                                                                | 1998-12-17   | GB               |  4300
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ2 闇界決闘記                                                                    | 1999-07-08   | GB&GBC          |  4500
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ3 三聖戦神降臨                                                                  | 2000-07-13   | GBC              |  4500
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ4 最強決闘者戦記 海馬デッキ                                                     | 2000-12-07   | GBC              |  4800
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ4 最強決闘者戦記 城之内デッキ                                                   | 2000-12-07   | GBC              |  4800
 遊戯王デュエルモンスターズ               | 遊戯王デュエルモンスターズ4 最強決闘者戦記 遊戯デッキ                                                     | 2000-12-07   | GBC              |  4800
(1749 行)

games=> \\q
$
 

1万レコードのテーブルを 2つ組み合わせて検索する高負荷な処理ですが
検証環境では実行時間は 61秒でした
驚くことに MySQLで同様の検索をしたときは 2分20秒だったのに比べ半分以下の時間となってます
PostgreSQLの最適化能力の高さが感じとれます

紹介は以上です PostgreSQLは機能としても高機能で
商用データベースである Oracleに決して見劣りしていないのではないでしょうか

IPv6サーバツールへ戻る

Postfixのインストール

Postfix 構築ログ

Postfix が 64bit + IPv6 環境で動作するかの検証です

検証環境
CPU PhenomII X4 905e (2.5GHz 4コア)
マザーボード GA-880GM-USB3
メモリ 16GB (DDR3-1066)
イーサネット Realtek8111D (R8168 GbE)
Linuxカーネルバージョン 3.0 (x86_64)
GCC 4.5.2
glibc 2.13.1
BerkeleyDB db-5.1.25.NC
LDAP OpenLDAP-2.4.23
Postfix 2.9.2
SASL Cyrus-SASL-2.1.25

インストール

まず前準備として 必要なアカウントを作成します
通常は postfix:postfix アカウント と postdrop グループを作成しますが
検証環境は Gentoo Stage3 ベースのシステムで既に mailアカウントが存在するのでこれを流用し
mail:mail アカウントは流用 maildrop グループを新設します

$ su
# groupadd -g 13 maildrop
# exit
$
 

13は GID(グループID)ですシステムで未割り当ての値を選定してください
グループの一覧は /etc/group で管理されています

では Postfix本体のインストールに入ります
ここから最新安定版のソースを取得して下記のようにインストールします

$ tar -xzf postfix-2.9.2.tar.gz
$ cd postfix-2.9.2
$ make makefiles AUXLIBS='-lnsl'
make -f Makefile.in MAKELEVEL= Makefiles
(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp

〜

[src/tlsproxy]
cat ../../conf/makedefs.out Makefile.in >Makefile
rm -f Makefile; (cat conf/makedefs.out Makefile.in) >Makefile
$
 

検証環境では AUXLIBSに -lnsl と -lresolv の記載が必要でした
make時に必要なライブラリがリンクされず 未解決シンボルエラーが出たためです

gcc -Wmissing-prototypes -Wformat -DHAS_PCRE  -g -O -I. -I../../include -DLINUX3 -o sendmail sendmail.o ../../lib/libglobal.a ../../lib/libutil.a -L/usr/lib64 -lpcre -ldb
../../lib/libutil.a(dict_nis.o): In function `dict_nis_lookup':
/home/admin/postfix-2.9.2/src/util/dict_nis.c:173: undefined reference to `yp_match'
/home/admin/postfix-2.9.2/src/util/dict_nis.c:187: undefined reference to `yp_match'
../../lib/libutil.a(dict_nis.o): In function `dict_nis_init':
/home/admin/postfix-2.9.2/src/util/dict_nis.c:81: undefined reference to `yp_get_default_domain'
collect2: ld はステータス 1 で終了しました
make: *** [sendmail] エラー 1
make: *** [update] エラー 1
 

環境によっては さらに -lresolv も必要かもしれません
コンパイルエラーが出た場合試してみてください

ビルドを続けます

$ make
set -e; for i in src/util src/global src/dns src/tls src/xsasl src/milter src/master src/postfix src/fsstone src/smtpstone src/sendmail src/error src/pickup src/cleanup src/smtpd src/local src/trivial-rewrite src/qmgr src/oqmgr src/smtp src/bounce src/pipe src/showq src/postalias src/postcat src/postconf src/postdrop src/postkick src/postlock src/postlog src/postmap src/postqueue src/postsuper src/qmqpd src/spawn src/flush src/verify src/virtual src/proxymap src/anvil src/scache src/discard src/tlsmgr src/postmulti src/postscreen src/dnsblog src/tlsproxy; do

〜

gcc -Wmissing-prototypes -Wformat -DHAS_PCRE  -g -O -I. -I../../include -DLINUX3 -o tlsproxy tlsproxy.o tlsproxy_state.o ../../lib/libtls.a ../../lib/libmaster.a ../../lib/libglobal.a ../../lib/libutil.a -L/usr/lib64 -lpcre -ldb -lnsl -lresolv
cp tlsproxy ../../libexec
$
 

ビルドは完了です 各種インストール条件は make install 時に対話式で設定できます
main.cf などの設定を上書きしない(バージョンアップのみの)場合は make upgrade と打ちます

$ su
# make install

〜

    Warning: if you use this script to install Postfix locally,
    this script will replace existing sendmail or Postfix programs.
    Make backups if you want to be able to recover.

    Before installing files, this script prompts you for some definitions.
    Most definitions will be remembered, so you have to specify them
    only once. All definitions should have a reasonable default value.

Please specify the prefix for installed file names. Specify this ONLY
if you are building ready-to-install packages for distribution to OTHER
machines. See PACKAGE_README for instructions.
install_root: [/] (何も入力せずEnter)

Please specify a directory for scratch files while installing Postfix. You
must have write permission in this directory.
tempdir: [/home/admin/postfix-2.9.2] (何も入力せずEnter)

Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/etc/postfix] (何も入力せずEnter)

Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin] (何も入力せずEnter)

Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search path
of any users.
daemon_directory: [/usr/libexec/postfix] (何も入力せずEnter)

Please specify the final destination directory for Postfix-writable
data files such as caches or random numbers. This directory should not
be shared with non-Postfix software.
data_directory: [/var/lib/postfix] /var/db/postfix

Please specify the destination directory for the Postfix HTML
files. Specify "no" if you do not want to install these files.
html_directory: [no] (何も入力せずEnter)

Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix] mail

Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq] (何も入力せずEnter)

Please specify the destination directory for the Postfix on-line manual
pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man] /usr/share/man

Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases] (何も入力せずEnter)

Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix] (何も入力せずEnter)

Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no] (何も入力せずEnter)

Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail] (何も入力せずEnter)

Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is
not shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop] maildrop
Updating /ram/libexec/postfix/anvil...
Updating /ram/libexec/postfix/bounce...
Updating /ram/libexec/postfix/cleanup...
Updating /ram/libexec/postfix/discard...
Updating /ram/libexec/postfix/dnsblog...

〜

Updating /ram/share/man/man8/trace.8...
Updating /ram/share/man/man8/trivial-rewrite.8...
Updating /ram/share/man/man8/verify.8...
Updating /ram/share/man/man8/virtual.8...

    Warning: you still need to edit myorigin/mydestination/mynetworks
    parameter settings in /etc/postfix/main.cf.

    See also http://www.postfix.org/STANDARD_CONFIGURATION_README.html
    for information about dialup sites or about sites inside a firewalled
    network.

    BTW: Check your /etc/aliases file and be sure to set up aliases
    that send mail for root and postmaster to a real person, then run
    /usr/bin/newaliases.

#
 

各質問に対して ターゲットシステムの環境に応じて パラメータを設定していきます
何も入力せずに Enter を押すと大括弧で括られたデフォルト値が選択されます
質問が終わったらファイルがコピーされて 更新ファイルも画面上で分かるようになっています

syslogへの設定も行います 検証環境では syslog-ngを利用しているので
syslog-ng.conf に下記の設定を追加します

destination mail { file("/var/log/mail.log"); };
destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };

filter f_mail { facility(mail); };

log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
 

最後に Linuxシステムで Postfixを制御するための start/stopスクリプトを手動で作成します
(通常 Linuxディストリビューションのパッケージインストールすれば 自動作成されているはず)
検証環境は Gentooベースのシステムのため /etc/init.d/postfix を以下の内容で作成しました
(スクリプトへの実行権限の付与を忘れずに)

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$

depend() {
        need net.eth0
}

start() {
        ebegin "Starting Postfix"
        /usr/sbin/postfix start
        eend $?
}

stop() {
        ebegin "Stopping Postfix"
        /usr/sbin/postfix stop
        eend $?
}
 

以上のインストール過程は IPv4 IPv6 32bit 64bit いずれの環境でも同じ手順でした
ただし 後半になりますが SMTP AUTH化 TLS化 するためにオプションを追加再ビルドします

設定

Postfixサーバの動作設定を行います 主に /etc/postfix/main.cf が設定対象です
ここで IPv6に関する設定も行います 下記は修正箇所とその説明です

inet_protocols = ipv6
inet_interfaces = loopback-only
 

ネットワーク設定です 検証環境のため IPv6のみを扱うという強気な設定です
通常は inet_protocols = all と IPv4 IPv6 両方喋るようにします

inet_interfacesは メール配送要求を受け付けるインターフェースを指定します
まずはローカルからのみ配送を受けるため loopback-only を指定しています
(loopback-only は IPv6へも対応しています)

myhostname = phenom.mydomain
mydomain = mydomain
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = no
 

メールサーバの名称と ローカルドメインの設定です
検証環境では mydomain というローカルなドメイン名を設定しています
たとえ自分が 独自ドメインを取得していようともとりあえずローカルなドメイン名を設定します
(独自ドメインは masquerade_domains で設定できるため)

myoriginは ローカル配送するメールについて送信元のドメイン部分に付与される名称です
今回 $mydomain としているためここでの例では アカウント@mydomain というアドレスになります
デフォルトの $myhostname を指定すると アカウント@phenom.mydomain アドレスになります

append_at_myorigin と append_dot_mydomain はメールアドレス操作(修正)機能です
append_at_myorigin は ドメイン部分のない宛先に $myorigin を追加します
(例えば admin 宛のメールは admin@mydomain 宛のメールに宛先修正されます 通常これは必須)
append_dot_mydomain は ドメイン部分がホスト名のみの場合 $mydomain を追加します
(例えば admin@phenom 宛のメールは admin@phenom.mydomain 宛のメールに宛先修正されます)

mydestination = $myhostname, localhost.$mydomain, localhost
 

ローカル配送対象となる 宛先ドメインの設定です
宛先ドメインが 指定ドメインのいずれかであればローカル配送が行われます
Postfixでは $myhostnameは必須で あとは localhost(::1)を追加しています

relayhost =
relay_domains =
 

リレー(メール転送)の設定ですが
ローカル配送のみとし転送自体を禁止するため relay_domains を空としています
外部へのメールやりとりが必要になったら設定します

home_mailbox = Maildir/
#mail_spool_directory = /var/spool/mail
 

ローカル配送時のメールボックスのフォーマット指定です
上記のように / を最後に使うと Maildir方式(1メール1ファイル)となります
この場合 ~/Maildir/ 配下に保存されることになります

mail_spool_directory は指定しません
これを指定すると メールスプール方式という最古の方式となり
/var/spool/mail/ にアカウント毎のメールファイル(1ファイル中に複数メールが含まれる)が作られます

メールのローカル配送方式が 3種類あるので紹介しておきます

メールローカル配送方式
メールスプール方式 インターネット黎明期のメール配送方式
/var/mail/ユーザ名/ に単一のメールスプールファイルを置いて
配送されてきたメールはそのファイルに追記
mbox形式 ホームディレクトリ ~/ にメールスプールファイルを置く
Sendmailで主に使われていた
Maildir形式 ホームディレクトリに Maildir/ などの専用ディレクトリを置いて
1メール=1ファイル で格納する最近の方式
スプールほどファイルを占有する必要がなく複数の MTA MUA(IMAPなど) と共用させやすい
専用のメールサーバを立てる場合 iノードの枯渇に注意する必要がある
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
 

最後にエイリアスの設定です
エイリアスとはメール転送機能で 特定の宛先のローカル配送に対して 別の宛先に転送します

ここもカスタマイズしています
通常は /etc/aliases を設定するケースが多いのですが postfixディレクトリを指定しています
これにより newaliasesコマンドにより /etc/postfix/aliases.db が作成されます
aliases の作成については後述します

ひとまず main.cf の修正を終えたので内容をチェックします

# postconf -n
alias_database = $alias_maps
alias_maps = hash:/etc/postfix/aliases
append_at_myorigin = yes
append_dot_mydomain = no
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/db/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = loopback-only
inet_protocols = ipv6
mail_owner = mail
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = mydomain
myhostname = phenom.mydomain
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
relay_domains = 
relayhost = 
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = maildrop
unknown_local_recipient_reject_code = 550
# postfix check
#
 

設定ファイルの誤りがあれば postfix check 時にメッセージが表示されます
設定に問題がなければ Postfixを起動します

# /etc/init.d/postfix start
 * Caching service dependencies ...                                       [ ok ]
 * Starting Postfix ...
postfix/postfix-script: starting the Postfix mail system                  [ ok ]
#
 

起動していれば netstat -a コマンドで TCP/SMTPのポートが開いていることが確認できます

$ netstat -a | grep smtp
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     494568   private/smtp
$
 

/etc/postfix/alaises への転送設定も追加しておきましょう

root:            admin
 

root宛へのメールを (普段ログインする)admin宛へ転送するための設定を追加しました
下記コマンドで aliases.db へ反映します

$ su
# newaliases
# ls -l /etc/postfix/aliases*
-rw-r--r-- 1 root root  8841  8月 28 17:38 /etc/postfix/aliases
-rw-r--r-- 1 root root 12288  9月  4 09:22 /etc/postfix/aliases.db
#
 

では ローカル配送の試験を行ってみます telnet コマンドで SMTPプロトコルを直接流し込みます

$ telnet -6 localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 phenom.mydomain ESMTP Postfix
EHLO mydomain
250-phenom.mydomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: root@mydomain
250 2.1.0 Ok
RCPT TO: admin@mydomain
250 2.1.5 Ok
DATA
354 End data with .
test mail
.
250 2.0.0 Ok: queued as 0250E24060
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
$ su
# tail -f /var/log/mail.log
〜
Apr 28 13:45:33 phenom postfix/smtpd[3986]: connect from localhost[::1]
Apr 28 13:49:25 phenom postfix/smtpd[3986]: 0250E24060: client=localhost[::1]
Apr 28 13:49:45 phenom postfix/cleanup[4023]: 0250E24060: message-id=<20120428134925.0250E24060@phenom.mydomain>
Apr 28 13:49:45 phenom postfix/qmgr[3924]: 0250E24060: from=, size=286, nrcpt=1 (queue active)
Apr 28 13:49:45 phenom postfix/local[4025]: 0250E24060: to=, relay=local, delay=38, delays=38/0/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Apr 28 13:49:45 phenom postfix/qmgr[3924]: 0250E24060: removed
Apr 28 13:50:45 phenom postfix/smtpd[3986]: disconnect from localhost[::1]
#
 

SMTPは TCP/25ポートを使います
MAIL FROM: や RCPT TO: で送信元や宛先を指定し
DATA で本文を記載します 本文の終了として . ピリオドのみの行を入力します
telnet後は mail.logでも 正常にローカル配送されたことが記録されています

メールも確かに adminアカウント宛に配送されていました

Return-Path: 
X-Original-To: admin@mydomain
Delivered-To: admin@mydomain
Received: from mydomain (localhost [IPv6:::1])
	by phenom.mydomain (Postfix) with ESMTP id 0250E24060
	for ; Sat, 28 Apr 2012 13:49:07 +0000 (UTC)
Message-Id: <20120428134925.0250E24060@phenom.mydomain>
Date: Sat, 28 Apr 2012 13:49:07 +0000 (UTC)
From: root@mydomain

test mail
 

(書きかけ)

LAN内からの SMTP送信を受け付ける

IPv6による SMTP接続が動作することまで確認しました
次は localhost以外の 自宅LANからの接続を許可するように設定します

main.cf の設定変更箇所は下記の通りです

inet_interfaces = all
 

loopback-only から all に変更するだけです
Postfixを再起動してテストします Sylpheedメーラを別ホストから試します

# /etc/init.d/postfix restart
 * Stopping Postfix ...
postfix/postfix-script: stopping the Postfix mail system                  [ ok ]
 * Starting Postfix ...
postfix/postfix-script: starting the Postfix mail system                  [ ok ]
# netstat -a | grep smtp
tcp6       0      0 [::]:smtp               [::]:*                  LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     498865   private/smtp
#
 

SMTP Sylpheed設定画面1
Sylpheedの設定画面を開いたところです
SMTPはデフォルトの 25番のままです SSLも設定しません
SMTP Sylpheed送信1
普通にメールを記述して 送信すると

Return-Path: 
X-Original-To: admin@mydomain
Delivered-To: admin@mydomain
Received: from turion.mydomain (turion.mydomain [IPv6:fe80::2***:****:***2])
	by phenom.mydomain (Postfix) with ESMTP id 90A7824061
	for ; Sat, 28 Apr 2012 14:23:17 +0000 (UTC)
Date: Sun, 22 Apr 2012 01:42:58 +0900
From: テスト 
To: admin@mydomain
Subject: テストメール
Message-Id: <20120422014258.c87c82dd.admin@******.com>
X-Mailer: Sylpheed 3.1.3 (GTK+ 2.19.0; i686-pc-linux-gnu)
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

テストです
 

正常に送信できています

SMTP AUTHに対応する

次の段階として SMTP AUTH を導入します
SMTP AUTHにより SMTP接続時に アカウント/パスワードでの認証が必須となり
未認証の SMTP接続はメールが送信できません

これにより メールサーバが不正中継の土台となってしまう事態を防ぎます
将来メールサーバをインターネットに接続する際に必須といえる仕組みです

認証基盤(アカウント パスワードの管理)として
SASL(Simple Authentication Security Layer) が使えます
ここでは Cyrus-SASL のインストール手順にあわせて BerkeleyDB5対応も行います

$ tar -xzf cyrus-sasl-2.1.25.tar.gz
$ cd cyrus-sasl-2.1.25
$
 

configureを始める前に BerkeleyDB5対応のための変更を行います
configureスクリプトの内容を書き換えて libdb-5.1.so をリンクするようにします

 7233 
 7234         saved_LIBS=$LIBS
 7235         for dbname in ${with_bdb} db-5.1 db-4.7 db4.7 db47 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db-4.0 db4.0 db-4 db40 db4 db-3.3 db3.3 db33 db-3.2 db3.2 db32 db-3.1 db3.1 db31 db-3 db30 db3 db
 7236           do
 7237             LIBS="$saved_LIBS -l$dbname"
 7238             cat >conftest.$ac_ext <<_ACEOF
 

7235行目で dbのバージョン候補を指定して検索しているので
候補の最初に db-5.1 を追加します これで libdb-5.1.so を掴んでくれます

BerkeleyDBの関数に正しい引数を渡す必要があります
sasldb/db_berkeley.c も編集が必要です 変更箇所は 104行目です

104 #if DB_VERSION_MAJOR >= 5 || DB_VERSION_MINOR >= 1
105         ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, flags, 0660);
106 #else
107         ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, flags, 0660);
108 #endif
 

utils/dbconverter-2.c も編集します 217行目を同様に変更します

217 #if DB_VERSION_MAJOR >= 5 || DB_VERSION_MINOR >= 1
218         ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, DB_CREATE, 0664    );
219 #else
220         ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, DB_CREATE, 0664);
221 #endif
 
 
$ ./configure --prefix=/usr --enable-static=yes --enable-java --enable-ntlm --enable-login --enable-ldapdb --with-ldap=/usr --enable-sql
configure: creating cache ./config.cache
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
〜
config.status: creating saslauthd.h
config.status: executing depfiles commands
Configuration Complete. Type 'make' to build.
$ make
make  all-recursive
make[1]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' に入ります
Making all in include
〜
make[2]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' に入ります
make[2]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' から出ます
make[1]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' から出ます
$ su
# make install
Making install in include
make[1]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25/include' に入ります
make[2]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25/include' に入ります
〜
make[2]: `install-data-am' に対して行うべき事はありません.
make[2]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' から出ます
make[1]: ディレクトリ `/home/admin/cyrus-sasl-2.1.25' から出ます
#
 

saslauthd sasldblistusers2 saslpasswd2 といったコマンドが使えるようになります

Cyrus-SASLが入ったら Postfixの方も対応するために再ビルドが必要です
再度ビルドディレクトリで 下記のように実施してください

$ make clean
〜
$ make makefiles CCARGS='-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DUSE_TLS -I/usr/include/sasl' AUXLIBS='-lsasl2 -lssl -lnsl'
〜
$ make
〜
$ su
# make upgrade
〜
#
 

Cyrus-SASLを利用するためのオプションと TLSを利用するためのオプションも追加しています

Cyrus-SASLの設定に話を戻します
ここでは sasldb形式の認証データベースと LDAP形式の認証データベースを両方試します
まず sasldb形式から 下記コマンドでデータベースを作れます

# saslpasswd2 -c -u testtest.com mailtest
Password: パスワードを入力
Again (for verification): 同じパスワード
# chown mail /etc/sasldb2
# ls -l /etc/sasldb2
-rw-r----- 1 mail root 12288  4月 29 01:12 /etc/sasldb2
#
 

/etc/sasldb2 ができます これは BerkeleyDB形式のデータベースです
また Postfix smtpd から読み書きできるよう mailオーナーに変更しています
-u オプションでドメインを指定しています

# sasldblistusers2
mailtest@testtest.com: cmusaslsecretOTP
mailtest@testtest.com: userPassword
#
 

sasldblistusers2 で登録済アカウントを確認できます

sasldb形式を Postfixで扱えるよう /usr/lib/sasl2/smtpd.conf を作成します

pwcheck_method: auxprop
auxprop_method: sasldb
mech_list: cram-md5 digest-md5 plain login
 

Postfix側 main.cf には下記のように設定を追加します

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = testtest.com
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 

smtpd_sasl_local_domain には saslpasswd2の時と同じドメインを指定します
設定後 Postfixをリスタートしましょう

Sylpheed側は メール送信の設定を変更する必要があります
SMTP Sylpheed設定画面2
SMTP AUTHを有効にして sasldbに登録したアカウントパスワードを設定します
これで SMTP AUTH化は完了です
SMTP AUTHのチェックを外すと メール送信ができないことも確認しましょう

検証環境では OpenLDAPを使っているので
認証基盤を sasldbから 本命の LDAPに切り替えます
OpenLDAPは設定済でメール用アカウントパスワードが下記のように登録済とします

dn: uid=mailtest,ou=People,dc=local
objectClass: top
objectClass: posixAccount
objectClass: account
objectClass: postLdapAdmin
uid: mailtest
cn: MyName
uidNumber: 500
gidNumber: 100
homeDirectory: /home/admin
loginShell: /usr/bin/bash
userPassword:: **************==
gecos: MyName
mail: admin@testtest.com
mailDirectory: /home/admin/Maildir
 

Cyrus-SASLで sasldb以外のデーターベースを使うには saslauthdが必要です
まず /usr/etc/saslauthd.conf を下記のように設定します

ldap_servers: ldap://localhost
ldap_bind_dn: cn=Manager, dc=mydomain
ldap_password: ********
ldap_search_base: ou=People,dc=testest,dc=com
ldap_filter: (&(uid=%u)(objectClass=posixAccount))
 

ldap_bind_dn には データベースにアクセスするための LDAPユーザを指定します
(本当は Managerアカウントでなく 読み出し用アカウントを作るべきです)

設定完了したら saslauthdを起動しましょう

# saslauthd -a ldap
#
 

/usr/lib/sasl2/smtpd.conf を saslauthd に向くように設定変更します

pwcheck_method: saslauthd
mech_list: digest-md5 plain login
 

cram-md5 を入れると認証に失敗するようなので削除しています

Sylpheed側には LDAPに登録したアカウントパスワードを設定すれば
sasldbと同じようにメールが送れるはずです

LDAPデータベースが使えたら /etc/sasldb2 は不要になります
saslauthd はシステム起動時に自動起動するようにしておきましょう

TLS化する

SMTP AUTHを導入しましたが
インターネットにサーバ公開することを考えたら まだセキュリティに不安です
通信経路を暗号化するSSLを導入しましょう

OpenSSLがあれば 秘密鍵 と サイト証明書 が作れます

# openssl genrsa -des3 -out ./postfix.pem 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
...+++
e is 65537 (0x10001)
Enter pass phrase for ./postfix.pem:適当なパスワード
Verifying - Enter pass phrase for ./postfix.pem:同じパスワード
# openssl rsa -in ./postfix.pem -out /usr/etc/ssl/private/postfix.pem
Enter pass phrase for /ram/postfix.pem:同じパスワード
writing RSA key
# rm ./postfix.pem
#
 

1回目のコマンドは秘密鍵(パスワード付)の作成
2回目のコマンドで鍵のパスワードを解除し 本命のディレクトリに出力

次のコマンドで 自己証明書を作成します

# openssl req -new -x509 -key /usr/etc/ssl/private/postfix.pem -out /usr/etc/ssl/certs/postfix.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Ekoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyDomain
Organizational Unit Name (eg, section) []:Home
Common Name (eg, YOUR name) []:MyName
Email Address []:admin@mydomain
#
 

署名情報は適当でかまいません (公的認証局に登録するようなものでないので)
ファイル名や拡張子も 各システムのポリシーに従って変えてもかまいません

鍵ができたので Postfixの設定を行います main.cf に下記行を追加します

# TLS
smtpd_use_tls = yes
smtpd_tls_key_file = /usr/etc/ssl/private/postfix.pem
smtpd_tls_cert_file = /usr/etc/ssl/certs/postfix.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_tls_scache
smtpd_tls_loglevel = 1
 

smtpd_tls_loglevel は必要な詳細度に応じて 0〜4 の値に調整してください

また TCPポート番号が変わるため master.cf への修正も必要です

#smtp      inet  n       -       n       -       -       smtpd

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
 

smtp(TCP/25)の行をコメントアウトして smtps(TCP/465) の行を有効にするだけです

Postfixを再起動したら ポート番号465が開いているのが確認できるはずです

# netstat -a | grep urd
tcp6       0      0 [::]:urd                [::]:*                  LISTEN
#
 

Sylpheed等メールクライアントの設定を変えます
SMTP Sylpheed設定画面3 SSLオプション
「SSLを使用」にチェックを入れるだけです
高度な設定タブでは 送信ポート番号が 465番に変わっていることがわかります
初回メール送信で証明書の確認が求められますが 暗号化が完了したことが確認できます

インターネットへの接続

Postfixの IPv6動作は前半で完了し 認証や通信暗号化も行いました
最後の仕上げにインターネットへの接続も行います

外部ドメイン宛のメールをインターネットに飛ばす設定
Postfixの main.cf に下記更新を行います

inet_protocols = all
mydomain = testtest.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mydomain
relayhost = [smtp.*****.ocn.ne.jp]:25
smtp_bind_address = 192.168.0.254
 

inet_protocols = all で IPv4も許可する設定としました
外出中メールを送信したいとき 自宅の PostfixにIPv4でつなげるためです
(早く IPv6が普及してほしい)

残りの設定は 外部ドメイン宛のメールをインターネットに飛ばす設定です
mydestination に該当しない宛先は relayhostにメールを配送する設定を行います

mydomain に独自ドメインがあればそれを設定します
relayhost は外部への飛ばし先ですが プロバイダが用意しているサーバを利用します
(MX検索を抑止するため 大括弧[]で括る必要があります)
smtp_bind_address は自サーバのインターフェースアドレスを指定します
SMTP 静的IPマスカレード設定 自宅サーバへの接続
ブロードバンドルータには上記の設定を入れました
IMAP接続用に ポート10993番を開けて IMAPサーバの993番に転送します
SMTP接続用に ポート10465番を開けて SMTPサーバの465番に転送します
これでメール受信送信が 外出中から可能になります

便利になる反面 セキュリティの確保にも十分注意する必要があります

IPv6サーバツールへ戻る

UQ WiMAX 導入

WiMAXとは

無線通信の規格です 最大40Mbps(上り方向は10Mbps)まで出ます
WiMAX利用イメージ
Wi-Fiとは別の規格のため 専用通信装置が必要ですが
上記の通り ルータが提供されていたり WiMAX内蔵のノートPCもあります

無線サービス比較
プラン 長所 短所 月額(およそ)
公衆無線LAN 安い
ファーストフード店や空港や鉄道の単位でアクセスポイントが敷かれている
カバーエリアが狭い(事業者同士でアクセスポイントを共有する工夫も見られるが) 0円〜1800円
FONという無線LANを相互提供する仕組みもあります
3G(携帯) カバーエリアが広い(携帯通信なので) 値段が高い
携帯端末以外をインターネットにつなげられない(最近 テザリングサービスも出てきているので改善傾向かも)
4500円(定額の場合)
イーモバイル カバーエリアが広い
テザリングに対応している
4580円(2年縛りプラン)
WiMAX 速度が速い
カバーエリアが広い
テザリングに対応している
1契約で 3台まで端末が持てる
電話サービスがない 3880円(1年縛り)
LTE(NTTドコモ Xi) 速度が速い(最大 75Mbps)
低遅延
サービス始まったばかりでエリアが狭い 4935円(2年縛りプラン)
TD-LTE(WCP XGP) 未調査 未調査 サービスが始まっていない
LTE(KDDI) 未調査 未調査 サービスが始まっていない
安さの面では 公衆無線LANが圧倒的だが
利用シーンは 喫茶店で寛いでるときや電車/飛行機で移動中などに限られる

それ以外の選択肢は イーモバイル か WiMAX もしくはいっそのこと スマートフォンですが
まず PCでのネット利用をあきらめるなら 最近のスマートフォンの使い心地の良さがお勧めです
さらに候補にあがってくるのは 電話もネットもPC利用もできる優等生 イーモバイル
そして 電話サービスがないが高品質なデータ通信に特化している WiMAX です

LTEは次世代携帯サービスとして期待されています まだ普及していません

電話は WILLCOM03 を現役で使っていて テザリングができる技もあるみたいですが
WILLCOMから新しいスマートフォンもなかなか出てこず 経営もソフトバンクに買収されたみたいです
選択肢には載せてません

結局 電話は WILLCOMを使いつづけるという前提で WiMAXを選択しました
イーモバイルより安い上に高品質 (滅多に使わない人には 380円/月〜の従量制プランもある)
さらに 「1契約で3台まで端末を登録できる」というのが決定打でした

下記の使い方ができるため 費用を抑えられるというのが理由です
1台目の WiMAXルータは自分が持ちつづけて 通常は電源OFF
2台目の WiMAXルータは実家に送って通常電源ONで使ってもらう
(ただし 自分持ちのルータの電源を入れた間は 実家のルータからネットが使えなくなる)
つまり 複数人で契約を共用できるのです (同時利用は不可能)

UQ WiMAX導入

WiMAX 送付物
UQ WiMAXを契約したら 大体 1週間位で必要な機器が届きます
WiMAX 送付内容
光ファイバと違って事前工事や開通作業も不要
箱の中身は 契約書と WiMAX対応ルータだけでした
WiMAX ルータ Aterm WM3500R
ハードウェアとしては上記のとおり USBケーブル 充電用アダプタ ルータ本体(Aterm WM3500R)
USBケーブルだけで 充電と通信が同時にできるので 充電用アダプタは使ってません
WiMAX Aterm WM3500R
インターフェースは 電源ボタン SETボタン(確認用) USBポート 充電アダプタ用ポート の構成です
ちなみに 実家用とは別に自分用のルータを個人購入したので初期投資が財布に響きます
WiMAX Aterm WM3500R 使用中
ルータに USBケーブルを挿して電源を入れた状態です
(同じ Aterm WM3500R 赤 20000円)
電源入れてから 実際にインターネットにつながるまでに 2分ほど待たされます
頻繁に電源を ON/OFF する自分の身とてしては結構気にかかる部分でした
WiMAX 初期接続
Windows Vista以上ならパソコンに USB挿すだけで自動認識されます
Windows XPに USB接続するなら別途システムファイルインストールが必要です
USB接続でなく 無線LANで接続するなら無線LANの設定のみでつながります
WiMAX Windowsドライバ登録状況
普通のネットワーク機器として認識されています
IPアドレス等も自動て設定されるため つなげるだけで使えるようになるイメージです
WiMAX IP設定状況
ルータの DHCP機能によって IPアドレスが割出されています
ルータへのアクセスは ブラウザを開いて http://192.168.0.1/ を叩くだけです
以降がその設定です
Aterm WM3500R パスワード設定
初回接続でパスワードの設定が求められます
Aterm WM3500R 契約設定
プロバイダ契約の説明画面です
Aterm WM3500R エラー
その後エラーが出てしまいました
UTPケーブルを挿していたためプロバイダに正常に接続できなかったのです
有線LAN その他 無線LAN は一旦切断する必要があります
Aterm WM3500R プロバイダ認証中
ルータは UQ WiMAX専用なので 自動的に UQ WiMAXと契約にいきます
別途 新規にルータを購入すればどのプロバイダと契約するか選択する画面が現れます
Aterm WM3500R プロバイダ登録後
この画面は1回しか見ることができないので 記念的な意味で掲載しました
Aterm WM3500R Web設定画面
契約が済んでいれば 通常上記のような設定インターフェース画面となります
画面は ルータが無線LAN親機として振る舞うための設定画面です
通信内容の傍受を避けるために プロトコルを WPA/WPA2 としています
WiMAX 通信競合中画面
ちなみに 1台目を利用中に 別の2台目の電源を入れても
ネットが使えず上記のような HTMLが返ってきます
1台目の電源をOFFにした後 2台目の SETボタンを押せば再び使えるようになります

フレッツ光ネクスト + OCN 導入

NTTの フレッツ光ネクスト でトリプルプレイを導入した

2010-11-27 に申し込んで 2010-12-14 に開通したので
大体 3週間くらいかかったことになり このあたりは auひかりと同じでした

もともと auひかりのエリア範囲だったので ギガ得プランの継続と工事を申し込んでいたのですが
2週間ほどまたされた挙句 「光ファイバが通らない区間があるので開通できない」と断られたのです
同じ関東圏のサービスエリアであっても条件によって光ファイバが開通できないこともあり
NTTフレッツの方が若干サービスエリアが広いようです

フレッツ光での宅内構成は下記の通りです
フレッツ光ネクスト 構成
ほぼ auひかりと同じですが 光集線ボックスとホームゲートウェイの間にあった ONUがなくなって
ホームゲートウェイにONU機能が含まれています 従ってホームゲートウェイまでが光ファイバです

ひかりTV用の STBです
フレッツ光ネクスト STB 縦置き
手のひらよりひとまわり大きめのサイズです
フレッツ光ネクスト STB 裏面
左から電源入力 UTP入力 D端子出力 RCA出力 HDMI出力 光デジタル音声出力
HD画質が楽しむために HDMIを使える環境が欲しいところです
フレッツ光ネクスト STB リモコン
リモコンはこんな感じになっています

次にメインとなる ホームゲートウェイですが PR-S300SE というフレッツ光ネクスト専用ルータです
フレッツ光ネクスト HGW 表
STBと同じくらいの大きさです
IPv6対応 ONU内蔵 ファイアウォール機能,NAT機能,DHCP機能 を備える高機能ルータで
Webによる設定も可能です
さらに面白い機能としては VoIP内線子機を持てる点ですがこれは後述します
フレッツ光ネクスト HGW 裏
上から UTPポート(SW-HUB) 電話コード(契約により 2回線持てる?) 電源と 光ファイバです
フレッツ光ネクスト HGW 内部配線
使用済のポートの中をのぞいてみると UTPケーブルが配線されています
実はこのルータ 中身は ルータ装置とONU装置をくっつけた構成のようです
フレッツ光ネクスト HGW
製造シールも 2枚貼られているし ニコイチですかねやっぱり
フレッツ光ネクスト 光終端工事
工事は エアコンのダクトを流用して外の光ファイバを引き込む方式をとってもらいました
他の引き込み方法としては 電話回線の引き込み口を流用する方法も多いそうです
フレッツ光ネクスト 光集線装置
光終端部分の拡大図
外向けの光ファイバと内向けの光ファイバを接続している部分で 内外の責任分界点です
フレッツ光ネクスト 宅内ファイバ
内向け光ファイバの配線状況です
線のフレキシブル具合に注目です 最近の宅内ファイバはこんなに曲げても使えるのですね
フレッツ光ネクスト 利用状況
ルータ周りの配線後の状況です
左下にある小さいのは 100Mbps SW-HUBです ゲーム機等に分配しています

ルータの Gbpsポートは合計4ポートあります
1ポートをSTBとの接続に 1ポートをSW-HUBと接続したため 残り2ポートはパソコンに接続しました

ルータの設定

ルータへの各種設定は Web画面を通じて行います
パソコンを繋いだら ルータから IPアドレスが割り当てられているはずです
ブラウザを開いて http://192.168.1.1/ を開いてみます
アカウントパスワードが求められますが認証をパスすると下記画面となります
フレッツ光ネクストルータ 接続先
Webを使った GUIな操作で各種設定ができます
接続先設定の部分は PPPoEによる NTTとの接続設定となります
開通業者が初期設定してくれるので特にいじる必要はありません
フレッツ光ネクストルータ 電話設定
電話設定の項目です
画面では IP phone とありますが 実は 手持ちのVoIP端末を内線子機として利用できるのです
使いかたによっては 位置固定の原則を打ち破れるような使いかたも可能
ここ が参考になります
フレッツ光ネクストルータ 無線設定
無線カードがあれば 設定できます
フレッツ光ネクストルータ 詳細 DHCP
DHCPに関する設定です
特定のMACアドレスに 特定のIPアドレスを割り当てる設定ができないのが使いづらい部分です
フレッツ光ネクストルータ 詳細 セキュリティ
パケットフィルタに関する設定です
外部からの侵入を防ぐための基本的な設定がデフォルトで入っています
フレッツ光ネクストルータ 詳細 IPマスカレード
IPアドレス ポート番号 変換によるポート開放もできます
フレッツ光ネクストルータ 詳細 静的NAT
IPアドレス変換による サービス公開用の設定ができます
フレッツ光ネクストルータ 詳細 高度な設定
その他設定項目です
フレッツ光ネクストルータ メンテナンス
メンテナンスでは 機器の再起動や pingによる疎通チェックができます
UNIX系のOSが組み込まれているのでしょうか
フレッツ光ネクストルータ 情報
情報欄では 機器の動作ログが確認できます

auひかりのルータと比較すると 使い勝手はほぼ一緒ですが
USBポートがない分 VoIP機能が使えたりと 独自機能で個性が出ていて面白いと思います

ひかりTV

次は STBメインの話になります
リモコンでコントロールします
ひかりTV 初回起動
初回起動の画面です 初期設定が必要となります
ひかりTV 初回登録
お客様ID を登録します
ひかりTV お知らせ画面
ネットワーク上で認証後 初回設定は終了です
地デジのチャンネル設定はすぐ後で行います
ひかりTV メインメニュー
メインメニューです
HD画質対応のため フォントは見やすいです
配信終了間近 と書いてあるのは オンデマンド配信ビデオのことです
auひかりでもそうでしたが コンテンツをどんどん配信終了にされるとライブラリが充実しないのでは
ないかと思います ( コンテンツを持ちつづけることにライセンス料が発生するのでしょうか? )
ひかりTV プレミアム
プレミアム ではオプション有料チャンネル オンデマンドビデオ カラオケ などが選択できます
ひかりTV 番組表
番組表は HDの高解像度を利用した見やすい表示となっています
ひかりTV 地デジ設定前
地デジのチャンネル設定を行わないと 上記メッセージが出ます
早速チャンネル設定を済ませます
ひかりTV 地デジ設定前設定状況
設定メニューから
ひかりTV 地デジチャンネルスキャン
チャンネルスキャンすれば 地デジの番組一覧が自動認識されます
STBへは IP配信のはずなのにチャンネルスキャンの作業は必要なのでしょうか??
ひかりTV システム情報
システム情報表示です ほとんど伏字ですが
IPv6対応しているのは 大手キャリアならではといったところでしょうか
ひかりTV USBHDD情報
USB-HDDがあれば 録画も可能です
ひかりTVでは 1300円/月 で 500GBHDD内蔵STBのレンタルも可能ですが
自前でHDDを用意すれば 特にレンタルするまでもないかなと思います
(10ヵ月も待たずに元が取れる計算です)
ひかりTV リモート予約
なんと 外出先から iPhone Android端末を使って番組予約も可能
詳しくは ここを参照ください
ひかりTV リモート予約パスコード
リモート予約できる 端末を追加するためにはパスワードによる登録作業が必要です
ひかりTV お知らせ情報
お知らせから各種情報が入手できます
ひかりTV NHKオンデマンド
NHKオンデマンドも利用可能
昔見たアニメでもう1回見たいのがあったのですが ライブラリになかった
いまいち使い勝手がよろしくありません
ひかりTV 試聴可能ビデオ
オンデマンド購入したビデオは 一定期間ここから選択して見れる(はず)
ひかりTV ショッピング
オンラインショッピングもできます
品揃えとしては ひかりTV向け機器や ギフトセットなどのみでした
インターネット普通にできるのだから Amazon使ったほうがはるかに便利

将来的に期待したいのは 番組で放映された各種アイテムや関連商品が
リアルタイムで商品一覧に表示されて ボタン1つで買い物カゴに入るところ
ここまで出来たら神です Amazon越えられます
Google TV がそんなの目指してるのかも
ひかりTV カラオケ機能
カラオケも可能です 18000曲以上毎月更新されています
1日歌いたい放題で 500円プランあるので 自宅カラオケ大会やる分には安いでしょう
でもアパートでは無理 使ってません
ひかりTV オンデマンドビデオ
オンデマンドビデオ試聴も リモコンで選択できます
図のとおり 100円ビデオとかキャンペーンもやってます
配信終了の概念がなければ もっといいのですが

その他

その他付加サービスとしては 「フレッツウィルスクリアv6」というのがあります
ウィルスバスター相当の ウィルス対策ソフトが 3ライセンス 400円/月 で提供されます
フレッツウィルスクリアv6 申込み
ネットを経由して インストーラをダウンロードする形式です

月額420円(税込)だったら 年間5000円の計算なので市販のウィルスソフトとほぼ同じの価格です
しかも 3ライセンス分使えることを考えると 値段的には市販ウィルスソフトと比較すると安いです

当初は すぐに解約してやろうかと思ってましたが ずるずる利用中…
ただ本当に「ウィルスバスター」相当なら ウィルスバスターは他の市販ウィルスソフトと比較して
ウィルスの検出能力に弱いとのことなので ここは注意が必要です

最後に

ネット 電話 TV と光ファイバでまかなえるようになって かなり便利になったと思います
今は解約したけど 2008年に導入した auひかりの記事はこちら