FreeBSD Servers III

サーバアプリケーションとライブラリをインストールする。
それぞれのバージョンを変更したのでページごと更新してみる。

BAMPのインストール順序

  1. BSD
  2. MySQL mysql-5.6.15
  3. Apach httpd-2.4.7
  4. PHP php-

サーバアプリケーションとライブラリ

MySQL

MySQL 5.6

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

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 Log

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
 |

Apacheの自動起動

#!/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

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

phpを使うためにapacheの設定を変更する。

変更するファイルは、/usr/local/apache2/conf/httpd.conf

LoadModule php5_module     modules/libphp5.so  ←はphpでインストールされるはず
AddType application/x-httpd-php  .php

Postfix

FreeBSDには最初からSendmailが入っている。Linuxディストリビューションでは、デフォルトでPostfixだったりするらしいけど...

インストール方法はまたあとで。
aliasesはaliases.dbを作るんだけど、newaliasesで作れるとあるが、作れなかった。
postfixの場合、

# postalias /PATH/TO/aliases

が正解らしい。

参考サイト

MEMO

はまったところ

普通に使うには,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が動作した。

まっ,知っている人は知っているのでお恥ずかしい限りではございますが。


Last-modified: 2022-05-05 (木) 22:27:10