chroju.dev/blog

the world as code

Rails環境構築(1) Vagrantで仮想マシン構築

Vagrantで仮想サーバー構築してみたのでメモ。構築するだけなら、楽。大してコマンドも要らない。

インストール

まずはGemでインストールしてみたけど、バージョン古いっぽくてダメだった。なので、ふつうにウェブからダウンロードしてインストールします。URLは以下。ついでに「GET STARTED」からいろいろ読んどくといいと思う。公式のRead meに勝るものはないです。

Vagrant by HashiCorp
Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.
Vagrant by HashiCorp favicon http://www.vagrantup.com/
Vagrant by HashiCorp

インストールしたらバージョン確認。

$ vagrant -v

boxの追加

まずはboxと呼ばれる仮想マシンイメージをvagrantに追加する。

$ vagrant box add hoge url

hogeは適当なイメージ名、urlはウェブで公開されているboxのurl。イメージはココに大量にあるので、任意のサーバーのURLをコピってくればOK。ほとんどがLinux、ちょこっとだけBSD。

vagrantの初期化

$ mkdir vagrant
$ cd vagrant
$ vagrant init hoge

vagrant initでカレントディレクトリをvagrant用に初期化する。なのでmkdirは好きなとこに好きなフォルダ作ればよい。そこに仮想マシンの設定ファイルが作られるので。vagrant initの引数にはさっきvagrant box addで追加した仮想マシンイメージの名前を渡してやる。渡さないとデフォルト値で設定ファイルが作られてしまう。これで最初ハマった。ちなみにどうハマるかというと、vagrant upしたときにこんなエラーが出る。

There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The box 'base' could not be found.

「base」という名前のboxがないというエラー。どうもデフォルトでbaseという名前が使われるらしいのだが、さっきbox addした名前と異なるので、そんなboxはないから立ち上げられませんよということ。もしこの状態になってしまった場合の対処としては、vagrantfileのconfig.vm.boxの値を該当の仮想マシンイメージ名に替えてやれば上がるようになる。

話が飛んでしまったが、Vagrantfileはvagrant initしたディレクトリの中に出力されている。で、仮想マシンを上げる前にちょっとコイツの編集が必要。

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network :private_network, ip: "192.168.xx.xx"

上のconfig〜行のコメントアウトを外してやって、IPを適当に設定する。が、自分の環境だとこれだけでは仮想マシンを起動した時にエラーが出てしまって、さらにprivate_networkをpublic_networkに替えてやらなくてはならなかった。ググってるとこの手順やってる人ほとんどいないんだけど、何が原因だろう。

仮想マシンの起動

で、ここまでやっていよいよVM起動。

$ vagrant up

てっきりVirtual boxがGUIでも上がってくるのかと思ったが、仮想マシン上がりましたよ―というメッセージが表示されるだけでGUI上は何の変化もない。なのでOSが上がってるのかわかりにくいんだけど、SSHで入ると実際入れるのでどうも上がっているらしい(ちなみにGUIでVirtual box上げてももちろん起動状態はわかる。あとvagrant statusコマンドでもわかる)。

$ vagrant ssh

bashのsshコマンド発行しなくても、vagrantの独自コマンドで入れる。楽。ちなみに入るときのユーザーは勝手にvagrantというユーザーが作られているんだとか。あとはもう好きにやっちゃってーというところ。他に使いそうなコマンドは以下の表あたりか。

コマンド 意味
vagrant halt 仮想マシンの停止
vagrant destroy 仮想マシンの削除
vagrant box list 仮想マシンイメージリストの表示
vagrant status 仮想マシンの状態確認

vagrantが真価を発揮するのって多分chef-soloと組み合わせたときなので、今の段階だと「わざわざマウス使わずともターミナル上で仮想マシン上げられて便利〜」ぐらいの感想しか正直ないです。もっと勉強しよ。

参考

Vagrantで仮想サーバ構築 | HAPPY*TRAP

vagrant + virtualbox 仮想サーバ構築 - Qiita [キータ]