LoginSignup
13
17

More than 5 years have passed since last update.

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

Posted at

概要

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

001_フォルダ作成.png

Vagrantフォルダの初期化

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

vagrant init [name [url]]

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

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

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

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

vagrant up [name|id]

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

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

"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コマンド)に受け渡すオプションを指定することができる。今回はともに省略して実行する。
005_仮想マシン起動後のssh接続.png

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

発生した問題

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

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

問題

vagrant up時に下記のエラーが発生した。
007_rsyncがない場合のエラー.png

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

"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時に下記のエラーが発生した。
008_sshがない場合のエラー-1.png
009_sshがない場合のエラー-2.png
010_sshがない場合のエラー-3.png

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

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のあるバグによって、以下のようなエラーが発生した。
011_Vagrant1.8.5のpublic_key.rbのバグに起因するエラー-1.png
012_Vagrant1.8.5のpublic_key.rbのバグに起因するエラー-1.png

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

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.目次

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17