Vagrantfileのsynced_folderとは?

vagrantのsynced_folderを利用することにより、ホスト、ゲスト間でのファイル同期が可能。

Vagrant.configure("2") do |config|
  # other config here

  config.vm.synced_folder "host_path", "guest_path", options...
end

vagrant up時に有効化

ということは、

local.vm.synced_folder ".", "/vagrant",

. が問題だーーーーーーーーーーーーーーー おkkkkkkkkkkkkkk なるほど。

サイトのパーミッション変更のことだ。

:owner => "vagrant", :group => "apache", :mount_options => ["dmode=775,fmode=775"]

おk 問題はほぼ解決^^

vagrant file

config.vm.defineとは?
VMを指定する

config.vm.define "web" do |local|
local.vm.box = "centos-6.7"

box “contos-6.7″ をwebと定義する。

ホスト: vagrantコマンドを実行するホスト … ローカルのmacなど
ゲスト: vagrantコマンドで作成されたVM … 要するにVM
内部ネットワーク: vagrant内のネットワーク … vagrant内部
外部ネットワーク: ホスト外部 … mac外

プライベートネットワーク
内部ネットワークを利用して、ホストとゲスト、ゲスト間の通信が可能。

これか↓
local.vm.network :private_network, ip: “xxx.xxx.xx.xxx”
ipを指定して通信している

ポートフォワーディング
ホストの特定のポートへのアクセスをゲストへ転送

これだ↓ sshなら、2929、22、 httpなら、8000, 80ってことね。
local.vm.network :forwarded_port, id: “ssh”, guest: 22, host: 2929
local.vm.network :forwarded_port, guest: 80, host: 8000

22: Secure Shell (SSH) – セキュアログイン、セキュアなファイル転送(scpやsftpなど)、ポート転送などで用いられる。
29292:TMO Integration Service Communications Port, Used by Transaction Manager SaaS
80: Hypertext Transfer Protocol (HTTP)
8000:Commonly used for Internet radio streams such as SHOUTcast
ん?? 29292ではなく2929では?

ssh.forward_agent
vagrant sshでvmにログインする場合には、ssh.forward_agentをtureにする。

local.ssh.forward_agent = true

ちょっと長くなってきたので、続きは次回。

vagrantのnetworking: ポートフォワーディング

host machineへのアクセスへのオプションです。
まず、公式ドキュメントを見ましょう。
Vagrant Networking

Prot Forwarding:ポートフォワーディング
ポートフォワーディング:インターネットから特定のポート番号宛てに届いたパケットを、あらかじめ設定しておいたLAN側の機器に転送する機能

現状
localのvagrant rootディレクトリにファイルを置きます。

ブラウザでipをたたくと、jpegが反映されています。

port forwardingを追加

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network :forwarded_port, guest:80, host: 4567
end

vagrant reload
http://127.0.0.1:4567/test.jpeg でたたく

上手くいってるっぽいです。
大体vagrantの基礎はこの辺で良いかな~

vagrantでprovisioning

provisioningとはリソースを提供できるように配置すること。
公式:Provisioning

あれ、若干初心者の域を超えてきてるか?全然意識してなかったが。。

まず、shell scriptを作ります。
bootstrap.shとします。

shellを書く

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
	rm -rf /var/www
	ln -fs /vagrant /var/www
fi

apt-get -> linuxでパッケージをインストール/アップデートする
-y -> yesを省略
-L -> ファイルがありシンボリックであれば真
-r -> ファイルがあり読み取り可能であれば真
-f -> ファイルがあり通常のファイルであれば真
-s -> ファイルがありサイズが0より大きければ真
ln -> link

vagrant fileでshellを読み込み
config.vm.provisionで shellを追記します。

  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"

>vagrant reload
>vagrant ssh
>wget -qO- 127.0.0.1

あれ、なんか上手くいってない。。ああああああああああああああああああああああああ
provisonを実行するには、vagrant provisionだ

>vagrant provision
>vagran ssh
vagrant@precise64:~$ wget -qO- 127.0.0.1


 
  Index of /
 
 

Index of /

[ICO]NameLast modifiedSizeDescription

[   ]Vagrantfile15-Dec-2018 23:53 3.1K 
[TXT]bootstrap.sh16-Dec-2018 00:06 152  
[   ]foo15-Dec-2018 13:40 0  

Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 80
vagrant@precise64:~$

