Solaris 10 に PHP5 と MySQL5 をインストール
Solaris 10 に、 MySQL をインストールする方法や PHP や Apache をインストールする方法 をまとめてあります。
Solaris 10 のパッケージに含まれている gcc (GNU Compiler Collection) は /usr/sfw/bin にコマンドがあるので、環境変数PATH に登録しておくとよいでしょう。また、/usr/sfw/lib にインストールされている多くのライブラリを gcc はそのまま利用できます(LD_RUN_PATHを指定する必要がありません)。
Solaris 10 にて gcc を利用して MySQL などをコンパイルする場合、libstdc++.laの内容が空であるために出力される "libstdc++.la is not a valid libtool archive" エラーに対処しておかなければなりません。(Solaris Expressでは、修正されています。)
/usr/sfw/lib/libstdc++.la は以下のように修正
# libstdc++.la - a libtool library file # Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes) # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libstdc++.so.6' # Names of this library. library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so' # The name of the static archive. old_library='libstdc++.a' # Libraries that this one depends upon. dependency_libs='-lc -lm -L/usr/sfw/lib -lgcc_s' # Version information for libstdc++. current=6 age=0 revision=3 # Is this an already installed library? installed=yes # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/usr/sfw/lib'
/usr/sfw/lib/64/libstdc++.la は以下のように修正
# libstdc++.la - a libtool library file # Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes) # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libstdc++.so.6' # Names of this library. library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so' # The name of the static archive. old_library='libstdc++.a' # Libraries that this one depends upon. dependency_libs='-L/lib/64 -lc -lm -L/usr/sfw/lib/64 -lgcc_s' # Version information for libstdc++. current=6 age=0 revision=3 # Is this an already installed library? installed=yes # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/usr/sfw/lib/64'
MySQL5 のセットアップ
ソースを入手します。
http://dev.mysql.com/downloads/
作業は スーパーユーザー(root) で行ってください。以降で利用している、MySQLを起動するユーザー(mysql)やグループ(staff)は各自の運用のポリシーにより決定してください。
# useradd -g staff -s /bin/false -m mysql (必要なら -b /export/home を指定) # passwd mysql New UNIX password: <mysql のパスワード> Retype new UNIX password: <mysql のパスワード> # gzip -dc mysql-5.0.24a.tar.gz | tar xf - # cd mysql-5.0.24a # ./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql \ > --with-charset=binary --with-extra-charsets=all # make # make install
※ --with-extra-charsets について
complex - 日本語文字をはじめとする、2バイト(以上)のキャラクタセットを組み込む
all - MySQL がサポートする全てのキャラクタセットを組み込む
● データベースの初期化と起動
# cp support-files/my-medium.cnf /etc/my.cnf # cd /usr/local/mysql # ./bin/mysql_install_db --user=mysql # chown -R root . # chown -R mysql:staff var # ./bin/mysqld_safe --user=mysql &
※ コンフィグレーションファイル (support-files/my-xxxx.cnf) で環境にあったものを /etc/my.cnf としてコピーしておくことで、/etc/my.cnf ファイルの編集でデータベースを最適化できます。huge > large > medium > small の順で規模を選択できます。大規模データベースに合わせたコンフィグレーションファイルの場合、大容量のメモリが必要です。
※ 起動時に、キャラクタセットを指定するには ./mysqld --default-character-set=sjis ... と実行します。
● 動作確認
# /usr/local/mysql/bin/mysqladmin version /usr/local/mysql/bin/mysqladmin Ver 8.41 Distrib 5.0.24a, .... ... Server version 5.0.24a-log Protocol version 10 Connection Localhost via UNIX socket UNIX socket /tmp/mysql.sock Uptime: 2 min 46 sec Threads: 1 Questions: 1 Slow queries: 0 Opens: 12 Flush tables: 6 ... # /usr/local/mysql/bin/mysqlshow +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | +--------------------+ # /usr/local/mysql/bin/mysqlshow mysql Database: mysql +---------------------------+ | Tables | +---------------------------+ | columns_priv | | db | | func | ... | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ # /usr/local/mysql/bin/mysql -e "select host,db,user from db" mysql +------+---------+------+ | host | db | user | +------+---------+------+ | % | test | | | % | test\_% | | +------+---------+------+
● 終了方法
# /usr/local/mysql/bin/mysqladmin shutdown
● サービスの追加
mysqld_safe は、OS 起動時に起動されるように設定します。SMFを利用して登録します(従来の init.d を利用する記述でも可能)。
/var/svc/manifest/network/mysql.xml
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--
Copyright 2006 Shinta, All rights reserved.
Service manifest for MySQL
-->
<service_bundle type='manifest' name='mysql:mysql'>
<service
name='network/mysql'
type='service'
version='1'>
<create_default_instance enabled='false' />
<single_instance />
<dependency
name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<dependency
name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/loopback' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/svc-mysql start'
timeout_seconds='-1'>
<method_context>
<method_credential user='mysql' group='staff' />
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='-1'>
</exec_method>
</service>
</service_bundle>
/lib/svc/method/svc-mysql(以下の内容または /usr/local/mysql/share/mysql/mysql.server を svc-mysql としても良い)#!/usr/bin/sh
#
# Copyright 2006 Shinta, All rights reserved.
# SMF Method file for MySQL
#
. /lib/svc/share/smf_include.sh
DB_DIR=/usr/local/mysql/var
PIDFILE=${DB_DIR}/`/usr/bin/uname -n`.pid
case "$1" in
start)
/usr/local/mysql/bin/mysqld_safe --user=mysql --pid-file=${PIDFILE} > /dev/null &
;;
stop)
if [ -f ${PIDFILE} ]; then
/usr/bin/pkill mysqld_safe >/dev/null 2>&1
/usr/bin/kill `cat ${PIDFILE}` > /dev/null 2>&1
fi
;;
*)
echo "Usage: `basename $0` { start | stop }"
exit 1
;;
esac
# chown root:bin /lib/svc/method/svc-mysql # chmod 555 /lib/svc/method/svc-mysql # chown root:sys /var/svc/manifest/network/mysql.xml # chmod 444 /var/svc/manifest/network/mysql.xml # svccfg import /var/svc/manifest/network/mysql.xml # svcadm -v enable mysql
各ユーザーは、mysqlコマンドなどを利用できるように PATH環境変数に /usr/local/mysql/bin を設定しておくとよいでしょう。
● チューニング
MySQL のバージョン 4.1から認証プロトコルが変わりました。そのため 4.0ベースのクライアントライブラリ(libmysqlclient)を利用して作られた Perl DBI や PHP などで利用するためには、OLD_PASSWORD()関数によってパスワードを作成するか、設定ファイルである my.cnf の [mysqld] 以下に old-passwords を追加してパスワードを作成する必要があります。バージョン 4.1 以降のクライアントライブラリを利用した Perl DBI や PHP などからのみアクセスされる場合は old-passwords にする必要ありません。
mysqldump コマンドを利用する場合、必ず --default-character-set= によって出力する文字コードを指定すると安全です。また、バージョン 4.1以上の MySQLを利用するアプリケーションの場合、"SET NAMES キャラクターセット名" という SQL 文(コマンド)を発行しておくことで漢字コードの変換ミスを防ぐことができます。
キャラクターセットを my.cnf で設定する方法:
| MySQL 4.1 | MySQL 4.1.15 以降 |
[mysqld] default-character-set= |
[mysqld]
default-character-set=
|
調整するとよいパラメータ:
| パラメータ | 意味 | 増やすことで得る効果 |
key_buffer_size |
検索に使われるインデックスをバッファに保存する際のメモリサイズ |
パフォーマンスが向上(マシンに搭載しているメモリーの1/4を推奨) |
max_allowed_packet |
入力データ保持のための最大バッファサイズ | 大きな入力データを扱える |
max_connections |
認められる同時接続可能なクライアントの数 | 接続できるクライアント数 |
table_cache |
データのキャッシュサイズ | ディスクのI/Oが減りパフォーマンスが向上 |
sort_buffer_size |
ソートをおこなう際に使用するバッファサイズ | ORDER BYやGROUP BYをクエリーに用いた場合のパフォーマンスが向上 |
record_buffer_size |
スキャンする各テーブルにこのサイズのバッファを割り当てる | インデックスを含まないクエリーの実行速度が上がる |
join_buffer_size |
完全結合(インデックスを使用しない結合)に使用されるバッファのサイズ | 大量のjoin の発行に対応(結合を速くする最良の方法はインデックスの追加です) |
MySQL が必要とするメモリサイズの計算(実メモリ+スワップ)
key_buffer_size + ( sort_buffer_size + record_buffer_size ) * max_connections = 必要とするメモリサイズ
アカウントの調整:
不要なユーザーの削除やデータベースの参照権限、パスワードを設定します。問い合わせ元のIPアドレスも限定することでセキュリティがより堅牢になります。
# mysql -uroot mysql
mysql> delete from user where user='';
mysql> update user set password = PASSWORD('PASSWORD') where user='root';
mysql> grant select,insert,delete,update on DB_NAME.* to USER_NAME@HOST_ADDRESS
-> identified by 'PASSWORD';
mysql> flush privileges;
Apache2 のセットアップ
ソースを入手します。
http://httpd.apache.org/download.cgi
作業は スーパーユーザー(root) で行ってください。
Apache 2 のソースを展開して configure を実行(今後何かと利用するかもしれないので SSL対応にしておく)
# gzip -dc httpd-2.0.59.tar.gz | tar xf - # cd httpd-2.0.59 # ./configure --enable-so --enable-ssl (必要なら --enable-ssl-dir=/usr/sfw を指定) # make # make install
Apache の設定ファイルである /usr/local/apache2/conf/httpd.conf をチェックします。既に HTTP サーバーが起動している場合、それを停止するか、新しくインストールした Apache の ポートを変更する。特に Listen, User, Group, ServerName といったディレクティブはチェックしてください。
# edit /usr/local/apache2/conf/httpd.conf
| Listen | httpd (HTTPサーバー) が、監視するポートを指定します。 |
| User | httpd (HTTPサーバー)を起動するときのオーナーを指定します。 |
| Group | httpd (HTTPサーバー)を起動するときの group を指定します。#-1 に設定されていてうまく動作しないときがあるので、nobody など実際に許可を与えたいグループに設定する。 |
| ServerName | httpd (HTTPサーバー)を起動するホストとポートを指定します。DNS に登録されていない場合、IP Address を指定します。 |
自分の作った各 Web ページに METAタグで charset をきちんと書いていないと文字化することがあります。
● 起動と終了方法
# /usr/local/apache2/bin/apachectl start # /usr/local/apache2/bin/apachectl stop
● サービスの追加
httpd サーバーは、OS 起動時に起動されるように設定します。SMFを利用して登録します(従来の init.d を利用する記述でも可能)。 また、Solaris 10 には、apache2がすでに登録されていることがあります。ここでは、登録されている apache2の設定を編集して新規にインストールした apache 2.0 を利用するように変更します。
/var/svc/manifest/network/http-apache2.xml
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--
Copyright 2006 Shinta, All rights reserved.
Service manifest for Apache
-->
<service_bundle type='manifest' name='apache2:apache'>
<service
name='network/http'
type='service'
version='1'>
<instance name='apache2' enabled='false'>
<dependency name='network'
grouping='require_all'
restart_on='error'
type='service'>
<service_fmri value='svc:/milestone/network:default'/>
</dependency>
<dependency name='filesystem-local'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/system/filesystem/local:default'/>
</dependency>
<dependency name='autofs'
grouping='optional_all'
restart_on='error'
type='service'>
<service_fmri value='svc:/system/filesystem/autofs:default'/>
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/http-apache2 start'
timeout_seconds='60' />
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/http-apache2 stop'
timeout_seconds='60' />
<exec_method
type='method'
name='refresh'
exec='/lib/svc/method/http-apache2 refresh'
timeout_seconds='60' />
<property_group name='httpd' type='application'>
<stability value='Evolving' />
<propval name='ssl' type='boolean' value='false' />
</property_group>
<property_group name='startd' type='framework'>
<propval name='ignore_error' type='astring'
value='core,signal' />
</property_group>
</instance>
<stability value='Evolving' />
<template>
<common_name>
<loctext xml:lang='C'>
Apache 2 HTTP server
</loctext>
</common_name>
<documentation>
<manpage title='httpd' section='8'
manpath='/usr/local/apache2/man' />
<doc_link name='apache.org'
uri='http://httpd.apache.org' />
</documentation>
</template>
</service>
</service_bundle>
/lib/svc/method/http-apache2
#!/usr/bin/sh
#
# Copyright 2006 Shinta, All rights reserved.
# SMF Method file for apache
#
. /lib/svc/share/smf_include.sh
APACHE_HOME=/usr/local/apache2
CONF_FILE=/usr/local/apache2/conf/httpd.conf
PIDFILE=/usr/local/apache2/logs/httpd.pid
case "$1" in
start)
/bin/rm -f ${PIDFILE}
ssl=`svcprop -p httpd/ssl svc:/network/http:apache2`
if [ "$ssl" = false ]; then
cmd="start"
else
cmd="startssl"
fi
;;
refresh)
cmd="graceful"
;;
stop)
cmd="stop"
;;
*)
echo "Usage: `basename $0` { start | stop | refresh }"
exit 1
;;
esac
exec ${APACHE_HOME}/bin/apachectl $cmd 2>&1
# svccfg delete -f apache2 # svccfg import /var/svc/manifest/network/http-apache2.xml # svcadm -v enable apache2
SSL対応にしたい場合、キーの作成や設定は「Apache2 を SSL に対応」ページを参照し設定する。 Solaris で有効にするには、svccfg コマンドで apache2 の設定を調整する。http/sslを "true" に変更し終了、その後 apache2 を再起動する。
# svcprop -p httpd/ssl svc:/network/http:apache2 false # svccfg svc:> select apache2 svc:/network/http:apache2> setprop httpd/ssl = boolean: true svc:/network/http:apache2> end # svcadm refresh apache2 # svcprop -p httpd/ssl svc:/network/http:apache2 true #
※ apache 2.2 では、startsslがなくなり conf/extra/httpd-ssl.conf を設定し有効にすることで start で SSLも有効になるようになりました。
PHP5 のセットアップ
ソースを入手します。XMLやグラフなども利用できるように Libxml2 や GD パッケージも入手します。
http://www.php.net/downloads.php
http://www.boutell.com/gd/
http://xmlsoft.org/downloads.html
作業は スーパーユーザー(root) で行ってください。
Solaris 10 は、/usr/sfw/lib に FreeType, PNG, JPEGライブラリがインストールされているので新たにインストールせずにそのまま利用します。 Solaris 10 に含まれる Libxml2 はバージョンが古いため、新しいバージョンをインストールします。
# gzip -dc libxml2-2.6.26.tar.gz | tar xf - # cd libxml2-2.6.26 # ./configure # make # make MAKEFLAGS+=--silent tests # make install # cd .. # gzip -dc gd-2.0.33.tar.gz | tar xf - # cd gd-2.0.33 # ./configure ... ** Configuration summary for gd 2.0.33: Support for PNG library: yes Support for JPEG library: yes Support for Freetype 2.x library: yes Support for Fontconfig library: yes Support for Xpm library: yes Support for pthreads: yes ... # make # make install # cd ..
# gzip -dc php-5.1.6.tar.gz | tar xf - # cd php-5.1.6 # ./configure --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql \ > --with-apxs2=/usr/local/apache2/bin/apxs --enable-track-vars \ > --enable-mbstring --enable-mbregex --enable-zend-multibyte \ > --enable-gd-native-ttf --enable-gd-jis-conv \ > --with-gd=/usr/local --with-libxml-dir=/usr/local --with-freetype-dir=/usr/sfw # make # make install
● PHP の初期化ファイルの設定
# cp php.ini-dist /usr/local/lib/php.ini # edit /usr/local/lib/php.ini
include_path = ".:/usr/local/lib/php" ... output_handler = mb_output_handler ... mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = none; mbstring.func_overload = 0 mbstring.strict_encoding = Off
● Apacheの設定(PHPのインストーラーが自動で追加する LoadModule の設定を別ファイルに移動する)
# edit /usr/local/apache2/conf/httpd.conf
#LoadModule php5_module modules/libphp5.so ... # PHP settings Include conf/extra/httpd-php.conf
# edit /usr/local/apache2/conf/extra/httpd-php.conf
# LoadModule
LoadModule php5_module modules/libphp5.so # AddType AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
Apache 2 を起動したら使用可能になります。
# svcadm disable apache2 # svcadm enable apache2
● PEAR パッケージのアップデートとインストール(必要なものを...)
# pear upgrade-all # pear install XML_RPC # pear install MDB2 # pear install Net_URL # pear install Net_Socket # pear install HTTP_Request
JpGraph のセットアップ
ソースを入手します。
http://www.aditus.nu/jpgraph/
http://ossipedia.ipa.go.jp/ipafont/
JpGraph のライブラリは、どこに置いても構いませんが PHP がサーチできるパス (include_path)に置くか、インストールしたディレクトリを php.ini の include_path に追加すると良いでしょう。 ここでは、include_path = ".:/usr/local/lib/php" となっているとして、/usr/local/lib/php/JpGraph にライブラリをインストール(コピー)します。
JpGraph の設定は、キャッシュのディレクトリと TrueType フォントが含まれるディレクトリを指定します。デフォルトではIPAフォントが指定されているためダウンロードしてインストールします。JpGraph で日本語を扱うには、文字コードをUTF-8 にする必要があります。
# unzip IPAfont00203.zip # mkdir -p /usr/local/share/fonts/truetype # cp IPAfont00203/*.ttf /usr/local/share/fonts/truetype/
● JpGraph の設定設定(jpg-config.inc.php で、キャッシュのディレクトリと TrueType フォントが含まれるディレクトリと日本語のフォントを指定)
# gzip -dc jpgraph-2.1.2.tar.gz | tar xf -
# cp -rp jpgraph-2.1.2/src /usr/local/lib/php/JpGraph
# edit /usr/local/lib/php/JpGraph/jpg-config.inc.php
40行目
DEFINE("CACHE_DIR", "/tmp/jpgraph_cache/");
DEFINE("TTF_DIR", "/usr/X11R6/lib/X11/fonts/TrueType/");
DEFINE("MBTTF_DIR", "/usr/local/share/fonts/truetype/");
# mkdir /tmp/jpgraph_cache
# chmod 777 /tmp/jpgraph_cache
※ IPAフォント(Ver.3 - OpenTypeフォント形式)を利用する場合、jpgraph_ttf.inc.php を変更する必要があります。
# edit /usr/local/lib/php/JpGraph/jpgraph_ttf.inc.php
136行目
define('MINCHO_TTF_FONT','ipam.otf');
define('PMINCHO_TTF_FONT','ipamp.otf');
define('GOTHIC_TTF_FONT','ipag.otf');
define('PGOTHIC_TTF_FONT','ipagp.otf');
#
● サンプルのレーダーチャート
以下のサンプルが EUCで書かれているとして mb_convert_encoding を利用して UTF-8 にしています。サンプルが Shift-JIS で書かれていれば sjis-win を UTF-8 にするようにし、UTF-8 で書かれていれば変換の必要はありません。
<?php
require_once("JpGraph/jpgraph.php");
require_once("JpGraph/jpgraph_radar.php");
// データ
$aryData = array(7, 10, 6, 8, 5);
// 軸タイトル
$aryTitle = array(
mb_convert_encoding("走り", "UTF-8", "eucJP-win"),
mb_convert_encoding("乗り心地", "UTF-8", "eucJP-win"),
mb_convert_encoding("燃費", "UTF-8", "eucJP-win"),
mb_convert_encoding("操作性", "UTF-8", "eucJP-win"),
mb_convert_encoding("デザイン", "UTF-8", "eucJP-win")
);
// レーダーグラフの初期化
$graph = new RadarGraph(350, 250, "auto");
// 背景の設定
$graph->SetColor("white");
$graph->SetFrame(false);
// グラフの描画位置
$graph->SetCenter(0.5, 0.55);
// 軸の設定
$graph->axis->SetFont(FF_GOTHIC, FS_NORMAL);
$graph->axis->title->SetFont(FF_GOTHIC, FS_NORMAL);
$graph->axis->SetColor("#207870");
// グリッドの設定
$graph->grid->SetLineStyle("dotted");
$graph->grid->SetColor("gray");
$graph->grid->Show();
$graph->HideTickMarks();
// タイトルの設定
$graph->title->Set(mb_convert_encoding("ニコニコカーⅡ", "UTF-8", "eucJP-win"));
$graph->title->SetFont(FF_GOTHIC, FS_NORMAL, 13);
$graph->title->SetColor("#406898");
$graph->SetTitles($aryTitle);
// プロットデータの作成
$plot = new RadarPlot($aryData);
$plot->SetColor("#ff5588", "#ffeeee");
//$plot->SetFill(false);
$plot->SetLineWeight(2);
// プロットデータの追加
$graph->Add($plot);
// グラフの描画
$graph->Stroke();
?>






