Ubuntu14.04 に yrmcds を入れて遊ぶ。

[yrmcds](https://github.com/cybozu/yrmcds)インストールの備忘。

## VMの準備

* Vagrant box の初期化

```
> vagrant box add ubuntu14_04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
> vagrant init ubuntu14_04
```

【追記】[こちら](https://atlas.hashicorp.com/boxes/search)から取ってくるように変更。

```
> vagrant init ubuntu/trusty64
```

* private network の有効化

Vagrantfile の `# config.vm.network "private_network", ip: "192.168.33.10"` のコメントアウトを外す。
ついでにIPもデフォルトから変更する。(すでに 192.168.33.10 は別のVMで使っているという想定)
今回は 192.168.33.11 にしておこう。

```
sed -i -e 's/#\ config\.vm\.network\ "private_network",\ ip:\ "192\.168\..\{2\}\..\{2\}"/config\.vm\.network\ "private_network",\ ip:\ "192\.168\.33\.11"/' Vagrantfile
```

* VM起動、ログイン

```
> vagrant up
> vagrant ssh
```

この辺まではいつものやーつ。

## yrmcds のインストール

* yrmcdsダウンロード・インストール

```
> mkdir yrmcds; cd yrmcds
> wget https://github.com/cybozu/yrmcds/archive/v1.1.1.tar.gz
> tar xzf v1.1.1.tar.gz
> cd yrmcds-1.1.1
> make
echo -n 'static char COPYING[] = R"(' > COPYING.hpp
cat COPYING >>COPYING.hpp
echo ')";' >>COPYING.hpp
g++ -std=gnu++11 -O2  -gdwarf-3   -Wall -Wnon-virtual-dtor -Woverloaded-virtual  -I. -DCACHELINE_SIZE=64 -DDEFAULT_CONFIG=/usr/local/etc/yrmcds.conf -DUSE_TCMALLOC  -c -o src/main.o src/main.cpp
make: g++: Command not found
make: *** [src/main.o] Error 127
```

おや、エラー。
依存ライブラリを先に入れなければ。

* C++11 compiler インストール

```
> sudo apt install g++
> g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

* libgoogle-perftools-dev インストール

```

> sudo apt-get install libgoogle-perftools-dev
```

* 再度、yrmcdsインストール

```
> make
> sudo make install
> which yrmcdsd
/usr/local/sbin/yrmcdsd
```

* yrmcds 起動

```
> sudo /usr/local/sbin/yrmcdsd
2015-05-15 12:12:45 ERROR [yrmcds::config::bad_config] Not a directory: /var/tmp/yrmcds
Exception [yrmcds::config::bad_config] Not a directory: /var/tmp/yrmcds
```

ディレクトリが無いと言われる。これはこちらで作成しないといけないのかな？

```
> mkdir /var/tmp/yrmcds
> sudo /usr/local/sbin/yrmcdsd
```

お、起動したっぽい。

## ホストPCから接続確認

memcached 互換なので、telnet で繋いでみよう。

```
> telnet 192.168.33.11 11211
Trying 192.168.33.11...
Connected to 192.168.33.11.
Escape character is '^]'.
stats items
STAT items:1:number 0
STAT items:1:age 0
STAT items:1:evicted 0
STAT items:1:conflicts 0
STAT items:1:largest 0
END
```

繋がった！
memcached 用ライブラリなどで読み書きを試したり、遊んでみよう。

## Ansible で環境構築

上記の設定(依存ライブラリインストール、yrmcdsインストール、起動に必要なディレクトリ作成)をAnsible Playbookで書いてみた。

```yaml:yrmcds.yml
---
- hosts: yrmcds
  user: vagrant
  vars:
    workdir: ~/yrmcds
    version: 1.1.1
  tasks:
    - name: install dependency modules
      apt: pkg={{item}}
      with_items:
        - g++
        - libgoogle-perftools-dev
      sudo: yes
    - name: make working directory
      file: path={{workdir}} state=directory mode=0755
    - name: download yrmcds
      get_url: url="https://github.com/cybozu/yrmcds/archive/v{{version}}.tar.gz" dest={{workdir}}/yrmcds.tar.gz
    - name: extract yrmcds
      command: tar xfz {{workdir}}/yrmcds.tar.gz chdir={{workdir}}
    - name: make yrmcds
      command: make chdir={{workdir}}/yrmcds-{{version}}
    - name: install yrmcds
      command: sudo make install chdir={{workdir}}/yrmcds-{{version}}
    - name: make tmp directory
      file: path=/var/tmp/yrmcds state=directory mode=0755
```