2013年3月25日月曜日

[.tested] 富士通ビー・エス・シー F-PLUG [AX3][A6]


F-PLUGは、電気製品の電気使用量、電気料金、CO2換算値だけでなく、周辺の温度、湿度、照度の測定センサーを備えた、Bluetooth接続型の測定ユニットです。

電力・温度・湿度・照度測定機能つきプラグ  F-PLUG(エフプラグ)


本製品は、Windowsに対応した「F-PLUGユーティリティ」が用意されますが、今回、開発元の富士通ビー・エス・シー様のご協力により、OpenBlocks AX3/A6シリーズとの接続検証を行いました。
また、HTMLによるリソースモニタリングツールである、「munin」のpluginを作成し、環境モニタリングツールとしての活用例も紹介します。


  


OBDN技術ブログによる動作検証は、当社およびF-PLUG開発元において、デバイスの動作を保証およびサポートを行うものではありません。
また、F-PLUG製品は、現在Microsoft Windows7/Windows8に対応したソフトウェアのみが 用意されており、OpenBlocksを含むLinux製品との接続検証に対しては、制御データ形式 の一部のみの公開となります。
動作の保証、サポートなどは行っておりません。 内容に関するご質問、ご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8

1. ペアリング方法


OpenBlocksによる、Bluetoothアダプタの導入に関しては、

【.tested】Logitec製 Bluetoothアダプタ (LBT-UAN03C1BK) [AX3]

を参照して下さい。
また、現在β公開を行っている、Debian Wheezy 環境を使用する場合は、

[.tested] RATOC SYSTEM REX-BT60 [Debian Wheezy/Squeeze][AX3][A6]

を参考にペアリングを行ってください。

ペアリングに、simple-agentコマンドを使用した場合、Confirm passkey (yes/no):と表示された時に、F-PLUGアダプタがペアリング要求を受け付ける状況になりますので、アダプタのペアリングボタンを押し、yesと入力して下さい。
ペアリングが完了します。

# /usr/share/doc/bluez/examples/simple-agent hci0 <BTADDR>
RequestConfirmation (/org/bluez/2001/hci0/dev_B0_99_28_A4_43_BB, 457589)
Confirm passkey (yes/no): yes
Release
New device (/org/bluez/2001/hci0/dev_B0_99_28_A4_43_BB)

ペアリングの確認は以下のコマンドで行います。

# /usr/share/doc/bluez/examples/test-device list
dbus.Array([dbus.ObjectPath('/org/bluez/1453/hci0/dev_B0_99_28_A4_43_BB')], signature=dbus.Signature('o'))

2. rfcommによるSPP接続方法


本デバイスはSPPプロファイルに対応しており、OpenBlocksからデータをハンドリングするためには、rfcommにより仮想シリアルデバイスとして扱うのが簡単です。
今回のハンドリングデータはテキスト形式でなく、バイナリデータを含むため、-rオプション(rawモード)を追加します。

# rfcomm -r connect hci0 <BTADDR>&

/dev/rfcomm0が出来ているのを確認してください。

# ls -la /dev/rfcomm0
crw-rw---- 1 root dialout 216, 0 Feb 28 09:07 /dev/rfcomm0

3. F-PLUGの制御データ形式について


制御データ形式、および、その説明は、以下のgithubのサイトを参照してください。

 https://github.com/goto2048/fplug_for_linux

なお、今回公開される要求/応答データ形式は一部です。
公開されていない要求コマンドの中には、ファームウェア操作など本体設定に関わるものもあり、誤ったデータの送信により、本体が正常に動作しなくなる場合もあります。
利用される際は、送出するデータの設定に十分注意してください。

4. 通信テスト


本デバイスのデータハンドリングは、要求データの送出により、本体が処理を行い、そのステータスおよび計測値その他を返すシンプルなものです。
 
rfcommによる仮想シリアルデバイスを使用した、最もシンプルなハンドリングの例は以下の通りです。
この例では、温度取得要求を行い、応答データを16進表示します。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

#define SERIAL_PORT "/dev/rfcomm0"

unsigned char sm_req[]={0x10, 0x81, 0x00, 0x00, 0x0e, 0xf0, 0x00, 0x00, 0x11, 0x00, 0x62, 0x01, 0xe0, 0x00};

int main(int argc, char *argv[])
{
    int fd;
    int ret,cnt;
    unsigned char buf[256];   
    struct termios oldtio, newtio;

    fd = open(SERIAL_PORT, O_RDWR );

    tcgetattr( fd, &oldtio );
    newtio = oldtio;
    newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
    tcsetattr(fd, TCSANOW, &newtio);

    write(fd, sm_req, sizeof(sm_req) );
    ret=read(fd, buf, 256);

    for ( cnt=0; cnt\<ret; cnt++ ) {
        printf( "%02x,", buf[cnt] );
    }
    printf( "\n" );

    tcsetattr(fd, TCSANOW, &oldtio);
    close(fd);

    return 0;
}

また、メニュー形式によるテストプログラムfptestのソースコードををgithubに置きました。
このプログラムにより温度、湿度、光量、リアルタイムの電力計測のデータハンドリングテストを行うことが出来ます。
本テストプログラムおよび、要求応答データ形式などのドキュメント、5項以降で使用する一連のプログラムは、以下の手順により入手してください。

# git clone https://github.com/goto2048/fplug_for_linux.git

fplug_for_linuxディレクトリ以下に本レポジトリが展開されます。

テストプログラムは、シンプルに以下の手順でビルドしてください。

# make fptest

なお、/dev/rfcomm0デバイスのアトリビュートが、初期値ではrw-rw---となっていますので、テストを行う場合、root権限で実行するか、 rfcomm0デバイスを、

chmod o+rw /dev/rfcomm0

するなどの対策をして下さい。

本テストプログラムにより、F-PLUGの初期化およびデータ取得が出来ることを確認しました。

5. muninによるモニタリング


Munin はネットワーク化に対応したリソース・モニタリングツールです。
F-PLUGも、簡単なpluginを作成するだけで監視対象に加える事が可能です。

apache2およびmuninのインストールと初期設定

muninのモニタリング表示はhtmlを介して行うため、webサーバを用意します。
今回はapache2を使用しました。

# aptitude install apache2

続けてmuninをインストールします。

# aptitude install munin

