GeoNLPのインストール手順まとめ

GeoNLPのインストール手順をまとめています。（前半はLinuxのお作法的な部分なのであまり本題とは関係ありませんが）
GeoNLPの説明とそれを利用した検証の結果は[こちら](https://qiita.com/Aptenodytes9/private/7ac2eb4f9d7ae913320c)のページに書きました。

# CentOSの初期設定
### SSHの設定変更
```
# nanoエディタをインストール
$ sudo yum -y install nano

# SSHサーバーの設定ファイルsshd_configを開く
$ sudo nano /etc/ssh/sshd_config
```
デフォルトポート番号は攻撃を受けやすいので、変更する。

|変更前|変更後|
|:-----------------|:---------|
|#Port 22| Port {任意の番号}|
|#PermitRootLogin yes|PermitRootLogin no|

### SELinuxの設定変更
```
# SELinux設定変更コマンドのインストール
$ sudo yum install -y policycoreutils-python
# 先の任意番号を許可
$ sudo semanage port -a -t ssh_port_t -p tcp {任意の番号}
# 設定を確認
$ sudo semanage port -l | grep ssh
ssh_port_t                     tcp      {任意の番号}, 22
$ sudo systemctl restart sshd.service
```
### ファイアウォールの設定
通常であれば、続いてfirewalld（ファイアウォール）の設定を変更し、先のポート番号を許可させるが、AWS EC2の場合はAWS謹製の「セキュリティグループ」がファイアウォールの働きを担保しているため、firewalldは設定しない（そもそもインストールすらされていない）
AWS EC2インスタンス一覧の画面 > 左メニューにある「セキュリティグループ」> 任意のセキュリティグループ選択 > インバウンド > 編集 から、
「カスタム TCP ルール」を追加する。

### パッケージの更新
```
$ sudo yum -y update
```

### パッケージの自動更新設定
```
# crontabによるYUM自動更新を行うパッケージのインストール
$ sudo yum -y install yum-cron
$ sudo nano /etc/yum/yum-cron.conf
```

|変更前|変更後|内容|
|:-----------------|:---------|:---------|
|apply_updates = no| apply_updates = yes|自動アップデートをON|
|update_cmd = default|update_cmd = security|自動アップデートをセキュリティアップデートに限定|

```
# yum-cronを起動
$ sudo systemctl start yum-cron
# 自動起動をON
$ sudo systemctl enable yum-cron
```

### 不要なサービスを停止
「サービス」は、OS本体と独立可能なサブシステムのこと。
デフォルトで起動されているサービスのうち、不要なものはセキュリティリスクになるため、OFFにする。
下記ではPostfixをOFFにした。（Linuxで標準的に使用されているメールサーバー）

```
# 有効化されているサービスを一覧表示
$ systemctl list-unit-files --type service | grep enabled

# 不要なサービスの起動状態を確認
$ systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-10-22 01:05:44 UTC; 2h 3min ago
 Main PID: 3930 (master)

# 不要なサービスの停止
$ sudo systemctl stop postfix.service

# 自動起動をOFF
$ sudo systemctl disable postfix.service

# ステータス確認
$ systemctl status postfix.service

# 自動起動を再度ONにした場合：
$ sudo systemctl enable postfix
```

### ロケール・タイムゾーンの設定
```
# 現在のシステムロケールを確認
$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
# システムロケールをjpに変更
$ sudo localectl set-locale LANG=ja_JP.utf8
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: us
      X11 Layout: us
# タイムゾーンの変更
$ timedatectl status
$ sudo timedatectl set-timezone Asia/Tokyo
```

# GeoNLPで使用するパッケージのインストール
```
# boostのインストール
$ sudo yum install -y gcc-c++ boost boost-devel

# SQLite3のインストール
$ sudo yum install -y sqlite3-devel

# automakeのインストール
$ sudo yum install -y automake

# autoconfのインストール
$ sudo yum install -y autoconf
```

### MeCabのインストール
参考：[CentOS7.6にMeCab+ipadic+neologd+pythonのmecabモジュールを丁寧にインストールする。](https://qiita.com/YuukiMiyoshi/items/00b9878a1fa32b859a43)

```
# 関連ライブラリのインストール
$ sudo yum install -y  bzip2 bzip2-devel gcc gcc-c++ git make wget curl openssl-devel readline-devel zlib-devel patch file

# 作業フォルダを作成して移動
$ mkdir -p ~/source/mecab
$ cd ~/source/mecab

# ソースのダウンロード
$ wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz

# 解凍
$ tar zxvf mecab-0.996.tar.gz

# インストール先フォルダを作成
$ cd mecab-0.996
$ sudo mkdir -p /opt/mecab

# configureの実行
$ ./configure --prefix=/opt/mecab --with-charset=utf8 --enable-utf8-only

# コンパイル
$ make

# インストール
$ sudo make install

# MeCab実行ファイルをパスに追加
$ echo "export PATH=/opt/mecab/bin:\$PATH" >> ~/.bashrc
$ source ~/.bashrc

# mecabのライブラリにリンク作成
$ sudo bash -c "echo \"/opt/mecab/lib\" > /etc/ld.so.conf.d/libmecab.conf"
$ sudo ldconfig
```
### NAIST辞書のインストール
参考：[MeCabのセットアップ](https://qiita.com/mats16/items/114e67aa6f2d07b38223)

```
# ソースのダウンロード
$ wget http://iij.dl.sourceforge.jp/naist-jdic/53500/mecab-naist-jdic-0.6.3b-20111013.tar.gz

# 解凍
$ tar xvzf mecab-naist-jdic-0.6.3b-20111013.tar.gz

# configureの実行
$ cd mecab-naist-jdic-0.6.3b-20111013
$ ./configure --with-mecab-config=/opt/mecab/bin/mecab-config --with-charset=utf8

# コンパイル
$ make

# インストール
$ sudo make install

# 辞書の参照先を変更
$ mecab -D
$ sudo nano /opt/mecab/etc/mecabrc
```

|変更前|変更後|
|:-----------------|:---------|
|dicdir = /opt/mecab/lib/mecab/dic/ipadic|dicdir = /opt/mecab/lib/mecab/dic/naist-jdic|

### SQLite3のインストール
参考：[Amazon Linux 2でSQLite3を最新バージョンにする](https://qiita.com/kai_kou/items/c18b68a7916251231f6d)

```
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3270100.tar.gz
$ tar xvfz sqlite-autoconf-3270100.tar.gz
$ cd sqlite-autoconf-3270100

# インストール先フォルダを作成
$ sudo mkdir -p /opt/sqlite3

# configureの実行
$ ./configure --prefix=/opt/sqlite3

# コンパイル
$ make

# インストール
$ sudo make install

# 元からインストールされていた方をみにいってしまうので、シンボリックリンクを貼る
$ find /usr/ -name sqlite3
/usr/bin/sqlite3
/usr/lib64/python2.7/sqlite3
$ mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
$ ln -s /opt/sqlite3/bin/sqlite3 /usr/bin/sqlite3
$ sqlite3 --version
3.27.1 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd

```


### DAMSのインストール
[東京大学空間情報科学研究センターサイト](http://newspat.csis.u-tokyo.ac.jp/geocode/modules/dams/index.php?content_id=1)の引用
>ジオコーダDAMS(Distributed Address Matching System）は、住所文字列を経緯度に変換する「ジオコーディング」機能を提供するソフトウェアです。

```
# 作業フォルダを作成して移動
$ mkdir -p ~/source/dams
$ cd ~/source/dams

# ソースのダウンロード
$ wget http://newspat.csis.u-tokyo.ac.jp/download/dams-4.3.3.tgz

# 解凍
$ gzip -dc dams-4.3.3.tgz | tar xf -
$ cd dams-4.3.3

# 利用条件を確認
$ cat COPYING
# インストール先フォルダを作成
$ sudo mkdir -p /opt/dams

/home/centos/source/dams/dams-4.3.3

# configureの実行
$ ./configure --prefix=/opt/dams --with-charset=UTF8
% ./configure --with-charset=UTF8 LIBS=-liconv CPPFLAGS=-I/usr/local/include 


# コンパイル
$ export LIBS=-liconv
$ make
# テキスト位置参照データからバイナリ位置参照データを作成
$ make dic

# インストール
$ sudo make install
```

### (GDAL を利用する場合)GDALのインストール
```
# EPEL リポジトリを追加
$ sudo rpm -Uvh https://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install -y gdal-devel
```

#GeoNLPのインストール
```
# 作業フォルダを作成して移動
$ mkdir -p ~/source/geonlp
$ cd ~/source/geonlp

# ソースのダウンロード
$ wget https://geonlp.ex.nii.ac.jp/software/geonlp-1.2.0.tgz

# 解凍
$ gzip -dc geonlp-1.2.0.tgz | tar xfv -

# インストール先フォルダを作成
$ cd geonlp-1.2.0
$ sudo mkdir -p /opt/geonlp

# configureの実行
$ cd ~/source/geonlp/geonlp-1.2.0
$ ./configure --prefix=/opt/geonlp LDFLAGS="-L/opt/mecab/lib -L/opt/sqlite3/lib" CXXFLAGS="-I/opt/mecab/include -I/opt/sqlite3/include"

$ ./configure --prefix=/opt/geonlp LDFLAGS="-L/opt/mecab/lib -L/opt/sqlite3/lib -L/usr/lib64" INCLUDE="-I/opt/mecab/include -I/opt/sqlite3/include -I/usr/include" CXXFLAGS="-I/opt/mecab/include -I/opt/sqlite3/include -I/usr/include"

# コンパイル
$ make

# インストール
$ sudo make install
```