2018-07-10_Vagrantを使ってLinux開発環境を用意しよう
このページで分かること
VirtualBoxを使って仮想環境を作っていましたが毎度OSのインストールから設定を実施していくのが非常に手間でVagrantを使うことにしました。
環境
- ホスト: Windows10Pro v1803
- ゲスト: Ubuntu 16.04
- Vagrant 2.1.2
- VirtualBox 5.2.12
そもそもVagrantってなに?
VirtualBoxのラッパーツール。Boxと呼ばれるゲストマシンが仮想化された状態を管理できます。
外部公開されているboxを使うこともできますし自作することもできます。公開されているBoxをベースにすればコマンドを数回叩くだけでubuntuやcentosを立ち上げることができます。またもう一つの利点としてはBoxの設定をVagrantfileと呼ばれる設定ファイルに保持しています。Vagrantfileはただのテキストファイルなのでgitなどで管理も可能です。設定を共通化して複数の仮想マシンを建てる事ができるのと、どういった設定(例えば割り振りIP)かをいちいちログインしなくても確認できるのが便利です。
作業の流れ
- Vagrantのインストール
- VagrantFileの生成
- boxの起動
- boxの終了
- boxの破棄
1. Vagrantのインストール
Vagrant by HashiCorpからホストOSにあったものとをダウンロードしてインストールしてください。
ウィザードはデフォルトのまま次へで問題ないです。
2. VagrantFileの生成
下記コマンドでカレントディレクトリにVagrantFileが生成されます。
VagrantFileに設定を書き込む事で仮想環境のOSの種類を指定したり、ネットワークの設定を行う事ができます。
設定値について
config.vm.box
で指定するOSはDiscover Vagrant Boxes - Vagrant Cloudにて公開されています。
ubuntuやcentosなど有名なものは一通り揃っている印象ですね。
その他のオプションは設定例を載せておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | # -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
##c 作成するboxのOS
config.vm.box = "ubuntu/xenial64"
##c 仮想環境のホスト名
config.vm.hostname = "tubuntu"
##c ネットワーク関係
##c publicnetworkをdhcpでブリッジ接続(ホストと同じネットワークに所属させる)
config.vm.network :public_network, :bridge => "Intel(R) 82579LM Gigabit Network Connection"
##c ゲストポート3000 を ホストポート 3000にフォワーディング
config.vm.network "forwarded_port", guest: 3000, host: 3000
##c プライベートのネットワーク設定
#config.vm.network "private_network", ip: "192.168.33.10"
##c 共有フォルダ設定(デフォルトがONになるのでとりあえず特別な設定はなし)
##c デフォルトは "./" "/vagrant" (vagrantupしたディレクトリを/vagrantと共有)
# config.vm.synced_folder "../data", "/vagrant_data"
##c VirualBoxの設定
##c vb.nameはVirtualBox上のマシン名
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "1024"
vb.name = "tbuntu"
end
##c 初回のvagrant up時に1回だけstatup.shを実行
config.vm.provision "shell", :path => "startup.sh"
end
|
provisionで使っているstart.shも参考までに載せておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #!/bin/bash
## リポジトリを理研に変更
sudo sed -i.bak -e "s%http://[^ ]\+%http://ftp.riken.go.jp/Linux/ubuntu/%g" /etc/apt/sources.list
sudo apt update > /dev/null 2>&1
## avahi-daemon
sudo apt install -y avahi-daemon > /dev/null 2>&1
## タイムゾーンをasia/tokyoへ変更
sudo timedatectl set-timezone Asia/Tokyo
## エンコーディングをutf-8 jajp
sudo apt -y install language-pack-ja-base language-pack-ja > /dev/null 2>&1
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
|
3. boxの起動
VagrantFileを生成したディレクトリで下記コマンドを実行することでboxを起動できます。
config.vm.box
で指定したboxが初起動の場合はダウンロードが始まるのでしばらく時間がかかります(これがbase-box)
一度ダウンロードされたbase-boxは%HOMEPATH%\.vagrant.d\boxes
(c:\User\${user_name}.vagrant.d\boxes)に保存され同じboxを使用する場合は次回up時はダウンロードは発生しません。
起動が完了後sshで接続が可能です。msys2経由では問題なくログインできました。
コマンドプロンプトだとsscクライアントが入ってないから上手くいかないかもしれません。
4. boxの終了
boxの終了は下記コマンドで実施します。box自体は削除されません。
5. boxの破棄
box自体不要になった場合は破棄することができます。boxは破棄されますがbase-boxは破棄されないので次回up時にダウンロードから始まる事はないです。
備考
vagrant up時のログ(正常起動)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | $c vagrant.exe up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: A newer version of the box 'ubuntu/xenial64' for provider 'virtualbox' is
==> default: available! You currently have version '20180705.0.0'. The latest is version
==> default: '20180706.0.0'. Run `vagrant box update` to update.
==> default: Setting the name of the VM: tbuntu
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: bridged
==> default: Forwarding ports...
default: 3000 (guest) => 3000 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> 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: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 5.1.34
default: VirtualBox Version: 5.2
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => C:/Users/winu/vagrant/testubuntu
==> default: Running provisioner: shell...
default: Running: C:/Users/winu/AppData/Local/Temp/vagrant-shell20180710-7212-a3l6ry.sh
$c
|
vagrant destroy時のログ(正常)
| $c 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...
$c
|