at_yasu's blog

ロード的なことを

mysql install on chroot.

メモ書き、清書は後。一応でけたのでメモ書き。

目的は、mysqlをchrootで動かす。mysql 5.0.51を使用。OSはFreeBSD 6.2。参考=ネットワークセキュリティHack:

ネットワークセキュリティHacks―プロが使うテクニック&ツール100選

ネットワークセキュリティHacks―プロが使うテクニック&ツール100選

  • 作者: アンドリューロックハート,Andrew Lockhart,渡辺勝弘,黒川原佳,松田綾爾,鶴岡信彦,新井貴之,鈴木和也
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2005/01
  • メディア: 単行本
  • 購入: 1人 クリック: 9回
  • この商品を含むブログ (39件) を見る


P.S
ネットワークセキュリティHackの2版が出てたのね・・・orz


mysql をダウンロード。とインストール。

インストール先は、/usr/local/mysql/mysqlになり、chrootでは下記の様なディレクトリ構成にするとする。なお、tmpはmdデバイスを使用してます。

total 13
drwxr-xr-x   7 mysql  mysql   512 Jan 13 16:30 ./
drwxr-xr-x  40 root   wheel  1024 Jan 13 04:08 ../
dr-xr-xr-x   4 root   wheel   512 Jan 13 15:56 dev/
drwxr-xr-x   2 mysql  mysql   512 Jan 13 15:57 etc/
drwxr-xr-x  11 mysql  mysql   512 Jan 13 17:07 mysql/
drwxrwxrwx   3 mysql  mysql   512 Jan 13 17:55 tmp/
drwxrwxrwx   5 mysql  mysql  1024 Jan 13 17:55 var/


ダウンロードしたファイルの展開先は、/usr/local/src/mysql-5.0.51/

システム側の起動スクリプトは、/usr/local/etc/rc.d/120.mysql.shとしてます。


先ず、環境整備。chrootの状態で動くようにする。

# インストール先のディレクトリを作成
mkdir /usr/local/mysql
cd /
ln -s /usr/local/mysql mysql

cd /usr/local/mysql
mkdir {tmp,var,dev,etc,tmp}

chown -R mysql:mysql . {var,etc}

# MDデバイスの読み込み
mdconfig -a -t malloc -s 32m -u 0
newfs -U /dev/md0
mount /dev/md0 tmp

# localtimeの設定
cp /etc/localatime etc/localtime

# devfsの作成
mount_devfs devfs dev
devfs -m dev rule apply hide
devfs -m dev rule apply path null unhide
devfs -m dev rule apply path random unhide  

# コンパイルとDBのインストール
cd /usr/local/src/mysql-5.0.51/
./configure --prefix=/mysql --with-mysqld-ldflags=-all-static && make && make install DESTDIR=/usr/local/mysql
./scripts/mysql_install_db

# 設定ファイルの作成
sed -e 's/\/tmp/\/mysql\/tmp/g' my-medium.cnf > /mysql/etc/my.cnf


起動スクリプトの改変(mysql.server)

46,47c46,48
< basedir=
< datadir=
---
> chrootdir='/usr/local/mysql2'
> basedir=""
> datadir=""
267a269,279
>     # Mount a devfs in the chroot directory if needed
>     #
>     if [ ! -c ${chrootdir}/dev/random -o \
>       ! -c ${chrootdir}/dev/null ]; then
>       umount ${chrootdir}/dev 2>/dev/null
>       mount_devfs devfs ${chrootdir}/dev
>     fi
>     devfs -m ${chrootdir}/dev rule apply hide
>     devfs -m ${chrootdir}/dev rule apply path null unhide
>     devfs -m ${chrootdir}/dev rule apply path random unhide
> 
304c316
<       $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
---
>       $bindir/mysqld_safe --default-character-set=utf8 --default-collation=utf8_bin --basedir=$basedir --datadir=$datadir --pid-file=$server_pid_file --log --ledir=$basedir/libexec $other_args >> /var/log/mysql_init2.log 2>&1 & 


起動スクリプトの改変その2(mysqld_safe)

386c386
<     $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file  >> $err_log 2>&1
---
>     $NOHUP_NICENESS /usr/sbin/chroot -u mysql -g mysql /usr/local/mysql2 $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file >> $err_log 2>&1
388c388
<     eval "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file  $args >> $err_log 2>&1"
---
>     eval "$NOHUP_NICENESS /usr/sbin/chroot -u mysql -g mysql /usr/local/mysql2 $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file >> $err_log 2>&1"


後は、mysqlのrootのパスワードを設定して、起動するだけです、お疲れです^^