upinetree's memo

Web系技術の話題や日常について。

Dockerコンテナに対してAnsibleで雑にプロビジョニングする

Packer の ansible provisioner とか使っていると、変更差分の動作確認したくなってくる。 毎回 packer build するのは時間がかかり休憩が捗りすぎて進捗がでないという問題点があり、なんとかしたい。

しかしそのために環境作るのも面倒だ。そこで前回出力した docker image を元にコンテナ立ち上げてそこに ansible 走らせたらええやんと思いつく。 といってもsshd立てるのも面倒だし微妙らしいので方法を探していたら、どうやら Docker Connection Plugin というものが標準装備されているらしい。

$ docker-compose run --rm -u root web bash
$ ansible-playbook -i web_run_1, -c docker ansible/web.yml
  • -i (--inventory)のhostsはコンテナ名
  • -c (--connection)dockerを指定

Pakcer の ansible provisioner が用意する ansible とローカルの ansible のバージョンが違うことがあるのでそれだけ注意。

参考

vimprocのビルドで失敗するとき

vimプラグインマネージャをdein.vimにして(*1)、 Ubuntu 14.04.4 のVM:call dein#install()したら下記のような感じで怒られた。

(*1)たぶんdein.vimにしたことは関係ない

vimproc's DLL: "/home/vagrant/.vim/bundle/repos/github.com/Shougo/vimproc.vim/lib/vimproc_linux64.so" is not found.  Please read :help vimproc and make it.

vimprocがないとUnite.vim/asyncとか/gitとか使えなくて困るのでなんとかする。

エラーメッセージによると、makeしてsoを作れば良いらしい。