今回、htmlの展開場所はデフォルトの/var/cache/munin/wwwのままで作業しました。
/etc/apache2/conf.dの下にmuninというファイルが追加されますので、これを編集します。
Allow from 以下に、アクセスを許可するIPアドレスを記述して下さい。
以下のサンプルでは、192.168.253.xxxからのアクセスを許可しています。

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
        Order allow,deny
        Allow from localhost 192.168.253.0/24
        Options None

        # This file can be used as a .htaccess file, or a part of your apache
        # config file.
        #
        # For the .htaccess file option to work the munin www directory
        # (/var/cache/munin/www) must have "AllowOverride all" or something
        # close to that set.
        #

        # AuthUserFile /etc/munin/munin-htpasswd
        # AuthName "Munin"
        # AuthType Basic
        # require valid-user

        # This next part requires mod_expires to be enabled.
        #

        # Set the default expiration time for files to 5 minutes 10 seconds from
        # their creation (modification) time.  There are probably new files by
        # that time.
        #

    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>

</Directory>

apache2をrestartします。

# apachectl restart

なお、debian 6.0パッケージにより提供されるmuninのバージョンは1.4.5です。
今回、1.4.5での作業の後、2.0をセルフビルドして乗せ換えましたが、プラグインは手を入れずそのまま使用しています。

・muninの監視プラグインの追加および削除

munin-node-configureにより、プラグインのリストおよび状態を表示することが出来ます

# munin-node-configure Plugin | Used | Extra information ------ | ---- | ----------------- acpi | no | amavis | no | apache_accesses | no | apache_processes | no | apache_volume | no | apc_envunit_ | no | apt | no | apt_all | no | bind9 | no | bind9_rndc | no | bonding_err_ | no | buddyinfo | no | courier_mta_mailqueue | no | courier_mta_mailstats | no | courier_mta_mailvolume | no | cps_ | no | cpu | yes | cpuspeed | no | cupsys_pages | no | df | yes | df_abs | no | df_inode | no | digitemp_ | no | diskstat_ | no | diskstats | no | entropy | no | exim_mailqueue | no | exim_mailstats | no | fail2ban | no | forks | no | fplug_humid | yes | fplug_illum | yes | fplug_rwatt | yes | fplug_temp | yes | freeradius_acct | no | freeradius_auth | no | freeradius_proxy_acct | no | freeradius_proxy_auth | no | fw_conntrack | no | fw_forwarded_local | no | fw_packets | no | hddtemp_smartctl | no | http_loadtime | no | if_ | yes | eth0 : :

プラグインは、/usr/share/munin/pluginsに記述されており、サーバ監視に必要なリソースモニタリング用のpluginはほぼ網羅されています。
監視を有効にしたいpluginは、/etc/munin/plugins下にシンボリックリンクされています。

obsa6:/etc/munin/plugins# ls -la
total 8
drwxr-xr-x 1 root root 4096 Mar  1 18:56 .
drwxr-xr-x 1 root root 4096 Mar  4 10:34 ..
lrwxrwxrwx 1 root root   28 Mar  1 15:35 cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root   27 Mar  1 15:35 df -> /usr/share/munin/plugins/df
lrwxrwxrwx 1 root root   36 Mar  1 18:56 fplug_humid -> /usr/share/munin/plugins/fplug_humid
lrwxrwxrwx 1 root root   36 Mar  1 18:56 fplug_illum -> /usr/share/munin/plugins/fplug_illum
lrwxrwxrwx 1 root root   36 Mar  1 18:56 fplug_rwatt -> /usr/share/munin/plugins/fplug_rwatt
lrwxrwxrwx 1 root root   35 Mar  1 18:42 fplug_temp -> /usr/share/munin/plugins/fplug_temp
lrwxrwxrwx 1 root root   28 Mar  1 15:35 if_eth0 -> /usr/share/munin/plugins/if_
lrwxrwxrwx 1 root root   29 Mar  1 15:35 load -> /usr/share/munin/plugins/load
lrwxrwxrwx 1 root root   31 Mar  1 15:35 memory -> /usr/share/munin/plugins/memory
lrwxrwxrwx 1 root root   34 Mar  1 15:35 processes -> /usr/share/munin/plugins/processes
lrwxrwxrwx 1 root root   31 Mar  1 15:35 uptime -> /usr/share/munin/plugins/uptime
lrwxrwxrwx 1 root root   30 Mar  1 15:35 users -> /usr/share/munin/plugins/users
obsa6:/etc/munin/plugins#

監視を無効にする場合は、このシンボリックリンクを削除してください。
今回は、F-PLUGのテストが目的ですので、監視対象を大幅に削除しています。
修正後、muninをrestartします。

# /etc/init.d/munin-node restart

・F-PLUG用モニタコマンドの作成

muninに監視データを渡すためのF-PLUG用データハンドラを作成します。
githubに置いた、fpstatus.cをコンパイルし、/usr/local/binの下にコピーしてください。
本プログラムはリアルタイムデータの要求/応答のみに特化したもので、上記のテスト用サンプルプログラムをベースに、応答データのステータスチェック、エラーリトライを加えています。
温度、湿度、照度、リアルタイム消費電力に対応し、コマンドラインオプション(-t,-h,-i,-w)により監視するデータを選択できます。

# make fpstatus
# cp fpstatus /usr/local/bin

なお、munin-nodeは、muninユーザで実行されるため、rfcomm0デバイスはそのままでは使用出来ません。

chmod u+s /usr/local/bin/fpstatus

として、setuidするか、

chmod o+rw /dev/rfcomm0

として、rfcommデバイスにアクセス権限を付加する必要があります。

fpstatusのコマンドラインオプションは以下の通りです。

fpstatus [option]
  -t, t      温度 (℃)
  -h, h      湿度 (%)
  -i, i       照度 (ルクス)
  -r, r      リアルタイム消費電力 (ワット)

・munin用fplugプラグインの作成

minin用のプラグインを作成します。

munin用プラグインは、以下の実行結果を出力することが出来るならば、何の言語で記述してもよく、他のプラグインを雛形にすると簡単に作成出来ます。
ただし、テストとしてプラグインの実行結果を単体で確認するためには、環境変数MUNIN_LIBDIRの設定が必要です。

# setenv MUNIN_LIBDIR=/usr/share/munin

プラグイン名をmunin_pluginとした場合、

munin_plugin autoconf

このプラグインが利用可能かどうかを返します。
このプラグインが正常に値を返せる状態かどうかをチェックし、yesかnoかを返します。
今回のサンプルでは、yesのみを返しています。

# ./fplug_temp autoconf
yes

munin_plugin config

このプラグインの情報を出力します。

# ./fplug_temp config
graph_title fplug_temperature
graph_args --base 1000 -l 0
graph_scale no
graph_vlabel temperature
graph_category fplug
fplug_temp.label fplug_temp
fplug_temp.draw LINE2

munin_plugin

