ルート検索routinoをインストールする

# はじめに

AWS EC2 上にUbuntu-16.04LTS上に、OpenStreetMapのデータを使って、ルート検索を行う routino を動作させるまでの設定です。
（追記）最新の Ubuntu-18.04LTS の設定手順に合わせて、タイプミスやバージョン等の表記を変更しました。

# サーバの準備

## AWS EC2 インスタンスの場合

### インスタンス作成

今回は、t2.medium タイプを選んで、AWSのコンソール画面から起動しました。タイプ選択は「カン」です。

（追記）サーバ設定後は、swapファイル（1GB）を追加した t2.micro でも、ルート検索そのものは動作しています。どこまで耐えられるかは不明。

### 初期ログイン

ubuntu系は、起動時に設定した鍵ペアを使い、ユーザubuntuでログインします。
```
ssh -i XXXX.pem ubuntu@[ip address]
```

# routinoの設定

## 初期更新

ログイン後とりあえずアップデート

```
sudo apt-get update 
sudo apt-get upgrade
sudo apt-get dist-upgrade
```

## ミドルウェア類のインストール

* 開発系ツール類

```
sudo apt-get install gcc make libc6-dev libz-dev libbz2-dev
sudo apt-get install libwww-perl liburi-perl libjson-pp-perl unzip
sudo apt-get install emacs 
```

emacsは私の好みです。

* Webサーバ類

```
apt-get install apache2 cgi.pm
```

**この次にPostgres+PostGISをインストールしましたが routino には不要です.**
**サクッと、「routinoの設定」まですっ飛ばしてください**

* * *

* データベースのインストール

Postgres+PostGIS とデータ変換ツール osm2pgsql
 
```
sudo apt-get install postgresql postgis osm2pgsql
```

データベース初期設定
 
```
$ sudo -i -u postgres
$ psql
psql (9.5.5)
Type "help" for help.
postgres=# \du
  <ロールの確認>
postgres=# CREATE ROLE gis LOGIN CREATEDB PASSWORD 'postgis';
postgres=# CREATE DATABASE osm;
```

ローカルからのＤＢ認証方法を変更

```/etc/postgresql/9.5/main/pg_hba.conf
# "local" is for Unix domain socket connections only
##local   all             all                                     peer
local   all             all                                     md5
$ sudo /etc/init.d/postgresql restart
```

POSTGISテンプレート設定

```
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/rtpostgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/raster_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology_comments.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
```

この後、osm2pgsql でデータを登録

* * *

# routino の設定

## routino のビルド

http://www.routino.org/download/ から最新版をダウンロード

```
wget http://www.routino.org/download/routino-3.2.tgz
```

展開してビルド（コンパイル）

```
tar xvfz routino-3.2.tgz
cd routino-3.2/
make
```

## routino の配置

公開するディレクトリにコピー

```
sudo mkdir /var/www/routino/www
sudo cp -a web/* /var/www/routino/www
sudo chown -R www-data:www-data /var/www/routino
```

## leaflet/OpenLayersのインストール。

いずれも install.sh は古いので編集が必要です。

- leaflet

routino-3.2 では、leafletのレガシーバージョン 0.7.7 を指定していて、install.sh を実行するだけです。

```
$ sudo ./install.sh
```

~~1.0.2 にしてしまいましたが、ルート検索結果の線が表示されないようです。0.7.3 に戻せば大丈夫かもしれません。（未確認）~~

- OpenLayers

こちらは OpenLayers 2 を使います。

```/var/www/routino/www/openlayers/install.sh
#!/bin/sh -x
version=2.13.1
# Download the file.
#wget http://openlayers.org/download/OpenLayers-$version.tar.gz
wget https://github.com/openlayers/ol2/releases/download/release-${version}/OpenLayers-${version}.tar.gz
# Uncompress it.
tar -xzf OpenLayers-$version.tar.gz
# Create a custom OpenLayers file
(cd OpenLayers-$version/build && python build.py ../../routino.cfg && cp OpenLayers.js ..)
# Copy the files.
cp -p  OpenLayers-$version/OpenLayers.js .
cp -pr OpenLayers-$version/img .
cp -pr OpenLayers-$version/theme .
# Delete the remainder
rm -rf OpenLayers-$version
```

