読者です 読者をやめる 読者になる 読者になる

There's an echo in my head

日々のメモ。

knife-soloでControlMasterが煩わしかったのでなんとかした

ssh knife-solo tips

knife-solo v0.5.0から

  1. 最初はrootでknife solo bootstrap my.host.jp -x rootする
  2. 続けてそのときに作ったユーザsome_userknife solo cook my.host.jp -x some_userする

としたときにエラーが発生するようになった。

原因はknife-solo v0.5.0でSSHのControlMasterがサポートされるようになったことで、これがあると最初にsshしたときのコネクションをホストごとに使いまわし続けてしまうためらしい。

対応方法としては3つあって、

1. --ssh-control-masterオプションを指定する

knife-soloを叩くときに指定できる。

$ knife solo cook my.host.jp --ssh-control-master no

ただ毎回は面倒くさいので設定でなんとかしたい。

2. ControlMasterを無効化する

~/.ssh/configに次のように記載する。

Host *
  ControlMaster no

ただ無効にしちゃうとControlMasterの恩恵を受けられなくなるので、それはそれで避けたい。

3. ControlPersistでを設定する

OpenSSH 5.9から入ったControlPersistでコネクションのタイムアウトを設定できるようになったとのことなので、~/.ssh/configに次のように記載する。

Host *
  ControlPersist 10 # 10秒で切る

ちなみに手元のsshのバージョンは次のコマンドで調べられる。

$ ssh -V 
OpenSSH_6.9p1, LibreSSL 2.1.8

参考

パイプした内容をopenコマンドの引数に渡すopipeというコマンドを作った

github.com

grepして見つけたファイルをパイプしてそのままAtomで開きたいと思って作ってみた。

$ git grep -l Neko | opipe -a Atom

でもよくよく考えてみたら

$ atom $(git grep -l Neko)

でいけるわよね…。

追記

あああ、xargsでいけた…。

$ git grep -l Neko | xargs atom

なんで思いつかなかったんだろう。

りんごジャムの作り方

用意するもの

  • りんご 2個
  • グラニュー糖 80cc

作り方

  1. りんごの皮を剥いて八等分して芯をとり、さらに5mm弱の間隔で刻む。
  2. 鍋にりんごとグラニュー糖を入れて弱〜中火で煮ながら果肉を潰していく。
  3. あらかた潰して若干の粘り気が出てきてもうめんどくせえなってなったら、煮沸消毒した瓶に詰めて蓋を閉め、自然に冷ます。
  4. 人肌ぐらいにまでなったら冷蔵庫で冷やす。

ポイント

  • 煮詰めて汁気がなくなると冷やしたときにカチカチになる。まだかなり汁あるけど大丈夫?ぐらいで大丈夫。
  • 最初にちゃんと刻んでおくと潰す手間が減って楽。おたまやヘラでもいいけど、ポテトマッシャーがあるとやりやすそう。
    • 買ってから2,3週間経ってシャキシャキ感がなくなっていると潰しやすい

煮沸消毒のやり方

http://ws-plan.com/tsukuru/syafutu.html とか。いつも少なめにしか作ってないので、脱気まではやってない。

瓶は無印で売ってるものがお手軽、お手頃。

OS X 10.11 El Capitanでnokogiriをインストールする

$ brew install libxml2 libxslt libiconv
$ gem install nokogiri -- --use-system-libraries

bundlerでインストールするときのためにも設定しておく。

$ bundle config build.nokogiri --use-system-libraries

なお前提として、公式サイトのインストール方法の"Other OS X tips"にあるように

  • rubyが最新のclangでビルドされていてgccでの依存に無い状態で
  • gemのネイティブ拡張もおなじようにclangでコンパイルされるようになっている

ことが必要になる模様。

なのでアップグレードしてrbenvの環境をそのまま引き継いだ場合などでコンパイラgccだったりする場合は、export CC=clangなどしてrubyをビルドしなおしてからnokogiriのインストールに入れば良いのだと思う。

OS X 10.11 El Capitanでeventmachineをインストールする

osx gem bundler eventmachine

OS XがOpenSSLの共有ライブラリを含めなくなった(のかな?)ために、homebrew等でインストールしてその場所をオプションで指定する必要があった。

github.com

$ gem install eventmachine -- --with-cppflags=-I$(brew --prefix openssl)/include

bundlerでインストールするときのためにもbundle-config(1)で事前に設定しておく。

$ bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include

同様の記事がStackOverflowにもあった。gem eventmachine fatal error: 'openssl/ssl.h' file not found

pipeの途中でエラーが起きたタイミングでエラーを返す

pipe bash unix

パイプを繋げたときの返り値は最後のコマンドの返り値になる。

例えば

stat = system "a | b |c"

としたとき、途中でaやbがエラーになっても返り値statはfalseにならずcの返り値であるtrueになる。 cがエラーに成った時にはfalseになる。*1

これだとパイプの途中でエラーが起きた場合に捕捉できない。

そういうときはbash-o pipefailオプションを使う。*2 これを指定するとパイプの途中でエラーが起こった時にはそのときの返り値が、なにも起きなければ最後のcの返り値が全体の返り値が返ってくるようになる。 さらに-eを付けておくことでエラーが起きたタイミングで終了するようになる。

stat = system %{bash -e -o pipefail -c "a | b | c"}

参考

*1:具体的な返り値は個々のコマンドの実装依存なので、エラーになってもtrueを返すやつがいるかもしれない

*2:bash 3.0から。zshも5.0以降で実装されてるらしい

El CapitanでSIMBLを有効にする

osx

How to Install SafariStand on El Capitanから勝手に抜粋。

1 Macを再起動し、「ジャーン!」となったらCommand+Rをあるていど押し続けてリカバリモードで起動する

  • 一度押しただけでは切り替わらなかった
  • タイミングの判定がわりと細かい

2 メニューからTerminal.appを起動する

3 次のようにコマンドを叩いてSIPを無効にする

bash3.2# csrutil disable

4 再起動する(rebootでも、メニューからのRestartでもOK)

5 SIMBLのサイトからSIMBL-0.9.9.zipを落としてきて解凍する

6 Terminal.app等で次のようにコマンドを叩いてSIMBLを手動でインストールする

$ cd /path/to/SIMBL-0.9.9 # zipを解凍してできたディレクトリに移動する
$ sudo installer -verbose -pkg SIMBL-0.9.9.pkg -target /
$ sudo rm -rf /System/Library/ScriptingAdditions/SIMBL.osax
$ sudo mv /Library/ScriptingAdditions/SIMBL.osax /System/Library/ScriptingAdditions/
$ sudo cp -p /System/Library/ScriptingAdditions/SIMBL.osax/Contents/Resources/SIMBL\ Agent.app/Contents/Resources/net.culater.SIMBL.Agent.plist /System/Library/LaunchAgents/
$ sudo sed -e "s/Library/System\/Library/" -i "" /System/Library/LaunchAgents/net.culater.SIMBL.Agent.plist

7 リカバリモードで再起動する(先ほどと同じように「ジャーン!」でCommand+R)

8 Terminal.appから次のように叩いてSIPを有効にする

bash3.2# csrutil enable

9 これでSIMBLが有効になったので、あとはこれまでどおり/Library/Application\ Support/SIMBL/Pluginsプラグインをインストールする

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。