オプションなしで実行すると、プラグイン名.value [値]を標準出力します。
fpstatus -tにより出力される数値をecho出力で組み合わせました。

echo fplug_temp.value `/usr/local/bin/fpstatus -t`

fpstatus側でfplug_temp.valueまで出力していないのは、プラグイン名の自由度を優先したためです。

# ./fplug_temp
fplug_temp.value 24.0

温度監視用plugin、fplug_tempは以下の様に記述しました。

#!/bin/sh
# -*- sh -*-

: << =cut

=head1 NAME

fplug_temp - Plugin to temperature at fplug

=head1 NOTES

Especially the average and max values on the bigger graphs (yearly) can be interesting.

=head1 AUTHOR

Contributed by Toshiya Goto

=head1 LICENSE

Unknown license

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

. $MUNIN_LIBDIR/plugins/plugin.sh

if [ "$1" = "autoconf" ]; then
        echo yes
        exit 0
fi

if [ "$1" = "config" ]; then

        echo 'graph_title fplug_temperature'
        echo 'graph_args --base 1000 -l 0 '
        echo 'graph_scale no'
        echo 'graph_vlabel temperature'
        echo 'graph_category fplug'
        echo 'fplug_temp.label fplug_temp'
        echo 'fplug_temp.draw LINE2'
        print_warning fplug_temp
        print_critical fplug_temp
        exit 0
fi

echo fplug_temp.value `/usr/local/bin/fpstatus -t`


上記のpluginを/usr/share/munin/pluginsの下にコピーします。
同様に、githubから取得した他のプラグインもコピーしてください。

obsa6:/usr/share/munin/plugins# ls -la fplug_*
-rwxr-xr-x 1 root root 808 Mar  1 18:51 fplug_humid
-rwxr-xr-x 1 root root 815 Mar  1 18:53 fplug_illum
-rwxr-xr-x 1 root root 812 Mar  1 18:55 fplug_rwatt
-rwxr-xr-x 1 root root 807 Mar  1 18:35 fplug_temp

有効にしたいpluginを/etc/munin/pluginsの下にシンボリックリンクします。

obsa6:/etc/munin/plugins# ls -ls fp*
0 lrwxrwxrwx 1 root root 36 Mar  1 18:56 fplug_humid -> /usr/share/munin/plugins/fplug_humid
0 lrwxrwxrwx 1 root root 36 Mar  1 18:56 fplug_illum -> /usr/share/munin/plugins/fplug_illum
0 lrwxrwxrwx 1 root root 36 Mar  1 18:56 fplug_rwatt -> /usr/share/munin/plugins/fplug_rwatt
0 lrwxrwxrwx 1 root root 35 Mar  1 18:42 fplug_temp -> /usr/share/munin/plugins/fplug_temp

muninをrestartします。

# /etc/init.d/munin-node restart

pluginが正常に動作しているかどうかは、/var/log/munin/の下のログを確認して下さい。

# tail /var/log/munin/munin-update.log
2013/03/04 11:35:10 [INFO] Reaping Munin::Master::UpdateWorker<localdomain;localhost.localdomain>.  Exit value/signal: 0/0
2013/03/04 11:35:10 [INFO]: Munin-update finished (5.86 sec)
2013/03/04 11:40:04 Opened log file
2013/03/04 11:40:04 [INFO]: Starting munin-update
2013/03/04 11:40:10 [INFO] Reaping Munin::Master::UpdateWorker<localdomain;localhost.localdomain>.  Exit value/signal: 0/0
2013/03/04 11:40:10 [INFO]: Munin-update finished (5.80 sec)
2013/03/04 11:45:04 Opened log file
2013/03/04 11:45:04 [INFO]: Starting munin-update
2013/03/04 11:45:10 [INFO] Reaping Munin::Master::UpdateWorker<localdomain;localhost.localdomain>.  Exit value/signal: 0/0
2013/03/04 11:45:10 [INFO]: Munin-update finished (5.80 sec)

・使用方法

Webブラウザにて、

http://<muninを実行しているサーバのアドレス>/munin

にアクセスすることにより、muninのトップメニューが表示されます。
対象となるサーバおよび項目をクリックすることにより、監視対象の状態がグラフ表示されます。

<munin Overview画面>

<munin fplugプラグインのグラフ表示例>
  
<参考: munin 2.0による fplugプラグインのWebUI>

5. さいごに


今回は、単純なデータハンドリングのテスト、およびWebモニタリングツールへのplugin実装を行ってみました。

電力監視に関してはリアルタイム消費電力をmuninの巡回時間毎に取得しているだけであり、ピーク管理のみとなります。

積算電力の取得をはじめ、F-PLUGの持つより高度なデータオペレーションについてお考えの方は、当blog担当までご相談下さい。

2013年3月21日木曜日

[.tested] LAN-W150NU2 / hostapdによるWifiアクセスポイントの構築 [AX3]

Logitec LAN-W150N/U2WH(BK)は、802.11b/g/nに対応したUSB無線LANアダプタです。
前回、クライアント側のみの評価を行いましたが、今回はアクセスポイント(無線LANブリッジ)としてhostapd-2.0を導入し、設定、検証しました。


OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>

OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6

1. 対応ドライバと事前準備

RT2870を使用しており、AX3のkernel-3.0.6では、rt2800usbドライバでサポートされています。

ただし、このドライバを使用する場合、ralink社のサイトより、
rt2870のファームウェア: rt2870.bin
を取得し、/lib/firmwareの下に置いて下さい。
また、上記ファームウェアはnon-freeのfirmware-ralinkパッケージからも導入することが出来ます。

dmesgでは以下のメッセージが表示されます。

usb 1-1: new high speed USB device number 2 using ehci_marvell
usb 1-1: New USB device found, idVendor=0789, idProduct=0168
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: 802.11 n WLAN
usb 1-1: Manufacturer: Ralink
usb 1-1: SerialNumber: 1.0

インタフェースはwlan0となります。

クライアントとして使用する場合は、前回の記事を参照して下さい。

【.tested】Logitec LAN-W150N/U2WH(BK) 無線LANアダプタ [AX3]

2. アクセスポイントとしての設定方法 (ブリッジ接続)


wlan0およびeth0をブリッジ接続し、hostapdによりワイヤレスサービスを行います。

・事前準備

事前準備として、iwおよびbridge-utilsパッケージを導入します。

# aptitude install iw bridge-utils

・ブリッジ(br0)の設定

auto eth0
iface eth0 inet static
address 0.0.0.0

auto wlan0
iface wlan0 inet manual
pre-up iw dev wlan0 del
pre-up iw phy phy0 interface add wlan0 type managed 4addr on

