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からとってくる
インストール先とか変更したければドキュメントを見てパラメータを与える必要あり
- http://docs.ansible.com/ansible/homebrew_module.html
- http://docs.ansible.com/ansible/homebrew_cask_module.html
- http://docs.ansible.com/ansible/homebrew_tap_module.html
自分はデフォルトでよいので以下のように実行
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/