Windowsで構築したVagrantの開発環境をMacに移行する方法

「Windowsで構築したVagrantの開発環境を、Macに移行してみよう」と思ったので、この機会に試しました。

vagrant_windows_to_mac_migration00

大まかな流れとしては、

  1. Windowsの開発環境をバックアップ
  2. Macに反映(移行完了)

という感じです。

今後のために作業メモを残しましたので、似たようなことをされたい場合は一例としてご参考ください。

Windows側の作業

Windowsの作業環境は以下の通りです。VagrantとVirtualboxはインストール済みとします。

作業環境

  • Windows10 home エディション
  • Vagrant 1.8.6
  • Virtualbox 5.1.6

Vagrantでファイルをバックアップする

まずはVagrantの開発環境をバックアップします。

コマンドプロンプトを起動して、Vagrantfileがあるフォルダまでcdコマンドで移動して、以下のコマンドを実行します。

vagrant package

うまくコマンドが実行されると、同じ階層に「package.box」というファイルが作成されます。

次に、移行に必要なものを確認します。以下のファイルを用意しましょう。

用意するファイル

  • Vagrantfile
  • package.box
  • Vagrantfileに書かれている「config.vm.synced_folder」で同期しているファイル一式

上記の作業が完了したら、次はMac側で移行作業をします。

Mac側の作業

移行先となるMacの作業環境は以下の通りです。VagrantとVirtualboxはインストール済みとします。

作業環境

  • macOS Sierra(バージョン 10.12)
  • Vagrant 1.7.4
  • VirtualBox 5.0.10

Macの作業環境については、VagrantとVirtualBoxのバージョンがWindows10と比べて少し古いのですが、移行はできました。

もし移行がうまくいかない場合は、バージョンを合わせるといいかもしれません。私も移行後にすべての問題がないかチェックはできていないので、必要になった時はバージョンを合わせるなど作業を追加で行おうと思います。

というわけで、上記を前提としてMacにVagrantの開発環境を移行します。

用意したファイルをコピー

まずは、Windows側で用意したファイルがあったと思います。以下の3つですね。

  • Vagrantfile
  • package.box
  • Vagrantfileに書かれている「config.vm.synced_folder」で同期しているファイル一式

これらのファイルをMacにコピーします。コピー先は、仮想マシンを追加したいフォルダ(任意)でOKです。

Vagrantで仮想マシンを追加

次に、ターミナルを起動して仮想マシンを追加したいフォルダまでcdコマンドで移動して、仮想マシンを追加します。

追加する仮想マシンの名前はVagrantfile内に書かれている「config.vm.box」に指定した値と合わせればOKです。

一例ですが、

config.vm.box = "CentOS67_x64"

と書かれている場合は、

vagrant box add CentOS67_x64 ./package.box

とコマンドを実行してあげればいいですね。

仮想マシンを起動

次に、追加した仮想マシンを起動しましょう。以下のコマンドを実行します。

vagrant up

うまく起動できれば移行完了、となると思いますが・・・私の場合は、下のようなメッセージが表示されて正しく起動できませんでした。

メッセージが出てVagrantが正しく起動されなかった

The following SSH command responded with a non-zero exit status.

Vagrant assumes that this means the command failed!

ARPCHECK=no /sbin/ifup eth1 2> /dev/null

Stdout from the command:

Device eth1 does not seem to be present, delaying initialization.

Stderr from the command:

上のメッセージ中にある

Device eth1 does not seem to be present, delaying initialization.

は、

デバイス eth1 は存在しないようですので、初期化を遅らせます。

という表示になっている場合もあります。どちらにしても正しく起動できていないので、設定をしましょう。

このようなメッセージが表示されてしまう原因は、以下のサイトの説明がわかりやすかったです。ありがとうございます。

vagrantでパッケージをした場合などに、MACアドレスとのマッピングがうまくいかなくなってエラーが起こっているようです。
そのためマッピングを一度無効にすることで解決します。

[Vagrant]Vagrantfileで指定したipアドレスでアクセスができない場合の対応 | Coffee Breakにプログラミング備忘録

というわけで、マッピングを無効にする作業をします。

Vagrantにsshでログインしてマッピングを無効にする

上記のメッセージが表示されて仮想マシンが正しく起動されていない状態で、以下のコマンドを実行して仮想マシンにログインします。

vagrant ssh

ログイン後、以下のコマンドを実行します。

sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules

設定を変更後、以下のコマンドを実行して仮想マシンからログアウトします。

exit

設定の変更を反映するため、以下のコマンドを実行してVagrantfileを再度読み込みます。

vagrant reload

以上の作業で移行ができました。

WordPressのテーマやプラグインがインストール・削除できなかったので対応しました(2016/11/16追記)

本格的にMacに開発環境を移行をしているのですが、移行後にWordPressのテーマやプラグインをインストール・削除しようとすると、以下のように「ホスト名、FTPユーザー名、FTPパスワード、接続形式の入力をしてね」と表示されました。

vagrant_install_wordpress_theme_plugin

要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります。 次に進むには FTP の接続情報を入力してください。 接続情報が思い出せない場合は、ホスティング担当者に問い合わせてください。

移行した仮想マシンでは、Webサーバーとしてapacheを使っているので、Vagrantfileの以下の箇所で所有者の指定を行って、再度Vagrantfileを読み込むと、無事にインストールできました。

Vagrantfileでユーザー名とグループ名をapacheに指定して所有者を変えよう

config.vm.synced_folder "./www", "/vagrant_www",
 owner: "apache", group: "apache"

所有者の変更の方法は公式サイトのMODIFYING THE OWNER/GROUPに載っていますので、ご参考ください。

Windows版のVagrantでは上記の設定は必要ありませんでした。(ユーザー名、グループ名ともにvagrantでOKでした)もし似たようなことでお困りの方がいらっしゃいましたらご参考ください。

まとめ

開発環境を構築する手段としてVagrantを利用する場合も多いと思いますが、WindowsからMacへ開発環境を移行する場合は、上記のような手順で作業をする必要がありました。

やっていることはシンプルなのですが、複数回コマンドを実行することになるので、少しとっつきにくいというか・・・慣れない方はとても難しい作業ではないかと思います。

何度かテストでやってみると感覚はつかめると思います。(私の場合は何度か試してみて、なんとなく自信を持てました)

著者:bouya Imamura