문서설명
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://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 만들기
주의 및 참고사항
참고자료
- https://docs.vagrantup.com/v2/ 에서 소개하는 책은 Vagrant: Up and Running 이며 인터넷에서 다운로드 받을 수 있음.
- "성공으로 이끄는 팀 개발 실천기술"에서 배포자동화 참고. vagrant + chef(또는 puppet) + jenkins 조합한 사례가 나옴.
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를 둔 경우임.