Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

문서설명

vagrant 와 가상화 프로그램(virtualbox)를 이용하여 OS 설치 및 각종 테스팅 작업을 편리하게 할 수 있다.

Puppet , jenkins 등과 결합을 하여 프로비저닝, 설정관리, CI 테스트등을 위한 효율적인 환경 구성이 가능하다.

Virtualbox 설치

가상화 프로그램 설치 전 BIOS 에서 가상화 관련한 기능을 활성화 해야 함.

https://www.virtualbox.org/ 설치.

  • virtualbox 설치 후 환경설정-확장에서 Oracle VM VirtualBox Extension Pack 도 설치를 하는 것이 좋음. Support for USB 2.0 devices, VirtualBox RDP and PXE boot for Intel cards.
  • Oracle VM VirtualBox Extension Pack 설치시 root 권한이 필요하므로 sudo 로 Virtualbox 실행하여 UI에서 File-preference-Extensions 에서 설치하면 되됨. 설치 후에는 원하는 사용자로 실행하면됨.
  • Ubuntu 의 경우 https://www.virtualbox.org/wiki/Linux_Downloads 를 참고하여 /etc/apt/sources.list에 virtualbox관련한 저장소를 추가한 후 설치하는 것이 편리함.
sudo apt-get update
sudo apt-get install virtualbox-4.3


네트워크 구성을 NAT 로 설정을 함.

Virtualbox 설치 후 특정 OS 이미지 다운로드 받아 테스팅을 해봄.

http://virtualboxes.org/images/centos/ 에서 CentOS 5.6 x86_64 같은 것 다운로드 받아 virtualbox에 넣어서 작동 테스팅을 함.

http://sourceforge.net/projects/virtualboximage/files/CentOS/5.6/Centos-x86_64.7z/download

Active user account(s)(username/password): root/reverse.


Windows 의 경우 다른 드라이브에  VM을 두려고 할 경우 파일 - 환경설정 - 일반에서 기본 머신 폴더를 변경을 하면 됨. 안 그러면 C 드라이브가 꽉 참.

Vagrant 설치 및 사용

https://www.vagrantup.com/

https://docs.vagrantup.com/v2/ 에 문서가 잘 나와있음

윈도우용 ssh 프로그램 설치

윈도우7 에서 설치 후 vagrant 명령어 실행시 virtualbox 를 찾지 못했음. PATH 환경변수에 virtualbox 경로를 추가해 주어야 함.

windows 의 경우 ssh 접속을 위해서 cygwin, minGW, Git 등의 SSH 클라이언트를 미리 설치해 두는 것이 좋음.  http://git-scm.com/ 설치하면 GIT bash 가 있음.

vagrant 설치

https://www.vagrantup.com/ 설치.

https://docs.vagrantup.com/v2/

 Vagrant global state 정보를 저장하는 VAGRANT_HOME 변수를 변경할 수 있으며 기본값은  ~/.vagrant.d 이다. boxes 등을 이 디렉토리에 저장을 하기 때문에 디스크 용량을 많이 차지할 가능성이 많다. 

이 부분을 윈도우에서 변경을 하려면 C:\users\yourusername 의 .bashprofile 에 다음의 내용을 넣어주면 된다. https://www.vagrantup.com/docs/other/environmental-variables.html 참고.

setx VAGRANT_HOME "D:/.vagrant.d"


vagrant box는 url을 지정하지 않을 경우 https://vagrantcloud.com/  에서 자동으로 찾는다. 그외에   https://vagrantcloud.com/http://www.vagrantbox.es/ 등에서 찾아도 된다.

Ubuntu, CentOS의 경우 각 벤더사에서 공식 제공되는 BOX가 있다.

Ubuntu : https://vagrantcloud.com/ubuntu

CentOS: https://vagrantcloud.com/centos

CentOS 에서 제공해주는 vagrant image 를 이용할 것이라 생각이 된다. http://cloud.centos.org/centos/7/vagrant/x86_64/images/ , http://cloud.centos.org/centos/6/vagrant/x86_64/images/

vagrant box 추가
$ vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box -> 직접 vagrant box image 넣은 경우
$ vagrant box add chef/centos-6.5 ->  https://vagrantcloud.com/ 에 있는 이미지를 이용하는 경우는 url을 지정하지 않아도 됨