きたーーーーーーーーーーーーーーーーーーーー

vagrantでSynced Folder(共有フォルダ)の設定

Synced Foldersの意味がわかりませんでしたが、どうやら、共有フォルダのようです。
例に習って公式ドキュメントを見てみましょう。
Synced Folders

By using synced folders, Vagrant will automatically sync your files to and from the guest machine.
ローカルのフォルダとvmで共有できるそうだ!

え、何だって?

共有って凄くない!?

By default, Vagrant shares your project directory (remember, that is the one with the Vagrantfile) to the /vagrant directory in your guest machine.
ん?ローカルのvagrant upしたディレクトリと、home/vagrantが一緒?

vagrant@precise64:/home$ ls
vagrant
vagrant@precise64:/home$ cd vagrant
vagrant@precise64:~$ ls
postinstall.sh

postinstall.sh しかないよ。

vagrant@precise64:~$ ls /vagrant
Vagrantfile

topに戻ります。

vagrant@precise64:/$ ls
bin   etc         lib         media  proc  sbin     sys  vagrant
boot  home        lib64       mnt    root  selinux  tmp  var
dev   initrd.img  lost+found  opt    run   srv      usr  vmlinuz
vagrant@precise64:/$ cd vagrant
vagrant@precise64:/vagrant$ ls
Vagrantfile

ああああああああ、なるほど! vagrantフォルダと共有されてる!!!!!!!!!!!!!!

vagrant@precise64:/vagrant$ touch foo
vagrant@precise64:/vagrant$ ls
foo  Vagrantfile


これはすげー ビビった。

vagrant upとvagrant ssh

vagrant のbootの方法

$ vagrant up

sshでコマンドラインから接続できる。

>vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Sat Dec 15 07:15:13 2018 from 192.168.33.1

exitでログアウトします。

vagrant@precise64:~$ exit
logout
Connection to 127.0.0.1 closed.

ほーーーーーーーーー

vagrantのboxを追加、作成する方法: 公式サイトより

vagrant公式サイトより、vagrant boxの追加、作成方法を見てみましょう。
vagrant boxes.html

Vagrant uses a base image to quickly clone a virtual machine.
スクラッチからつくるのは面倒なので、cloneすると書いてます。賢いというか、エンジニアっぽい発想ですね。

hashi corpのbox search
https://app.vagrantup.com/boxes/search

ubunt/trusty64, centos7などありますねー

あれ、ちょっと待て、

Laravel すげーダウンロードされてんじゃん、マジかよ。。ショック。誰だ、このdeveloperっぽいアイコンは??

基本的に、boxからdownloadする。dockerのimageみたいな感じだな。

boxはusernameとboxからなる
hashicorp/precise64 だと、hashicorpがusernameでprecise64がbox
laravel/homestead はlaravelがusernameでhomesteadがbox なるほどにゃー

boxの使い方
vagrant fileのコメントアウトを取ると以下のようになりますね。

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
end

versionを指定する場合
box_versionを書く

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_version = "1.1.0"
end

インストールするURLを指定する場合
vm.box_urlを書く

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64"
end

box catalogにあれば、インストールできる。
うーん、しかし、点と点が線になる瞬間はちょっとびっくりしますな。

vagrant initとは?

vagrant initとは何でしょうか?
vagrantの公式ドキュメントを見てみましょう。
Project Setup

vagrant file作成の意図について説明があります。

The first step in configuring any Vagrant project is to create a Vagrantfile. The purpose of the Vagrantfile is twofold:

1. Mark the root directory of your project. Many of the configuration options in Vagrant are relative to this root directory.

2. Describe the kind of machine and resources you need to run your project, as well as what software to install and how you want to access it.

Vagrant has a built-in command for initializing a directory for usage with Vagrant: vagrant init. For the purpose of this getting started guide, please follow along in your terminal:

目的は
ルートディレクトリを決定すること
プロジェクトに必要なマシン、ソフトウェアを記載すること

vagrant fileには例えば、centosのどのバージョンをインストールするかなどを記載します。

例では、以下のようにprecise64のインストールを扱っています。

vagrant init hashicorp/precise64

実際にやってみましょう。

>vagrant init /hashicorp/precise64
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.

簡単ですね。

Vagrant Install

さあ、公式ドキュメントを見てみましょう
https://www.vagrantup.com/intro/getting-started/install.html

