ServersMan+CentOS7でRadikoのmp3を作る

# やりたいこと
個人用途で Radiko の mp3 を聞く環境を作る

# 前提環境
- DTI ServersMan Entry プラン
- CentOS 7 (7.3.1611)

# 補足

- ホントは yum install だけで簡単に環境を作りたかった
  - 通常の環境であれば RPM Fusion や EPEL で実現出来たかもしれない
- しかし ServersMan は OpenVZ のためか、ffmpeg パッケージの依存関係を解決できなかった
- このため録音に必要なソフトウェアを自分で入れることにした
- その際 rpm を簡単に作る方法を見つけたので、備忘がてら記載する


## 今後のメモ
後述の手順で目的は達成できたけど、いくつか検討の余地があるので備忘を残しておく。

- 以下の方法では ffmpeg を実行する際に lame ライブラリへの LD_LIBRARY_PATH を指定しないといけない
  - 面倒。忘れそう。
  - ffmpeg のコンパイルの際にスタティックリンクなど出来ないか検討の余地あり。
- fpm で入れるとテンポラリのパス情報が残る
  - キレイじゃない
  - ```strings /lib/libmp3lame.la | grep rpm.lame``` すると ```libdir='/tmp/rpm.lame-3.99.5/lib'``` とか出てくる
  - ```strings /usr/bin/ffmpeg``` でも同様。
  - configure のオプションで正しくライブラリパスを指定できるかも？
  - もしくは fpm のオプションを使うとか？

# 導入メモ
概要は以下。

- rpm を作成するためのソフトウェア fpm (rubyで書かれたもの) を入れる
- Radiko の録音に必要な swftools, lame, ffmpeg を入れる

## rpm を作成するためのソフトウェア
### fpm のインストール
fpm をインストール。

```shell-session
# yum -y install gcc ruby ruby-devel ruby-libs rubygems rpm-build
# gem install fpm
```
入った Ruby および gem の確認

```shell-session
$ ruby --version
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
$ gem list fpm
*** LOCAL GEMS ***
fpm (1.8.1)
```

### 備忘
- fpm は make install した先のツリー構造をもとに rpm を作成するらしい。
このため一回テンポラリディレクトリに make install する必要がある
- configure の --prefix オプションでテンポラリディレクトリを指定した方が良さそう。理由は以下。
  - make install の引数に DESTDIR=/path/to/install のように DESTDIR を指定できる場合（例: lame）もあるが、出来ない場合（例: swftools）もあるため
  - 大抵の場合デフォルトの prefix は /usr/local なので、オプションなしで configure を叩いて rpm を作ると /usr/local 以下に入ってしまうため
  - rpm で管理しているので /usr/local 以下じゃなくて良いと思ったため
- 以下の手順では rpm 名を ``` ≪パッケージ名≫-≪バージョン≫.≪OS≫.≪アーキテクチャ≫.rpm ``` で作成したけど、管理上「mypkg」とかキーワードを入れておいた方が良かったかもしれない

## 録音環境用ソフトウェアのインストール

インストール後に清書したので厳密ではないかも。

### swftools のインストール
http://www.swftools.org/ から swftools-0.9.2 をダウンロードし、rpm を作成してインストールする。

ちなみに以下では swfs の Makefile が誤っていたので修正している（2017/05/06追記）

```shell-session
# tar xzf swftools-0.9.2.tar.gz
# cd swftools-0.9.2
# cp -p swfs/Makefile.in{,.org}
# vim swfs/Makefile.in
# diff -u  swfs/Makefile.in.org swfs/Makefile.in
--- Makefile.in.org     2012-04-09 02:25:26.000000000 +0900
+++ Makefile.in 2017-05-03 18:30:16.000000000 +0900
@@ -41,9 +41,9 @@
        $(INSTALL_DATA) ./PreLoaderTemplate.swf $(pkgdatadir)/swfs/PreLoaderTemplate.swf
        $(INSTALL_DATA) ./tessel_loader.swf $(pkgdatadir)/swfs/tessel_loader.swf
        $(INSTALL_DATA) ./swft_loader.swf $(pkgdatadir)/swfs/swft_loader.swf
-       rm -f $(pkgdatadir)/swfs/default_viewer.swf -o -L $(pkgdatadir)/swfs/default_viewer.swf
+       rm -f $(pkgdatadir)/swfs/default_viewer.swf
        $(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
-       rm -f $(pkgdatadir)/swfs/default_loader.swf -o -L $(pkgdatadir)/swfs/default_loader.swf
+       rm -f $(pkgdatadir)/swfs/default_loader.swf
        $(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
 
 uninstall:
# ./configure --prefix=/tmp/rpm.swftools-0.9.2
# make
# make install
# fpm -s dir -t rpm -n swftools -v 0.9.2 -C /tmp/rpm.swftools-0.9.2 -p swftools-0.9.2.el7.x86_64.rpm .
# rpm -ivh swftools-0.9.2.el7.x86_64.rpm
```


### lame のインストール
※ 2017/05/06 追記: RPM Fustion リポジトリを使う場合は``` yum install lame lame-libs ```だけで済むようだ。
以下はソースから rpm を作成してインストールする手順。

http://lame.sourceforge.net/ （実際は SourceForge）から lame-3.99.5 をダウンロードし、rpm を作成してインストールする。

```shell-session
# tar xzf lame-3.99.5.tar.gz
# cd lame-3.99.5
# ./configure --prefix=/tmp/rpm.lame-3.99.5
# make
# make install
# fpm -s dir -t rpm -n lame -v 3.99.5 -C /tmp/rpm.lame-3.99.5/ -p lame-3.99.5.el7.x86_64.rpm .
# lame-3.99.5.el7.x86_64.rpm .
```

### ffmpeg のインストール
http://ffmpeg.org/ から ffmpeg-3.3 をダウンロードし、rpm を作成してインストールする。

```shell-session
# tar xzf ffmpeg-3.3.tar.bz2
# cd ffmpeg-3.3
# ./configure --prefix=/tmp/rpm.ffmpeg-3.3 --enable-libmp3lame 
# make
# make install
# fpm -s dir -t rpm -n ffmpeg -v 3.3 -C /tmp/rpm.ffmpeg-3.3 -p ffmpeg-3.3.el7.x86_64.rpm .
# rpm -ivh fmpeg-3.3.el7.x86_64.rpm
```

### 実行
ffmpeg が実行できるか確認。

```shell-session
$ export LD_LIBRARY_PATH=/lib/
$ ffmpeg --help
```
mp3 のエンコーダ（lame）が見つからない場合は ```ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory``` と出力される。

問題なくヘルプが表示されたら、以下のように録音を開始する。

```shell-session
$ rec_radiko.sh [option]
```

# 感想

- fpm は便利
- rec_radiko.sh も便利

作ってくれた先人に感謝します。