홈디렉토리의 .vagrant.d/boxes 디렉토리에 해당 box 명으로 이미지가 만들어진다.
$ ls ~/.vagrant.d/boxes/centos64/
virtualbox
$ ls ~/.vagrant.d/boxes/centos64/*
Vagrantfile  box-disk1.vmdk  box-disk2.vmdk  box.ovf  info.json  metadata.json

box 목록 확인
$ vagrant box list
centos64 (virtualbox)

vagrant 프로젝트 디렉토리 생성. 파일 관리를 편리하게 하기 위한 것임. 필수는 아니나 디렉토리를 잘 관리하는게 편리함. vagrant init 를 하면 해당 디렉토리에 Vagrantfile 이 만들어지므로 이것을 참고하여 디렉토리 구조 만듬.
$ mkdir porject/centos64
$ cd project/centos64

vagrant instance 생성 (이 과정에서 설정파일인 Vagrantfile 이 만들어짐)
$ vagrant init centos64

vagrant instance 시작하기(부팅)
$ vagrant up

ssh 접속하기. vagrant ssh 로 접속시에는 비밀번호 없이 자동접속 가능함. 또는 host 127.0.0.1 ,port 2222, username vagrant 로 설정을 하여 putty 등에서도 접속을 할 수도 있음.
$ vagrant ssh

vagrant box 없애기

$ vagrant destroy

새로운 vagrant box 생성하기
$ vagrant up


git-bash 등의 커맨드라인에서 vagrant init 를 실행하면 현재의 디렉토리에서 작업을 하고 Vagrantfile 파일을 만든다. 그러므로 적절한 디렉토리로 이동을 해서 작업하는 것이 관리상 용이할 것 같다.

vagrant 설정 변경하기

vagrant init 를 하면 명령을 실행한 해당 디렉토리에 Vagrantfile 파일이 생긴다. 이 파일을 수정하면 vagrant up을 할 때 여러가지 작업을 조합할 수 있다.


처음으로 vagrant up을 할 때 프로비저닝이 실행된다. 첫 가동 이후에는 vagrant up --provision 을 지정해서 가동하거나 가상 서버 가동 후에 vagrant provisoin 을 실행하면 프로비저닝이 가능하다.

shell 을 이용하여 프로비저닝하는 것이 가능하며 inline 을 이용 원하는 스크립트를 실행할 수 있다.

https://docs.vagrantup.com/v2/provisioning/shell.html


아래는 vagrant up 을 할 때 puppet 을 설치하고 puppet 을 통하여 /etc/motd 파일을 변경하는 예이다.

$ vim Vagrantfile
 config.vm.provision "shell", inline: "yum install -y puppet"
 config.vm.provision :puppet do |puppet|
   puppet.manifests_path = "manifests"
   puppet.manifest_file  = "site.pp"
 end
$ mkdir manifests
$ cd manifests
$ vim site.pp
File { owner => 0, group => 0, mode => 0644 }
file { '/etc/motd':
  content => "Welcome to your Vagrant-built virtual machine!
              Managed by Puppet.\n"
}
$ vagrant up

https://docs.vagrantup.com/v2/getting-started/provisioning.html 문서를 보면 위와 같이 puppet 을 따로 지정하지 않고 초기 시작하는 스크립트를 bootstrap.sh 로 지정하고 사용을 하고 있다.

Vagrantfile 파일은 동일하게 유지하고 프로비저닝 부분만 따로 스크립트로 관리하는 것이 더 편리할 것 같다.

여러 개의 VM  만들기

config.vm.define 이용하기 : https://www.vagrantup.com/docs/multi-machine/

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "web" do |web|
    web.vm.box = "apache"
  end

  config.vm.define "db" do |db|
    db.vm.box = "mysql"
  end
end


JSON Configuration File 에서 노드 정보 가져오기 : https://github.com/garystafford/foreman-vagrant/blob/master/Vagrantfile 파일을 보면 노드 정보를 nodes.json 파일에 따로 저장하고 있다. 때로는 이렇게 별도로 각 노드별 설정을 다르게 사용을 하면 편리한 경우가 있다. https://github.com/garystafford/foreman-vagrant/blob/master/nodes.json 예제를 보면 쉽게 이해할 수 있다.


그냥 Vagrant file을 편집해서 쓰는 예제는 https://github.com/ripienaar/mcollective-vagrant/blob/master/Vagrantfile 참고.

Vagrant plugins

https://www.vagrantup.com/docs/cli/plugin.html

플러그인 목록 : https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

  • vagrant-vbguest :  automatically update VirtualBox guest additions if necessary . VirtualBox guest addions 을 업데이트해야 /vagrant 디렉토리 공유가 되는 경우가 있음. OS별로 좀 다른 듯 함.  auto_update, no_install 등의 옵션이 필요한 경우가 있음. 보통 auto_update 는 필요하지 않은 듯 한데 host os+guest os 에 따라서 설치안해도 되는 경우가 있음.
  • vagrant-hostmaner : /etc/hosts를 자동으로 설정해주는 기능인데 여러 개의 VM으로 테스팅을 하는 경우 유용함.

vagrant 기타 기능

  • 폴더 공유하기
  • 자신만의 box 만들기

주의 및 참고사항

CentOS vagrant image 릴리즈한 것에 몇가지 조심해야 할 부분 있음. 

https://seven.centos.org/2016/08/updated-centos-vagrant-images-available-v1607-01/

  • 윈도우 host os 에서는 rsync 관련한 부분을 비활성화하지 않으면 에러가 남. 아래는 d 드라이브의 .vagrant.d/boxes 에 centos6 box image를 둔 경우임. 

    $ cat /d/.vagrant.d/boxes/centos-VAGRANTSLASH-6/1609.01/virtualbox/Vagrantfile
    Vagrant.configure("2") do |config|
      config.vm.base_mac = "525400df9f8b"
      #config.vm.synced_folder ".", "/vagrant", type: "rsync"
    end

참고자료

  • https://docs.vagrantup.com/v2/ 에서 소개하는 책은 Vagrant: Up and Running 이며 인터넷에서 다운로드 받을 수 있음.
  • "성공으로 이끄는 팀 개발 실천기술"에서 배포자동화 참고. vagrant + chef(또는 puppet) + jenkins 조합한 사례가 나옴.

  • No labels