Chef SoloをRaspberry Piで動かしてみる

Chef SoloがRaspberry Pi(Raspbian)で動くのか試してみた。#303 の対応により0.4.0からRaspbianがサポートされている。

というわけで実行してみる。なおChef Soloをリモートで実行する場合Raspbianに限ったことではないが事前にsshでパスワードなしで接続でき、さらにsudoがパスワードなしで実行できる必要がある。

$ knife solo prepare rpi
Bootstrapping Chef...
ERROR: SyntaxError: (eval):1: Invalid char `\x1B' in expression
(eval):1: Invalid char `\x1B' in expression
(eval):1: syntax error, unexpected $end, expecting ']'
KnifeSolo::Bootstraps::Linux

しかしリモートでのChef Soloの環境構築がうまくいかない。少しデバッグしてみると

"\e(B\e[m"
"Debian GNU/Linux 7 \\n \\l"
"\r\n"

sshの出力が何かおかしい。sshでcat /etc/issueuname -sなどを実行してOSを判定してセットアップするようだがRaspbianと判定されておらず、さらに余計なゴミが入っているためstripで改行は除去しているが\e(B\e[mが残るのでevalでKnifeSolo::Bootstraps::$osのようにしてクラスを参照する部分が動いていない。

まずRaspbianのシステムをアップデートし、 /etc/issue が更新されたことを確認。

$ sudo apt-get update
$ sudo apt-get upgrade
$ cat /etc/issue
Raspbian GNU/Linux 7 \n \l

ゴミデータについては、内容から察するにどうもpromptで余計なことをしているのが原因っぽい。gitのbranchとかいろいろ出力する自前のdotfilesを作っていてそれをそのままRaspbianにも使っていたがやり過ぎたようなので.profileから外したところうまく動くようになった。

さて気になるのがohaiによるプラットフォーム判定。

key value
platform raspbian
platform_version 7.2
platform_family debian

RaspbianってDebianのバージョンに揃えてるんだっけか。とりあえず自分でレシピを書く分にはplatform_familyがdebianなのでそれで十分。これでRaspberry PiもChef Soloでセットアップできそうだ。