Windows10でVagrant(1.8.5)を使ってCentOS 7仮想マシンを構築する


概要

Windows10におけるVagrant(1.8.5)を使った、CentOS 7 仮想マシンの構築手順について示す。

環境

  • ホストOS:Windows 10
  • ゲストOS:CentOS7-x86_64
  • Vagrant:1.8.5
  • VirtualBox:5.1
  • Cygwin

各ソフトウェアを用意する。CygwinはVagrantから仮想マシンへの接続を行う際にrsyncsshを用いるためにインストールする。

手順

  1. Cygwinのインストール(rsyncssh)
  2. VirtualBoxのインストール
  3. Vagrantのインストール
  4. Vagrantで仮想マシンを構築

Cygwinのインストール(rsyncssh)

Vagrantは仮想マシンの起動時(vagrant up)に、ホストOSとゲストOS間のフォルダ同期のためにrsyncを、Vagrant自身と仮想マシン間の接続のためにsshを使用する。Windows10にはrsyncsshのコマンドが存在しないため、別途インストールする必要がある。

このためCygwinまたはMinGWを導入する必要がある。ここではCygwinのrsyncsshを導入する。

仮想マシン構築そのものにはCygwinのrsyncsshを導入する必要はないようだ。Vagrantfileへの設定によって、vagratn up時にrsyncやsshを使用しないようにできるかもしれない。

インストール手順詳細は以下を参照のこと。

Window10にCygwinでrsyncとsshをインストールする

VirtualBoxのインストール

Vagrantで構築する仮想マシンを動かすプラットフォームとなるVirtualBoxをインストールする。ちなみに、Vagrantでは、このVirtualBoxのようなソフトウェアのことをプロバイダ/Providerと呼ぶ。VirtualBox以外には、Hyper-VやVMWareなどがある。

インストール手順詳細は以下を参照のこと。

Windows10にVirtualBox 5.1をインストールする

Vagrantのインストール

仮想マシン環境を構築するソフトウェアであるVagrantをインストールする。

インストール手順詳細は以下を参照のこと。

Windows10にVagrant 1.8.5をインストールする

Vagrantで仮想マシンを構築

Vagrantを用いてVirtualBox用の仮想マシン環境を構築する。手順は以下のとおり。

  1. 仮想マシン環境用のフォルダを作成する
  2. vagrant initでフォルダを初期化する
  3. vagrant upで仮想マシン環境の構築と起動を行う

詳細を以降に示す。

仮想マシン環境用のフォルダを作成する

仮想マシンは用途に合わせて、フォルダ分けするのが良いだろう。ここではWindowsのユーザーフォルダ配下に"Vagrant"フォルダを作成し、この配下に仮想マシン用のフォルダを作成していく。なお、ここではVagrantの仮想マシンのベースとなるファイルであるBoxに対応したフォルダ構成とする。事前に導入するBoxをVagrant開発元のHashiCorpが公開しているサイトから検索しておく。今回は"centos/7"を導入するのでフォルダ構成は以下とする。

C:\Users\(ユーザー名)\Vagrant\centos\7

Windowのエクスプローラーからフォルダ作成してもよいが、以降の作業をコマンドプロンプトで行うので、フォルダの作成もコマンドプロンプトで実行していく。

Vagrantフォルダの初期化

作成したフォルダをVagrant用に初期化する。これはフォルダにVagrantの設定用ファイルであるVagrantfileを生成する。以下のコマンドを使用する。

vagrant init [name [url]]

通常、[name [url]]には、先のHashiCorpのサイトで検索したパスを指定する。今回は
centos/7を指定する。

コマンドの実行により、フォルダ内にVagrantfileが生成された。なお、指定したcentos/7が設定に反映されており、このVagrantfileに基づいて生成される仮想マシンはHashiCoprで公開されているcentos/7のBoxに基づいたものになる。

Vagrantによる仮想マシンの生成と起動

vagrant initにより設定ファイルを生成すると、すでに仮想マシンが生成可能な状態となっている。以下のコマンドを使用する。

vagrant up [name|id]

カレントフォルダにVagrantfileがある場合、[name|id]を省略することでカレントフォルダのVagrantfileを用いて、仮想マシンを生成・起動する。今回は省略して実行する。

以上でVirtualBoxの仮想マシンが生成され、さらにその仮想マシンが起動された状態となる。VirtualBoxを起動して、状態を確認してみよう。