installといっても、普通にインストールするだけでしょ。

ダウンロードページ
https://www.vagrantup.com/downloads.html
Debian, Windows, Centos, Linux, macOSがあります。
一般的には、macかwindowsでしょう。好きな人はcentos, linuxでしょう。Debian使ってる人は見たことないっすね。

vagrantのgithub
hashicorp / vagrant

ossでここで開発してるようです。issuesが346ありますね。hashicorpのプロダクトですが、企業での開発と全く同じようです。

例https://github.com/hashicorp/vagrant/issues/10503

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.define "master" do |master|
    master.vm.box = "centos/7"
    master.vm.network "private_network", bridge: "Default Switch"

    master.vm.provider "hyperv" do |hv|
      hv.vmname = "myVM"
      hv.memory = 2048
      hv.maxmemory = 4096
      hv.enable_virtualization_extensions = true
      hv.cpus = 2
      hv.linked_clone = true
    end

    master.vm.synced_folder ".", "/vagrant", type: "smb", mount_options: ['vers=3.0'], smb_username: "<myuser>", smb_password: "<mypass>"

    master.vm.hostname = "myVM"
  end
end

installの確認
vagrantをインストールしたらコマンドラインでvagrantと打ち込んでインストールの確認をします。
下記のようなテキストが出てきたらOKです。
Usage: vagrant [options] []

-v, –version Print the version and exit.
-h, –help Print this help.

Common commands:
box manages boxes: installation, removal, etc.
connect connect to a remotely shared Vagrant environment
destroy stops and deletes all traces of the vagrant machine
global-status outputs status Vagrant environments for this user
halt stops the vagrant machine
help shows the help for a subcommand
init initializes a new Vagrant environment by creating a Vagrantfile
login log in to HashiCorp’s Vagrant Cloud
package packages a running vagrant environment into a box
plugin manages plugins: install, uninstall, update, etc.
port displays information about guest port mappings
powershell connects to machine via powershell remoting
provision provisions the vagrant machine
push deploys code in this environment to a configured destination
rdp connects to machine via RDP
reload restarts vagrant machine, loads new Vagrantfile configuration
resume resume a suspended vagrant machine
sandbox
share share your Vagrant environment with anyone in the world
snapshot manages snapshots: saving, restoring, etc.
ssh connects to machine via SSH
ssh-config outputs OpenSSH valid configuration to connect to the machine
status outputs status of the vagrant machine
suspend suspends the machine
up starts and provisions the vagrant environment
validate validates the Vagrantfile
vbguest plugin: vagrant-vbguest: install VirtualBox Guest Additions to the machine
version prints current and latest Vagrant version

For help on any individual command run `vagrant COMMAND -h`

Additional subcommands are available, but are either more advanced
or not commonly used. To see all subcommands, run the command
`vagrant list-commands`.

Vagrant initでvagrantの初期化

Vagrant initでvagrantを初期化し、vagrant fileを作ります。

公式ドキュメントに沿って実行しましょう。
getting-started

1.マウントするフォルダを作成
ローカルのコマンドライン
>mkdir precise
>cd precise

2.vagrant init
vagrant fileを作ります。
>vagrant init hashicorp/precise64
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.

3.vagrant up
コマンドラインで vagrant upと打ち込みます。
ubuntu 12.04 LTS 64-bitが入る様です。最初のvagrant upは時間がかかります。
After running the above two commands, you will have a fully running virtual machine in VirtualBox running Ubuntu 12.04 LTS 64-bit.

