toritonのインストールログ(長いです)。

0.前提

  • debian/etch(AMD64)を使用中。
  • gccとg++はapt-getで最新版をインストールしておいた。
  • mysqlは5.0.37を入れる。
aptitude show gcc   
   パッケージ: gcc
   状態: インストール済み
   自動的にインストールされた: no
   バージョン: 4:4.1.1-15
   優先度: 任意
   セクション: devel
   メンテナ: Debian GCC Maintainers <debian-gcc@lists.debian.org>
   展開サイズ: 65.5k
   依存: cpp (>= 4:4.1.1-15), gcc-4.1 (>= 4.1.1-2)
   推奨: libc6-dev | libc-dev
   提案: make, manpages-dev, autoconf, automake1.9, libtool, flex, bison, gdb, gcc-doc
   競合: gcc-doc (< 1:2.95.3)
   提供: c-compiler
   説明: The GNU C compiler
    This is the GNU C compiler, a fairly portable optimizing compiler for C.

     This is a dependency package providing the default GNU C compiler.

     タグ: devel::compiler, devel::lang:c, implemented-in::c, interface::commandline, role::metapackage,
           special::meta, works-with::software:source
aptitude show g++  
パッケージ: g++
状態: インストール済み
自動的にインストールされた: no
バージョン: 4:4.1.1-15
優先度: 任意
セクション: devel
メンテナ: Debian GCC Maintainers <debian-gcc@lists.debian.org>
展開サイズ: 41.0k
依存: cpp (>= 4:4.1.1-15), gcc (>= 4:4.1.1-15), g++-4.1 (>= 4.1.1-2), gcc-4.1 (>= 4.1.1-2)
提供: c++-compiler
説明: The GNU C++ compiler
 This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.

 This is a dependency package providing the default GNU C++ compiler.

タグ: devel::compiler, devel::lang:c++, implemented-in::c, interface::commandline,
      role::metapackage, special::meta, works-with::software:source

1.mecabのインストール

