独自サーバによる構築
自身で管理するサーバに導入して運用する際の構築方法です。
下記は、手動によるインストールについて記述します。
また、Chef-soloによる自動インストールも可能です(「Chef-soloによる環境構築」を参照)。
下記では、Debian にインストールする際の設定方法について詳述しています。
他のディストリビューションでも、大きく違いは無いはずですが、適宜、調整を求められます。また、Debianでも、バージョンが上がるにつれて微妙な変化が生じており、下記の通りインストールしようとしてもうまくいかない箇所がある可能性があります。
- Ubuntuでの動作も確認していますが、最新版Ubuntuでは、環境の違いがかなり大きく、インストールに手間取るため、あまりお勧めできません。とりあえずのメモはこちら (2013/3/7追記)
- 中級者向けに、より入力手順を簡単に示した版はこちら
* 必要パッケージのインストール
apt-get install mysql-server (パスワードを聞かれるので入力)
apt-get install php5-mysql
PHPがインストールされていることを確認して下さい。(5.3以上推奨)
$ php -v
インストールされていない場合は以下のコマンドでインストールしてください。
apt-get install php5
パッケージを解凍し、INSTALLファイルの指示にしたがってディレクトリ等を作成
apt-get install rubygems (rubygems, ruby1.8 等がインストールされる)
apt-get install autoconf
apt-get install libxml2-dev
apt-get install netpbm
apt-get install gocr
apt-get install ttf-vlgothic
apt-get install ttf-kochi-gothic
apt-get install imagemagick
apt-get install wkhtmltopdf
wkhtmltopdf は、xlsファイルからのpdf生成にも必要なため、必須アプリです (2012/11/19 追記)
wkhtmltopdf は、レポート送信だけでなく、エコーファイルの返信のためにも必要。(2012/06/09 追記)
apt-get で wkhtmltopdf をインストールすると、QTパッチのあたっていない wkhtmltopdf となり、Xの環境を必要とするようです。
それを避けるには、 http://www.ruby-forum.com/topic/218049 にあるように、 xvfb を用いる解決策が可能かも知れません。
あるいは、 http://d.hatena.ne.jp/nilfigo/20110419/1303230742 のようにコンパイルからやり直す手もありそうです。
これらの設定は、レポート配信のために用いますので、レポート機能が不要な場合には,スキップしても差し支えない場合もあるかと思います。
そこで、下記よりダウンロードしたものを用い、インストールを御願いします (2012/11/19 追記)
アーキテクチャに応じて、下記のように、bz2ファイルをダウンロードし、解凍 (2013/3/3 追記)
* i386
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
bzip2 -d wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
tar xvf wkhtmltopdf-0.11.0_rc1-static-i386.tar
* amd64
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
bzip2 -d wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
tar xvf wkhtmltopdf-0.11.0_rc1-static-amd64.tar
なお、本システムにおける wkhtmltopdf は、バージョンが一致していないと正しく動作しない可能性があります。
下記コマンドを参考に、バージョンに注意を払って下さい。(2012/9/9 追記)
$ wkhtmltopdf --version
Name:
wkhtmltopdf 0.11.0 rc1
apt-get install xvfb
apt-get install libcv-dev
apt-get install libhighgui-dev
apt-get install libcvaux-dev
apt-get install libopencv-dev (2013/4/10 追記)
apt-get install libmysqlclient-dev (← 依存関係により、既にインストールされている場合もあり)
apt-get install libmysqlclient15-dev (← 依存関係により、既にlibmysqlclient*インストールされている場合もあり)
(↑15より新しくても良いかも: 2013/3/3 追記)
apt-get install python2.6
ubuntu の場合 apt-get install python
apt-get install libglib2.0-0
apt-get install libsoup2.4-dev
apt-get install libwebkit-1.0-2
ubuntu の場合 apt-get install libwebkitgtk-1.0-0
apt-get install openoffice.org-headless
ubuntu の場合 apt-get install libreoffice
apt-get install unoconv
apt-get install fetchmail
apt-get install sendemail (← send-e-mail、であることに注意)
その他、下記についても、正しくインストールされていることを確認して下さい。 (2012/9/9 追記)
$ pdftk --version
pdftk 1.41 a Handy Tool for Manipulating PDF Documents
$ convert --version
Version: ImageMagick 6.5.7-8 2012-08-17 Q16 http://www.imagemagick.org
$ zip --help
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
** munpack インストール
MIMEメール処理のために munpack が必要。Ubuntu? Cent OS ではデフォルトで入っているようだが、debian では入っていない様子のため、下記で確認すること。
dpkg -l | grep mpack
もし、出力が無ければ、apt-getにてインストール。munpack は、MIMEエンコーディングのための mpack と出コーディングのための munpack がセットになっており、mpack をインストールすると両方がインストールすることになる。
apt-get install mpack
** Cluscore インストール
Cluscoreは、sheetreader が利用しているパッケージで、コンパイルに必須です。
apt-get install subversion (← Subversion が install されていなければ)
svn checkout http://cluscore.googlecode.com/svn/trunk/ cluscore
cd cluscore
./configure
make
make install
* FaxOCRシステムのダウンロード、コンパイルと、インストール
** ホームディレクトリのチェックアウトとコンパイル (2012/6/10 追記)
システム上に、faxocr を作成(adduser) して下さい。そのうえで、下記、git clone を実行して下さい。
git clone https://code.google.com/p/faxocr/
これにより、bin、etc、src、rails が自動的に作成されます。
これらのディレクトリを、~faxocr に移動して下さい。また、INSTALLファイルを参考に、ディレクトリに書き込みパーミッションを設定して下さい。 (2012/9/14 修正)
ホームディレクトリ用の パッケージ をダウンロード、解凍し、含まれるディレクトリを /home/faxocr に移動して下さい。
これで、~faxocr に、bin/、etc/、src/、が出来るはずです。
*** wkhtmltopdfの環境設定
・フォントの設定
pdf 生成に利用している wkhtmltopdf が、正しくフォントディレクトリを認識する必要があります。.fonts ディレクトリを作成して、www 権限で実行する際のアカウント(www-data?) のホームディレクトリに移動して下さい。
・.fonts ディレクトリの作成
cd
mkdir .fonts
cp etc/OCRB.ttf .fonts/
fc-cache -v -f
(または www 権限で参照できるように /var/www/.fonts or /usr/share/fonts/truetype にコピーする)
・フォンと埋め込みの確認方法
テスト用の PDF を生成してOCRBフォントが埋め込まれていることを確認する。
cd ~/faxocr/bin
./fonttest.sh
生成された fonttest.pdf を開いて、「ファイル」-「プロパティ」-「フォント」で、OCRBフォントが埋め込み指定されていることを確認する。
*** Ruby on Rails の環境設定
/var/lib/gems/1.8/bin/ を、bash、cshなど、利用しているシェルの PATH に追加
ex) bashの場合 (~/.bashrcに、下記を追加)
PATH="$PATH":/var/lib/gems/1.8/bin/
ex) cshの場合 (~/.cshrcファイルに、下記を追加)
setenv PATH ~/bin:/var/lib/gems/1.8/bin/:$PATH
個人的には、下記も実行しています。
ln -s /usr/bin/ruby1.8 /usr/bin/ruby
** gem パッケージのインストール
rake のバージョンダウン
gem install rubygems-update -v=1.3.7
update_rubygems
gem -v
1.3.7 (← バージョン情報出力)
rake 1.3.7 にバージョンダウンするのは rails 2.3.5 との組み合わせで以下のエラーが発生するため
$ rake db:migrate RAILS_ENV=development
rake aborted!
uninitialized constant ActiveSupport::Dependencies::Mutex
必要なパッケージのインストール
cd ~faxocr/rails (2013/3/8 追記)
gem install bundler
bundle install
** srhelper のコンパイル
~faxocr/src/srhelper に移動し、make、make install して下さい。
これで、srhelper が、~faxocr/bin に入ります。
cd ~faxocr/src/srhelper
make
make install
** kocr のチェックアウトとコンパイル (2012/9/14 追記)
~faxocr/src に移動し、kocr をチェックアウトし、コンパイルします。
git clone https://code.google.com/p/kocr
そのうえで、make library して下さい。libkocr.a が作成されます。
cd ~faxocr/src/kocr/src
make
make library
sudo make install (2013/8/3追記)
(注意) ubuntuでコンパイルを試みると、makefile中のpkg-config --libs opencv
が正常動作でず、opencvのライブラリを見つけられずにコンパイルが失敗することがあるようです。
その場合には、-L/usr/lib -lopencv_core -lopencv_highgui -lopencv_imgproc等、コンパイル
オプションを手動で挿入してください。(2013/3/7)
make install を追記。sheetreader のconfigureが探しにいけるようにするため。(2013/8/3)
** sheetreader のチェックアウトとコンパイル
~faxocr/src/ にて、sheetreader をチェックアウトし、コンパイルします。
git clone https://code.google.com/p/sheet-reader
cvSaveImage の API が変更されたため、cco_srAnalyzer.h、cco_srOcrNhocr.c cco_srOcrGocr.c に下記マクロを追加。 API の変更については、下記を参照のこと。
http://d.hatena.ne.jp/Schima/20091106/1257516867
#define cvSaveImage(x, y) cvSaveImage(x, y, 0)
また、configure の LINKLIBS から、-lssl を削除して下さい。
(注意1) git cloneして得られる最新のコードには、上記の修正が反映されています。
そのうえで、sheetreader を、configure し、make します。
cd sheetreader
./configure CFLAGS=-O3
make
(注意) ubuntuでコンパイルを試みると、makefile中のpkg-config --libs opencv
が正常動作でず、opencvのライブラリを見つけられずにコンパイルが失敗することがあるようです。
その場合には、-L/usr/lib -lopencv_core -lopencv_highgui -lopencv_imgproc等、コンパイルオプションを手動で挿入してください。(2013/3/7) (2013/7/5 解決しました)
(注意) ubuntuでコンパイルしたバイナリでは、実行時に、opencvより
error: Failed to initialize libdc1394
というエラーが出てしまうことがあるようです。このエラーを防ぐためには、下記を参考に、
-DWITH_1394=OFF
というコンパイルオプションをつけると良いようです...が、どうもダメですね。KOCR側にも
同じ設定をしてもうまくいきません。
http://worktoolsmith.com/2012/02/ubuntu%E3%81%ABopencv-2-3%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/
configure に CFLAGSを追記。CFLAGSのコントロールはconfigureかmakeの引数に指定する様に方針変更。詳しくはREADME参照(2013/8/3)
生成された実行ファイルを、~faxocr/bin に手でコピーして下さい。
cd src
cp ./sheetreader ~/faxocr/bin
(注意2) なお、 sheetreader は、現在、文字認識、特に、シートのIDとユーザーIDの認識に GOCR を利用しています。 GOCR は、文字認識に際して、 gocrdbs/ディレクトリ以下の文字情報ファイルを必要としており、これが正しくインストールされていないと、文字認識に失敗し、シートを正しく認識できませんので注意してください。現在は、 /usr/local/etc/sheetreader/ か、/usr/etc/sheetreader/ にこれらのファイルを置くことになっていますが、将来的に、~faxocr/ に統合する予定です (2012/5/21) (SVM版KOCRがデフォルトになったので本記述を削除 2013/08/05)
(注意3) 現在、sheetreaderの認識性能向上に向けて、KOCRを利用したバージョンを作成中です。この作業の影響で、gitリポジトリに開発版コードが混入している可能性があります。GOCR版でコンパイルするには、src/makefileから-DKOCR -kocrを削除し、makeして下さい。 (2012/6/23)
(SVM版KOCRがデフォルトになったので本記述を削除 2013/08/05)
(注意3) make installは、現在、faxocrシステムのディレクトリ構成変更にまだ対応していません。 (2012/6/23)
(2012/9/14 追記)
もし、OCRエンジンとして、KOCRでなく、GOCRを用いたい場合には、
configure --with-ocr=gocr としてください。(2013/08/05追記)
configure中に含まれる
CFLAGS="-O3 -DKOCR"
を、
CFLAGS="-O3"
に。また、
LINKLIBS="-lcv -lhighgui -lcvaux -lxml2 -lcluscore -lkocr"
を、
LINKLIBS="-lcv -lhighgui -lcvaux -lxml2 -lcluscore"
としてください。
また、etc/faxocr.confにおいて、
OCR_ENGINE=kocr
を、
OCR_ENGINE=gocr
に切り替えて下さい。
(注意4) ubuntuの場合、LD_LIBRARY_PATHの扱いが異なる場合があるようです。
とりわけ、/usr/local/libへのpathが通っていない場合、cluscoreのロードができないので、下記を参考に、ldconfiv -vして下さい。 (2013/3/7 追記)
http://d.hatena.ne.jp/hikaru149/20101031/1288533463
** Fax用ディレクトリの作成
~faxocr に、Faxsystem/ というディレクトリを作成して下さい。そのうえで、Faxsystem/ にて、
FaxMessages Faxbackup Log Mailbackup Sendbackup Tempmunpack analyzedimage
のディレクトリを作成して下さい。
cd ~faxocr
mkdir Faxsystem
cd Faxsystem
mkdir FaxMessages Faxbackup Log Mailbackup Sendbackup Tempmunpack analyzedimage
(これらのディレクトリは、git cloneしたfaxocrパッケージに含まれており、新たに作成する必要はありません。 2013/3/8追記)
** faxocr.conf の設定
~faxocr/etc/faxocr.conf を、適宜、設定して下さい。
ファックスサーバとしては、現在、faximo、messageplus、ifax(BizFax) に対応していますが、一部は動作確認中です。最も動作が確実なのは、faximoです。
開発者向け:
なお、対応ファックスサーバを増やすためには、こちらのページをご参照下さい。
** crontab の設定
faxocr でログインし(su faxocr)、crontab -e を実行し、下記を crontab に追加。
これで、10分、15分毎に、procfax.sh、procreport.sh が実行されるようになります。
0-59/10 * * * * sh ./bin/procfax.sh >> Faxsystem/Log/cron_procfax.log
0-59/15 * * * * sh ./bin/procreport.sh >> Faxsystem/Log/cron_procreport.log
* ファックスの受信環境構築
FaxOCRシステムでファックスを受信するためには、契約したFaxサーバから届くメール添付のファックス画像(TIFF)を受け取れるような設定を行う必要があります。そのためには、外部のメールボックスに届いたメールをPOPで取りに行くか、faxocr サーバにグローバルのIPアドレスを振り、直接、このサーバでメールを受け取るか、設定する必要があります。
** fetchmail を利用する ( popでfetch )
fetchmail を利用する。procfax.sh から取りに行くイメージ。procmail を Maildir 形式に利用することで、~faxocr/Maildir/new の下に、メール毎にファイルが溜まっていくようになる。
(具体的な設定法については、後日追記する)
** postfix を利用する ( smtpでget )
postfix をインストールする。Maildir 形式に設定することで、~faxocr/Maildir/new の下に、メール毎にファイルが溜まっていくようになる。なお、Maildir の下の new や cur や tmp は、postfix が自動的に生成する。
設定としては、/etc/postfix/main.cf に下記を追加。
home_mailbox = Maildir/ (最後の/を忘れない)
また、postconf コマンドで mailbox_command を確認。標準であれば、
mailbox_command = procmail -a "$EXTENSION"
などとなってるはずだが、これがある Maildir には配送されないため、
main.cf の該当箇所を、下記のように変更する。
(mailbox_commandとmail_spool_dirをコメントアウトでも良いらしいが、要確認)
mailbox_command = procmail -t /etc/procmailrc
さらに、/etc/procmailrc に、下記のように設定
DEFAULT="$HOME/Maildir/"
LOGFILE="/var/log/procmail.log"
#
# messageplus
# -----------------------------------------------------------------------------
# forward the mail to root except the Fax Mail
:0
* ^From:.*everynet.jp>?$
* ! ^X-MPlus-MsgType: 1
! root
# BizFax
# -----------------------------------------------------------------------------
# forward the mail to root except the Fax Mail
:0
* ^From:.*@050fax.jp>?$
* ! ^From:.*fc-mail@050fax.jp>?$
! root
(messageplusを利用した際、Fax以外のメッセージが来たら、rootに転送する設定を追加。procfax.sh が fax 以外のメールを処理するのをさけるため 2013/08/27 追記
BizFaxの場合も追記 2013/10/11)
その後、下記のような形で postfix を再起動
/etc/rc0.d/K01postfix restart
これで、新しく届いたメールが、~faxocr/MailDir/new/ の下に、1メール1ファイルとして
保存されることになる。
[参考]
http://vine.1-max.net/postfix.html
http://masahi6.txt-nifty.com/masahilog/2005/08/postfixmaildirs_5f34.html
** IPv6対応
postfix は、デフォルトでは、tcp6 で listen しない。IPv6 環境で動かすためには、下記の設定追加が必要。
mynetworks = 適当にv6アドレス追加
inet_protocols = ipv4, ipv6
* MySQLの環境設定
** mysql 設定 / Charset の日本語化
/etc/my.cnf を編集(apt-getでインストールした場合は/etc/mysql/my.cnf)
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
skip-character-set-client-handshake
http://blog.srengine.com/2008/03/mysql-utf-8.html
http://kawama.jp/archives/2011/02/mysql5-5_character-set-server.html
** データベースの作成
mysql -u root -p
Enter password: ******
mysql> create database faxocr_development;
Query OK, 1 row affected (0.20 sec)
mysql> create database faxocr_test;
Query OK, 1 row affected (0.01 sec)
mysql> create database faxocr_production;
Query OK, 1 row affected (0.02 sec)
** ユーザーの作成 / 権限設定
※ 赤字部分は、自分で設定したパスワードを入力
mysql> use mysql;
mysql> insert into user set user="faxocr", password=password("faxocr"), host="localhost";
mysql> flush privileges;
mysql> grant all on faxocr_development.* to faxocr@localhost;
mysql> grant all on faxocr_production.* to faxocr@localhost;
mysql> grant all on faxocr_test.* to faxocr@localhost;
以上のコマンドの一括入力はこちら
** rails 的な DBバージョンのマイグレーション
rails のDB設定ファイル ~faxocr/rails/config/database.yml を編集し、
development: 等の user、password、database 名 等を、上記の設定と合わせる。
(メモ: できれば、git リポジトリ側で、最初から設定して、INSTALL ファイルと整合性を取っておくのが好ましい。)
~faxocr/railsディレクトリで、下記を実行し、DBバージョンをマイグレーション
rake db:migrate RAILS_ENV=development
初期データの作成
rake db:seed
* 動作確認・その他設定
** ディレクトリパーミッション
~faxocr/rails/faxocr_config/receive_sheetreader/config.xml
~faxocr/rails/faxocr_config/receive_sheetreader/srml/faxocr.xml
は、writable にすること。これらのファイルは、システムが自動的にupdate します。
chmod 777 ~faxocr/rails/faxocr_config/receive_sheetreader/config.xml
chmod 777 ~faxocr/rails/faxocr_config/receive_sheetreader/srml/faxocr.xml
また、ファイルがアップロードされるディレクトリも、パーミッションを確認して下さい。
ls -alt ~faxocr/rails/files
chmod 777 ~faxocr/rails/files
** cron 実行される際のpath
(2012/6/9 追記)
~faxocr/.bashrc に、下記を追加
PATH="$PATH":/usr/bin:/usr/local/bin
** WEBrick 実行(動作確認用)
cd ~faxocr/rails
./script/server ← port 3000にてサーバ起動
あるいは、下記でも構いません
cd ~faxocr/rails
sudo ruby script/server -b 192.168.1.0 -p 80 ← port 80でサーバ起動する例
※ 動作が異常に遅い際には、下記参照。特に、VMware環境
- DNS の逆引きに失敗している可能性があるので、手動で hosts に追加する と吉っぽい。
- 【 VMware 上の Rails の Webrick が遅かった件】
http://sputnik2laika.blog57.fc2.com/blog-entry-144.html
http://kitbc.s41.xrea.com/main/?ubuntu_network_slow
** Ruby on Rails の Apache からの利用高速化
**** Passenger の利用
下記参照
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
*** Fastcgi による高速化
(後日加筆予定)
** ディレクトリ構成の変更について
今まで、FaxOCRシステム(version 0)では、システムに関係したディレクトリや設定ファイル、バイナリが、/home/faxocr や /usr/bin、/usr/local/bin 等に分散し、システム全体の把握に多くの労力が必要となっていました。
そこで、2012年6月、システムで利用するディレクトリと設定法を整理し、下記に統一しました。ご注意下さい (2012/6/10)
/home/faxocr システムディレクトリ
/home/faxocr/Faxsystem/ ファックスディレクトリ (メールから取り出されたファイルを収納)
/home/faxocr/Maildir/ メールディレクトリ (ファックスが添付されたメールを収納)
/home/faxocr/bin/ バイナリディレクトリ (実行ファイルの他、必要スクリプトを収納)
/home/faxocr/etc/ 設定ファイルディレクトリ
/home/faxocr/rails/ railsディレクトリ (システムのユーザーインターフェースを収納)
/home/faxocr/src/ ソースディレクトリ (sheatreader, shhelper, kocr等、各種ソースファイルを収容)