Vagrant

VagrantでプロバイダーにWindowsのHyper-Vを使ってみる

投稿日:2017/06/23 更新日:

先日、Docker for Windowsを導入した関係でVirtualBoxからHyper-Vに切り替えました。
Docker For Windowsをインストールする
DockerでできることはDockerでやるんですけど、どうしても素のLinux環境がほしいことがあってVagrantからHyper-Vの仮想環境を作ってみました。
これが、VirtualBoxとかなり違い最終的に起動はできたのですが、残念ながら目標は達成できず・・・。

目標

VagrantでVirtualBoxの仮想環境を作るときと同じことをしたいので、最低限以下を目標にしました。
・VagrantfileからIPアドレスを設定できる(達成できず)
・ホストの任意のディレクトリ(フォルダー)をゲストの任意のディレクトリにマウントできる
・AnsibleLocalプロビジョナーでプロビジョンを実行できる
boxはcentos/7を使いました。
vagrantを実行するコマンドプロンプトやPower Shellは管理者として実行しておく必要があります。

環境

・Windows10 Pro
・Vagrant 1.9.5

VagrantfileでIPの設定

Hyper-Vで仮想スイッチの作成

外部ネットワークに接続するためにHyper-Vのコンソールから外部スイッチを作成しておく必要があります。

StaticIPが設定されない

最初から躓いたのですが、Vagrantfileにconfig.vm.networkでIPの設定を書くと思うのですが、これが反映されません。
以下に記載があるのですが、StaticIPは対応していないみたい。
Limitations
Hyper-Vで外部ネットワークの仮想スイッチを作成して、vagrant upの起動時に作成したスイッチを選択するとDHCPでIPが割り当てられました。
DHCPでIPが割り当てられるかは環境によると思います。起動時にIP情報が表示されます。

shared_foldersの設定

SMBでマウントしました。

config.vm.synced_folder "." , "/vagrant" , type: "smb", smb_username: “username”, smb_password: “password”

mount_optionsオプションをつけないとマウントが失敗します。
自分の環境だと正しいアカウントを書いているつもりなんですけど、起動時に認証情報の入力を求められます・・・。
コメントで教えていただきましたがmount_optionsではなくsmb_usernamesmb_passwordを指定すると認証情報なしでログインできます。
訂正情報ありがとうございます!
SMB

AnsibleLocalプロビジョナーでプロビジョンを実行できる

これは普通に実行できました。
詳しくは後述。

認証の設定

今までのboxはbento/centos-7を使っていたのですが、残念ながらHyper-Vには対応していないので、今回はcentos/7を使いました。
デフォルトだとsshdでパスワード認証が無効になっているのでパスワード認証を使ってputtyなどからは接続できません。
自分はputtyを使っているのでputtyでのやり方になります。
やり方は2つあります。

秘密鍵でログインする(安全)

Vagrantが自動生成する秘密鍵を直接puttyではロードできないので、puttygenで変換する必要があります。
自分の環境だと秘密鍵の場所は.vagrant/machines/default/hyperv/private_keyでした。
わからない場合はvagrant ssh-configを実行してIdentityFileの項目が秘密鍵になります。
puttygenでこの鍵を読み込んで、保存しなおします。
あとはputtyで秘密鍵を読み込んでipを指定すればログインできます。
ちなみにユーザー名はvagrantでした。

パスワード認証を許可する(お手軽)

sshd設定を修正してパスワード認証を許可するように変更します。
Hyper-Vのコンソールから直接変更してもいいのですが、面倒なのでAnsibleでプロビジョンします。
以下のようなファイルをVagrantfileと同じディレクトリに保存します。
ファイル名はplaybook.ymlとしておきます。(変更可能です。)

- hosts: all
  become: yes
  tasks:
    - lineinfile:
        path: /etc/ssh/sshd_config
        regexp: ^PasswordAuthentication
        line: PasswordAuthentication yes
      notify: restart sshd
  handlers:
    - name: restart sshd
      systemd:
        name: sshd
        state: restarted

Vagrantファイルは以下のようにします。
関係のある場所のみ抜粋してます。

# Provision with Ansible
config.vm.provision "ansible_local" do |ansible|
  ansible.playbook = "playbook.yml"
end

# ansible_localはデフォルトだと`/vagrant`を参照するのでマウントしておく。
config.vm.synced_folder "." , "/vagrant" , type: "smb", smb_username: “username”, smb_password: “password”

vagrant up時にプロビジョンされます。任意に実行したい場合はvagrant provisionで実行できます。

まとめ

残念ながらStaticIPを設定することはできなかったのですが、使ってみようかな・・・と思える環境までは持っていくことができました。
NAT環境とStaticIPは必須だと思うので、他にやり方がないかもう少し調査しながら使ってみようと思います。

-Vagrant

執筆者:


  1. wo10jr より:

    当記事、大変参考になりました。
    > shared_foldersの設定
    > 自分の環境だと正しいアカウントを書いているつもりなんですけど、起動時に認証情報の入力を求められます・・・。
    ですが、

    config.vm.synced_folder “.”, “/vagrant”, type: “smb”, smb_username: “username”, smb_password: “password”

    とするとよさそうです。
    (この場合、mount_options が無くてもマウントできました)

    • beeete2 より:

      コメントありがとうございます。

      > shared_foldersの設定
      > 自分の環境だと正しいアカウントを書いているつもりなんですけど、起動時に認証情報の入力を求められます・・・。
      ですが、
      config.vm.synced_folder “.”, “/vagrant”, type: “smb”, smb_username: “username”, smb_password: “password”
      とするとよさそうです。
      (この場合、mount_options が無くてもマウントできました)

      おー、ありがとうございます。
      記事も修正しておきます。

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

MacでVagrantを使ってみる boxの準備から起動

いよいよVagrantを使ってみます。 Vagrantとはなにかということを調べてみました。 結論からいうと、仮想マシンを簡単に立ち上げるツールということではないかと思いました。 今までの流れ 1)O …

Windows7 64bitでChefとKnife-soloを実行

MacであればVagrantとChefの環境は比較的簡単に構築できます。 ですが会社だと政治的な理由?からどうしてもMacを利用できない。けどVagrantとChefを使いたいということがあるのではな …

AnsibleでWordPress環境を構築する

AnsibleでWordPressの動作環境を構築するplaybookを書きました。 Ansibleが2.0系になってからしっかりとつかっていなかったのと、今使っているVPSで稼働しているOSがCen …

no image

MacでVagrantを使ってみる VirutalBoxのインストール

はてなブログで書いていたのですが、なんというかすっごい使いにくいのでこちらのブログで書くことにしました。 Vagrantを使用するためにVirutalBoxをインストールします。 VMWareに代表さ …

Chef実践入門を買ってみた

昨年くらいからChefやDevOpsという言葉をよく耳にする機会があって、Chefはすごい便利そうだなーと色々なホームページを見て自分の環境に導入してみたが実際の業務に使えるというほど深く触れなかった …

ad-sidebar




カテゴリー