TKC Works

ギジュツ的なメモ、読書感想文など

AnsibleでMac環境構築(2016年4月)

1年前くらいにAnsibleを使ってmacの初期設定をやったけどplaybookしか残してなかったので改めて手順をメモ。

気がつけばAnsibleでHomebrewが対応されていたり、homebrew-caskが本家に取り込まれていたりしてたので2016年4月現在のやり方でplaybookなどは修正。

今回は使ってなかったMBA(Mid 2012)をクリーンインストールしてOS 10.11.4で実施。

Homebrew

まずはHomebrewをインストール。 El Capitan出た当初はアップグレードだとディレクトリ権限の問題でいろいろ大変と聞いていたけど、 もう対応済みか公式のドキュメントは見当たらなかった。 今回はクリーンインストールしたので気にしない。

公式サイトから普通にスクリプトを実行。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

xcodeとcommand line tools のインストールとかパスワード入力を求められるので適宜やってく。

Ansible

次にAnsibleをインストール brew install ansible

入ったバージョンは2.1.1.0

inventoryファイル作成 echo 'localhost' > hosts

playbookファイルはGistからとってくる

mac provisioning by ansible

インストール先とか変更したければドキュメントを見てパラメータを与える必要あり

自分はデフォルトでよいので以下のように実行

ansible-playbook -i hosts -vv localhost.yml

Ansibleを使えばmacの設定もできるらしいが今回は見送り。

設定ファイル

Dropboxを起動してmackupでバックアップ済のファイルを同期後mackup restoreで各種設定ファイルたちを配置すれば完了。

atom

atomのパッケージは以下のようにリストを作成し、

apm list -bi > Atomfile

Dropboxで同期後以下を実行してインストール。

apm install --packages-file Atomfile

参考

Ansible Inventoryファイルでオプション設定

最近はAnsibleをちょこちょこ試してみています。
例えばVagrant仮想マシンを普通に立ち上げるとポート番号とか認証キーがデフォルト値じゃないので.ssh/configに以下のように書いたりする。

Host ansible_sample
   HostName 127.0.0.1
   User vagrant
   Port 2222
   IdentityFile /Users/hoge/ansible_sample/.vagrant/machines/default/virtualbox/private_key

するとInventoryファイルは

[web]
ansible_sample

と書くだけでよいのだが、いろんなファイル見なきゃいけないのは嫌なのでInventoryファイルだけで完結できないかなと。

Inventoryファイルの書き方を調べてみるといろいろとオプションがあった。
http://docs.ansible.com/intro_inventory.html

上のVagrantの例だとこんな感じ。

[web]
127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user=vagrant ansible_ssh_private_key_file=/Users/hoge/ansible_sample/.vagrant/machines/default/virtualbox/private_key

CouchbaseのPHP SDKでハマったこと

Nginxとphp-fpmの組み合わせで、Phalconで作ったWebアプリケーションからCouchbaseに接続してたんだけど、
"502 Bad gateway"とか "PHP Fatal error: Allowed memory size of ..."が頻発して困った。

とりあえずこの辺を参考にして、
http://webhoric.com/web-dev/nginxphp-fpm-502-bad-gateway

php-fpmのmax_requestsとかphp.iniのmemory_limitとかをガッツリ増やしてみたが変わらず。。

結果はむしろphp-fpmのmax_requestsを増やしすぎたのがよくなかった。

CouchbaseのPHP SDKは接続にコストがかかるからあまり多重に繋ぐなと書いてあった。
http://docs.couchbase.com/developer/php-2.0/performance-tuning.html

おそらくphp-fpmの子プロセスが死なずに残り続けてたのでSDKがCouchbaseに繋がる限界数に達してた。。
とりあえずmax_requestsを一桁にするとエラーが起こらなくなった。チューニングしながら最適値を見つける必要があるが。

Swiftで分割したStoryboardの呼び出し方

チームでアプリを開発する場合や一つのStoryboardが大きくなりすぎるのが嫌な場合など、Storyboardを分割したくなるけど、じゃあどうやって呼び出すの?となるので書いておく。

  • 基本的にはObjective-Cの時と同じ
  • UINavigationControllerを使っている場合はちょっと違うので注意
  • Storyboard上でIs Initial View Controllerのチェックを入れるのを忘れずに
//UIViewControllerの場合
@IBAction func hogeButtonTapped(sender: AnyObject) {
    let story = UIStoryboard(name: "Hoge", bundle: nil)
    let vc = story.instantiateInitialViewController() as HogeViewController
    self.presentViewController(vc, animated: true, completion: nil)
}

//UINavigationControllerの場合
@IBAction func hogeButtonTapped(sender: AnyObject) {
    let story = UIStoryboard(name: "Hoge", bundle: nil)
    let nc = story.instantiateInitialViewController() as UINavigationController
    self.presentViewController(nc, animated: true, completion: nil)
}

ファイル単位でARCを有効にする

ファイル単位でARCを有効にする

cocos2d-xでもSocket.IOでリアルタイム通信をやろうとした場合、
v3には標準のクラスに追加されたからそれを使えばなんとかなる。
ただし、Socket.IOのバージョンは0.9で1.0には対応してないしWebSocketオンリー。

C++でよいライブラリはないか探したけど見つからないので、
iOSからはこのobj-cのライブラリを使うことにした。
https://github.com/pkyeck/socket.IO-objc

ただし、一部ARCを有効にしないといけないファイルがあり、

//SocketRocket/SRWebSocket.m
#error SocketRocket must be compiled with ARC enabled

cocos2d-xで作成したプロジェクトは基本無効になっているためどうしようかと思っていたら、
ファイルごとに設定出来ることを発見。

Build Phases > Compile Sources で対象ファイルに-fobjc-arcを指定すればOK。

こちらを参考にさせて頂いた。
http://lab.dolice.net/blog/2013/05/10/objc-arc-switch/