LoginSignup
5
7

More than 5 years have passed since last update.

ESXiで作成したゲストVMからVagrant Boxを作成した時のメモ

Last updated at Posted at 2017-09-28

やってること

ESXiで作成されたゲストVMをVagrant Box化したいという要望があった時に調べてやったこと。
とりあえずこれでできたけど、手順の抜け漏れがあるかも。

検証環境

検証環境は以下の通り。

  • 登場人物
    • VMホスト
      ESXi 6.0.0 (esxi-host)
    • Vagrant変換用サーバ
      CentOS 6.9 (vagrant-converter) # Minimal Desktopでインストール
    • ゲストVM
      CentOS 6.9 (guest-vm) # Minimalでインストール
  • 使用するソフトウェア
    • VirtualBox 5.1.26
      vagrant-converterとクライアントマシン(私の環境はWin7Pro)の双方にインストール
    • Vagrant 2.0.0
      こちらもVirtualBoxと同様
    • ovftool
      VMWareが出してるツール。OVF<=>VMXの変換用

事前の仕込み

vagrant-converter

NFSサーバの設定を行い、ESXiのデータストアとしてマウント

1. NFS関係のパッケージをインストール
# yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools
chkconfig nfs on
# mkdir -p /vargrant/{source,boxes}
# echo "/vagrant 192.168.1.0/24(rw,no_root_squash)" >> /etc/exports
# service nfs start
# service nfs status
2. VirtualBoxをダウンロード&インストール

ここはGUIからやったほうが良いかも

# cd /usr/local/src
# wget http://download.virtualbox.org/virtualbox/5.1.28/VirtualBox-5.1-5.1.28_117968_el6-1.x86_64.rpm
# yum localinstall VirtualBox-5.1-5.1.28_117968_el6-1.x86_64.rpm
3. Vagrantをダウンロード&インストール

ここもGUIからやったほうが良いかも

# cd /usr/local/src
# wget https://releases.hashicorp.com/vagrant/2.0.0/vagrant_2.0.0_x86_64.rpm
# yum localinstall vagrant_2.0.0_x86_64.rpm  
4. ovftoolのインストール

VMWareのサイトからovftoolのインストーラをダウンロードしてくる

(OS/アーキテクチャの組合せなど注意。my vmwareへの登録が必要かも)
ダウンロードしてきたらSCPなどで/usr/local/src下に配置

# cd /usr/local/src
# chmod 700 VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
# ./VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle

Extracting VMware Installer...done.
You must accept the VMware OVF Tool component for Linux End User
License Agreement to continue.  Press Enter to proceed.[Enter]

...ライセンス条項が表示される。同意するなら[q]を入力...

Do you agree? [yes/no]:yes

The product is ready to be installed.  Press Enter to begin
installation or Ctrl-C to cancel.[Enter]

Installing VMware OVF Tool component for Linux 3.5.0
    Configuring...