(参考:http://mecab.sourceforge.net/#download

1.1 本体のインストール

UTF8モード専用のコンフィグオプソンをつけてインストール

wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.95.tar.gz
%tar zxfv mecab-0.95.tar.gz    
%cd mecab-0.95/  
%./configure --enable-utf8-only     
%make
%sudo make install
%which mecab
/usr/local/bin/mecab

インストール成功。ただし、まだ辞書をインストールしてないので起動はできない。

%mecab
tagger.cpp(138) [load_dictionary_resource(param)] param.cpp(71) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc

引き続き、辞書のインストールを実行

1.2 辞書のインストール

こちらも、UTF8オンリーで実行

% http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20060707.tar.gz
% tar xvzf mecab-ipadic-2.7.0-20060707.tar.gz
% cd mecab-ipadic-2.7.0-20060707
% ./configure --with-charset=utf8
% make
% sudo make install
% mecab (コンソール入力モードになるので、日本語ですもももももも・・・と入れてENTER)
すもももももももものうち
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
(Ctrl+C)でシェルに復帰

インストール完了。
mecabの文字コートが化ける場合は、コンソールの文字コードdebian文字コードを確認。

2.sennaのインストール

参考:http://qwik.jp/senna/install.html
参考ページに乗ってるとおりにしたらうまくいきますた。

% wget http://dev.razil.jp/archive/senna/senna-latest-svn.tar.gz
% tar xvfz senna-latest-svn.tar.gz
% cd senna
% ./configure --prefix=/usr
% make
% sudo make install
% sudo mkdir /var/senna
% sudo vi /var/senna/senna.conf
/var/senna/senna.conf
DEFAULT_ENCODING utf8

(いるかどうかわからないけど、一応改行をいいれておいた)

3.mysqlのインストール

インストールについては、以下を参照
http://qwik.jp/senna/install.html

% wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.37.tar.gz/from/http://mirror.mysql-partners-jp.biz/
% wget http://osdn.dl.sourceforge.jp/tritonn/24513/mysql-5.0.37.senna-1.0.2.diff  
% tar xvzf mysql-5.0.37.tar.gz       
% cd mysql-5.0.37

tritonnパッチをmysqlに当てる

% patch -p1 < ../mysql-5.0.37.senna-1.0.2.diff  
% libtoolize -c -f                                              
Using `AC_PROG_RANLIB' is rendered obsolete by `AC_PROG_LIBTOOL'
% aclocal-1.9                                                                              
% autoheader                                                                              
% automake-1.9 -c -a -i               
% autoconf

インストールする上で、autoconfやautomakeなどがない場合は適宜apt-get installする。
(このlibtoolize〜autoconfの手順を忘れてて小一時間悩んだのはココだけの秘密
 →忘れると、多分sennaが入らない状態のmysqlが正常にインストールされて、後ででてくる動作確認で
 日本語の文字列検索ができなかった。)
.configureオプションについては、以下を参照
http://qwik.jp/senna/mysql_configure.html

 % touch sql/sql_yacc.yy
 % CFLAGS="-O3 -mtune=nocona -I/usr/local/include" \
 CXX=gcc CXXFLAGS="-O3 -mtune=nocona \
 -felide-constructors -fno-exceptions -fno-rtti -I/usr/local/include" \
 LDFLAGS="-L/usr/local/lib" \
 ./configure \
 --with-senna \
 --prefix=/usr \
 --enable-assembler \
 --with-charset=utf8 --with-extra-charsets=complex \
 --enable-thread-safe-client \
 --with-big-tables \
 --with-named-curses-libs=/lib/libncurses.so.5 \
 --localstatedir=/var/lib/mysql \
 --with-readline \
 --with-unix-socket-path=/var/run/mysqld/mysqld.sock
% make
% sudo make install

設定ファイルのコピーとDBの初期化(すでにデータがある場合はコレやっちゃダメ)

% sudo cp /usr/share/mysql/my-large.cnf /etc/my.cnf  
% cd /usr/bin
% sudo mysql_install_db --user=mysql 

自動起動の設定

% sudo cp mysql.server /etc/init.d/mysql      
% sudo update-rc.d mysql defaults 99 01            
 Adding system startup for /etc/init.d/mysql ...
   /etc/rc0.d/K01mysql -> ../init.d/mysql
   /etc/rc1.d/K01mysql -> ../init.d/mysql
   /etc/rc6.d/K01mysql -> ../init.d/mysql
   /etc/rc2.d/S99mysql -> ../init.d/mysql
   /etc/rc3.d/S99mysql -> ../init.d/mysql
   /etc/rc4.d/S99mysql -> ../init.d/mysql
   /etc/rc5.d/S99mysql -> ../init.d/mysql

mysqlの起動

sudo /etc/init.d/mysql start

バージョンの確認

% mysqladmin version
mysqladmin  Ver 8.41 Distrib 5.0.37, for unknown-linux-gnu on x86_64
Copyright (C) 2000-2006 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.37-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 24 sec

Threads: 1  Questions: 1  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.042

動作確認

% mysql -u root                                                                             
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.37-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> create database senna_test;
Query OK, 1 row affected (0.00 sec)

mysql> use senna_test;
Database changed
mysql> CREATE TABLE table01 (
    ->     id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY(id),
    ->     title VARCHAR(255),
    ->     body TEXT,
    ->     FULLTEXT(body)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> use senna_test;
Database changed
mysql> INSERT INTO table01 VALUES
    -> (NULL, "衆院選挙について", "皆さんはどの党に投票するのでしょうか"),
    -> (NULL, "果物", "apple リンゴ、orange オレンジ"),
    -> (NULL, "歌", "わくわくさせてよ、ついてるねのってるね"),
    -> (NULL, "MySQL", "MySQLリファレンスマニュアルを全部読め"),
    -> (NULL, "ロボットのgood designとは", "先週末に開催された GoodDesignPresentation 2005");
Query OK, 5 rows affected (0.53 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> use senna_test;
Database changed
mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('投票');
+----+--------------------------+--------------------------------------------------------+
| id | title                    | body                                                   |
+----+--------------------------+--------------------------------------------------------+
|  1 | 衆院選挙について         | 皆さんはどの党に投票するのでしょうか                   |
+----+--------------------------+--------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('投票する');
+----+--------------------------+--------------------------------------------------------+
| id | title                    | body                                                   |
+----+--------------------------+--------------------------------------------------------+
|  1 | 衆院選挙について         | 皆さんはどの党に投票するのでしょうか                   |
+----+--------------------------+--------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('apple');
+----+--------+---------------------------------------+
| id | title  | body                                  |
+----+--------+---------------------------------------+
|  2 | 果物   | apple リンゴ、orange オレンジ         |
+----+--------+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('リンゴ');
+----+--------+---------------------------------------+
| id | title  | body                                  |
+----+--------+---------------------------------------+
|  2 | 果物   | apple リンゴ、orange オレンジ         |
+----+--------+---------------------------------------+
1 row in set (0.01 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('わくわく');
+----+-------+-----------------------------------------------------------+
| id | title | body                                                      |
+----+-------+-----------------------------------------------------------+
|  3 | 歌    | わくわくさせてよ、ついてるねのってるね                    |
+----+-------+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('gooddesign');
+----+----------------------------------+---------------------------------------------------------+
| id | title                            | body                                                    |
+----+----------------------------------+---------------------------------------------------------+
|  5 | ロボットのgood designとは        | 先週末に開催された GoodDesignPresentation 2005          |
+----+----------------------------------+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM table01 WHERE MATCH(body) AGAINST('読め');
+----+-------+-------------------------------------------------------+
| id | title | body                                                  |
+----+-------+-------------------------------------------------------+
|  4 | MySQL | MySQLリファレンスマニュアルを全部読め                 |
+----+-------+-------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show index from table01;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| table01 |          0 | PRIMARY  |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| table01 |          1 | body     |            1 | body        | NULL      |        NULL |     NULL | NULL   | YES  | FULLTEXT   |         |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)

mysql> show table status;
+---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| Name    | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation       | Checksum | Create_options | Comment |
+---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| table01 | MyISAM |      10 | Dynamic    |    5 |             78 |         392 | 281474976710655 |         2048 |         0 |              6 | 2007-03-18 14:55:00 | 2007-03-18 14:55:33 | NULL       | utf8_general_ci |     NULL |                |         |
+---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
1 row in set (0.00 sec)

mysql>

検索は成功。ただし、Index_typeがFULLTEXTとだけひょうじされてて、SENNAの表示がないんだけど、いいのかな?

rakeを実行しようとしたときにuninitialized constant ActiveRecordエラーが出る件について

rakeのタスクの最初には、:environmentを実行する必要があるみたい
たとえば、かんたんRuby on RailsでWebアプリケーション開発

かんたんRuby on RailsでWebアプリケーション開発

かんたんRuby on RailsでWebアプリケーション開発

の82Pのyellowpageを作るdb_setup.rakeでは、

task :db_connect do

となっているところを、

task :db_connect => [ :environment ] do

すればうまくいきました。