티스토리 뷰

개요

개발자에게 VM은 이미 익숙한 개념이다. VM 덕분에 매번 고통스러운 환경설정 없이 나만의 개발환경을 순식간에 구축할 수 있으며 필요할 때마다 여러 개발환경을 전환할 수도 있다. Vagrant는 한 발 더 나아가 베이스 박스라는 개념을 도입하여 필요한 기초 환경을 미리 제공하고 제어할 수 있게 해주는 툴이다. 이번 글을 통해 베이그런트와 익숙해져보자.

용어사전

  • 박스(Box): Vagrant에 의해 다운로드되고 관리되는 가상머신 박스, 최초 vagrant init에 의해 다운로드되는 박스를 베이스 박스(Base Box)라고 부른다.


  • 프로바이더(Provider): Vagrant가 가상머신 박스를 실행하기 위해 호출하는 가상머신 애플리케이션(ex: Oracle VM VirtualBox)


  • 호스트 머신(Host Machine): Vagrant가 설치된 물리적 시스템


  • 게스트 머신(Guest Machine): Vagrant에 의해 실행(vagrant up) 중인 가상머신 박스

Oracle VM VirtualBox 설치

  • Vagrant는 혼자 작동하지 못한다. 프로바이더 역할을 해줄 VM이 필요하다. 본 글에서는 무료 VMOracle VM VirtualBox를 예로 들어 진행한다. 여기를 클릭하여 다운로드 및 설치를 진행한다.

Vagrant 설치

  • 여기를 클릭하여 Vagrant를 다운로드하여 설치한다.
# vagrant-share 플러그인 설치
$ vagrant plugin install vagrant-share

# 파일 공유를 위한 vagrant-vbguest 플러그인 설치
$ vagrant plugin install vagrant-vbguest

# 정상 작동 확인
$ vagrant -v
Vagrant 2.1.1

CentOS 6.9 베이스 박스 다운로드 및 기동

  • CentOS 6.9의 베이그런트 베이스 박스를 예로 들어 다운로드 및 작동을 진행해보자.
# Windows 10 Pro 사용자의 경우 오류 방지를 위해 HyperVisor 비활성화 후 재부팅
$ bcdedit /set hypervisorlaunchtype off

$ md centos_6
$ cd centos_6

# 베이그런트 베이스 박스를 받기 위한 초기회
$ vagrant init centos/6

# 베이그런트 베이스 박스를 다운로드 및 작동
$ vagrant up --provider virtualbox

# 기동된 이미지에 SSH 접속
$ vagrant ssh
$ rpm --query centos-release
centos-release-6-9.el6.12.3.x86_64

$ pwd
/home/vagrant

$ sudo passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

[vagrant@localhost ~]$ su root
  • 베이그런트의 원리는 미리 만들어진 가상머신 베이스 박스(ex: CentOS 6)를 리파지토리에서 제공 받아 프로바이더(ex: Oracle VM VirtualBox)를 통해 작동시키는 것이다. vagrant init 명령으로 어떤 베이스 박스를 다운로드할 것인가에 대한 메타 정보를 생성할 수 있다.


  • 실제 가상머신의 베이스 박스의 다운로드는 vagrant up 명령으로 실행한다. --provider virtualbox 옵션을 통해 박스의 다운로드와 작동을 진행한다. 다운로드는 최초 1번만 발생한다.


  • 박스의 작동이 완료되면 vagrant ssh 명령으로 쉘에 접속할 수 있다.

트러블슈팅

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "8500b6a7-0116-4710-b6e3-107c4a584470", "--type", "headless"]

Stderr: VBoxManage.exe: error: The virtual machine 'centos-69_default_1494531013071_18929' has terminated unexpectedly during startup with exit code -1073741819 (0xc0000005).  More details may be available in 'C:\Users\JSONObject\VirtualBox VMs\centos-69_default_1494531013071_18929\Logs\VBoxHardening.log'
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine
  • 박스 실행시 위와 같이 -1073741819 오류가 발생한다면 2가지를 조치해본다. 첫째, C:\Program Files\Oracle\VirtualBox\VBoxManage.exe 파일을 관리자 실행 권한으로 변경한다. 둘째, Windows에 설치된 MacType 프로그램에 예외 목록에 아래와 같이 추가한다.
$ notepad C:\Program Files\MacType\ini\Default.ini
[UnloadDll]
VBoxSVC.exe

Vagrant 주요 명령어

# 박스 실행, VboxSVC.exe가 프로세스에 등장
$ vagrant up

# 실행 중인 박스에 SSH 접속, vagrant 계정으로 로그인
$ vagrant ssh

# 박스 종료, VboxSVC.exe가 프로세스에서 완전히 종료
$ vagrant halt

# 박스 종료 및 초기화, VboxSVC.exe가 프로세스에서 완전히 종료
$ vagrant destroy

# 현재 설치된 박스 목록 조회
$ vagrant box list

# centos/6 박스를 제거
$ vagrant box remove centos/6

포트 포워딩

박스 루트(vagrant init을 실행한 위치)의 Vagrantfile 파일에 아래 내용을 추가한다.

# 가상머신의 80포트를 현재 시스템의 8080포트로 포워딩
config.vm.network "forwarded_port", guest: 80, host: 8080

# 호스트 머신과 공유할 디렉토리를 설정
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
config.vm.synced_folder "c:/", "/home/c", type: "virtualbox"
config.vm.synced_folder "d:/", "/home/d", type: "virtualbox"

Vagrant가 주는 보너스, 리눅스 유틸리티

  • Vagrant를 설치하면 C:\HashiCorp\Vagrant\embedded\usr\bin 폴더에 여러 실행 파일이 설치되는데 ssh, scp, grep, wget 등과 같이 평소 리눅스 환경에서 유용하게 써오던 명령어들이다. 즉, Windows 환경에는 없는 유용한 리눅스 명령어들을 공짜로 얻을 수 있다.

참고 글


댓글
  • 프로필사진 JSP 1. vagrant up 실행했을 때 default: SSH auth method: private key 라인 출력 후 time out 뜨는 경우
    ---> Vagrantfile에 아래 옵션을 추가해서 해결했습니다.
    config.ssh.insert_key = false

    2. cygwin에서 vagrant ssh 명령어 입력했을 때 먹통되는 경우
    --->명령어에 아래 옵션을 추가해서 해결했습니다.
    vagrant ssh -- -t -t
    2018.07.01 23:24
  • 프로필사진 BlogIcon 지단로보트 Vagrant가 구조적으로 가상머신에 종속적이기 때문에 사용자마다 발생하는 버그가 판이하게 다른 경우가 많습니다. 경험에 의한 소중한 정보 감사합니다.^^ 2018.07.02 09:48 신고
댓글쓰기 폼