[~]$ vagrant version
Installed Version: 1.8.1
Latest Version: 1.8.1
You're running an up-to-date version of Vagrant!
[~]$ VBoxManage -v
5.0.14r105127
[~/sourcetree/AnsibleExam/centos7]$ vagrant init centos/7; vagrant up --provider virtualbox
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
default: URL: https://atlas.hashicorp.com/centos/7
==> default: Adding box 'centos/7' (v1603.01) for provider: virtualbox
default: Downloading: https://atlas.hashicorp.com/centos/boxes/7/versions/1603.01/providers/virtualbox.box
==> default: Successfully added box 'centos/7' (v1603.01) for 'virtualbox'!
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' is up to date...
==> default: Setting the name of the VM: centos7_default_1460477307404_68841
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
==> default: Rsyncing folder: /Users/atsushi/sourcetree/AnsibleExam/centos7/ => /home/vagrant/sync
[~/sourcetree/AnsibleExam/centos7]$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.3
BuildVersion: 15D21
[~/sourcetree/AnsibleExam/centos7]$ vagrant ssh
[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[~/sourcetree/AnsibleExam/centos7]$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile "/Users/atsushi/sourcetree/AnsibleExam/centos7/.vagrant/machines/default/virtualbox/private_key"
IdentitiesOnly yes
LogLevel FATAL
[~/sourcetree/AnsibleExam/centos7]$ ssh vagrant@127.0.0.1 -p 2222 -i .vagrant/machines/default/virtualbox/private_key
こうしてもいい
[~/sourcetree/AnsibleExam/centos7]$ vagrant ssh-config >> ~/.ssh/config
[~/sourcetree/AnsibleExam/centos7]$ ssh default
[~/sourcetree/AnsibleExam/centos7]$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
[~/sourcetree/AnsibleExam/centos7]$ cat Vagrantfile | egrep -v "^[ ]+#.*$" | egrep -v "^$"
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
end
まぁ雛形ですね。コメントてんこ盛り外部にアクセスするのに Proxy を通す場合、環境変数 http_proxy に Proxy サーバの URL を設定する
$ export http_proxy = "http://foo%40acme.com:password@proxy:3128/
(%40は@)
command | option | explanation |
vagrant box add $NAME $URL | --provider $PROVIDER | |
vagrant box list | ||
vagrant box remove $NAME $PROVIDER | ||
vagrant box repackage $NAME $PROVIDER | ||
vagrant destroy | -f(--force) | 破棄 |
vagrant halt | -f(--force) | VMをシャットダウン |
vagrant init | [box-name] [box-url] | Vagrantfileの雛形を作る |
vagrant package | --base $NAME | VM名 (Virtualbox GUIのマシン名 or Vagrant の UUID) |
--output $NAME | 出力するBOX名 | |
--include x,y,z | 添付する 一般ファイル | |
--vagrantfile $FILE | 添付する Vagrantfile | |
vagrant plugin install $NAME [$LICENSE-FILE] | ||
vagrant plugin list | ||
vagrant plugin uninstall $NAME | uninsatll 出来なかったら ~/.vagrant.d/plugins.json を直接編集せよ | |
vagrant provision | --provision-with x,y,z | オプション無しの時全ての provision を実行。 --provision で特定の provision のみ実行 (shell や chef などを指定) |
vagrant reload | [--no-provision] [--provision-with x,y,z] | halt → up と同じ |
vagrant resume | suspend されている VM を再開 | |
vagrant ssh | 実行中の Vagrant マシンに ssh アクセスする | |
vagrant ssh-config | ssh 設定内容を ~/.ssh/config 形式で出力。 sshコマンドでアクセスしたければ vagrant ssh-config >> ~/.ssh/config で設定 | |
vagrant status | ||
vagrant suspend | ||
vagrant up | VM 起動 |
export VAGRANT_DEBUG_LAUNCHER
デバックログ ON
export VAGRANT_DEFAULT_PROVIDER = "vmware_fusion"
デフォルトは virtualbox
export VAGRANT_CHECKPOINT_DISABLE
VM起動時に、環境のチェックをしない
export VAGRANT_CWD = "path"
Vagrantの Work directory
export VAGRANT_DOTFILE_PATH = "/var/vagrant/work/.vagrant"
デフォルトは、~/.vagrant
export VAGRANT_HOME = "path"
デフォルトは、~/.vagrant.d
export VAGRANT_LOG = "{debug|info|warn|error}"
ログレベル
export VAGRANT_NO_COLOR
export VAGRANT_NO_PLUGINS
export VAGRANT_SKIP_SUBPROCESS_JAILBREAK
Vagrant に非公式な改造を加えた場合に、起動を許可する
export VAGRANT_VAGRANTFILE = "path"
Vagrantfile のパス。デフォルトの振る舞いは、カレントディレクトリから / に向かって順に探索する
仮想マシンへの実験的な変更を何度も行いたい時に使う
$ vagrant plugin install sahara $ vagrant plugin list
サンドボックスに入る | vagrant sandbox on |
サンドボックスの状態 | vagrant sandbox status |
サンドボックスのロールバック | vagrant sandbox rollback |
サンドボックスのコミット | vagrant sandbox commit |
サンドボックスから出る | vagrant sandbox off |
commit, rollback しても、off コマンド実行までサンドボックスモードは続く
Vagrant 1.8 から、Provider (Virtualbox / Vmware) の Snapshot が使えるようになった
スナップショット作成(無名) | vagrant snapshot push |
スナップショット復元(HEADから) | vagrant snapshot pop |
スナップショット作成 | vagrant snapshot save [name] |
スナップショット復元 | vagrant snapshot restore [name] |
名前付きスナップショットの一覧 | vagrant snapshot list |
ENV["LC_ALL"] = "ja_JP.UTF-8"
Vagrant.require_version ">= 1.3.5", "< 1.4.0"
Vagrant.configure(2) do |config|
config.vm.box="centos/7"
config.vm.network :private_network, ip:"192.168.33.10"
config.vm.provision :shell, :inline => <<-EOT
yum update -y
service iptables stop
chkconfig iptables off
yum -y install httpd
chkconfig httpd on
service httpd start
EOT
config.vm.provider :virtualbox do |vb|
vb.gui = true
end
end
setting | default | explanation |
config.vm.boot_timeout | 300 | 単位 sec。GUEST が 正常に boot するまでの待ち時間。設定値を超えて boot しないと異常とみなす |
config.vm.box | (nil) | Boxがローカルにない場合には、HashiCorp's Atlas から自動ダウンロード |
config.vm.box_check_update | true | |
config.vm.box_download_checksum | (nil) | box の checksum |
config.vm.box_download_checksum_type | (nil) | "md5", "sha1", "sha256" |
config.vm.box_download_client_cert | (nil) | Boxをダウンロードするときに確認するクライアント証明書 |
config.vm.box_download_ca_cert | Mozilla CA cert | Boxをダウンロードするときに確認する認証局 |
config.vm.box_download_ca_path | Mozilla CA cert | Boxをダウンロードするときに確認する認証局 |
config.vm.box_download_insecure | true | BoxをHTTPSでダウンロードするときに証明書と認証局を確認する |
config.vm.box_download_location_trusted | false | Boxをダウンロードするときに Redirect (301 Moved Permanently) を信用する |
config.vm.box_url | (nil) | Boxの取得元URL。file:// も可。HashiCorp's Atlas の Box をダウンロードする場合には不要 |
config.vm.box_version | (nil) | ">= 1.0", "< 1.5" など |
config.vm.communicator | "ssh" | GUEST が Windows の場合には "winrm" にする |
config.vm.graceful_halt_timeout | 60 | 単位 sec。GUEST が 正常に halt するまでの待ち時間。設定値を超えて halt しないと異常とみなす |
config.vm.guest | :linux | |
config.vm.hostname | (nil) | GUEST の hostname |
config.vm.network | (nil) | ⇒ネットワーク設定 |
config.vm.post_up_message | (nil) | |
config.vm.provider | (nil) | ⇒プロバイダーの設定 |
config.vm.provision | (nil) | ⇒プロビジョニングの設定 |
config.vm.synced_folder | (nil) | ⇒同期フォルダ設定 |
config.vm.usable_port_range | 2200..2250 | Vagrant が利用可能な Port。sshd の LISTEN Port など |
setting | default | explanation |
config.ssh.username | vagrant | |
config.ssh.password | (nil) | デフォルトでは SSH は鍵認証。パスワード認証禁止 |
config.ssh.host | (nil) | vagrant ssh で HOST から GUIEST にログインする際に使われる IP アドレス/HOST 名。通常 privider (Virtual Box) がうまいことやってくれるので、Vagrant からは関知しない |
config.ssh.port | 22 | sshd の LISTEN Prot |
config.ssh.guest_port | (nil) | HOST から GUIEST に ssh ログインする際の Port。未指定時は config.vm.usable_port_range から適当なものを自動設定 |
config.ssh.private_key_path | VagrantのサンプルSSH秘密鍵*2 | SSH秘密鍵(private key)。配列で複数設定可能 ⇒ 構築作業用の秘密鍵と本番用の秘密鍵を設定し、Vagrantfile の最後で構築用の公開鍵を破棄するとか |
config.ssh.forward_agent | false | |
config.ssh.forward_x11 | false | |
config.ssh.forward_env | (nil) | ["CUSTOM_VAR"] 形式で、HOST から GUEST に送る環境変数を設定。通常の SSH では /etc/ssh_config に SendEnv? LANG LC_* などと設定されている |
setting | default | explanation |
config.winrm.username | vagrant | |
config.winrm.password | vagrant | |
config.winrm.host | (nil) | winrm で HOST から GUIEST にログインする際に使われる IP アドレス/HOST 名。通常 privider (Virtual Box) がうまいことやってくれるので、Vagrant からは関知しない |
config.winrm.port | 5985 | winrm の LISTEN Port |
config.winrm.guest_port | 4567 | HOST から GUIEST に winrm ログインする際の Port |
config.winrm.transport | :negotiate | winrm の通信方式。:negotiate, :ssl, :plaintext |
config.winrm.basic_auth_only | false | config.winrm.transport=:plaintext, config.winrm.basic_auth_only=true のとき BASIC 認証を行う |
config.winrm.execution_time_limit | PT2H (2hour) | config.winrm.execution_time_limit以内に構築処理が終わらないとエラーとみなす。形式は ISO-8601 Durations |
setting | default | explanation |
config.vagrant.host | :detect (auto-detect) | GUEST の host 名 |
config.vm.network "forwarded_port", guest: 80, host: 8080
setting | default | explanation |
guest | guest port | |
guest_ip | empty | If GUEST has multi NICs, specify one NIC for the service. |
host | host port. This must be greater than 1024 unless Vagrant is running as root | |
host_ip | empty | If HOST has multi NICs, specify one NIC for the service. |
protocol | tcp | "tcp" or "udp" |
auto_correct | false | true にすると、port が衝突している場合に自動的に解決する。解決内容はコンソールに出力される |
config.vm.network "private_network", type: "dhcp"
config.vm.network "private_network", ip: "192.168.50.4", netmask: "255.255.255.0"
10.0.0.0/8 (-10.255.255.255) |
172.16.0.0/12 (-171.31.255.255) |
192.168.0.0/16 (-192.168.255.255) |
config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
fdxx:xxxx:xxxx:yyyy::/64 |
config.vm.network "private_network", auto_config: false
config.vm.network "public_network"
config.vm.network "public_network", use_dhcp_assigned_default_route: true
config.vm.network "public_network", ip: "192.168.0.17", netmask: "255.255.255.0"
config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"
config.vm.network "public_network", auto_config: false
Vagrant.configure(2) do |config| config.vm.base_mac = "080027abcdef" end
Vagrant.configure(2) do |config| config.vm.provider "virtualbox" do |v| v.gui = true v.name = "my_vm" v.linked_clone = true if Vagrant::VERSION =~ /^1.8/ v.customize ["modifyvm", :id, "--cpuexecutioncap", "50"] v.memory = 1024 v.cpus = 2 end end
$ VBoxManage modifyvm 99999999-9999-9999-9999-999999999999 --cpuexecutioncap 50 $ VBoxManage modifyvm 99999999-9999-9999-9999-999999999999 --memory 1024 $ VBoxManage modifyvm 99999999-9999-9999-9999-999999999999 --cpus 2cf. http://vboxmania.net/content/vboxmanage-modifyvm%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
Vagrant.configure(2) do |config| config.vm.network "private_network", ip: "192.168.50.4", netmask: "255.255.255.0", virtualbox__intnet: true end endデフォルトでは、Host only ネットワークを使う。
$ sudo apt-get install linux-headers-$(uname -r) build-essential dkms $ wget http://download.virtualbox.org/virtualbox/5.0.20/VBoxGuestAdditions_5.0.20.iso $ sudo mkdir /media/VBoxGuestAdditions $ sudo mount -o loop,ro VBoxGuestAdditions_5.0.20.iso /media/VBoxGuestAdditions $ sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run $ rm VBoxGuestAdditions_5.0.20.iso $ sudo umount /media/VBoxGuestAdditions $ sudo rmdir /media/VBoxGuestAdditionsGuest OS 側のドライバ。Host OS とのクリップボードの共有や、仮想スクリーンの解像度追随。GUI を使わないならいらない
Vagrant.configure(2) do |config| config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] end end
$script = <<SCRIPT yum update -y service iptables stop chkconfig iptables off yum -y install httpd chkconfig httpd on service httpd start SCRIPT Vagrant.configure(2) do |config| config.vm.box="centos/7" config.vm.network :private_network, ip:"192.168.33.10" config.vm.provision "shell", inline: $script EOT end
config.vm.provision "shell", inline: "echo hello"
config.vm.provision "shell", path: "script.sh"
config.vm.provision "shell", path: "https://example.com/provisioner.sh"
config.vm.provision "shell", inline: "/bin/sh /path/to/the/script/already/on/the/guest.sh"
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
config.vm.synced_folder "${local directory}","${vm directory}",option:"${value}"
option:default | 説明 |
create:false | VMのディレクトリを作成するか? |
disabled:false | VMのディレクトリをマウントしない |
group:vagrant | VMのディレクトリのGroup |
owner:vagrant | VMのディレクトリのOwner |
type:virtualbox | 共有方法 virtualbox, nfs, rsync, smb |
virtualbox | Virtual Box のディレクトリ共有を使う。遅い | HOST ⇔ GUSET VM |
nfs | NFSで、HOST と GUEST のディレクトリ共有を行う。HOST側で NFS の設定が必要 | HOST ⇔ GUSET VM |
rsync | HOST のディレクトリから GUEST のディレクトリに rsync を行う。設定不要。速い。 | HOST ⇒ GUSET VM (片方向!) |
smb | SMBで、HOST と GUEST のディレクトリ共有を行う。HOST側で SMB の設定が必要 | HOST ⇔ GUSET VM |
[~/sourcetree/AnsibleExam/centos7]$ vagrant rsync ==> default: Rsyncing folder: /Users/atsushi/sourcetree/AnsibleExam/centos7/ => /home/vagrant/sync
$ vagrant plugin install vagrant-vbguest $ vagrant plugin install vagrant-proxyconf
Vagrant.configure("2") do |config|
config.proxy.http = "http://192.168.0.2:3128/"
config.proxy.https = "http://192.168.0.2:3128/"
config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
config.vm.synced_folder "C:\\temp", "/vagrant", type: "virtualbox"
end
こんな感じで C:\\temp と /vagrant が同期config.vbguest.auto_update = false記述が必要になる
$ vagrant plugin uninstall vagrant-vbguest
Vagrant.configure(2) do |config| config.vm.box="centos/7" config.vm.define :web do |web| web.vm.hostname = "web" web.vm.network :private_network, ip:"192.168.33.11" end config.vm.define :db do |db| db.vm.hostname = "db" db.vm.network :private_network, ip:"192.168.33.12" end end
一つの Vagrantfile で複数の VM を立ち上げることができる