"7_default_1471054331963_46735"が今生成したマシンであり、状態が"実行中"となっていることがわかる。

なお、通常vagrant upによりVirtualBoxの仮想マシンを起動しても、上記のようなVirtualBoxのウィンドウは表示されることはない。ただし、Vagrantfileの設定によって表示させることもできる。

VagrantからのSSH接続

仮想マシンが起動したので、マシンへのアクセスが可能となっている。以下のコマンドを使用する。

vagrant ssh [name|id] [-- extra_ssh_args]

カレントフォルダにVagrantfileがある場合、[name|id]を省略することでカレントフォルダのVagrantfileで生成されたマシンに接続しようとする。また、[--extra_ssh_args]には、実際のSSHコマンド(今回の場合、CygwinのSSHコマンド)に受け渡すオプションを指定することができる。今回はともに省略して実行する。

プロンプトがLinuxのものに変更されたことがわかるだろう。

発生した問題

上記手順を示すにあたり、その順番や有無によっていくつかの問題が発生した。その問題と原因について示しておく。

rsyncがない場合に発生した問題

問題

vagrant up時に下記のエラーが発生した。

エラーメッセージは以下のように出力されている。

"rsync" could not be found on your PATH. Make sure that rsync is properly installed on your system and availablie on the PATH

「"rsync"がPATHに見つからないので、きちんとインストールされていて、PATHに設定されているかを確認せよ」と言っている。

解決

手順に示した通り、Cygwinのrsyncコマンドをインストールすることで解決できる。

sshがない場合に発生した問題

問題

vagrant up時に下記のエラーが発生した。


エラーメッセージとして大量のメッセージが表示されているが、要点は以下である。

Error: rsync: Failed to exec ssh: No such file or directory (2)

rsyncsshを実行するのに失敗した。そんなファイルやディレクトリは知らない」と言っている。

解決

手順に示した通り、Cygwinのssh(open-ssh)コマンドをインストールすることで解決できる。

Vagrant 1.8.5のバグに起因する問題

Vagrant 1.8.5のあるバグによって、以下のようなエラーが発生した。

出力メッセージの末尾のほうに

default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...

とある。上記では2回しか出力されていないが、これは2回出力された時点でCtrl+Cを押下して、処理を中断したためであり、処理を続けた場合、このメッセージが繰り返し実行され、以降の処理に進めなかった。

上記、エラーメッセージでGoogle検索を行うと、GitHubの以下のIssueにたどり着いた。

Authentication failure after inserting new key with Vagrant 1.8.5. [PATCH] #7610

すでに問題は認識されており、リリース版としてはVagrant 1.8.6で対応されるようだ。

解決

先のIssueから、Vagrant 1.8.6のリリースを待つ以外の方法を以下に示す。

  • C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\guests\linux\cap\public_key.rb の56行目に以下を追加する。
chmod 0600 ~/.ssh/authorized_keys

なお、これを追加した状態での前後の行は以下の通りである。

if test -f ~/.ssh/authorized_keys; then
grep -v -x -f '#{remote_path}' ~/.ssh/authorized_keys > ~/.ssh/authorized_keys.tmp
mv ~/.ssh/authorized_keys.tmp ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
fi

~/.ssh/authorized_keyz.tmp~/.ssh/authorized_keysにコピーしたあとに、パーミッションを0600に変更する処理を追加したことになる。SSH認証を行う際に陥るよくある手順の抜けのようだ。。。

上記変更を加えたファイルを保存し、改めて仮想マシンを構築することで解決する。

最後に

手順をまとめるととても簡単なのではあるが、予想外のエラーにはまってしまいまとめるまでに数日かかってしまった。ようやくVagrantによるCentOS 7仮想マシンを構築することができたので、この仮想マシンをいろいろといじくっていこう。

なお、仮想マシンの構築に際しては、Vagrantのさまざまな機能を用いることで、より用途に適した設定で、容易に、何度でも仮想マシンを生成することができる。

Vagrantのさまざまな機能を用いるためにはVagrantの公式ドキュメントを読むのが一番であるが、英語であるためなかなか手が伸びないところであろう。拙記事ではあるが、Vagrant公式ドキュメントを意訳しているので、ご参考いただければと思う。ただし、訳には責任が持てないので、詳細については自己責任でお願いしたい。。。

参考:【Vagrantドキュメント意訳】00.目次