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'
ソースを入手します。
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=キャラクターセット名[client] default-character-set=キャラクターセット名[mysql] default-character-set=キャラクターセット名[mysqldump] default-character-set=キャラクターセット名 [mysqld] default-character-set=キャラクターセット名skip-character-set-client-handshake
調整するとよいパラメータ:
パラメータ 意味 増やすことで得る効果 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;
ソースを入手します。
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も有効になるようになりました。
ソースを入手します。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
# 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 = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 mbstring.strict_encoding = Off
# 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 upgrade-all
# pear install XML_RPC
# pear install MDB2
# pear install Net_URL
# pear install Net_Socket
# pear install HTTP_Request
ソースを入手します。
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/
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();
?>
