sakutarou’s blog

とりあえずWeb系技術をゆるく書いていく

Vagrant + Hyper-Vでboxを作成する

自分の開発環境はVagrant + Hyper-Vを使っているのですが、 今回ノートPCを新しく購入したこともあって、ゼロからVagrantを起動しようとしたら自分が利用していたboxの公開が終了してました。。。

Vagrant + Hyper-Vは選択肢少ないんですよね。。。

なので今回はbox作成をメモ代わりに残しておこうと思います。
Windows + Hyper-Vなこともあって色々躓きました。。。

ここに記載する内容は必要最低限にしてあります。

CentOS7のイメージ(iso)からOSを起動する

以下のURLからCentOSのイメージをダウンロードして、CentOSを立ち上げます。
自分は Minimal ISOCentOS7 64bit を利用しました。

Download CentOS

hypervkvpdのインストール

hypervkvpd をインストールしておかないと Waiting for the machine to report its IP address... と出たところでタイムアウトします。

yum install hypervkvpd
systemctl enable hypervkvpd

vagrantユーザーの作成 + 鍵ファイルの設置

passwd # rootのパスワードはvagrantに設定
useradd -g wheel vagrant
passwd vagrant # vagrantのパスワードはvagrantに設定
mkdir /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh

cd /home/vagrant/.ssh
curl -k -L -o authorized_keys 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:wheel /home/vagrant/.ssh

その他設定

systemctl stop firewalld
systemctl disable firewalld

vi /etc/selinux/config
- SELINUX=enforcing
+ SELINUX=disabled

vi /etc/sysctl.d/disable_ipv6.conf

+ net.ipv6.conf.all.disable_ipv6 = 1
+ net.ipv6.conf.default.disable_ipv6 = 1

vi /etc/sysconfig/network-scripts/ifcfg-eth0
- UUID=XXXXXXXXXXX

sudoの設定

visudo

# コメントアウトを外す
%wheel  ALL=(ALL)       NOPASSWD: ALL

キャッシュの削除

完成するbox自体のサイズを小さくするために、キャッシュを削除しておきます。

yum clean all
rm ~/.bash_history
history -c

OSの終了

shutdown -h now

作成したOSをエクスポートする

Hyper-V マネージャーを開いて、仮想マシンをエクスポートします。

f:id:sakutarou:20170213000715p:plain

boxの作成(その1)

エクスポートしたフォルダを開くと以下のようになってるはずです。

  • Snapshots
  • Virtual Hard Disks
  • Virtual Machines

上記のうち、 Snapshots は不要なので削除します。

boxの作成(その2)

エクスポートしたフォルダに metadata.json を作成する。
最低限以下のような内容になります。

{
    "name": "sakutarou/centos7",
    "provider": "hyperv"
}

作成後、以下になります。

  • Virtual Hard Disks
  • Virtual Machines
  • metadata.json

boxの作成(その3)

Virtual Hard Disks , Virtual Machines , metadata.json の3つ選択した状態で、zip圧縮します。
※この時、上階層のフォルダを選択してzip圧縮するではなく、3つを選択して圧縮してください。

zipファイルが完成後、拡張子を .box に変更してください。

これでbox完成です。

boxとして利用する

以下のコマンドを実行すれば、作成したboxファイルを利用することが出来ます。

vagrant box add --name "sakutarou/centos7" "centos7.box"

もしくは、atlasにアップするなどして利用してください。

その他

これ使ったら、もっと簡単に作成できるかも?
何も試してないけど

github.com

などなど