% .vim/bundle/repos/github.com/Shougo/vimproc.vim
% make
clang -W -O2 -Wall -Wno-unused -Wno-unused-parameter -std=gnu99 -pedantic -shared -fPIC  -o lib/vimproc_linux64.so src/proc.c -lutil
make[1]: clang: コマンドが見つかりませんでした
make[1]: *** [lib/vimproc_linux64.so] エラー 127
make[1]: ディレクトリ `/home/vagrant/.vim/bundle/repos/github.com/Shougo/vimproc.vim' から出ます
make: *** [all] エラー 2

ふむ。

% which clang
clang not found
% which gcc
/usr/bin/gcc

gccならある。

% make CC=gcc
% file lib/vimproc_linux64.so
lib/vimproc_linux64.so: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c624b2200f2f23cfff02e7c019707d36d0bff381, not stripped

OK。

(本当はclang入れたほうが良いんだろうけど面倒くさくて…)

ブログタイトルと説明を少し変えた

具体的にはこんな感じ:

- upinetree's tech blog
+ upinetree's memo

Qiitaに書き始めてからこのブログ全然書いてないのでもったいないなーと思い、ブログを書く敷居を少し下げてみました。

Qiitaにはちゃんと検証した技術ネタを書いて、こちらにはメモ的なものを残していければなと。

あと気が向いたら日常とか考えていることとか書くのも良いですね。気が向くかわからんけど。

Digitech RP360のファームウェア更新に失敗した時の直し方

http://www.digitechjapan.jp/products/RP360/rp360.html

これ(マルチエフェクター)の話です。 ちょっと焦ったのと、日本語の情報がなかったので書き残しておきます。

結論

RP360本体を再起動し、Windows10以外のマシンでアップデートする。

詳しく

先日、Windows10 PCに専用ライブラリアンアプリNexus を入れて起動したらファームウェアアップデートせよと言われたので、表示に従ってアップデートを試みました。 ところが更新に失敗。

RP360側のモニタは

RP 360 Upd V2.0.0.0
IN UPDATER: WAITING FOR HOST…

と表示したままで、再起動しても変化せず。

下記に類似の現象が何件か報告されている模様だったので読んでみることに。

すると、2番めの記事の一番後ろに「Windows10じゃ動かないよ。Vistaでアップデートしたら解決したよ」とのコメントが…。

僕はVista持ってなかったので、Mac (Yosemite)でもう一度アップデートを行うと、成功。 まあなんかWindows10大丈夫かとは思っていたけど、まさかソフトウェアが起動しないとかじゃなくて、ファームウェアがいかれるとは思ってなかった。 そしてあとから確認すると、こんな記載が…。

注意書きも読まずに最新バージョンのOSを常に使ってるとハマるよという教訓でした。 直ってよかった。

rails newのときのテンプレのアレ作った

rails newするたびに同じ設定するの面倒になったのでマイテンプレつくった。

https://github.com/upinetree/rails_template

まだ途中だけど、ちょっとずつ育てていこうかなと〜。

参考:

転職から1年経ったのでTokyuRuby会議08で樽酒割った

と書いてみたものの、題名の前半と後半は実はあんまり因果関係ないです。

僕がこんなエントリを書いて転職してから、はや一年が経ちました。

2013-11-01 - 転職します - upinetree's tech blog

今読むと妙に力が入っていて恥ずかしい感じがします。一年しか経ってないのに。 でも、たぶんこれはこのときしか書けないことだったんだろうなあ。

一方で、TokyuRuby会議が11/29に開催されました。

TokyuRuby会議08 - Regional RubyKaigi

このイベントで、弊社は樽酒を提供する形で支援していて、そのためLT枠と樽酒を割る権利をいただけることになったのでした。 樽酒を割っている写真はインターネット上のどこかに漂っていると思います。樽酒、なかなか簡単には割れないんですね…。

さて、このLTの話が回ってきて、思わず「やります!」って言ってしまったは良いものの、樽酒スポンサーとしてどんな発表をしたものか頭を悩ませていました。 そこで、ちょうど僕が万葉に入社してから一周年だったということを思い出したわけです。 これも良い節目ということで、こんな発表をしてきました。

お酒入ることを想定してだいぶテンション高めです。

この発表で喋ったように、本当に僕を取り巻く環境は全然変わってしまって、一年しか経ってないのに不思議なものだなあと常々思っています。 入社当初はRailsアプリ全然書けなかったですし、前職までずっとWinユーザでLinux系はほとんどさわれなかったのを思い出します。そんな状態でしたが、今は未熟ながらも業務で日々新たな技術、課題と闘いながらたのしく働いています。 (今回はあまり喋れなかったお客さんとの働き方とか、そのための具体的なプラクティス的な話をどこかでしたいなあ)

そして、転職当初からずっと参加している勉強会のyochiyochi.rbにはとても感謝しています。引っ越した翌日だったかに第0会に参加して、最近こちらも一周年でしたね。なんかいろいろあって顔出す頻度落ちてますが今後共よろしくお願いいたします。

ところで、最近自分は甘ったれている気もして、前職で色々やっていたのは逆境だったからこそというのはあったんだなあと気付かされました。(その分内面はボロボロになっていたけど…) いや、甘ったれているというよりは、健全に意見を出せるようになったし、健全に議論できるようになったのかもしれないですが、なんかもうあと一歩踏み出したいなあという思いがあります。

まとまりのない文章になってしまいましたが、つまり、まとめると、"We are hiring!!"ってことです!

fluentdを使ってIdobataでニコレポを取得する

はじめに

先日ニコレポ用のfluentdプラグインを書きました。

https://github.com/upinetree/fluent-plugin-nicorepo

このまえ作ったニコレポgemを使って、ニコ動からニコレポを逐次取得してくれるすごいやつです。 (別にfluentdじゃなくてもいいじゃんというのはなしの方向で…)

いわゆる完全に俺得プラグインなんだけれども、使い方の説明の意味も含めて記事を書くことにします。

セットアップ

今回、fluentdはherokuで動かすことにします。 準備とかは下記のリンクが詳しいので参考にしつつやっていきます。

http://docs.fluentd.org/ja/articles/install-on-heroku

ひな形のClone

heroku-td-agentというheroku用の便利なひな形があるので利用します。

次のような感じでリポジトリ作りましょう。

$ git clone git://github.com/treasure-data/heroku-td-agent.git heroku-fluentd-nicorepo
$ cd heroku-fluentd-nicorepo
$ rm -fR .git
$ git init
$ git add .
$ git commit -m 'initial commit'

herokuアプリの作成とデプロイ

Heroku Toolbelt が入っていれば、次の方法でアプリの作成とデプロイができます。

$ heroku apps:create your-app-name
$ git push heroku master

動作確認

ここまで来たらひとまず動作確認します。

$ curl http://your-app-name.herokuapp.com/debug.sample -F 'json={"hoge": "fuga"}'
$ heroku logs --tail

2014-06-09T16:13:38.544846+00:00 app[web.1]: 2014-06-09 16:13:38 +0000 debug.sample: {"hoge":"fuga"}

上記みたいなのが出力されてたらOKです。

confの設定

さて、いよいよニコレポを取得してIdobataに流していきます。 あたりまえのことですが、ニコニコ動画のアカウントがあり、ニコレポで誰かをウォッチしている状態でないと、いつまでたっても何も流れてきませんのでご注意を。

今回、gemはfluent-plugin-nicorepofluent-plugin-idobataを使用します。 従ってGemfileは次の状態にします。

source 'http://rubygems.org'

ruby '2.1.2'

gem 'fluentd', '~> 0.10.48'
gem 'fluent-plugin-nicorepo'
gem 'fluent-plugin-idobata'

また、td-agent.confを次のように設定します。 今回は1時間おきに生放送だけを取りに行くようにしてみました。

<source>
  type nicorepo
  mail your@email.com
  pass yourpassword
  interval 1h
  kind lives
  tag nicorepo.idobata
</source>

<match nicorepo.**>
  type copy
  <store>
    type idobata
    webhook_url https://idobata.io/hook/url
    message_template <%= record[:body] %> @<%= record[:date] %> / <%= record[:title] %>: <%= record[:url] %>
  </store>
  <store>
    type stdout
  </store>
</match>

ニコ動のアカウントmail, passと、Idobataのwebhook_urlを書き換えるのを忘れないでください。 Idobataのwebhook_urlとは、流したいスレのRoom Settingsから'Add a Hook'して取れるEndpoint URLのことです。

再度デプロイしてあとは流れてくるのを待つだけです!

$ git add .
$ git commit -m 'setup nicorepo on idobata'
$ git push heroku master

あと、取得を1時間以上の間隔に設定する場合はこの設定やっておいたほうが良いかもです。

Heroku の Dyno を寝かせない - present

たまにheroku側で再起動して同じニコレポが2回やってきたりしますがご愛嬌。

お疲れ様でした。