Memo/Vagrant

https://dexlab.net:443/pukiwiki/index.php?Memo/Vagrant
 

Vagrant

  • http://www.vagrantup.com/
    • 仮想マシンの VirtualBox, Amazon EC2 + VPC, VMware Fusion, Rackspace Cloud のCUIフロントエンドに相当する、rubyで書かれたツール。プログラミングでサーバ起動/終了/設定ができる

loopで複数VMの構築

  • Loop Over VM Definitions
  • 変数が大きくなってくると辛いので yaml化を検討する
    require 'yaml'
    hosts = YAML.load_file 'group_vars/all.yml'
  • Vagrantfile
    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    hosts = [
      {
        :hostname => "centos6",
        :box => "centos/6",
        :private_network_ip => "192.168.56.10",
        :forwarded_port => [
          { guest: 80, host: 18080  }
        ],
        :memory => "512",
      },
      {
        :hostname => "centos7",
        :box => "centos/7",
        :private_network_ip => "192.168.56.11",
        :forwarded_port => [
          { guest: 80, host: 28080  }
        ],
        :memory => "512",
      },
    ]
    
    Vagrant.configure("2") do |config|
      hosts.each do |host|
        config.vm.define host[:hostname] do |vmconfig|
          vmconfig.vm.hostname = host[:hostname]
          vmconfig.vm.box = host[:box]
          host[:forwarded_port].each do |fwd_port|
            vmconfig.vm.network "forwarded_port", guest: fwd_port[:guest], host: fwd_port[:host]
          end
          vmconfig.vm.network "private_network", ip: host[:private_network_ip]
          vmconfig.vm.provider "virtualbox" do |vb|
            vb.memory = host[:memory]
          end
          vmconfig.vm.provision "shell", inline: <<-SHELL
            yum install -y vim epel-release
            yum install -y vim nginx
            service nginx restart
            chkconfig nginx on
          SHELL
        end
      end
    end

プラグイン


sshでの接続

  • 通常
    vagrant ssh [default]
  • ansible等、他のツールを使いたい場合
    vagrant ssh-config [default] > ssh-config
    
    # ssh
    ssh -F ssh-config default
    
    # scpでファイルコピー
    scp -F ssh-config dummy.txt default:/tmp/

Ansibleを使う

shellより楽に設定できる。

  • ansible側で変数を定義して、vagrant側で使う場合。
    require 'yaml'
    group_vars = YAML.load_file 'group_vars/all.yml'

Failed to open/create the internal network

環境:

  • Win10 Pro 1803
    • VirtualBox 6.0.4
  • WSL
    • Ubuntu 18.04.1 LTS
    • vagrant 2.2.4

現象:

  • vagrant up時に以下のエラーが出て起動しない。

エラー:

Stderr: VBoxManage.exe: error: Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter' (VERR_INTNET_FLT_IF_NOT_FOUND).
VBoxManage.exe: error: Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

解決:

  • VirtualBox自体の再インストールをしてみる(これで直ったように見えた)
  • ネットワーク接続でIPv6の無効化、NDIS6のチェック確認。
  1. 「コントロール パネル\ネットワークとインターネット\ネットワーク接続」
  2. 「VirtualBox Host-Only Ethernet Adapter」のプロパティを開く
  3. 「VirtualBox NDIS6 Bridged Networking Driver」にチェックを入れる
  4. 「インターネットプロトコル バージョン6(TCP/IPv6)」のチェックを外す
  5. OKで閉じる。
  6. 右クリックから無効にする
  7. 右クリックから有効にする

Failed to create the host-only adapter

環境:

  • Win10 Pro 1803
    • VirtualBox 6.0.4
  • WSL
    • Ubuntu 18.04.1 LTS
    • vagrant 2.2.4

現象:

  • vagrant upすると以下のエラーが出る。host-only adapterが作れない。
    VBoxManage.exe: error: Failed to create the host-only adapter
  • VirtualBoxのファイル > ホストネットワークマネージャ > Createでエラーが出る
    Assertion failed: [!aInterfaceName.isEmpty()]
  • 「VirtualBox Host-Only Ethernet Adapter #2」のように増える

原因:

解決:

  • 「コントロール パネル\ネットワークとインターネット\ネットワーク接続」を開き、右クリックで「無効にする」。ダブルクリックで「有効にする」
  • VirtualBoxのファイル > ホストネットワークマネージャ > アダプタを手動で設定のIPv4を確認して重複しないIPを指定。
  • Vagrantfile
    config.vm.network "private_network", ip: "192.168.56.101"

