Vagrant事始め
Vagrantのインストール
夏休みにCentOS 7の勉強をしてみようと、ついでにVagrant + VirtualBoxで環境を構築してみた。以下、試行錯誤のメモ。
VagrantとVirtualBoxはHomebrew caskでインストールした。
$ brew cask install virtualbox $ brew cask install vagrant
この辺で公開されているBoxファイルを眺めると、CentOS 7のVirtualBox用Boxがあるので、これを使う。minimal installされたものなので、CentOS 7の勉強用にはちょうどいい。Vagrantではcentos7という名前で登録。
$ vagrant init centos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box
なんか以下のようなエラーメッセージが出ているけど、とりあえず問題なく動いている。
Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant
(追記:2015-04-09)これはゲストOSにVirtualBox guest additionsが入っていないので、共有フォルダがmountできないから。共有フォルダを無効にするには、Vagrantfileに次の一行を追加する。
config.vm.synced_folder(".", nil, :disabled => true, :id => "vagrant-root")
"vagrant init"でカレントディレクトリにVagrantfileが生成される。VagrantfileはRuby DSLのフォーマットで記述されている。
あとは、"vagrant up"でVMが起動するので(初回はダウンロードに結構時間がかかるけど、2回目以降はさっくり起動する)、"vagrant ssh"でVMにログインする。使い終わったら"vagrant destroy"でVMを破棄。なお、vagrantコマンド実行時のカレントディレクトリは、ゲストOSの/vagrantにマウントされる。
インストールされているBoxは次のコマンドで調べることができる。
$ vagrant box list centos7 (virtualbox, 0)
現在実行しているVMをBoxとしてエクスポートするときは"vagrant package"コマンドを使う。VMが起動中の場合は、シャットダウンされる。カレントディレクトリにpackage.boxファイルが生成される。
$ vagrant package $ vagrant box add centos7_custom package.box $ vagrant box list centos7 (virtualbox, 0) centos7_custom (virtualbox, 0)
Vagrant + Chef solo
Vagrantfileをながめると、Chefの設定とかがコメントアウトされている。C/S構成のChefは敷居が高そうなので、まずはChef Soloを試す。
動作の流れは次のようになる。
また、便利なVagrantプラグインvagrant-omnibusをインストールする。vagrant-omnibusはBoxにChefがインストールされているか確認して、入ってない場合にインストールする。(これは便利だけど、Vagrantに依存してしまうところがちょっと難ありか)
まずは、インストールから。
$ sudo gem install chef $ sudo gem install knife-solo $ vagrant plugin install vagrant-omnibus $ vagrant plugin list vagrant-login (1.0.1, system) vagrant-omnibus (1.4.1) vagrant-share (1.1.0, system) vagrant-vbguest (0.10.0)
vagrant-omnibusを有効にするには、Vagrantfileに次の一行を追加すればOK。
config.omnibus.chef_version = :latest
適当なChefレシピを書いてみる。
$ knife solo init chef $ cd chef $ knife cookbook create hello -o site-cookbooks $ echo log "hello, world!" >> site-cookbooks/hello/recipes/default.rb
このレシピを実行するには、Vagrantfileに次の行を追加する。
config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["chef/site-cookbooks"] chef.add_recipe "hello" end
問題なければ、起動時のログに"hello, world!"と表示されるはず。
もう少し実用的なものということで、ここのDevelopment toolsをインストールするレシピを追加してみるとか。
$ vagrant reload --provision
しかし、正直Chefは取っつきにくいなぁ。Ansibleってのはもう少しお気楽に始められそう。
CentOS 7
ネットワークインタフェース名はenp0s3になるのねとか(この場合PCIバス0番の3スロットに繋がっているという意味)、ifconfigはないのでip addrを使うのねとか、お決まりの点を確認する。
変更点は「RHEL7/CentOS7でipコマンドをマスター」がまとまっている。
net-tools | iproute2 |
---|---|
ifconfig | ip a(addr), ip l(link) |
route | ip r(route) |
netstat | ss |
netstat -i | ip -s l(link) |
arp | ip n(neighbor) |
あと、デフォルトのファイルシステムがXFSになっている。後発のext4がなぜデフォルトファイルシステムの座を譲ってしまったのか理由を調べたいな。