Boxen で mid3v2 を入れる

また boxen...

自分のマシンにはradiko を録音する仕組みを設けていたりします。

前もそうだったのですが、radiko 録音の作業で面倒なのが、id3 タグでの日本語(マルチバイト文字?)。

ここでは、この為に mid3v2 と言うツールを使うことにしています。

そして、この mid3v2 を使いたいが為に、ちょっとした冒険をすることになりました。
と言うのが今回のお話。

あらすじは、
mid3v2 -> python -> mutagen -> pip -> virtualenv ...ん? ん? ヴぁ、ヴァーチャルエンヴぅ?

## python
python::pip { 'mutagen':
    virtualenv => $python::config::global_venv
}

これ長くなりそうだな...

mid3v2 のために...

もちろん、python は要る。そして... ;

  • mid3v2 がパックされている mutagen を入れる必要がある。
  • mutagen 要るなら、それ入れる為に pip を用意する必要がある。
  • pip 要るなら、virtualenv 要る。

んな感じで、別に急がないんだけど、遠回らなくちゃいけないみたいで... orz
素人にとっては何てまどろっこしぃ思ってしまうわけです、えぇ。

python のインストールについては普通通り。すぐ分かる。

mutagen

mutagen の導入についても、構えていたより、すんなりでありました。
...が、問題はその先に。

一応、mutagen とは。

Mutagen is a Python module to handle audio metadata.

ちなみに、自分にとって導入のキッカケとなったのが、こちら。一応、残しておきます。

oggをmp3に変換するスクリプトを(無駄に)書いていたら、どうも和字のタグ(UTF-8)がうまく付けられません。

mutagen のようなモノは "パッケージ" と言うらしいのですが、
その管理/インストールを引き受けてくれる "パッケージマネージャ" っつーのがあるらしく、ここではそのひとつである "pip" なるアイテムを使うことに。理由は、何かこの子がよりイケてるように見えるから、という実に根拠なき感覚的なシロート発想。真意は不明。*1 そして、パッケージのインストールは pip install <パッケージ名> な感じ。
なので、今回のケースですと sudo pip install mutagen みたいな感じになるのでしょう。

では、boxen の puppet では? となると。
python::pp を見ると、example 。;

=== Examples

python::pip { 'flask':
virtualenv => '/var/www/project1',
proxy => 'http://proxy.domain.com:3128',
}

python::pip { 'mutagen': } な感じになりますかね。

と、ソースを眺めていたら気になる記述が。 ;

# Parameter validation
if ! $virtualenv {
    fail('python::pip: virtualenv parameter must not be empty')
}

は? virtualenv って、これ何指定したらいいの...

virtualenv ナヌソレ

名前の雰囲気から、何であるかは分かる。

ですが実際のところ、何をどう指定するが正解かが分からない。

作業目的から、この辺りについて今はあまり掘る気はないので、
知りたいのは、指定する値がテキトーでいいのか、それとも何かお作法があって、それに則った形で決めるようなものなのか。しかし、分かっていない分 :p、この二択すらジャッジできない為体。

こんな時は、皆どうしているのだろう、と先達へ学ぶことに。
最終的に参考にさせて頂いたのはこちら。;

include python
include python::virtualenvwrapper
include 'qt'
python::pip{ 'py-mysql2pgsql':
virtualenv => $python::config::global_venv,
ensure => present
}

うん、なるほど。

virtualenv には $python::config::global_venv を充てれば良いらしいが。
$python::config::global_venv って?

manifests/config.pp 覗いたら、こんあんあるけど。;

# The "global" scope for python modules in boxen
$global_venv = $homebrew::config::installdir

indtalldir はどこから? ... ま、いいや(笑*2

ついでに、どうやら pip は virtualenv による仮想環境内で動作するようなものらしいです。

だから、virtualenv の指定は必要、となる。

ここまでは分かった。

じゃ、どうして仮想環境は無くても良いん、と言う選択肢は用意されていないの? とかその辺りが分かっていない。
と言うか、どうして pip に virtualenv が必要なのか自身が分かっていないからですね。

後で調べる、と、うっちゃりん。

と言う事で

何か、うまく行っているみたいです。何か録音までは出来ているみたいですし。

% pip --version
pip 1.2.1 from /opt/boxen/homebrew/Cellar/python/2.7.3-boxen2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg (python 2.7)

pip は入ってくれているみたい。

% pip freeze
distribute==0.6.34
libxml2-python==2.9.1
mutagen==1.22
stevedore==0.13
virtualenv==1.10.1
virtualenv-clone==0.2.4
virtualenvwrapper==3.7
wsgiref==0.1.2

問題児、mutagen も居るみたい。

% type mid3v2
mid3v2 is /opt/boxen/homebrew/share/python/mid3v2

そして、肝心の mid3v2 も。

動いてもらえてるから良いみたいですけど...
うーん...

もっときちんとしなくちゃならない事が沢山ありますね。
とりあえず、ここまでのおべんきょしゅうりょう。

とゆことではい、おしまい。

*1:つか、このあたり何か分かりにくくありません? あ、いや複雑、と言う訳でもなく、個々言っていることは分かるんです。が、それぞれ仰ることがちょっとずつ、何か、こー錯綜していて。で、シンプルに捉えようとグっと引いて見てみると、どうも腑に落ちない。例えば、pip は easy_install に変わる、より強いヤツとして、easy_install より pip 使うのがよろしいって言われてるけど、その pip は easy_install でインストールする、とか...とか、なぁんか。そんなもんだ、と理解無く理解すれば良いのは分かるのですが、やっぱ落ちてこない。

*2:どなたか、読み方教えてください prz