지금까지는 인터넷에 공개되어 있는, public 형태의 이미지를 사용했었다.
이번에는 내가 만든, 나에게 맞춘, 나만의 이미지를 사용해 보도록 하자.
테스트를 위해서 인터넷에서 CentOS 7.2 를 다운로드 했다.
글을 쓰고 있는 현재 시점에서는 아래 링크에서 다운로드 했다.
http://vault.centos.org/7.2.1511/isos/x86_64/
virtualbox 에 새로 만들기를 클릭해서, 새로운 가상 머신을 만든다.
다운받은 CentOS 7.2 iso 파일을 통해서 설치를 진행하면 된다.
설치 완료 후, guest 머신에 개발을 위한 설정과 vagrant 를 위한 설정을 해줘야 한다.
guest 머신에 ssh 를 통해 접속하자.
root 로 로그인 후, 작업을 진행하자.
% su -
% yum groupinstall -y 'Development Tools'
% yum install -y kernel-devel perl wget
Ubuntu 경우는
% sudo apt-get install build-essential
virtualbox 에서 제공하는 "게스트 확장" 프로그램을 설치해야 한다.
"장치 - 게스트 확장 CD 이미지 삽입" 을 선택하면 iso 가 삽입된다.
참고로 위치는 이곳에 있다. (몰라도 된다)
/usr/share/virtualbox/VBoxGuestAdditions.iso
당연한 이야기 겠지만, IDE 컨트롤러가 있어야 한다.
iso 를 삽입했으니, 마운트를 해보자.
$ mount -r /dev/cdrom /media
설치를 하자.
$ /media/VBoxLinuxAdditions.run --nox11
그런데 에러가 발생했다.
kernel-devel의 특정 버전을 yum으로 설치하라는 내용이다.
이 포함되어 있다. 이 명령을 따라 kernel-devel을 설치하고 VBoxLinuxAdditions.run를 다시 실행하면 오류없이 설치가 된다.
설치하라고 하니까, 설치를 해야지 뭐.
% yum install kernel-devel-3.10.0-327.el7.x86_64
응? 에러나는데?
귀찮고 번거롭지만, 구글링을 해봐야겠다.
적당히 구글링을 해보니 찾을 수 있었다.
rpm 을 다운로드 하자.
% wget https://buildlogs.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/kernel-devel-3.10.0-327.el7.x86_64.rpm
설치를 하자.
% rpm -Uvi kernel-devel-3.10.0-327.el7.x86_64.rpm
다시 시도를 해보자.
$ /media/VBoxLinuxAdditions.run --nox11
성공적으로 설치가 잘되었다.
만약 상위 버전이 존재한다고 메세지가 뜨면 그 버전을 삭제 후 다시 설치한다.
반드시 저 버전으로 설치를 해야 한다.
지금 진행중인 버전은 Cent OS 7.2 라서 kernel-devel-3.10.0-327 를 요구했다.
OS 버전마다 요구하는 kernel-devl 버전이 다를 수 있다.
아래 표에 정리해 놨으니 적당히 다운받도록 하자.
OS | kernel-devel 버전 | Download 주소 |
CentOS 7.2 | 3.10.0-327 | https://buildlogs.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/kernel-devel-3.10.0-327.el7.x86_64.rpm |
CentOS 7.4 | 3.10.0-693 | https://buildlogs.centos.org/c7.1708.00/kernel/20170822030048/3.10.0-693.el7.x86_64/kernel-devel-3.10.0-693.el7.x86_64.rpm |
CentOS 7.5 | 3.10.0-862 | http://mirror.centos.org/centos/7/os/x86_64/Packages/kernel-devel-3.10.0-862.el7.x86_64.rpm |
Oracle Linux 7.2 | 3.8.13-98.7.1 | http://yum.oracle.com/repo/OracleLinux/OL7/UEKR3/x86_64/getPackage/kernel-uek-devel-3.8.13-98.7.1.el7uek.x86_64.rpm |
Oracle Linux 7.4 | 4.1.12-94.3.9 | http://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackage/kernel-uek-devel-4.1.12-94.3.9.el7uek.x86_64.rpm |
다음 단계로 넘어가자.
구글링을 통해서 찾은 자료에서는 vboxadd 를 실행하라고 되어 있다.
$ /etc/init.d/vboxadd setup
그런데 아무리 찾아도 /etc 에는 vboxadd 가 없었다.
할 수 없이 / 에서 부터 찾아봤더니, /opt 에 있었다.
/opt/VBoxGuestAdditions-5.2.12/init/vboxadd
아무튼 난 저기에 있으니, 저걸 실행했다.
% /opt/VBoxGuestAdditions-5.2.12/init/vboxadd setup
성공적으로 설치가 잘 되었다.
일단 그룹을 생성하자.
$ groupadd -g 470 vagrant
"vagrant 라는 group 을 만들고, 그 group id 는 470 으로 지정해라" 라는 의미다.
왜 470 인가?
구굴링 하다 발견한 자료에서 저렇게 했길래 그냥 따라했다.
꼭 470 을 할 필요는 없다.
group id 를 부여하지 않으면, OS 에서 자동으로 부여를 할 것이다.
vagrant 계정을 추가하자.
$ useradd -g vagrant -u 470 vagrant
계정 id 도 470 으로 한다.
암호를 설정한다.
$ passwd vagrant
암호는 계정과 동일하게 vagrant 를 입력한다.
암호가 짧다고 뭐라뭐라 나올 수도 있다.
그냥 무시하고 하자.
vagrant 계정이 sudo 를 사용할 수 있도록 설정하자.
$ visudo
아래 내용을 추가해 넣자. (3줄)
Defaults env_keep += "SSH_AUTH_SOCK"
Defaults:vagrant !requiretty
%vagrant ALL=(ALL) NOPASSWD: ALL |
근데 어디에 넣어야 하나......
막상 visudo 를 실행하면, 어디에 해야 하지 라고 막막할 수도 있다.
그냥 가장 편하게 맨 마지막에 넣어도 된다.
근데..... 그냥 거기에 우아하게(graceful) 넣도록 노력했다.
파란색 글씨가 실제로 넣은 부분이다.
이렇게 한줄 넣고.
#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults env_keep += "SSH_AUTH_SOCK"
|
이렇게 한줄 넣고.
#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults env_keep += "HOME"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults:vagrant !requiretty
|
이렇게 한줄 넣었다.
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
%vagrant ALL=(ALL) NOPASSWD: ALL
|
vagrant 계정으로 변경하자.
% su - vagrant
ssh key 를 추가하자.
$ mkdir .ssh
$ curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub --output .ssh/authorized_keys
$ chmod 0700 .ssh
$ chmod 0600 .ssh/authorized_keys
ssh server 설정을 수정하자.
$ sudo vi /etc/ssh/sshd_config
만약 아래 내용이 주석으로 처리되어 있다면, 주석처리를 제거하자.
(# 을 지우라는 소리)
Port 22
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys |
그런데, 실제로 테스트를 해보니, 주석을 제거하지 않아도 잘 작동한다.
주석처리되어 있으면 기본값으로 동작할텐데,
기본값이 위처럼 되어 있는거 같다.
그리고 부가적으로 패키지를 설치하자.
CentOS
% yum install vi vim gcc g++ emacs wget make readline-devel zlib-devel openssl-devel libxml2-devel
Ubuntu
% sudo apt install vi vim gcc g++ emacs wget make libreadline-dev zlib1g-dev libssl-dev libxml2-dev
설치는 모두 끝났으니, 다음으로 넘어가자.
디스크 사이즈를 줄이자.
% sudo dd if=/dev/zero of=/EMPTY bs=1M
% sudo rm -f /EMPTY
"장치에 남은 공간이 없음" 이라는 에러가 나올 수 있는데 무시하면 된다.
정확히 무슨 역할을 하는지는 잘 모르겠다.
아래 주소를 통해 관련 내용을 참고할 수 있다.
http://stackoverflow.com/a/24956805
서버를 종료하자.
% sudo shutdown -h now
다시 host 머신으로 돌아와서 작업을 마무리 하자.
내가 생성한 CentOS 7.2 가상머신이 리스트에 들어 있는지 확인한다.
% VBoxManage list vms
box 를 생성하자.
% vagrant package --output CentOS7.2.box --base CentOS7.2
Vagrantfile 를 작성하자.
% vagrant init CentOS7.2.box
가상머신을 실행해보자.
% vagrant up
혹시라도 위와 같은 에러가 발생하면, Vagrantfile 에 아래 내용을 넣자.
.ssh 디렉토리와 authorized_keys 파일 권한도 확인해 보자.
config.ssh.insert_key = false |
이것도 저것도 안되면, Vagrantfile 에 아래 내용을 넣자.
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
|
그리고 가상머신은 start 가 정상적으로 되어진 상태이니까,
vagrant ssh 를 통해서 접속은 가능하니,
가상머신 내부에서 수정하고 싶은것도 수정은 가능하다.
성공적으로 잘 start 되었다.
==========================================================
ssh authorize 관련해서 오류가 발생한다면, key 를 확인해 봐야 한다.
guest 머신의 .ssh 디렉토리 권한은 0700 으로 되어 있어야 한다.
guest 머신의 .ssh/authorized_keys 파일 권한은 0600 으로 되어 있어야 한다.
Vagrantfile 파일이 있는 디렉토리에 .vagrant 라는 디렉토리가 존재한다.
.vagrant/machines/default/virtualbox/private_key
그 디렉토리에 private_key 파일이 존재하는데,
그 파일과 guest 머신의 .ssh/authorized_keys 파일이 쌍으로 이루어져 있어야 한다.
또한, private_key 파일은 권한이 0600 이어야 한다.
출처
https://www.vagrantup.com/intro/getting-started/index.html
http://adhoc.tistory.com/entry/Vagrant-Box-만들기
https://blog.asamaru.net/2015/10/14/creating-a-vagrant-base-box
https://www.kjwon15.net/wordpress/articles/computer/linux-computer/540
https://kldp.org/node/155210
http://stackoverflow.com/a/24956805
https://github.com/hashicorp/vagrant/issues/5186
http://www.gisremotesensing.com/2016/06/solution-vagrant-box-authentication.html