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

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

vagrantで色々設定したいけど、全然設定反映されなくてワロタ

Vagrant

スポンサードリンク

http://www.flickr.com/photos/8771526@N03/6861485357
photo by flythebirdpath~}~}~}


vagrantを使って、開発環境を用意したかった。


もう、自分の Mac book Air ではあんまりインストールしたくない。


んで、頑張ったんだけど、vagrantの設定だけで、時間が過ぎる過ぎる。


vagrant難しすぎてワロタ(´・ω・)

やりたかったこと

  • ホスト側からゲスト側へhttpでアクセス
  • ホスト側とゲスト側にnfsで共有ディレクトリを用意(ホスト側のエディタが使いたかったから)

環境

試したこと

Vagrantfileを作成


vagrantをまずはインストールしました。
Download Vagrant - Vagrant



んで、インストールが終わったら、下記作業を勧めます。


流れとして、ディレクトリ作成して、osのイメージをダウンロードして、仮想サーバを用意する。って、ステップかな(よくわかってませんが)

# ディレクトリを作成
$ mkdir -p ~/vagrant/test_server
$ cd ~/vagrant/test_server/

# osイメージを取得。今回はCentOS7
$ vagrant box add centos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box

# initする。
$ vagrant init centos7


initするとVagrantfileが作成されるので、ファイルを編集します。

$ vim Vagrantfile
#################
〜省略〜
config.vm.define :centos7 do |node|
	node.vm.box = "centos7"
	config.vm.network :private_network, ip: "192.168.33.10"
	# ポートフォワーディング
	config.vm.network "forwarded_port", guest: 80, host: 57080
	# 共有ディレクトリ
	config.vm.synced_folder "/Users/user/image_server/centos_20141208_centos7/share", "/vagrant", :nfs => true
end
〜省略〜
#################


「# ポートフォワーディング」の設定はホストからゲストへhttpポートフォーワードするための設定です。この場合ですとホスト:57080 ⇒ ゲスト:80へ繋がるって設定ですね。


「# 共有ディレクトリ」の設定はnfsの設定です。これはやることがいくつかあるので、後述します。


また、Vagrantfileの記述や、読み込みの流れについては、こちらのブログがわかりやすいかも。


Vagrantの重要ファイル「Vagrantfile」の読み込みとその周りの挙動をちょっと細かく追ってみた - 圧倒亭グランパのブログ

nfsの設定


まず、ホスト側で「/etc/exports」ファイルを作成します。

$ sudo touch /etc/exports
$ ls /etc/exports
/etc/exports


で、nfsdの状況を確認します。起動してなければ起動します。

$ sudo nfsd status
nfsd service is enabled
nfsd is running (pid 5840, 8 threads)

# 上記は"enabled"であれば起動しているとわかります。
# "disable"であれば、下記コマンドを実行ください。

$ sudo nfsd enable


ここまで完了したら、vagrantで作成した仮想イメージを起動しましょう。ちなみに、起動する場所は「Vagrantfile」が存在するカレントディレクトリで実行してください。

$ vagrant up


起動した後、ホスト側の"/etc/exports"に自動に書き込まれていることが確認できます。

$ cat /etc/exports

記述しているだけであれば苦労が見えないなぁ。。。


実は、ここまで記述したことがは何一つ動かなかったorz


これで5時間つぶしたお(´・ω・)

解決につながったこと


vagrantのバージョンを1.7.0(最新版)にしたらできた。ワロタorz


ポートフォワードはなんとかできたが(本当はネットワークでやりたかったんだけど、何故かうまくいかない・・・DHCPが勝手に動くんだよ!!orz
)、nfsdは何度やっても、色々試しても共有されなかった。


もう色々めんどくさくなって、バージョンアップしちゃえっとやっつけにやったらうまくいった。(°Д°;


ちなみに、初回インストールしたバージョンは1.3.5でした。


また、最新版はこちらから
Download Vagrant - Vagrant


解決できなかったこと


ステップを記しましたが、何故か2回目移行の「vagrant up」で、nfsd関係でなにか変なパースエラーが発生します。

$ vagrant up
〜省略〜
/opt/vagrant/embedded/gems/gems/vagrant-1.7.0/plugins/hosts/bsd/cap/nfs.rb:140: warning: character class has '-' without escape: /^# VAGRANT-BEGIN:( 501)? ([\.\/A-Za-z0-9-_]+?)$/


また、エラーがでるとnfsdの設定がうまく動作せず、起動はするけど、共有ディレクトリになったりならなかったりが確認できました。


ので、2回目以降の起動時には下記ステップを追加してください。

$ echo -n "" | sudo tee /etc/exports
$ vagrant up
 


めっちゃ余計なステップ。一度、vagrantで自動で設定された記述を削除しないといけないらしい・・・(´・ω・)ヨクワカラン


これは後日解消したいと思います。