ローカル環境でgitbookを使う

# やりたいこと
ローカル環境にgitbookをinstallしてpdfで出力する

# 前提条件
CentOSは6.4
node.jsはinstall済み

# gitbookをinstallする

```
$ sudo npm update
$ sudo npm install gitbook-cli -g
$ git clone https://github.com/onigra/gitbook-sample
$ cd gitbook-sample
$ gitbook build
$ gitbook serve
```

URLが表示されるのでブラウザからアクセスします。
確認できたら`ctrl+c`でサービスを一旦止めます。

# pdf出力用にcalibreをinstallする
install方法は[公式サイト](http://calibre-ebook.com/download_linux)を参考。
証明書でエラーになることがあるので、2016年02月時点では、

```
$ sudo -v && wget --no-check-certificate -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
```

がお勧めです。

# calibreの動作環境を満たしているか確認する

## 必要なlibstdc++がinstallされているか確認する
アプリケーションが要求するバージョンは`GLIBCXX_3.4.15`です。

```
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
```

含まれていない場合はinstallを行います。
`ibstdc++`は`gcc`に含まれています。
`gcc`をビルドして、`libstdc++`を取り出して既存のものと置き換えます。

## ビルドに必要なヘッダーのインストールします

```
$ sudo yum install gmp-devel mpfr-devel libmpc-devel
$ sudo yum install glibc-devel.i686
```

## ミラーサイトからソースコードをダウンロードします

```
$ mkdir -p ~/src
$ cd ~/src
$ curl -LO http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz
$ tar fxz gcc-5.3.0.tar.gz
$ cd gcc-5.3.0
```

## ビルドします

```
$ ./configure
$ make
```

## ライブラリをコピーします。

現在のライブラリインストール状況を確認して、最新のライブラリ`libstdc++.so.6.0.21`をコピーします。

```
$ ls -l /usr/lib64/libstd*
lrwxrwxrwx 1 root root     19  4月  3 15:50 2015 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13
-rwxr-xr-x 1 root root 987096 10月 15 07:48 2014 /usr/lib64/libstdc++.so.6.0.13

$ sudo cp ${HOME}/src/gcc-5.3.0/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
```

既存のライブラリ (`libstdc++.so.6.0.13`) から、先ほどコピーした新しいライブラリに切り替えます。
古い方のライブラリはシンボリックリンクを含めて削除せず、いつでも切り戻せるよう移動するだけにします。

```
$ cd /usr/lib64
$ sudo mv libstdc++.so.6 libstdc++.so.6.bak
$ sudo ln -s libstdc++.so.6.0.21 libstdc++.so.6
$ ls -l /usr/lib64/libstd*
lrwxrwxrwx 1 root root       19  2月  3 13:52 2016 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x 1 root root   987096 10月 15 07:48 2014 /usr/lib64/libstdc++.so.6.0.13
-rwxr-xr-x 1 root root 11204470  2月  3 13:51 2016 /usr/lib64/libstdc++.so.6.0.21
lrwxrwxrwx 1 root root       19  4月  3 15:50 2015 /usr/lib64/libstdc++.so.6.bak -> libstdc++.so.6.0.13
```

目的のバージョンの`GLIBCXX_3.4.15`が有効になっているか確認します。

```
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
BCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
```
これで`calibre`の環境構築は完了です

# gitbookでpdf出力を行う

`gitbook-sample`内で下記のコマンドを実行するとpdfが出力できます。

```
$ gitbook pdf
```

これでpdf出力までの環境が構築できました。
`gitbook-sample`は動作確認のためにcloneしたので、不要なら削除して、ローカルリポジトリを作成しましょう。


# 関連記事

[Gitbookインストールメモ](http://qiita.com/fuuuuumin65/items/79b64b5ff0762db289bb)
[いまさら始めるgitbook インストール編](http://qiita.com/regtan/items/3e7f7b9ff5aa23578cac)
[gitbook試してみた](http://qiita.com/nekogeruge_987/items/46dfb552b33aac4ef9b0)