OS XでVagrantを試す

最近、開発はOSXネイティブではなく、VMのUbuntu上で開発している。

何でそうなったか、というと


「lsを読まずにプログラマを名乗るな!」の本のlsのソースがOSXではビルド出来なかった


  • 何となく前々から気になっていた「lsを読まずに〜」だが、OS Xネイティブのコンパイラではビルド出来なかった。
  • OSXで頑張ってもいいだろうけど、Ubuntuで試しにビルドするのはいかがか、と思ってビルドしたらあっさり通った。嬉しかった。



OS X固有のgemのエラーに頻繁に悩まされていた


What to do if libxml2 is being a jerk · sparklemotion/nokogiri Wiki
https://github.com/sparklemotion/nokogiri/wiki/What-to-do-if-libxml2-is-being-a-jerk

  • 上記リンクにもあるように、OS Xデフォルトで入ってるパッケージを参照しにいって、エラーみたいなパターンが凄く多かった。
  • で、個人的に環境構築に時間を取られるのは頭悪いと思っているので、試しにUbuntu上で開発したらどうかなー、と思ってやってみたら基本的に快適だった。ので現在VM(Ubuntu)上でサーバ系のコードは開発している。

Vagrant導入まで



-ググったら大抵出てくるのでさらりと流す。以下も丸コピ。

Vagrantの備忘録 | jekylog
http://fingaholic.github.io/posts/2013-09-05-vagrant.html

1.VirtualBoxをダウンロード
Downloads – Oracle VM VirtualBox


2.Vagrantをインストール

Vagrant - Downloads


これらは最新版をそれぞれ落とさないとMarvericksでバグる

3.以下のコマンドを入力していく

#ここではcentos64がvm名になるので、変えたいひとは変える
$vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box

$mkdir $HOME/vagrant/centos64 && cd $HOME/vagrant/centos64

$vagrant init centos64

#VM起動
$vagrant up

#VMに接続
$vagrant ssh

設定ファイルと解説

  • 自分のVagrantfileを晒しておく。ユーザ名等は適当に読みかえて欲しい。(インデント気持ち悪くてごめんなさい)
VAGRANTFILE_API_VERSION = "2"
   
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
     
       #initで設定したVM名
       config.vm.box = "ubuntu12.10"
  
       #guest osの3000ポートをhost osの3000ポートにフォワードする
       config.vm.network :forwarded_port, guest: 3000, host: 3000
        
       #ping などで192.168.33.10でアクセス出来る
       config.vm.network :private_network, ip: "192.168.33.10"
      
       #共有ディレクトリ。ホストOSからゲストOSに対してGUIベースでもアクセス出来る
       config.vm.synced_folder "/Users/usr_name/sync_dir", "/home/vagrant/sync_dir"          
end


設定に軽く
 config.vm.network :forwarded_port, guest: 3000, host: 3000


- この設定しとくと、Vagrant上でrails sしたときに0.0.0.0:3000をホストOSから見れば、確認出来る



 config.vm.synced_folder "/Users/usr_name/sync_dir", "/home/vagrant/sync_dir" 


- 共有フォルダとなるので、ここからSublime Textで編集出来る。設定ファイル程度ならVimで良いけど、ガシガシコード書くとなるとSublimeの方が断然楽だと思う。


  • chefとかpuppetとかはまだ使ってない。Fluentdのaggregateで多分マシンが複数必要になると思うので、その段になったら考えたい。