>vagrant up
Bringing machine ‘default’ up with ‘virtualbox’ provider…
==> default: Box ‘hashicorp/precise64’ could not be found. Attempting to find and install…
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box ‘hashicorp/precise64’
default: URL: https://vagrantcloud.com/hashicorp/precise64
==> default: Adding box ‘hashicorp/precise64’ (v1.1.0) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
default: Progress: 100% (Rate: 3371k/s, Estimated time remaining: –:–:–)
==> default: Successfully added box ‘hashicorp/precise64’ (v1.1.0) for ‘virtualbox’!
==> default: Importing base box ‘hashicorp/precise64’…
==> default: Matching MAC address for NAT networking…
==> default: Checking if box ‘hashicorp/precise64’ is up to date…
==> default: Setting the name of the VM: precise_default_1544857642397_69575
==> default: Clearing any previously set network interfaces…
==> default: Preparing network interfaces based on configuration…
default: Adapter 1: nat
default: Adapter 2: hostonly
==> 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:
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] GuestAdditions versions on your host (5.1.26) and guest (4.2.0) do not match.
Reading package lists…
Building dependency tree…
Reading state information…
The following extra packages will be installed:
fakeroot linux-headers-3.2.0-23 make patch
Suggested packages:
make-doc diffutils-doc
The following NEW packages will be installed:
dkms fakeroot linux-headers-3.2.0-23 linux-headers-3.2.0-23-generic make
patch
0 upgraded, 6 newly installed, 0 to remove and 66 not upgraded.
Need to get 12.7 MB of archives.
After this operation, 68.5 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/main make amd64 3.81-8.1ubuntu1 [118 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/main patch amd64 2.6.1-3 [80.2 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/main dkms all 2.2.0.3-1ubuntu3 [73.1 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise/main fakeroot amd64 1.18.2-1 [87.2 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ precise/main linux-headers-3.2.0-23 all 3.2.0-23.36 [11.4 MB]
Get:6 http://us.archive.ubuntu.com/ubuntu/ precise/main linux-headers-3.2.0-23-generic amd64 3.2.0-23.36 [947 kB]
dpkg-preconfigure: unable to re-open stdin: No such file or directory
Fetched 12.7 MB in 56s (226 kB/s)
Selecting previously unselected package make.
(Reading database … 51095 files and directories currently installed.)
Unpacking make (from …/make_3.81-8.1ubuntu1_amd64.deb) …
Selecting previously unselected package patch.
Unpacking patch (from …/patch_2.6.1-3_amd64.deb) …
Selecting previously unselected package dkms.
Unpacking dkms (from …/dkms_2.2.0.3-1ubuntu3_all.deb) …
Selecting previously unselected package fakeroot.
Unpacking fakeroot (from …/fakeroot_1.18.2-1_amd64.deb) …
Selecting previously unselected package linux-headers-3.2.0-23.
Unpacking linux-headers-3.2.0-23 (from …/linux-headers-3.2.0-23_3.2.0-23.36_all.deb) …
Selecting previously unselected package linux-headers-3.2.0-23-generic.
Unpacking linux-headers-3.2.0-23-generic (from …/linux-headers-3.2.0-23-generic_3.2.0-23.36_amd64.deb) …
Processing triggers for man-db …
Setting up make (3.81-8.1ubuntu1) …
Setting up patch (2.6.1-3) …
Setting up dkms (2.2.0.3-1ubuntu3) …
Setting up fakeroot (1.18.2-1) …
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode.
Setting up linux-headers-3.2.0-23 (3.2.0-23.36) …
Setting up linux-headers-3.2.0-23-generic (3.2.0-23.36) …
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/dkms 3.2.0-23-generic /boot/vmlinuz-3.2.0-23-generic
Copy iso file C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
mount: warning: /mnt seems to be mounted read-only.
Installing Virtualbox Guest Additions 5.1.26 – guest version is 4.2.0
Verifying archive integrity… All good.
Uncompressing VirtualBox 5.1.26 Guest Additions for Linux………..
VirtualBox Guest Additions installer
Removing installed version 4.2.0 of VirtualBox Guest Additions…
Copying additional installer modules …
Installing additional modules …
vboxadd.sh: Starting the VirtualBox Guest Additions.

Could not find the X.Org or XFree86 Window System, skipping.
An error occurred during installation of VirtualBox Guest Additions 5.1.26. Some functionality may not work as intended.
In most cases it is OK that the “Window System drivers” installation failed.
vboxadd.sh: Starting the VirtualBox Guest Additions.
vboxadd.sh: failed: modprobe vboxsf failed.

Could not find the X.Org or XFree86 Window System, skipping.
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims: 4.2.0
VBoxService inside the vm claims: 5.1.26
Going on, assuming VBoxService is correct…
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims: 4.2.0
VBoxService inside the vm claims: 5.1.26
Going on, assuming VBoxService is correct…
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims: 4.2.0
VBoxService inside the vm claims: 5.1.26
Going on, assuming VBoxService is correct…
Restarting VM to apply changes…
==> default: Attempting graceful shutdown of VM…
==> 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: Connection reset. Retrying…
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM…
==> default: Configuring and enabling network interfaces…
==> default: Mounting shared folders…
default: /vagrant =>

puttyでログインする