## OpenStreetMap データダウンロード＆データ変換

日本全域のデータをダウンロードしてroutinoが扱えるように変換します。

下記のスクリプトを用意しておけば、データの更新は簡単です。もっとも、別のディレクトリで作成してコピーする手順にしないと、データ変換中は検索に失敗します。

```/var/www/routino/data/create_japan.sh
#!/bin/sh -x
# This script can download from the GeoFabrik server.

# EDIT THIS to set the names of the files to download from GeoFabrik.
files="asia/japan-latest.osm.pbf"
server="download.geofabrik.de"

# Download the files
for file in $files; do
   wget -N http://$server/$file
done

# Process the data
../bin/planetsplitter --errorlog *.osm.pbf
```

## 地図パラメータ設定

デフォルトのままだとイギリス近辺しか表示されないので、表示範囲を変更します。
設定ファイル：/var/www/routino/www/routino/mapprops.js

```
$ diff mapprops.js mapprops.js.ORIG
17,18c17,18
< //  westedge:  -11.0,          // Minimum longitude (degrees)
< //  eastedge:    2.0,          // Maximum longitude (degrees)
---
>   westedge:  -11.0,          // Minimum longitude (degrees)
>   eastedge:    2.0,          // Maximum longitude (degrees)
20,21c20,21
< //  southedge:  49.5,          // Minimum latitude (degrees)
< //  northedge:  61.0,          // Maximum latitude (degrees)
---
>   southedge:  49.5,          // Minimum latitude (degrees)
>   northedge:  61.0,          // Maximum latitude (degrees)
23,29c23,24
<   westedge:  128.0,          // Minimum longitude (degrees)
<   eastedge:  145.0,          // Maximum longitude (degrees)
<   southedge:  26.0,          // Minimum latitude (degrees)
<   northedge:  45.5,          // Maximum latitude (degrees)
<
<   zoomout:       6,          // Minimum zoom
<   zoomin:       18,          // Maximum zoom
---
>   zoomout:       4,          // Minimum zoom
>   zoomin:       15,          // Maximum zoom
```

## apacheの設定

まず、環境に応じて、apacheの設定ファイルの ServerAdmin / ServerName などを適切に設定してください。

つぎにCGIを有効化します。（Ubuntuの場合）

```
$ sudo a2enmod cgid
```

routinoに関する設定を行います。、VirtualHost を使ったサンプルですが、単にroutinoの設定をまとめて移設しやすくするために使っているだけです。

```/etc/apache2/sites-available/routino.conf
###
#       for routine
#       hostname: routino.sample.com
####
<VirtualHost *:80>
    ServerAdmin admin@zsample.com
    ServerName routino.sample.com
    DocumentRoot /var/www/routino/www/

    <Directory /var/www/routino/www>
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       AddHandler cgi-script .cgi
   </Directory>

   CustomLog ${APACHE_LOG_DIR}/routino.access.log combined
   ErrorLog ${APACHE_LOG_DIR}/routino.error.log
   ServerSignature Off
</VirtualHost>
```

設定ファイルを反映させ、apacheを再起動

```
$ sudo ln -s /etc/apache2/sites-available/routino.conf /etc/apache2/sites-enabled/routino.conf
$ sudo systemctl restart apache2
```

（追記）１行目のシンボリックリンク作成は、a2ensite を使ったほうが便利。

# 動作確認

  ブラウザでアクセスし本家( http://www.routino.org/uk/ ) と同様の画面が表示されることを確認する。
ルート検索ができない場合は、CGIが動作しない設定になっている、あるいは、OSMデータ変換に失敗しているなどの可能性が考えられる。

# 参考

- https://www.openstreetmap.org/
- http://www.routino.org/
  - http://www.routino.org/documentation/installation.html