can't modify frozen String

  • 以下行があればvagrant v2.xでは不用なので削除。
    Vagrant::DEFAULT_SERVER_URL.replace('https://vagrantcloud.com')

WSL(Windows Subsystem for Linux)での利用

  • Win10 Pro 1803
    • VirtualBox 6.0.4
  • WSL
    • Ubuntu 18.04.1 LTS
    • vagrant 2.2.4
  1. Memo/Windows/PackageManagement#y905b7e1 でWindowsアプリとして、VirtualBoxのインストール
  2. WSLのUbuntu上でvagrantのインストール。Download - Vagrant by HashiCorp で最新バージョンを確認
    wget https://releases.hashicorp.com/vagrant/2.2.4/vagrant_2.2.4_x86_64.deb
    sudo apt install  ./vagrant_2.2.4_x86_64.deb
    
    vagrant -v
    Vagrant 2.2.4
  3. bash用の環境設定
    mkdir ~/vagrant
    
    cat ~/.bash.d/vagrant.sh
    # VirtualBox.exeのパス
    export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"
    # VagrantにWindowsへのアクセス権の許可
    export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
    # プロジェクトディレクトリの指定
    export VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH="/mnt/c/local/home/$USER/vagrant"
    
    chmod +x ~/.bash.d/vagrant.sh
    soruce /.bash.d/vagrant.sh
  4. 例: CentOS 7のboxを追加して、nginxをインストール
    • vm名を省略するとオプションに「default」が指定された事になる
    • CIDRはVirtualBoxのファイル > ホストネットワークマネージャ > アダプタを手動で設定のIPv4を確認。
      # Vagrantfileを作成。テンプレートを作成してくれる。1ディレクトリに1ファイル。
      vagrant init centos/7
      
      # 適当にカスタマイズ
      cat Vagrantfile
      # -*- mode: ruby -*-
      # vi: set ft=ruby :
      Vagrant.configure("2") do |config|
        config.vm.box = "centos/7"
        config.vm.network "forwarded_port", guest: 80, host: 18080
        config.vm.network "private_network", ip: "192.168.56.101"
        config.vm.provider "virtualbox" do |vb|
           vb.memory = "512"
         end
        config.vm.provision "shell", inline: <<-SHELL
          yum install -y vim epel-release
          yum install -y vim nginx
          service nginx restart
          chkconfig nginx on
        SHELL
      end
      
      # Vagrantfileの検証
      vagrant validate
      Vagrantfile validated successfully.
      
      # 起動。初回は時間がかかる。「.vagrant/」「.vagrant.d/」ディレクトリができる 
      vagrant up
      
      # ステータスの確認
      vagrant status
      ...
      default                   running (virtualbox)
      
      # sshでのログイン
      vagrant ssh [default]
      [vagrant@localhost ~]$ pwd
      /home/vagrant
      [vagrant@localhost ~]$ exit
      
      # Vagrantfileの変更反映
      vagrant reload [default]
      
      # provision部分の再実行
      vagrant provision [default]
      
      # vmのsuspend相当 > resume
      vagrant suspend [default]
      
      # vmのpoweroff相当。動作させっぱなしはホストPCが遅くなるので停止
      vagrant halt [default]
      
      # vmの削除. boxのイメージは残ったまま
      vagrant destroy [default]
  5. http://192.168.56.101/ を開いてnginxのデフォルトページが表示されるはず
  • boxの操作
    # help
    vagrant box
    
    # インストール済みboxの一覧
    vagrant box list
    centos/7 (virtualbox, 1902.01)

box: 構築済みイメージの使用


/vagrantディレクトリが空の場合

Vagrant box centos/7 - Vagrant Cloud を使った場合、ホストOSから見た「/vagrant」が空の場合がある。

  • vagrant-vbguestを最新にする
    vagrant plugin install vagrant-vbguest
    vagrant halt
    vagrant up

Warning: Remote connection disconnect:. Retrying...

suspend中の仮想マシンに繋がらなくなった場合。

  1. vagrant haltでシャットダウン
  2. Vagrantfileを編集し、GUIを有効化
    config.vm.provider "virtualbox" do |vb|
      vb.gui = true
    end
  3. vagrant upで起動

コマンドラインオプション

# ヘルプ
vagrant -h

# Vagrantfileの検証
vagrant validate

# vagrantの状態
vagrant status

# 起動
vagrant up

# 一時停止、スリープ
vagrant suspend

# suspend状態からの復帰
vagrant resume

# 電源off
# 裏でVMが動いていると重いので、使い終わったら停止したほうが良い
vagrant halt

}}}


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-12 (水) 17:18:58 (3d)