サーバアプリケーションとライブラリをインストールする。
それぞれのバージョンを変更したのでページごと更新してみる。
BAMPのインストール順序
cmakeが必要となったので,まずcmakeをインストールする。
cmakeは,portsからインストールする。
# cd /usr/ports/devel/cmake # make # make install
mysql本体のインストール
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.15 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci $ make VERBOSE=1 # make install
グループ追加 グループ番号は86とする。
# pw goupadd -n mysql -g 86
ユーザー追加 ユーザーID = 86
# pw useradd mysql -g mysql -u 86 -s /usr/sbin/nologin -d /nonexistent
# ln -s /usr/local/mysql-5.6.15 /usr/local/mysql # cd /usr/local/mysql # chown -R mysql . # chgrp -R mysql . # ./scripts/mysql_install_db --user=mysql
がしかし,ここでエラーとなる。
[ERROR] COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
オプションを追加すれば良いらしい
# ./scripts/mysql_install_db --user=mysql --collation-server=utf8_general_ci
起動するときも必要らしい。
my.cnfに以下を追加する。
collation-server = utf8_general_ci
my.cnfの設定 文字コードをutf8にするためmy.cnfに設定を追加する。 設定方法は,下方を参照。
起動
# bin/mysqld_safe --user=mysql &
自動起動の設定
/etc/rc.confに記述を追加する。
mysql_enable="YES"
/usr/local/etc/rc.dに起動スクリプトを配置する
$ cat /usr/local/etc/rc.d/mysql-server.sh #!/bin/sh # # $FreeBSD: ports/databases/mysql51-server/files/mysql-server.sh.in,v 1.6 2008/07/30 06:11:16 ale Exp $ #
# PROVIDE: mysql # REQUIRE: LOGIN # KEYWORD: shutdown # # Add the following line to /etc/rc.conf to enable mysql: # mysql_enable (bool): Set to "NO" by default. # Set it to "YES" to enable MySQL. # mysql_limits (bool): Set to "NO" by default. # Set it to yes to run `limits -e -U mysql` # just before mysql starts. # mysql_dbdir (str): Default to "/var/db/mysql" # Base database directory. # mysql_args (str): Custom additional arguments to be passed # to mysqld_safe (default empty). # . /etc/rc.subr name="mysql" rcvar=`set_rcvar` load_rc_config $name : ${mysql_enable="NO"} : ${mysql_limits="NO"} #: ${mysql_dbdir="/usr/local/mysql/var/mysql"} : ${mysql_dbdir="/usr/local/mysql/data"} : ${mysql_args=""} mysql_user="mysql" mysql_limits_args="-e -U ${mysql_user}" pidfile="${mysql_dbdir}/`/bin/hostname`.pid" command="/usr/local/mysql/bin/mysqld_safe" #command_args="--defaults-extra-file=${mysql_dbdir}/my.cnf --user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args} > /dev/null 2>&1 &" command_args="--defaults-extra-file=/usr/local/mysql/my.cnf -- user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args} > /dev/null 2>&1 &" procname="/usr/local/mysql/libexec/mysqld" start_precmd="${name}_prestart" start_postcmd="${name}_poststart" mysql_install_db="/usr/local/mysql/bin/mysql_install_db" mysql_install_db_args="--ldata=${mysql_dbdir}" mysql_create_auth_tables() { eval $mysql_install_db $mysql_install_db_args >/dev/null 2>/dev/null [ $? -eq 0 ] && chown -R ${mysql_user}:${mysql_user} ${mysql_dbdir} } mysql_prestart() { if [ ! -d "${mysql_dbdir}/mysql/." ]; then mysql_create_auth_tables || return 1 fi if checkyesno mysql_limits; then eval `/usr/bin/limits ${mysql_limits_args}` 2>/dev/null else return 0 fi } mysql_poststart() { local timeout=15 while [ ! -f "${pidfile}" -a ${timeout} -gt 0 ]; do timeout=$(( timeout - 1 )) sleep 1 done return 0 } run_rc_command "$1" $
apache web serverの2.4は,APRと分離されたので,先にapr, apr-utilをインストールする必要がある。
apr(Apache Portable Runtime)は Apache HTTP Server のサポートライブラリ。
OSとソフトウェアの間でOSなどの環境の違いを吸収するAPI。
apr-1.5.0
$ tar xvjf apr-1.5.0.tar.bz2 $ cd apr-1.5.0 $ ./configure $ make # make install
apr-util-1.5.3
$ tar xvjf apr-util-1.5.3.tar.bz2 $ cd apr-util-1.5.3 $ ./configure --with-apr=/usr/local/apr --with-mysql=/usr/local/mysql $ make # make install
pcre-8.34 : ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.bz2
$ tar xvjf pcre-8.34.tar.bz2 $ ./configure $ make # make install
または,
devel/pcreでインストール
# cd /usr/ports/devel/pcre # make # make install # make clean
httpd-2.4.7
$ tar xvjf httpd-2.4.7.tar.bz2 $ ./configure --enable-so $ tar xvjf httpd-2.2.4.tar.bz2 $ make # make install
テストしてみる。
# /usr/local/apache2/bin/apachectl start
ブラウザからIPアドレス直打ちで "It works!"
自動起動の設定
/etc/rc.confに以下を記述
apache2_enable="YES" apache2_http_accept_enable="YES" <-- see http://nhh.mo-blog.jp/ttt/2006/10/freebsd_aparch2_b1ae.html
/usr/local/etc/rc.d/にapache.shを配置
Apacheのログを放っておくとどんどん膨らんでしまうので、syslogによりローテートする
# vi /etc/newsyslog.conf | 追加する。 /usr/local/apache2/logs/access_log 600 7 * @T00 J /usr/local/apache2/logs/httpd.pid 30 /usr/local/apache2/logs/error_log 600 7 * @T00 J /usr/local/apache2/logs/httpd.pid 30 |
#!/bin/sh # . /etc/rc.subr name="apachectl" rcvar=`set_rcvar` command="/usr/local/apache2/bin/${name}" load_rc_config $name apachectl_enable=${apachectl_enable:-"NO"} start_cmd="apachectl_start" apachectl_start() { echo -n 'Starting Apache:' ${command} start & } run_rc_command $1
簡単なスクリプトを作って実行フラグを付けて
/usr/local/etc/rc.d/apachectl.sh
におく。
/etc/rc.confに
apachectl_enable="YES"
を追加すると自動起動する
PHPをインストールする前にlibxml2をインストールする
libxml2はportsを使う
# cd /usr/ports/textproc/libxml2 # make # make install # make clean
PHPのインストール
$ tar xvjf php5.5.7.tar.bz2 $ cd php-5.5.7 $ ./configure \ --with-apxs2=/usr/local/apache2/bin/apxs \ --enable-mbstring \ --with-zlib-dir=/usr \ --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock $ make $ make test $ su # make install
変更するファイルは、/usr/local/apache2/conf/httpd.conf
LoadModule php5_module modules/libphp5.so ←はphpでインストールされるはず AddType application/x-httpd-php .php
FreeBSDには最初からSendmailが入っている。Linuxディストリビューションでは、デフォルトでPostfixだったりするらしいけど...
インストール方法はまたあとで。
aliasesはaliases.dbを作るんだけど、newaliasesで作れるとあるが、作れなかった。
postfixの場合、
# postalias /PATH/TO/aliases
が正解らしい。
普通に使うには,BAMPだけで事足りるんだけど,今回は,RedmineとかMercurialとかSubversionとかを使いたかった。基本的に引っ越しだったので,以前の環境をコピーするのではなく,新たに設置してデータだけ移行したかったんだ。
さてさて,今回の移行ではまった箇所
1. Redmineのデータベース
データベースをSQLite3からMySQLへ変更したんだけど,移行がうまくできなくて四苦八苦した。
色々調べるとyaml_dbで移行するのが王道っぽいが,実行してみるとSQLite3側が,日本語の箇所をASCII-8bitで返してしまい,MySQL側のUTF8にならない。
日本語にならない箇所は,force_encodingでUTF8に強制的にエンコードしてしまえば,解決できそうだったけど,移行元はRuby1.8だったので,force_encodingが使えないという。
yaml_dbは,あきらめてSQLiteのデータベースをdumpしてコンバートしました。
コンバートにはsqlite3-to-mysql.pyを使い,コンバート自体はできたようだ。
できたSQLをmysqlに流し込むと,日本語が怪しい文字になっている。
これは,MySQL側の文字が一部latinになっていたからだった。
MySQLの設定をみるには,
$ mysql -uroot -p Password: mysql> show valiable like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
my.cnfを編集する
skip-character-set-client-handshake collation-server = utf8_general_ci character-set-server = utf8 init-connect = SET NAMES utf8 [client] default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8
とすると,
mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
となる。
再度,SQLite側からコンバートしたデータをMySQLに流し込み無事データの移行が完了。
(したはず)
2. Apache httpdでCGIが動作しない
Mercurialで管理しているプロジェクト一覧をみるためにweb経由で参照できるようにしている。(ちなみのこのページを動作させているHOSTぢゃないよ)
Web経由で参照するためには,hgweb.cgiというcgiを動作させるんだけど,Apache2.4では動作しないんだなぁ。
こちらも色々としらべたら,Apache2.4系では,
LoadModule cgid_module modules/mod_cgid.so
がコメントアウトされている。Apache2.2系では動作するようになっていたので,まるで気づかなかったよ。
というわけで,コメントを外してApacheを起動すればcgiが動作した。
まっ,知っている人は知っているのでお恥ずかしい限りではございますが。