# Bridge network interface
auto br0
iface br0 inet static
address 172.16.12.248
netmask 255.255.255.0
network 172.16.12.0
broadcast 172.16.12.255
gateway 172.16.12.5
dns-nameservers 172.16.12.6
bridge_ports eth0 wlan0
bridge_stp off

・hostapd-2.0の導入

今回は、debian/squeezeのhostapdパッケージ(0.6)ではなく、最新のhostapd-2.0を導入しました。
手順としては、

 hostapd-2.0のソースパッケージを入手
# wget http://hostap.epitest.fi/releases/hostapd-2.0.tar.gz

 ビルドに必要なライブラリのインストール
# aptitude install libssl-dev libnl-dev

 パッケージの展開
# tar xvzf hostapd-2.0.tar.gz
# cd hostapd-2.0/hostapd

.configの修正
# cp defconfig .config

以下の部分のコメントを外します。(802.11nを有効にする)
# IEEE 802.11n (High Throughput) support
CONFIG_IEEE80211N=y

 ビルド/インストール
# make
# make install

 設定ファイルとして、/etc/hostapd/hostapd.conf を以下の様に記述します。
 <SSID>およびパスフレーズはそれぞれの環境に合わせて変更して下さい。

interface=wlan0
bridge=br0
driver=nl80211

country_code=JP
ieee80211d=1

ssid=<SSID>
channel=6
hw_mode=g

wpa=2
wpa_passphrase=<設定するパスフレーズ>

wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

ieee80211n=1
wmm_enabled=1

 起動方法は以下の通りです。
 自動起動する場合は、rc.localに書くのが簡単です。

# hostapd -B /etc/hostapd/hostapd.conf

3.性能測定方法


iperfを使用します。

<サーバ側>
ブリッジ設定したAX3側にiperfをインストールし、サーバとして動作させます。

# aptitude install iperf

# iperf -s

<クライアント側>
ワイヤレス接続したPCに、jperfを入れて、GUIにより操作します。
jperfはsourceforgeより入手してください。

 JPerf | Free Development software downloads at SourceForge.net


2013年3月19日火曜日

[.tested] Joruri Gw 2.0.2 [AX3]

Joruri Gwは、Ruby(on Rails)とMySQL上で動作するオープンソースのグループウェアです。
Joruri CMSのシステム管理部分を基盤として徳島県庁用のグループウェア機能の拡張が行われたものであり、オープンソース公開され、自治体を中心として利用が広がっています。最新の情報は以下のサイトを参照してください。

Joruri公式サイト

最新のリリースである、joruri Gw 2.0.2をインストールするための想定環境は以下の通りです。

