Windows でだけ Linux サーバへの Chef のプロビジョニングが失敗する問題への対処

invalid byte sequence in UTF-8

とか言われて表題のような事象に悩んでる人向けに解決法を残しておく。

Cookbook を Git で管理していて、 git config core.autocrlf が true の場合、チェックアウト時に LF => CRLF 変換をかけてしまう。そのため、Linux サーバへのプロビジョニング時に問題が発生する場合がある (files でスクリプトを設置するときは特に注意が必要)

core.autocrlf

ProGit 引用

自分が Windows で開発していたり、チームの中に Windows で開発している人がいたりといった場合に、改行コードの問題に巻き込まれることがありがちです。Windows ではキャリッジリターンとラインフィードでファイルの改行を表すのですが、MacLinux ではラインフィードだけで改行を表すという違いが原因です。ささいな違いではありますが、さまざまなプラットフォームにまたがる作業では非常に面倒なものです。 Git はこの問題に対処するために、コミットする際には行末の CRLF を LF に自動変換し、ファイルシステム上にチェックアウトするときには逆の変換を行うようにすることができます。この機能を使うには core.autocrlf を設定します。Windows で作業をするときにこれを true に設定すると、コードをチェックアウトするときに行末の LF を CRLF に自動変換してくれます。

対策

.gitattributes ファイルで改行コードを固定したいファイルを指定して変換しないようにする

参考 https://help.github.com/articles/dealing-with-line-endings/

# Linux サーバ上に配置するスクリプトを想定
*.sh eol=lf
# そもそも全部 lf でいいやという場合
*.* eol=lf

または、ディレクトリ以下のファイルの変換を行わないようにする

# 例えば、cookbooks/ に設置
* eol=lf

既にリポジトリをチェックアウトしている場合は、対象のファイル・ディレクトリを一旦削除してから git chekout -- hogehoge.sh とかしてチェックアウトしなおすと、指定した改行コードのファイルで再作成してくれる。

YAPC::Asia Tokyo 2015 で CONBU スタッフとボランティアスタッフしてきた

例年ブログを書くのが遅いのですが、これでようやく自分の YAPC も終わることができます。

あなたと YAPC

今年で4回目の YAPC に行ってきました。スタッフ参加では3回目です。更に、去年の YAPC 後の HUB での縁があって、今年は CONBU の方のスタッフとしても参加していました*1

普段は周りに YAPC を知ってる人のほぼ居ない職場で働いてたりするので、Web 業界界隈の話題で盛り上がれる知り合いは YAPC にスタッフ参加して得た大きな財産ですよ、はい。

YAPC ボランティアスタッフとして今年やったこと

YAPC のボランティアスタッフとしてやったことは例年とほとんど変わりません。前夜祭の受付前に集まって、年々洗練されてきたノベルティ詰めや Tシャツのたたみ直し*2を行い、各トークの司会・タイムキーパー・会場誘導等をやってました。会場での仕事は、同じ部屋のスタッフみんなや部屋係のリーダーがすごく頑張ってくれていたおかげで、大きな混乱もなくて良かったです。

ビックサイトになって会場キャパは倍増くらいしたけど、今年も満員のトークがいっぱい有りました。入れなかった人には心苦しいですが、「後で YouTube に上がるのでチェックしてみてください」とアナウンスするしかできませんでした。今年はアップロードが早くて、既に多くのトークが上がってるので、見れなかったトークや裏番組をチェックしましょう!

yapcasia - YouTube

CONBU スタッフとして今年やったこと

宣伝

みなさん、CONBU が会場混雑を推測できる API を提供していたことは知っていましたか?

YAPC::Asia Tokyo 2015 会場ヒートマップ | CONBU API

YAPC 期間中のヒートマップを再現するようにしました!会場ヒートマップ眺めるの結構楽しいですよ!上記リンクから見れるので、自分が居た会場の混み具合を思い起こすのもいいのではないでしょうか!

f:id:ikosin:20150902022730g:plain

なぜ会場ヒートマップは作られたのか

CONBU スタッフとしては、設営はほぼ参加せず、大きな話題になった LT(ライトニング設営: Lightning seTsuei)にも出なかったのですが、代わりに何が出来るか考えた所、会場ヒートマップが生まれました。

もともとは、今回から CONBU API というものを公開して、YAPC 参加者が自由にアプリとか作ってくれるといいなという感じでした。

自分は開発用に擬似的なサンプル値を返すアプリをちょろっと書いていて*3 API の仕様も把握したので、ちょっとでも動くものが見せられたらみんな API 使ってアプリ作りたくなるかもと思い、前夜祭前日の日付が変わったくらいから3時間程度で書いたアプリです。当初はサンプル値をマッピングするだけのデモアプリでした。

この時はただのデモアプリです

ただ想定外だったのが、今年の YAPC スタッフが手際が良すぎてノベルティ詰めが予想以上に早く終わってしまい、空いた時間で実データを反映するように改修して公開したら自分でも楽しくなってきてしまいました。そこからちょくちょく機能追加*4したりするうちに、気づけば公式アプリっぽい雰囲気になっていきましたw

まとめ

*1:正式には CONBU の方は今週末の LL の募集に応募してたけど、YAPC も当日設営以外は準備等参加してた

*2:Tシャツは本当にあっという間に全部捌けてしまった

*3:もともとネットワーク機器の設定チームだったけど、そっちではあまりにも無力で役に立てなかったためカッとなって書いた

*4:細かい無線AP の位置調整をしたり、当初は部屋単位のアソシエーション数をマッピングしていたのを無線AP 毎のアソシエーション数が反映されるように改修

Test Kitchen の .kitchen.yml, .kitchen.local.yml を上書きする方法

環境変数で読み込むファイルを上書きできる

export KITCHEN_YAML=.kitchen.my.yml
export KITCHEN_LOCAL_YAML=.kitchen.my_local.yml
export KITCHEN_GLOBAL_YAML=$HOME/.kitchen/my_config.yml
kitchen verify

経緯

Override config file location via environment variables · Issue #304 · test-kitchen/test-kitchen という Issue があがり、それに対するプルリクで上書きができるようになった Add local & global file locations with environment variables. by fnichol · Pull Request #306 · test-kitchen/test-kitchen