ubuntu12.04にVagrantのインストールからポートフォワード設定して外部からsshするまで

ubuntu12.04にvgrantをインストール

環境

VirtualBoxのインストール

VMアプリケーションのインストール

  • ここからVirtualBoxをダウンロード
    今回はUbuntu 12.04 LTS ("Precise Pangolin") i386を選択

  • ダウンロードしたdebファイルをインストール

      $ sudo dpkg -i virtualbox-4.3_4.3.14-95030~Ubuntu~precise_i386.deb  
    

    依存関係に問題があった場合は

      $ sudo dpkg -r virtualbox-4.3_4.3.14-95030~Ubuntu~precise_i386.deb  
    

    でアンインストールして、gdebiやパッケージセンターを使ってインストールする

Vagrantのインストール

ターミナルから VM を快適に扱うためのアプリケーション。
Vagrantfile(VM用設定)が融通効いて共有しやすいことや、 プラットフォームによらず一貫性のあるコマンドで扱えることがウリ。

ひな形となるboxの用意

Vagrantでは予め用意された仮想マシンの雛形を利用して仮想マシンを構築する。
下記はQuick startでよく使われるUbuntu仮想マシンの雛形だが、他にも、以下のサイトに大量のboxが用意されている。
http://www.vagrantbox.es/ 今回はUbuntu Server 12.10 amd64 Minimal (VirtualBox 4.2.6)を使ってみる。

boxを追加

$ sudo vagrant box add ubuntu12.10MinimalServer http://goo.gl/wxdwM
==> box: Adding box 'ubuntu12.10MinimalServer' (v0) for provider: 
box: Downloading: http://goo.gl/wxdwM
==> box: Successfully added box 'ubuntu12.10MinimalServer' (v0) for 'virtualbox'!

boxファイルを確認

$ sudo vagrant box list
ubuntu12.10MinimalServer  (virtualbox, 0)

仮想マシン作成

仮想マシンの作成は、仮想マシンの設定ファイルを作成するディレクトリ作成、初期化、設定ファイル編集、起動の順に行う。

仮想マシン初期化

$ sudo vagrant init ubuntu12.10MinimalServer
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.  

長々と書いてあるが、準備OKというメッセージだと思う。
作成されたVagrantfileの以下の部分のコメントアウトを外す

config.vm.network "private_network", ip: "192.168.33.10"

config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
end

仮想マシンを起動する

$ sudo vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu12.10MinimalServer'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: VMGuest_default_1406977872161_53660
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> 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 => 2201 (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:2201
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> 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: 4.2.6
    default: VirtualBox Version: 4.3
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /home/hoge/VMGuest

IPアドレスを192.168.33.11で登録したのでホストからsshしてみる(初期ユーザー/パスワード: vagrant/vagrant)

$ ssh vagrant@192.168.33.11

Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-21-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife

New release '13.04' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sat Aug  2 08:13:09 2014 from 192.168.33.1
vagrant@vagrant:~$ 

外出先などからドメインやグローバルアドレスを指定してsshでログインしたい Vagrantfileに以下のような記述のコメントアウトを外す

config.vm.network "forwarded_port", guest: 22, host: 2222

これはホストマシンの2222番ポートに来たTCPのアクセスをゲストの80に転送する設定。 ゲストマシンでファイアウォールの設定がある場合はする、私はufwを使っているので 以下を実行して2222ポートを開放した

$ sudo ufw allow 2222/tcp

また、ルーターの設定を変更する必要がある。 Buffaloのルーターなら

「ログイン」 → 「ゲーム&アプリ」 → 「ポート変換」から
Internet側IPアドレスを「エアステーションのInternet側IPアドレス」
プロトコルを「任意のTCP/UDPポート」で2020を指定
LAN側IPアドレスに「ホストマシンのIPアドレス」を指定
LAN側ポートに「2020」を指定

これで、外出先でも
$ sshドメイン名 または グローバルIP」でログインすることができる。 ポートの指定を2020で、ログインID/パスワードはvgrant/vgrantです。

追記

sshでログインしてapt-get updateしようとすると、リポジトリが古いためエラーが出る。 以下のように編集する。

$ sudo sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
$ sudo sed -i -e 's/br.old-releases.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
$ sudo apt-get update; sudo apt-get upgrade -y

これでアップグレードできる

基本的に何かをインストールしたい場合はrootになって作業することが好ましい。 sudoコマンドを使ってインストールすると/root/にインストールされるのを避ける為。 それにsudo地獄面倒くさいから。

一般的なコマンド

スリープ

$ vagrant suspend

スリープ復帰

$ vagrant resume

終了

$ vagrant halt

再起動

$ vagrant reload

仮想マシンの削除

$ vagrant destroy
$ sudo vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...

削除が一瞬で終わってしまう、ちょっと怖い

参考

本家 docs

インストール インストールや設定

box box


Packerのインストール(未実行)

VM用の マシンイメージを作成するためのアプリケーション。 設定1つでマルチプラットフォーム(VirtualBoxVMware、EC2 AMIなど)のイメージを作成できるのがウリ。

  1. ここからpackerをダウンロード Linuxの386を選択し、0.6.1_linux_386.zipをダウンロードした。

  2. 解凍し含まれているpackerコマンドにPATHを通す