独自サーバによる構築

自身で管理するサーバに導入して運用する際の構築方法です。

下記は、手動によるインストールについて記述します。

また、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 追記)

http://code.google.com/p/wkhtmltopdf/downloads/detail?name=wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

アーキテクチャに応じて、下記のように、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等、各種ソースファイルを収容)