[######################################################################] 100%
Installation was successful.

# ovftool --version
VMware ovftool 3.5.0 (build-1274719)
esxi-host
1. NFSデータストアのマウント

exportしたvagrant-converterのNFSボリュームをデータストアとしてマウントする

# esxcfg-nas -a -o vagrant-converter -s /vagrant vagrant-converter
# ls /vmfs/volumes/vagrant-converter/
boxes   source

guest-vm

1. ESXi上でguest-vmを作成

インストールは割愛。

2. もろもろパッケージのインストール

VirtualBox Guest Additionsなど入れる時に必要

# yum -y install kernel-devel kernel-headers gcc gcc-c++ perl wget unzip
3. ネットワーク設定周りをいじる

MACアドレスとethを紐付ける設定が/etc/udev/rules.d/70-persistent-net.rulesに設定されているが、Vagrantで立ち上げた時に付与される仮想NICに意図しないethが割り振られるのを防ぐため/dev/nullにリンクする

# ln -sf /dev/null /etc/udev/rules.d/70-persistent-net.rules

ネットワーク設定ファイルを再定義する

# cat << 'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
EOF
4. vagrantユーザを作成する
# useradd -u 2000 vagrant

vagrantユーザでパスワードなしsudoが出来るように設定

# echo "vagrant ALL=(ALL)   NOPASSWD: ALL" >> /etc/sudoers.d/vagrant
# chmod 400 /etc/sudoers.d/vagrant
5. 公開鍵の設定

vagrantユーザで公開鍵認証出来るように公開鍵を設定する

(コレvagrant upの時にinsecure_key使ってるからっていって再生成されちゃうみたい。Vagranfileで設定入れれば再生成を抑止できる)

# mkdir -p /home/vagrant/.ssh
# chmod 700 /home/vagrant/.ssh
# cd /usr/local/src
# wget https://github.com/hashicorp/vagrant/archive/master.zip
# unzip master.zip
# cat vagrant-master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
# chmod 600 /home/vagrant/.ssh/authorized_keys
# chown -R vagrant:vagrant /home/vagrant/.ssh
# rm -rf master.zip vagrant-master
6. ゲストVMをシャットダウン
# shutdown -h now

esxi-host

1. ゲストVMをコピー

ゲストVMをVagrant Box8変換用サーバの所定ディレクトリにコピーしておく

# mkdir -p /vmfs/volumes/vagrant-converter/source/guest-vm
# \cp -p /vmfs/volumes/datastore1/guest-vm/guest-vm.vmx /vmfs/volumes/vagrant-converter/source/guest-vm/guest-vm.vmx
# vmkfstool -i /vmfs/volumes/datastore1/guest-vm/guest-vm.vmdk # /vmfs/volumes/vagrant-converter/source/guest-vm/guest-vm.vmdk -d thin

vagrant-converter

1. ovftoolでVMの形式を変換

コピーしたゲストVMをovftoolを使ってovf形式に変換する

# cd /vagrant/source/guest-vm
# ovftool guest-vm.vmx guest-vm.ovf

※ここから先、Linux環境でやる場合とWin環境でやる場合を分けて書いてる。

今回の検証環境がNestedVMな環境なので、ゲストを起動しようとするとVirtualBoxに怒られて起動できない。
仕方ないのでovfファイルとguest-vm-disk1.vmdkをローカル(Win環境)にSCPする。

2. VirtualBoxに変換したVMをインポートする

Linux環境

VMインポート後、起動してVirtualBox Guest Additionsをインストールする

# インポート
# VBoxManage import guest-vm.ovf --vsys 0 --ostype "RedHat_64" --vsys 0 --vmname guest-vm --vsys 0 --cpus 1 --vsys 0 --memory 2048 --vsys 0 --unit 10 --disk /vagrant/VirtualBox\ VMs/guest-vm/guest-vm-disk1.vmdk

# 光学ドライブが消えちゃうのでstorageattachコマンドで光学ドライブを追加している。  
# VBoxManage storageattach guest-vm --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium emptydrive
VirtualBox Guest Additionsをインストールする

ゲストVM実行中に[デバイス] -> [Guest Additions CDイメージの挿入]をクリック
ゲストVM内でインストール作業を実行

# mount /dev/sr0 /media
# export KERN_DIR=/usr/src/kernels/x.x.xx-xxx.xx.x.el6.x86_64  # ここは任意のカーネルバージョンになる
# /media/VBoxLinuxAdditions.run
# umount /dev/sr0
# shutdown -h now

CDイメージの取り出し

# VBoxManage storageattach guest-vm --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium emptydrive

Win環境
VMインポート後、起動してVirtualBox Guest Additionsをインストールする

> "C:\Program Files\Oracle\VirtualBox\VBoxManage" import guest-vm.ovf --vsys 0 --ostype "RedHat_64" --vsys 0 --vmname guest-vm --vsys 0 --cpus 1 --vsys 0 --memory 2048  

> "C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach guest-vm --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium emptydrive

> "C:\Program Files\Oracle\VirtualBox\VBoxManage" modifyvm guest-vm --nic1 nat
VirtualBox Guest Additionsをインストールする

ゲストVM実行中に [デバイス] -> [Guest Additions CDイメージの挿入]をクリック
ゲストVM内でインストール作業を実行

# mount /dev/sr0 /media
# export KERN_DIR=/usr/src/kernels/x.x.xx-xxx.xx.x.el6.x86_64  # ここは任意のカーネルバージョンになる
# /media/VBoxLinuxAdditions.run
# umount /dev/sr0
# shutdown -h now

CDイメージの取り出し

> "C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach guest-vm --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium emptydrive
3. Vagrant Box化する
# vagrant package --base guest-vm --output /vagrant/boxes/guest-vm.box
==> guest-vm: Exporting VM...
==> guest-vm: Compressing package to: /vagrant/boxes/guest-vm.box
4. Vagrantfileの作成

Vagrantfileを作成する。
とりあえず起動するのに必要最小限で。

# vagrant init
# vi Vagrantfile
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "guest-vm.box"
  # vagrant up時にinsecure_private_keyのペアから書き換えられるのを防ぐ(推奨されないけども)
  config.ssh.insert_key = false
end
5. vagrant upを実行

起動してみる

# vagrant box add guest-vm guest-vm.box
# vagrant up

こんな感じ。

5
7
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
5
7