memo: osm tile server: ubuntu 13.10



かきなぐりメモ帳。
## server environment
ConoHaの一番安いプラン、ubuntu 13.10環境で作成。

## postgis install
for version 2.*.

http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS21UbuntuPGSQL93Apt

`CREATE EXTENSION adminpack;` needs `postgresql-contrib-9.1` package.

```
sudo apt-get install postgresql-contrib-9.1
```

ただ、これのせいで postgres9.3と、postgres9.1が両方インストールされてしまった感じ。調べたら、実働しているのは9.1なので、とりあえず今回は以下のパッケージもインストールした。
たぶん、postgresql-contrib-9.3をインストールすればこんなことにはならなかった。その場合、以下のバージョンも9.3に変更する必要あり。

```
sudo apt-get install postgresql-9.1-postgis-2.1
sudo apt-get install postgresql-9.1-postgis-2.1-scripts
sudo apt-get install postgresql-9.1-postgis-scripts
```

ここも参考か？
http://technobytz.com/install-postgis-postgresql-9-3-ubuntu.html


### Database creation & enable extension on the Database

```
sudo su - postgres
createdb hdm
psql -d hdm
create extension postgis;
create extension hstore;
\q
```

あと、createuserで、ユーザ作ってパスワード設定する。

## mapnik
nightly build is highly unstable, using 2.2.* as package.

https://github.com/mapnik/mapnik/wiki/UbuntuInstallation

```
sudo add-apt-repository ppa:mapnik/v2.2.0
sudo apt-get update
sudo apt-get install libmapnik libmapnik-dev mapnik-utils python-mapnik
```




## install git
as we always do.

```
apt-get install git
```

## apache2

```
apt-get install apache2
```

## mod_tile

http://wiki.openstreetmap.org/wiki/HowTo_mod_tile

```
sudo aptitude install apache2 apache2-threaded-dev apache2-mpm-prefork apache2-utils
sudo apt-get install libagg-dev
```

```
cd ~/src
git clone https://github.com/openstreetmap/mod_tile.git
cd mod_tile
sudo apt-get install dh-autoreconf
./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile # Only needed with recent mod_tile version
```

mod_tileを`mods-available`に格納して、`mods_enabled`からリンクを張ってあげる。
a2enmodコマンドでも可。

```
sudo vi /etc/apache2/mods-available/mod_tile.load
sudo ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/mod_tile.load
```


renderdのsocket管理用ディレクトリを確保。/etc/renderd.confの中の設定、および /etc/apache2/site-availableで設定した値にあわせること。

```
sudo mkdir /var/run/renderd
sudo chown www-data /var/run/renderd
```

あと、サンプル提示されているsite-availableのコンテナ記述は、`ModTileRenderdSocketName`がいろんなところのサンプルと異なっているので、他とあわせること。

```
LoadTileConfigFile /etc/renderd.conf
# ModTileRenderdSocketName /tmp/osm-renderd この行。
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 3
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
```

/etc/init.d/renderdを設置する場合はこちらの手順参照。

http://switch2osm.org/serving-tiles/manually-building-a-tile-server/

```
sudo cp  ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
sudo chmod u+x /etc/init.d/renderd

Edit the /etc/init.d/renderd file as root – you’ll need to make a couple of changes to the DAEMON and DAEMON_ARGS lines so that they read:

DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
```

いったんrootでタイル画像を作ってしまうと、daemon化した時にそのディレクトリに書き込めなくて画像の生成に失敗することがある。ので、daemon化した後はいったん作成したタイル画像を全削除することをオススメ。


## osm2pgsql
```
sudo apt-get install osm2pgsql
```

要確: postgis-1.5がインストールされてしまうが大丈夫か。

## osmosis
パッケージだと、0.40.1がインストールされる。

```
sudo apt-get install osmosis
```

とりあえずは大丈夫だけど、最新版をパッケージ外からインストールしたほうがいいかも。

http://wiki.openstreetmap.org/wiki/Osmosis/Installation

```
wget http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.tgz
tar xvfz osmosis-latest.tgz
cd osmosis-*
chmod a+x bin/osmosis
bin/osmosis
```

### OSM files
for test purpose, bbbike extract would be easy choice.

http://download.bbbike.org/osm/bbbike/Tokyo/


```
wget http://download.bbbike.org/osm/bbbike/Tokyo/Tokyo.osm.pbf
```

### import data into postgis database

ユーザ名とパスワードは適度に変更すること。
GeoFabrikのJapan.-latest.pbfの場合、ファイルサイズが大きすぎてメモリのアロケート調整しないとダメぽい。あるいは slim mode？

```
osm2pgsql -G -U postgres -d hdm /home/nyampire/osmfile/Tokyo.osm.pbf --hstore --create
```

ConoHaの最安プラン(メモリ1G)だと、メモリ320MB割り当てくらいが精一杯ぽい。

```
osm2pgsql -W -G -U postgres -d hdm /home/nyampire/osmfile/japan-latest.osm.pbf --number-processes 2 --slim -C 320 --hstore --create 
```


### fonts

Mapnikの設定ファイル(/etc/renderd.conf)で指定されているフォントディレクトリはシステムのフォントディレクトリ(/usr/share/fonts/truetype)を指しているので、パッケージでインストールしてしまったほうが楽な気がする。

```
apt-get install fonts-vlgothic
```


## tilemill (optional)

## minutely diff (optional)

http://wiki.openstreetmap.org/wiki/Minutely_Mapnik

http://wiki.openstreetmap.org/wiki/Planet.osm/diffs

もしかしたら最強ドキュメント http://switch2osm.org/loading-osm-data/

Komzpa作成のfetchコマンド https://github.com/Komzpa/furry-sansa

タイルの自動更新バッチ(mod_tile用) http://wiki.openstreetmap.org/wiki/Howto_real_time_tiles_rendering_with_mapnik_and_mod_python

mod_tile単体でもいけるぽい。state.txtをちゃんと読み込ませてあげればOK http://wiki.openstreetmap.org/wiki/Mod_tile

state.txtの生成はここがよさげ。過去のstate.txtを使っても、重複ぶんは自動的に排除してくれるようなので、少し過去のぶんから適用するのがよさそう。

http://osm.personalwerk.de/replicate-sequences/

とりあえず、 http://wiki.openstreetmap.org/wiki/Minutely_Mapnik の手順でいけそう。state.txtは、実際のDumpよりも過去の日付を指定していても大丈夫なので、気にせずに生成してトライすればOK。

あと、~/.pgpassに、PostGIS用のパスワードを書いておくと幸せになれる。

こんなかんじのシェルスクリプトを適当にまわして、あとはアップデートのコマンドをcronに放り込んでおけばおっけー。
これで、データベースのアップデートが可能。

``` shell
#!/bin/bash
for i in {0..100}
do
  osmosis --read-replication-interval workingDirectory=$WORKDIR_OSM --simplify-change --write-xml-change - | osm2pgsql --append --number-processes 2 -G -U gis -d hdm --slim -C 320 --hstore -
done
```

タイルのexpireは、これをかませるらしい。

http://wiki.openstreetmap.org/wiki/Tile_expire_methods