[[システム]
OS         : CentOS 6.2
Webサーバ  : Apache 2.2
DBシステム : MySQL 5.1
Ruby       : Ruby 1.9.3
Rails      : Rails 3.2.7
キャッシュ : memcached 1.4.13

今回は、joruri Gw 2.0.2をARMアーキテクチャであるOpenBlocks AX3上のdebian 6.0上にインストールします。
また、debian 6.0の環境は、LXC上のゲストOSとして構築します。

OBDN技術ブログによる動作検証は、該当するソフトウェアの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
LXC 0.7.5 / ゲストOS: Debian 6.0

1.LXCの導入


今回、評価環境を、LXCのゲストOS(Debian squeeze)上で構築しました。
仮想化を行わない場合は、この作業は必要ありません。

LXC環境の構築について

 以下のページの手順に従って作業してください。

 OpenBlocks AX3でLXCによる仮想化を試してみる

初期設定について

先に、タイムゾーンの設定、ロケールデータの作成を行います。
ただし、lxc-createしてすぐの状態では、vimなどのツールがないため、
apt-getにより必要なものを追加する必要があります。
また、aptitudeパッケージも最初は含まれていませんので、先にaptitudeパッケージをapt-getにより導入します。

# apt-get install aptitude
# aptitude update
# aptitude install vim

 タイムゾーンの設定:
# dpkg-reconfigure tzdata

 ロケールデータの作成:
# vi /etc/locale.gen
   ja_JP.UTF-8 等の必要なロケールをアンコメント(行頭の#を消す)する

# locale-gen

また、今回は、CMSサーバとして使用しますので、/etc/network/interfacesのeth0は、dhcpによるIPアドレス設定ではなく、固定のIPアドレスを指定します。
IPアドレスは、それぞれの環境で割り当てられたものを使用してください。
以下の例では、割り当てられたIPアドレスを、192.168.253.169、gatewayが192.168.253.1と想定しています。

auto eth0
iface eth0 inet static
    address 192.168.253.169
    network 192.168.253.0
    netmask 255.255.255.0
    broadcast 192.168.253.255
    gateway 192.168.253.1

開発環境の導入について

まず、よく利用するツールをインストールします。

# aptitude install tasksel
# tasksel install standard

開発用のツール類をインストールします。

# aptitude install build-essential

上記の作業により、LXCのゲストOS上での開発環境が構築されます。

また、LXC仮想環境の複製を行いたい場合ですが、上記の記事で導入した場合、

# ln -s /usr/local/var/lib/lxc /var/lib/lxc

とした後、元の、/var/lib/lxc/<元のコンテナ名>/config を、複製した/var/lib/lxc/<複製したコンテナ名>/configに上書きして、config内の<コンテナ名>の部分を書き換えることにより代替環境として動作させることが出来ます。
(lxc-0.7.5では、インストール時に、/usr/local/var/lib/lxcが指定されていますが、この部分が一部のツールと整合性が取れていないようです。)

また、上記の記事にある通り、そのままではudevのインストールによりエラーが出ます。
これは記事にあるように、configファイルを変更することにより、インストールエラーそのものは出なくなります。
ただし、この場合、立ち上げたコンソールが使用出来なくなりますので、別途sshでlxcコントロール用のターミナルを確保して下さい。

2.apache2の導入


パッケージのインストール

# aptitude install apache2

 インストールのみで起動します。

mod_rewriteを有効にする

# a2enmod rewrite

3.mysqlの導入


パッケージのインストール

# aptitude install mysql-server

 インストール時にMySQLを管理するrootユーザのパスワードを聞かれるため、
 予め決めておく必要があります。

動作確認

# mysql -u root -p

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

mysql>


4.joruri Gwパッケージのインストールのための事前準備


以下のマニュアルを参考に作業を進めます。ただし、想定環境がCentOS 6.2であるため、debian 6.0では導入するパッケージや、設定方法が異なります。

 Joruri Gw 2.0.2 インストールマニュアル

まずは、root権限で作業を行います。

必要なパッケージの導入

 apache(httpd)、mysqlに関してはすでに上記で導入作業を行っているため、必要ありません。
 aptitudeコマンドにより、以下のパッケージを導入してください。

# aptitude install <パッケージ名>
libjpeg-dev
libpng-dev
imagemagick
libmagickcore-dev
libcurl4-openssl-dev
libevent-dev
apache2-dev
libsasl2-dev libsasl2-modules-ldap

必要なソースコードファイルのダウンロード

 インストールマニュアルの通り、wgetコマンドによりダウンロードを行います。

 # cd /usr/local/src/
 # wget http://joruri.org/download/jorurigw/jorurigw-2.0.2.tar.gz
 # wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
 # wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
 # wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz

Joruriユーザの作成

  # useradd joruri
  # passwd joruri

Joruriソースコードの設置

  # mkdir /var/share
  # tar xvzf jorurigw-2.0.1.tar.gz -C /var/share
  # chown -R joruri:joruri /var/share/jorurigw

Apache の設定

 設定ファイルを編集します。アドレスは固定アドレスとして設定したものを使用してください。

  # vi /etc/apache2/httpd.conf
 
  ServerName 192.168.253.169

 設定ファイルにエラーがないことを確認し、Apacheを再起動します。

  # apachctl restart

MySQL の設定と、joruriユーザの作成

 文字エンコーディングの標準を UTF-8 に設定します。

  # vi /etc/mysql/my.cnf
   :
  [mysqld]
  default-character-set=utf8    #追加
  max_allowed_packet=16M        #追加

  [client]                                #追加(末尾に追加)
  default-character-set=utf8    #追加   :

 MySQLを再起動します。MySQLはインストール時にすでに自動起動設定され起動しています。

  # /etc/init.d/mysqld restart

 rootユーザのパスワードは、aptitudeコマンドによりインストール時に設定しています。

 MySQL monitorを起動し、joruriユーザを作成します。

# mysql -u root -p
Enter password: ←インストール時に設定した(mysqlの)rootユーザパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 joruriユーザを作成します。

mysql> grant all on *.* to joruri@localhost IDENTIFIED BY 'pass';

 確認は以下のコマンドにより行います。

mysql> SELECT host,user FROM mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| deb-2     | root             |
| localhost | debian-sys-maint |
| localhost | joruri           |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql>

 ※パスワードは適切な値を設定してください。
 本マニュアルでは pass と設定しています。

Ruby on Rails のインストール

 # cd /usr/local/src
 # tar -zxvf yaml-0.1.4.tar.gz
 # cd yaml-0.1.4
 # ./configure
 # make
 # make install

Rubyのインストール

 # cd /usr/local/src
 # tar xvzf ruby-1.9.3-p194.tar.gz
 # cd ruby-1.9.3-p194
 # ./configure -prefix=/usr/local
 # make
 # make install

  インストール結果を確認します。
 
  # /usr/local/bin/ruby -v
   => ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

Phusion Passenger のインストール

 Phusion Passengerをインストールします。

  # gem install passenger --no-ri --no-rdoc -v 3.0.19
  # passenger-install-apache2-module
    ( 画面の内容を確認して Enterキーを押してください。 )

 Apacheに設定を追加し、再起動します。

  # vi /etc/apache2/conf/httpd.conf    :   --下記を追加   LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13 /ext/apache2/mod_passenger.so   PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.13   PassengerRuby /usr/local/bin/ruby    :   # apachectl restart

gemライブラリ のインストール

 Joruri Gw実行に必要なライブラリをインストールします。

 まず、libv8-3.3.10.4.gemをダウンロードし、インストールします。


 # cd /usr/local/src
 # wget http://rubygems.org/downloads/libv8-3.3.10.4.gem
 # gem install ./libv8-3.3.10.4.gem

上記のオペレーションは一見正常に終了しますが、ライブラリモジュールが作成されていません。対策として、sconsパッケージを入れ、SConstructを修正し、手動でインストールします。

 # cd /usr/local/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8
 # vi SConstruct

--52行目を編集
GCC_EXTRA_CCFLAGS = ['-march=armv6'←変更
GCC_DTOA_EXTRA_CCFLAGS = []

 # scons

  正常に終了し、libv8.aなどのライブラリが作成されていることを確認してください。
 インストールドキュメントの手順に戻り、gemライブラリをインストールします。


 # gem install bundler -v 1.1.4
 # cd /var/share/jorurigw
 # bundle install

 ネットワーク経由でファイルのダウンロードとインストールが行われます。
 正しく完了すれば次のようなメッセージが表示されます。

 =>Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

5.joruri Gwのインストール


Joruriユーザに変更します。

  # su - joruri
  $ cd /var/share/jorurigw

設定ファイルの編集

 環境に応じて設定ファイルを編集します。
 
DB接続情報

 debian 6.0のmysqlパッケージに合わせて、socketを全て書き換えます。

  $ vi config/database.yml

  socket: /var/run/mysqld/mysqld.sock
   :
  socket: /var/run/mysqld/mysqld.sock
   :
  socket: /var/run/mysqld/mysqld.sock
   :
  socket: /var/run/mysqld/mysqld.sock
   :
  socket: /var/run/mysqld/mysqld.sock

LDAP接続情報

  $ vi config/ldap.yml

 ※LDAPに関する設定は、ダウンロードページより補足資料をご参照下さい。
    http://joruri.org/download/jorurigw/  【LDAP関連補足資料】LDAP_LDIF.zip

SMTP接続情報

  $ vi config/environments/development.rb

 ※連絡メモの「携帯等メール転送設定」などメール機能を利用する場合は
  SMTPの設定が必要です。

データベースの作成

 データベースを作成します。

 ※作業の途中でmysqlに設定したパスワードを聞かれますのでご用意ください。

 データベースを作成します。

  $ cd /var/share/jorurigw

  $ /usr/bin/mysql -u root -p -e "create database development_jgw_core"
  $ /usr/bin/mysql -u root -p -e "create database development_jgw_gw"
  $ /usr/bin/mysql -u root -p -e "create database development_jgw_gw_pref"
  $ /usr/bin/mysql -u root -p -e "create database development_jgw_bbs_000001"

 テーブルを作成します。

 $ /usr/bin/mysql -u root -p development_jgw_core < ./db/development_jgw_core_schema.sql  $ /usr/bin/mysql -u root -p development_jgw_gw < ./db/development_jgw_gw_schema.sql  $ /usr/bin/mysql -u root -p development_jgw_gw_pref < ./db/development_jgw_gw_pref_schema.sql  $ /usr/bin/mysql -u root -p development_jgw_bbs_000001 < ./db/development_jgw_bbs_000001_schema.sql
初期データを登録します。

$ /usr/bin/mysql -u root -p development_jgw_core < ./db/development_jgw_core_init.sql $ /usr/bin/mysql -u root -p development_jgw_gw < ./db/development_jgw_gw_init.sql $ /usr/bin/mysql -u root -p development_jgw_gw_pref < ./db/development_jgw_gw_pref_init.sql $ /usr/bin/mysql -u root -p development_jgw_bbs_000001 < ./db/development_jgw_bbs_000001_init.sql
サンプルデータを登録します。

  $ rake db:seed:demo RAILS_ENV=production

memcached のインストール

 root権限に戻ってください。(joruriユーザからならexit)
 debian 6.0のパッケージで導入しました。

  # aptitude install memcached

 上記インストールにより、デーモンが起動し、自動起動に設定されます。

VirtualHost の反映

 Apacheに設定を追加します。

  # vi /etc/apache2/conf.d/vhosts.conf

--以下の部分を追加します。(もしくは新規入力)
  NameVirtualHost 192.168.253.169:80

  <VirtualHost 192.168.253.169:80>
      ServerName default
      DocumentRoot /var/share/jorurigw/public
      RackEnv development
      PassengerHighPerformance on
  </VirtualHost>

 Apacheを再起動します。

  # apachectl restart

 ここまでの手順で Joruri にアクセスすることができます。

  Joruri Gw 画面 http://192.168.253.169/  ←設定したIPアドレス

 次のユーザが登録されています。

    管理者(システム管理者)
      ユーザID   : admin
      パスワード : admin

    一般ユーザ(徳島 太郎)
      ユーザID   : user1
      パスワード : user1

    一般ユーザ(阿波 花子)
      ユーザID   : user2
      パスワード : user2

    一般ユーザ(吉野 三郎)
      ユーザID   : user3
      パスワード : user3


7.定期実行設定


 先にcronをインストールします。

# aptitude install cron

 ここではcrontabによる定期実行に関する設定例を説明しています。

 削除期間が過ぎた情報を削除します。
 以下の例は毎日3時~4時にかけて削除しています。

 削除期間が過ぎたスケジュールを削除します。

  # su - joruri
  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  00 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gw::Script::Schedule.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 完了済みで削除期間が過ぎたTODOを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  05 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gw::Script::Todo.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 既読で削除期間が過ぎた連絡メモを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gw::Script::Memo.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 期限切れで削除期間が過ぎた掲示板を削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  15 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwbbs::Script::Task.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 期限切れで削除期間が過ぎた回覧板を削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  20 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwcircular::Script::Task.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 期限切れで削除期間が過ぎた照会回答を削除します。


   $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  25 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwmonitor::Script::Task.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 削除期間が過ぎたアンケートを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  30 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Questionnaire::Script::Task.delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となったセッションのデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  35 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'System::Script::Session.delete_expired_sessions'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となった掲示板のデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  40 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwbbs::Script::Task.preparation_delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となった電子図書のデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  45 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Digitallibrary::Script::Task.preparation_delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となった書庫のデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  50 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Doclibrary::Script::Task.preparation_delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となったQ&Aのデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  55 3 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwqa::Script::Task.preparation_delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となったFAQのデータを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  00 4 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwfaq::Script::Task.preparation_delete'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 不要となった研修申込・受付のテンポラリファイルを削除します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  05 4 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gwsub::Script::Sb01_training.delete_abandoned_files'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 幹部・部課長の在席表示を全てoffにします。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  0 0 * * * /usr/local/bin/ruby /var/share/jorurigw/script/rails runner \
    -e development 'Gw::Script::PrefExective.state_all_off'
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

8.動作確認


 joruri gwは初期状態で以下のサンプル画面が表示されます。

<ポータル画面>


9.さいごに


今回、joruri Gw の最新バージョンである、2.0.2が、ARMアーキテクチャのOpenBlocks上で起動することを確認しました。
今回、細かな機能の検証は行っておりません。不具合などあればblog担当までご報告下さい。


2013年3月15日金曜日

[.tested] Joruri CMS 1.3.1 [AX3]

Joruri CMSは、Ruby(on Rails)とMySQL上で動作するオープンソースのCMS(コンテンツマネジメントシステム)です。
日本で開発された、Ruby言語を使った、RESTの考えに従った、統合的なCMSであり、名前の由来はJapan Originated Ruby-based RESTful and Integratedの頭文字からつけられています。
本CMSは徳島県と株式会社アイ・ディ・エスにより共同開発されたものですが、オープンソースソフトウェアとして一般公開されており、現在も、多くの自治体で汎用的に利用できるCMSとして機能や操作性の拡張が行われています。
最新の情報は以下のサイトを参照してください。

Joruri公式サイト

最新のリリースである、joruri CMS 1.3.1をインストールするための想定環境は以下の通りです。

[システム]
OS         : CentOS 6.3
Webサーバ  : Apache 2.2
DBシステム : MySQL 5
Ruby       : 1.9.1
Rails      : 2.3.16

今回は、joruri CMS 1.3.1をARMアーキテクチャであるOpenBlocks AX3上のdebian 6.0上にインストールします。
また、debian 6.0の環境は、LXC上のゲストOSとして構築します。

OBDN技術ブログによる動作検証は、該当するソフトウェアの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
LXC 0.7.5 / ゲストOS: Debian 6.0

1.LXCの導入


今回、評価環境を、LXCのゲストOS(Debian squeeze)上で構築しました。
仮想化を行わない場合は、この作業は必要ありません。

LXC環境の構築について

 以下のページの手順に従って作業してください。

 OpenBlocks AX3でLXCによる仮想化を試してみる

初期設定について

先に、タイムゾーンの設定、ロケールデータの作成を行います。
ただし、lxc-createしてすぐの状態では、vimなどのツールがないため、
apt-getにより必要なものを追加する必要があります。
また、aptitudeパッケージも最初は含まれていませんので、先にaptitudeパッケージをapt-getにより導入します。

# apt-get install aptitude
# aptitude update
# aptitude install vim

 タイムゾーンの設定:
# dpkg-reconfigure tzdata

 ロケールデータの作成:
# vi /etc/locale.gen
   ja_JP.UTF-8 等の必要なロケールをアンコメント(行頭の#を消す)する

# locale-gen

また、今回は、CMSサーバとして使用しますので、/etc/network/interfacesのeth0は、dhcpによるIPアドレス設定ではなく、固定のIPアドレスを指定します。
IPアドレスは、それぞれの環境で割り当てられたものを使用してください。
以下の例では、割り当てられたIPアドレスを、192.168.253.248、gatewayが192.168.253.1と想定しています。

auto eth0
iface eth0 inet static
    address 192.168.253.248
    network 192.168.253.0
    netmask 255.255.255.0
    broadcast 192.168.253.255
    gateway 192.168.253.1

開発環境の導入について

まず、よく利用するツールをインストールします。

# aptitude install tasksel
# tasksel install standard

開発用のツール類をインストールします。

# aptitude install build-essential

上記の作業により、LXCのゲストOS上での開発環境が構築されます。

また、LXC仮想環境の複製を行いたい場合ですが、上記の記事で導入した場合、

# ln -s /usr/local/var/lib/lxc /var/lib/lxc

とした後、元の、/var/lib/lxc/<元のコンテナ名>/config を、複製した/var/lib/lxc/<複製したコンテナ名>/configに上書きして、config内の<コンテナ名>の部分を書き換えることにより代替環境として動作させることが出来ます。
(lxc-0.7.5では、インストール時に、/usr/local/var/lib/lxcが指定されていますが、この部分が一部のツールと整合性が取れていないようです。)

また、上記の記事にある通り、そのままではudevのインストールによりエラーが出ます。
これは記事にあるように、configファイルを変更することにより、インストールエラーそのものは出なくなります。
ただし、この場合、立ち上げたコンソールが使用出来なくなりますので、別途sshでlxcコントロール用のターミナルを確保して下さい。

2.apacheの導入


パッケージのインストール

# aptitude install apache2

 インストールのみで起動します。

mod_rewriteを有効にする

# a2enmod rewrite


3.mysqlの導入


パッケージのインストール

# aptitude install mysql-server

 インストール時にMySQLを管理するrootユーザのパスワードを聞かれるため、
 予め決めておく必要があります。

動作確認

# mysql -u root -p

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

mysql>



4.joruri CMSパッケージのインストールのための事前準備


以下のマニュアルを参考に作業を進めます。ただし、想定環境がCentOS 6.3であるため、debian 6.0では導入するパッケージや、設定方法が異なります。

Joruri CMS 1.3.1 インストールマニュアル

まずは、root権限で作業を行います。

必要なパッケージの導入

apache(httpd)、mysqlに関してはすでに上記で導入作業を行っているため、必要ありません。
aptitudeコマンドにより、以下のパッケージを導入してください。

# aptitude install <パッケージ名>
libxslt-dev
libjpeg-dev
libpng-dev
librsvg2-dev
ghostscript
imagemagick
libmagickcore-dev
libmagickwand-dev
libcurl4-openssl-dev
nkf
apache2-dev

必要なソースコードファイルのダウンロード

 インストールマニュアルの通り、wgetコマンドによりダウンロードを行います。

  # cd /usr/local/src/
  # wget http://joruri.org/download/joruri-1.3.1.tar.gz \
      http://core.ring.gr.jp/archives/lang/ruby/1.9/ruby-1.9.1-p378.tar.gz \
      http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz \
      http://chasen.org/~taku/software/darts/src/darts-0.32.tar.gz \
      "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fchasen-legacy%2F32224%2Fchasen-2.4.4.tar.gz" \
      "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fipadic%2F24435%2Fipadic-2.7.0.tar.gz" \
      http://downloads.sourceforge.net/lame/lame-398-2.tar.gz

Joruriユーザの作成

  # useradd joruri
  # passwd joruri

Joruriソースコードの設置

  # mkdir /var/share
  # tar xvzf joruri-1.3.1.tar.gz -C /var/share
  # chown -R joruri:joruri /var/share/joruri

Apache の設定

 設定ファイルを編集します。アドレスは固定アドレスとして設定したものを使用してください。

  # vi /etc/apache2/httpd.conf
 
  ServerName 192.168.253.248

 設定ファイルにエラーがないことを確認し、Apacheを再起動します。

  # apachctl restart

MySQL の設定と、joruriユーザの作成

 文字エンコーディングの標準を UTF-8 に設定します。

  # vi /etc/mysql/my.cnf
   :
  [mysqld]
  character-set-server=utf8 #追加
   :

 MySQLを再起動します。MySQLはインストール時にすでに自動起動設定され起動しています。

  # /etc/init.d/mysqld restart

 rootユーザのパスワードは、aptitudeコマンドによりインストール時に設定しています。

 MySQL monitorを起動し、joruriユーザを作成します。

# mysql -u root -p
Enter password: ←インストール時に設定した(mysqlの)rootユーザパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 joruriユーザを作成します。

mysql> grant all on *.* to joruri@localhost IDENTIFIED BY 'pass';

 確認は以下のコマンドにより行います。

mysql> SELECT host,user FROM mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| deb-2     | root             |
| localhost | debian-sys-maint |
| localhost | joruri           |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql>

※パスワードは適切な値を設定してください。
本マニュアルでは pass と設定しています。

Rubyのインストール

  # cd /usr/local/src
  # tar xvzf ruby-1.9.1-p378.tar.gz
  # cd ruby-1.9.1-p378

 パッチをダウンロードします。
 
  # wget http://bugs.ruby-lang.org/attachments/download/837/openssl-build-fix-v2.patch

 以下の操作でうまくパッチが当らない場合は、
 openssl-build-fix-v2.patchを開いて手で修正してください。

  # patch -p0 < openssl-build-fix-v2.patch
    > File to patch:
      # 以下のパスを順に入力
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl.c
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl.h
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl_pkcs7.c
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl_ssl.c
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl_x509attr.c
      /usr/local/src/ruby-1.9.1-p378/ext/openssl/ossl_x509crl.c

 ビルド、インストールします。

  # ./configure
  # make && make install

RubyGemsのインストール

  # cd /usr/local/src
  # tar xvzf rubygems-1.3.5.tgz
  # cd rubygems-1.3.5
  # ruby setup.rb

gemライブラリ のインストール

 gemライブラリをインストールします。

  # ruby /var/share/joruri/doc/install/gems.rb
 
 以下のgemがインストールされます。

  # gem install rake --no-ri --no-rdoc -v 0.8.7
  # gem install rails --no-ri --no-rdoc --include-dependencies -v 2.3.16
  # gem install ruby-ldap --no-ri --no-rdoc -v 0.9.10
  # gem install rmagick --no-ri --no-rdoc -v 2.12.2
  # gem install zipruby --no-ri --no-rdoc -v 0.3.6
  # gem install mime-types --no-ri --no-rdoc -v 1.16
  # gem install will_paginate --no-ri --no-rdoc -v 2.3.16
  # gem install passiverecord --no-ri --no-rdoc -v 0.2
  # gem install tamtam --no-ri --no-rdoc -v 0.0.3
  # gem install mysql --no-ri --no-rdoc -v 2.8.1

Phusion Passenger のインストール

 Phusion Passengerをインストールします。

  # gem install passenger --no-ri --no-rdoc -v 3.0.19
  # passenger-install-apache2-module
    ( 画面の内容を確認して Enterキーを押してください。 )

 Apacheに設定を追加し、再起動します。

  # cp /var/share/joruri/config/samples/passenger.conf \
      /etc/apache2/conf.d/passenger.conf

  # apachectl restart

5.joruri CMS 1.3.1のインストール


Joruriユーザに変更します。

  # su - joruri
  $ cd /var/share/joruri

設定ファイルの編集

 環境に応じて設定ファイルを編集します。

Joruri基本設定

  $ vi config/core.yml
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  title  : Joruri
  uri    : http://192.168.253.248/
  proxy  : ※プロキシ
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  uriは設定したIPアドレスにより異なります。 
   ※プロキシ
  プロキシサーバが導入されている場合は
   http://example:8080/ の様に記述してください。
 
DB接続情報

 必要に応じて変更してください。(今回は変更なし)

  $ vi config/database.yml

VirtualHost設定

 必要に応じて変更してください。(今回は変更なし)

  $ vi config/virtual-hosts/joruri.conf

データベースの作成

 データベースを作成します。

  $ /usr/bin/mysql -u root -p -e "create database joruri"

 テーブルを作成します。

  $ rake db:schema:load RAILS_ENV=production

 初期データを登録します。

  $ rake db:seed RAILS_ENV=production

 サンプルデータを登録します。

  $ rake db:seed:demo RAILS_ENV=production

VirtualHost の反映

 Apacheに設定を追加します。

  $ su -
  # ln -s /var/share/joruri/config/virtual-hosts/joruri.conf \
      /etc/apache2/conf.d/

 joruri.confの以下の部分を変更してください。

<VirtualHost 192.168.253.248:80>  ←設定したIPアドレス
    ServerName 192.168.253.248
    DocumentRoot /var/share/joruri/public_00000001
    Alias /_common/ "/var/share/joruri/public/_common/"
    setenv LANG ja_JP.UTF-8
    RailsEnv production
    Include /var/share/joruri/config/rewrite/base.conf
    Include /var/share/joruri/config/rewrite/00000001.conf
</VirtualHost>

 Apacheを再起動します。

  # apachectl restart

 ここまでの手順で Joruri にアクセスすることができます。

  公開画面 : http://192.168.253.248/  ←設定したIPアドレス

  管理画面 : http://192.168.253.248/_admin

 次のユーザが登録されています。

    管理者(システム管理者)
      ユーザID   : admin
      パスワード : admin

    一般ユーザ(徳島 太郎)
      ユーザID   : user1
      パスワード : user1

    一般ユーザ(阿波 花子)
      ユーザID   : user2
      パスワード : user2

    一般ユーザ(吉野 三郎)
      ユーザID   : user3
      パスワード : user3

6.ふりがな・読み上げ機能のインストール


 LAMEをインストールします。

  # cd /usr/local/src
  # tar xvzf lame-398-2.tar.gz
  # cd lame-398-2
  # ./configure --prefix=/usr
  # make && make install

 Dartsをインストールします。

  # cd /usr/local/src
  # tar xvzf darts-0.32.tar.gz
  # cd darts-0.32
  # ./configure --prefix=/usr
  # make && make install

 ChaSenをインストールします。

  # cd /usr/local/src
  # tar xvzf chasen-2.4.4.tar.gz
  # cd chasen-2.4.4
  # ./configure --prefix=/usr
  # make && make install

 IPAdicをインストールします。
 先に/usr/etcディレクトリを作成してください。

  # mkdir /usr/etc

  # cd /usr/local/src
  # tar xvzf ipadic-2.7.0.tar.gz
  # cd ipadic-2.7.0
  # ./configure --prefix=/usr

 辞書をUTF8に変換します。
 
  # vi to_utf8.sh  #(新規作成)
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  #!/bin/sh
  for file in *.dic *.cha chasenrc
  do
  if [ -f $file ]; then
      nkf --utf8 $file > tmpfile
      mv tmpfile $file
  fi
  done
  exit
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  # chmod 744 to_utf8.sh
  # ./to_utf8.sh
  # `chasen-config --mkchadic`/makemat -i w
  # `chasen-config --mkchadic`/makeda -i w chadic *.dic
  # make install

 ChaOneをインストールします。

  # cd /var/share/joruri/ext/morph/chaone
  # chmod 775 configure
  # ./configure
  # make && make install

 GalateaTalkをインストールします。

  # cd /var/share/joruri/ext/gtalk
  # sed -i "s/ getline/ my_getline/" main.c
  # sed -i "s/ getline/ my_getline/" getline.c
  # chmod 775 configure
  # ./configure
  # make
  # chmod 747 /var/share/joruri/ext/gtalk_filter.rb

7.定期実行設定


 先にcronをインストールします。

# aptitude install cron

 記事の公開/非公開処理を設定します。
 以下の例は、毎時15分毎に記事の公開/非公開処理を行い、
 公開ディレクトリに記事を静的ファイルとして書き出します。

  # su - joruri
  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10,25,40,55 * * * * /usr/local/bin/ruby /var/share/joruri/script/runner \
    -e production "Script.run('sys/script/tasks/exec')"
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  ※公開ディレクトリ : /var/share/joruri/public_00000001

 トップページや中間ページを静的ファイルとして書き出します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  */15 * * * * /usr/local/bin/ruby /var/share/joruri/script/runner \
    -e production "Script.run('cms/script/nodes/publish')"
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 音声ファイルを静的ファイルとして書き出します。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  */15 * * * * /usr/local/bin/ruby /var/share/joruri/script/runner \
    -e production "Script.run('cms/script/talk_tasks/exec')"
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 新着記事ポータルで設定したAtomフィードを取り込みます。

  $ crontab -e
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  0 * * * * /usr/local/bin/ruby /var/share/joruri/script/runner \
    -e production "Script.run('cms/script/feeds/read')"
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

8.動作確認


 joruriは初期状態で以下のサンプル画面が表示されます。
 一部を管理画面で書き換えました。

<トップページ>
<ふりがなをつけた状態 >
<読み上げ画面>

9.さいごに


今回、joruri CMS の最新バージョンである、1.3.1が、ARMアーキテクチャのOpenBlocks上で動作することを確認しました。
joruriは、CMSの他にjoruri GW(グループウェア)などもオープンソースとして公開されていますので、そちらのインストール、評価に関してもまた報告できればと思います。