레이블이 virtualbox인 게시물을 표시합니다. 모든 게시물 표시
레이블이 virtualbox인 게시물을 표시합니다. 모든 게시물 표시

2019년 1월 7일 월요일

CentOS 7 에서 virtualbox 실행시 오류 Qt FATAL: QXcbConnection: Could not connect to display

CentOS 7 에서 virtualbox 실행시 오류 메세지가 나오는 경우가 있다.

# virtualbox
Qt FATAL: QXcbConnection: Could not connect to display
중지됨 (core dumped)

열심히 구굴링을 해봐도 마땅한 해결책을 찾지 못해서,
아... 아무래도 x11 뭐 거시기가 없어서 그런거 같다고 생각했다.
그래서 관련 패키지를 설치하기로 했다.

# yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps

다 설치 후, 재부팅 후, virtualbox 를 수행하니, 다행히 에러 없이 실행되었다.

그런데, 화면이 이상하게 실행이 되었다.


폰트 문제인가?

# env | grep LANG
LANG=ko_KR.UTF-8

음..... 바꿔볼까?

# export LANG=C
# env | grep LANG
LANG=C

다시 virtualbox 를 실행했다.


오~ 잘된다.

2018년 8월 20일 월요일

Vagrant 사용 방법 (7)

Vagrant Box 는 자신만 사용할 수도 있지만,
공개 site 에 업로드 해서 여러 사람이 사용할 수 있도록 할 수 있다.

만든 Vagrant Box 파일을 올려서, 여러 사람이 사용할 수 있게 해보자.


https://vagrantcloud.com
Vagrant Cloud 사이트가 hub 역할을 하고 있다.
회원 가입을 하자.


로그인을 하면, 다른 사람들이 만든 Vagrant Box 를 다운로드 할 수 있고,
내가 만든 Vagrant Box 를 업로드 할 수 있다.
"Create a new Vagrant Box" 를 클릭하자.


저번에 만든 CentOS 를 업로드 할 것이므로, 이름은 "CentOS7.2" 라고 하자.

Box 를 "Private" 로 설정할 수도 있다.
하지만 이 경우에는 유료 서비스에 가입을 해야 사용할 수 있다.
그냥 공개로 할 것이므로 체크 하지 말자.


혹시 Private 로 설정해야 한다면, 위 가격표를 참고하면 된다.

"Short description" 에는 간단한 설명을 기록하면 된다.


Box 의 버전을 입력한다.
Box 는 처음 만들때는 "RubyGems versioning" 규칙에 따라서 "0.0.1" 이라고 하면 된다.
나중에 Box 를 수정하게 되면, 수정하고 나서 버전을 "0.0.2" 이런식으로 올리면 된다.
하지만 꼭 버전을 저렇게 할 필요는 없다. 사실 자기 맘대로 해도 된다.
그러나 관례상 저렇게 한다는걸 알아두면 된다.

Vagrant.configure("2") do |config|
  config.vm.box = "CHOONGKI_KIM/CentOS7.2"
  config.vm.box_version = "0.0.1"
end

다 만들어 졌다.


Release 를 클릭하자.


Release version 을 클릭하자.


Release 버튼이 안 보이면 성공적으로 등록된 것이다.


Search 버튼을 클릭해서, 등록한 이미지를 검색해 보자.
검색이 잘 될 것이다.

등록된 box 를 사용하기 위해서는 아래와 같이 하면 된다.
그러면 Vagrantfile 이 생성된다.
% vagrant init CHOONGKI_KIM/CentOS7.2

다운로드가 시작되고, 다운로드가 다 끝나면, 최종적으로 가상머신이 실행된다.
% vagrant up



출처
https://vagrantcloud.com

2018년 8월 13일 월요일

Vagrant 사용 방법 (6)

vagrant 는 기본적으로 /vagrant 라는 디렉토리가 생성되고,
그 디렉토리는 host 머신의 Vagrantfile 이 있는 디렉토리와 동기화가 된다.

예를 들어
host 머신의 Vagrantfile 이 /home/kimchki/test 에 있다면,
guest 머신의 /vagrant 은 /home/kimchki/test 와 동기화가 된다.

그 외 별도의 디렉토리를 추가적으로 동기화를 하고 싶은 경우,
Vagrantfile 에 아래와 같이 추가하면 된다.
config.vm.synced_folder "/home/installation", "/installation"

host 머신의 /home/installation 디렉토리는
guest 머신의 /installation 디렉토리와 동기화가 된다.



Vagrant 사용 방법 (5)

지금까지는 인터넷에 공개되어 있는, 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 버전이 다를 수 있다.
아래 표에 정리해 놨으니 적당히 다운받도록 하자.

OSkernel-devel 버전Download 주소
CentOS 7.23.10.0-327https://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.43.10.0-693https://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.53.10.0-862http://mirror.centos.org/centos/7/os/x86_64/Packages/kernel-devel-3.10.0-862.el7.x86_64.rpm
Oracle Linux 7.23.8.13-98.7.1http://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.44.1.12-94.3.9http://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

2018년 8월 6일 월요일

Vagrant 사용 방법 (4)

apache 를 통해 web server 를 실행시켰지만,
가상머신(guest) 내부에서만 접속이 가능하고,
host 머신에서는 접속이 불가능 했다.

host 머신에서도 guest 머신으로 접속이 가능하도록
네트워크를 연결해 주자.

공유기를 사용해본 경험이 있다면,
포트 포워딩 이라고 생각하면 된다.

/home/kimchki/test/Vagrantfile 파일을 편집하자.

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, guest: 80, host: 4567
end

guest 머신의 80 포트를, host 머신의 4567 포트로 연결해 주겠다는 의미다.

reload 하자.
% vagrant reload

host 머신의 웹 브라우저를 통해서 자신의 4567 포트에 접속해 보자.
http://127.0.0.1:4567


잘 접속이 되면 성공한 것이다.



출처
https://www.vagrantup.com/intro/getting-started/index.html

2018년 7월 30일 월요일

Vagrant 사용 방법 (3)

Provisioning 이란?

프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다. 서버 자원 프로비저닝, OS 프로비저닝, 소프트웨어 프로비저닝, 스토리지 프로비저닝, 계정 프로비저닝 등이 있다. 수동으로 처리하는 '수동 프로비저닝'과 자동화 툴을 이용해 처리하는 '자동 프로비저닝'이 있다.
-- From wiki --

잘 모르겠다.
암튼 사용자에게 뭔가 서비스를 제공하려고 할때,
사용자가 원하는 시스템 환경이 있을 것이다. (혹은 그 사용자 요구에 맞는 시스템 환경)
그 환경을 일일이 수동으로 해주는건 번거로운 일이니,
자동으로 해주는 시스템 이라고 보면 될거 같다.

vagrant 를 통해서 ubuntu 가상머신을 생성하고 실행까지 해봤다.

이 가상머신에 apache 를 설치하고 싶다고 가정하자.
apt-get 을 통해서 설치하면 될 것이다.
수동으로 또각또각 키보드를 사용해서 설치하면 될 것이다.

근데 만약 ubuntu 서버를 100명의 고객에게 할당해 주기 위해,
100대를 생성해야 한다면은?
(1명에게 1개씩 할당해야 하는 상황이라고 가정하자)

100번을 apt-get 을 또각또각 키보드를 쳐야할 것이다.

apache 뿐만 아니라 mysql, php, java 까지 설치해야 한다면,
엄청난 일이 될것이다.

이런걸 자동화 해서 사용자 요구에 맞게 준비하는걸,
provisioning 이라고 생각하면 된다.

vagrant 에는 provisioning 기능이 존재한다.
사용해 보자.

host 머신의 /home/kimchki/test 와
guest 머신의 /vagrant 가 sync 상태인건
저번 포스트를 통해 알고 있다.

/home/kimchki/test/bootstrap.sh 파일을 생성하자.

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
    rm -rf /var/www
    ln -fs /vagrant /var/www
fi

실행 권한을 주자.
% chmod +x /home/kimchki/test/bootstrap.sh

/home/kimchki/test/Vagrantfile 파일을 편집해서,
bootstrap.sh 파일이 실행되도록 하자.

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
end

가상 머신을 다시 restart 하도록 하자.
% vagrant reload --provision


주루룩 apache 가 설치가 되고,
apache home 디렉토리가 /vagrant 로 될 것이다.

$ vagrant ssh
vagrant@precise64:~$ wget -qO- 127.0.0.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="Vagrantfile">Vagrantfile</a></td><td align="right">20-Jun-2018 05:09  </td><td align="right">3.0K</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="bootstrap.sh">bootstrap.sh</a></td><td align="right">20-Jun-2018 05:08  </td><td align="right">138 </td><td>&nbsp;</td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
<address>Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>

html 파일이 보이는걸 확인할 수 있다.
(아직까지는 가상머신(guest) 내부에서만 접속이 가능하다)





출처
https://www.vagrantup.com/intro/getting-started/index.html
https://ko.wikipedia.org/wiki/프로비저닝

2018년 7월 23일 월요일

Vagrant 사용 방법 (2)

저번 포스트에서 vagrant 를 통한 centos 초기화 방법에 대해 살펴보았다.

맨 처음 vagrant init 를 수행할때, 구동되기 까지 시간이 오래 걸렸고,
뭔가 다운로드 되고 있다는걸 느낄 수 있었다.

맨 처음에 init 할때는 https://vagrantcloud.com/boxes/search 에서 이미지를 다운로드 하기 때문이다.

다운로드 되어진 이미지는 아래 경로에 저장되어 있다.
~/.vagrant.d/boxes/centos-VAGRANTSLASH-7/1804.02/virtualbox
(이름이 같지 않을 수 있다)

vagrant up 으로 virtualbox 가 구동될때 이미지가 없으면 다운로드를 하고,
이미지가 있으면 그 이미지를 기반으로 아래 경로에 새로운 이미지로 구동된다.
~/VirtualBox VMs/cent_default_1529396971762_7086
(이름이 같지 않을 수 있다)

vagrantcloud 에는 다양한 이미지들이 존재하고,
그 이미지를 미리 다운로드 해서 보유하고 있을 수 있다.
% vagrant box add [이름]

예를 들어 Ubuntu 12.04 이미지를 다운로드 하고 싶다면,
아래처럼 하면 된다.
% vagrant box add hashicorp/precise64


이미지는 아래 경로에 저장이 된다.
~/.vagrant.d/boxes/hashicorp-VAGRANTSLASH-precise64/1.1.0/virtualbox

이미지를 기반으로 가상머신(guest)을 구동해 보자.
"vagrant box" 가 정상적으로 수행되었다면,
"Vagrantfile" 파일이 생성되었을 것이다.

16번째쯤 line 으로 가면, config.vm.box 항목을 수정하자.
config.vm.box = "hashicorp/precise64"

구동을 해보자.
% ./vagrant up

% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Setting the name of the VM: test_default_1529398362219_57644
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> 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.0
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /home/ck0911/test

잘 구동이 되었다.



vagrant 는 기본적으로, guest 머신의 /vagrant 디렉토리와
host 머신의 project 디렉토리(Vagrantfile 있는 디렉토리)가 서로 공유된다.

만약, host 머신에서 /home/kimchki/test/Vagrantfile 이 존재하고,
이 파일을 사용해서 가상머신(guest)을 실행했다면,
guest 머신의 /vagrant 가 위 디렉토리랑 sync 가 된다는 말이다.

테스트를 해보자.
host 머신에서 아래 명령어를 실행하자.
% echo "123" > /home/kimchki/test/123
guest 머신의 /vagrant 에 123 파일이 생성되어 있는걸 확인할 수 있다.

오~ guest 머신과 host 머신 사이에 연결 통로가 만들어진 셈이다.






출처
https://stackoverflow.com/questions/10155708/where-does-vagrant-download-its-box-files-to
https://www.vagrantup.com/intro/getting-started/index.html

2018년 7월 16일 월요일

Vagrant 사용 방법 (1)

vagrant는 가상머신을 이리저리 쉽게 컨트롤 할 수 있도록 도와주는 프로그램이다.
가상머신을 컨트롤 할 수 있는 명령어와 설정파일을 제공해 준다.

가상머신에 OS 를 설치하고 설정을 이것저것 해주는 것은 상당히 번거로운 일이다.
그것을 어느정도 자동으로 해주는 프로그램이다.

일단 vagrant 홈페이지에 가서 자신의 OS 에 맞는 파일을 download를 하자.
www.vagrantup.com
나는 Linux 버전으로 다운로드 했다.

현재 시점 기준으로 최신 버전은 2.1.1 이다.
https://releases.hashicorp.com/vagrant/2.1.1/vagrant_2.1.1_linux_amd64.zip

그 다음에는, vagrant box를 추가해야 한다.
vagrant box는 virtual machine을 컨트롤하기 위한 설정파일이라고 보면 된다.
자신이 만들 수도 있고, 인터넷에 공개되어 있는것을 사용할 수도 있다.
아래 링크에서 공개되어 있는 것을 다운로드 하면 된다.
https://app.vagrantup.com/boxes/search

centos/7 을 해보기로 했다.
왜냐하면 나는 ubuntu 사용자이기 때문에 centos 가 필요했기 때문이다.


centos/7 을 클릭하면 "config.vm.box" 를 "centos/7" 로 바꾸라고 되어 있다.
vm.box 의 의미는 가상 이미지를 가리킨다.
Vagrantfile 은 초기화를 하면 생성되는 파일인데 설정 파일이라고 생각하면 된다.


초기화를 하고 그 다음에 설정파일을 수정해 보자.
Vagrantfile 파일을 생성하자.
% ./vagrant init

Vagrantfile 파일을 수정하자.
% vi Vagrantfile

16번째쯤 line 으로 가면, config.vm.box 항목을 수정하자.
config.vm.box = "centos/7"

구동을 해보자.
% ./vagrant up --provider virtualbox

가상 이미지가 다운로드 되고, 뭔가 되는듯 싶더니, 에러가 발생했다.
% ./vagrant up --provider virtualbox
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
    default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1804.02) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1804.02/providers/virtualbox.box
    default: Download redirected to host: cloud.centos.org
==> default: Successfully added box 'centos/7' (v1804.02) for 'virtualbox'!
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' is up to date...
==> default: Setting the name of the VM: ck0911_default_1529046330151_51990
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Rsyncing folder: /home/ck0911/ => /vagrant
There was an error when attempting to rsync a synced folder.
Please inspect the error message below for more info.

Host path: /home/ck0911/
Guest path: /vagrant
Command: "rsync" "--verbose" "--archive" "--delete" "-z" "--copy-links" "--no-owner" "--no-group" "--rsync-path" "sudo rsync" "-e" "ssh -p 2222 -o LogLevel=FATAL  -o ControlMaster=auto -o ControlPath=/tmp/ssh.941 -o ControlPersist=10m  -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i '/home/ck0911/.vagrant/machines/default/virtualbox/private_key'" "--exclude" ".vagrant/" "/home/ck0911/" "vagrant@127.0.0.1:/vagrant"
Error: OpenSSL version mismatch. Built against 1000207f, you have 1000106f
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]

뭐지? 음.....
에러 메세지를 보니, rsync 설정에 실패를 한 모양이다.
sync 만 실패한거니까 일단 넘어가도록 하자.

virtualbox 디렉토리를 확인해 보니, 이미지는 잘 받아졌다.
% ls ~/VirtualBox VMs


virtualbox 를 실행시켜보니, 이미지는 잘 실행됐다.


가상머신에 직접(console) 접속을 해보자.
접속을 해보니, 잘 접속이 된다.
ID : vagrant
PW : vagrant


ssh 를 통해서 접속을 시도해 보자.
ssh 를 통해서는 접속이 되지 않는다.
왜냐하면 패스워드 방식이 아니라, SSH auth method: private key 방식이기 때문이다.


vagrant 를 통해 접속을 해야 한다.
% ./vagrant ssh


에러가 뜬다.
아마도 내가 가지고 있는 OS 와 vagrant 홈페이지에서 받은 파일이 서로 안 맞는 모양이다.
그냥 apt-get 으로 설치를 하자.


다시 해보자.
% ./vagrant ssh


환장하겠구먼......
virtualbox 버전이 안 맞는다는 말이다.

virtualbox 버전을 확인해 보니, 5.2 이다.



OS 버전을 확인해 보니, 16.04 이다.
% cat /etc/issue
Ubuntu 16.04.4 LTS \n \l

vagrant 버전을 확인해 보니, 1.8.1 이다.
% vagrant -v
Vagrant 1.8.1

Ubuntu 16.04 에서 apt-get 을 통해 받는 vagrant 는 1.8.1 버전이고,
virtualbox 5.1 까지만 지원한다는 결론이 나왔다.

난 이미 virtualbox 5.2 가 설치되어 있었다.
virtualbox 5.1 로 설치를 변경하는건 위험한 행동 같았다.

vagrant 2.1.1 로 변경해 주는 패키지를 설치해야 될거 같다.
다시 www.vagrantup.com 으로 이동해 보자.

이번에는 "Debian 64-bit" 를 다운로드 해보자.
https://releases.hashicorp.com/vagrant/2.1.1/vagrant_2.1.1_x86_64.deb

설치를 하자.
% sudo dpkg -i ./vagrant_2.1.1_x86_64.deb

버전을 확인해 보자
% vagrant -v
Vagrant 2.1.1

virtualbox 에 접속을 해보자.
% ./vagrant ssh

이야~ 만세! 접속이 된다. 살았다.


여기까지가 vagrant 의 설치와 기본 사용 방법이다.






출처
https://www.vagrantup.com/downloads.html
https://app.vagrantup.com/boxes/search
http://bcho.tistory.com/806
https://stackoverflow.com/questions/10155708/where-does-vagrant-download-its-box-files-to

2018년 7월 9일 월요일

VirtualBox Command

% virtualbox
virtualbox 를 실행하면, 일반적으로 GUI 인터페이스가 나타난다.

리눅스 server 버전을 사용하든 desktop 버전을 사용하든,
virtualbox 는 GUI 인터페이스가 기본이다.

물론 GUI 가 여러모로 편하긴 하다.
그런데 종종 CUI 를 사용해야 할일이 생긴다.

구글링을 해보니, virtualbox 를 위한 CUI 가 존재한다.
'VBoxManager' 라는 command 가 있다.

이걸 사용해서, 가상 이미지를 생성할 수도 있고, 가상 머신을 실행할 수도 있다.
아래 표에 간단히 정리해 놓았다.

VBoxManage createvm가상 머신를 생성한다.
VBoxManage registervm가상 머신를 등록한다.
VBoxManage modifyvm가상 머신를 수정한다.
VBoxManage storagectl가상 머신의 storage controller 를 수정한다.
VBoxManage createmedium가상 머신의 storage 에 사용할 이미지를 생성한다.
VBoxManage storageattach가상 머신의 storage controller 의 storage 를 수정한다.
VBoxManage startvm가상 머신을 시작한다.
VBoxManage list vms가상 머신의 전체 리스트를 출력한다.
VBoxManage list runningvms가상 머신의 실행중인 리스트를 출력한다.
VBoxManage controlvm가상 머신을 컨트롤한다.
VBoxManage unregistervm가상 머신을 등록 해지한다.

만약 CentOS 를 예를 든다면, 아래처럼 command 를 사용하면 된다.
아래 예제에서 CentOS7.2 대신에 자신의 입맛대로 편하게 이름을 만들면 된다.


가상 머신를 생성한다.
만약 --register 옵션을 추가하면 등록도 같이 한다.
% VBoxManage createvm --name CentOS7.2 --register

가상 머신를 등록한다.
% VBoxManage registervm CentOS7.2

가상 머신를 수정한다.
--ostype : OS 의 타입을 Linux 로 설정한다.
--memory : 메모리 크기를 1GB 로 설정한다.
--vram : 비디오 메모리를 16MB 로 설정한다.
나머지 옵션들은 메뉴얼을 참고하면 된다.
% VBoxManage modifyvm CentOS7.2 --ostype Linux --memory 1024 --vram 16 --pae off --x2apic on --ioapic on --rtcuseutc on --mouse usbtablet --audio none

가상 머신의 storage controller 를 수정한다.
--storagectl : SATA 형태의 controller 를 추가한다.
% VBoxManage storagectl CentOS7.2 --name "SATA" --add sata --portcount 1

가상 머신의 storage 에 사용할 이미지를 생성한다.
--filename : 이미지 이름을 설정한다.
--size : 크기를 20G 로 설정한다.
--format : VDI 형태로 작성한다.
--variant : 가변적으로 사이즈 변경으로 설정한다.
% VBoxManage createmedium disk --filename CentOS7.2.vdi --size 20000 --format VDI --variant Standard

가상 머신의 storage controller 의 storage 를 수정한다.
--medium : SATA 에 CentOS_7.vdi 이미지를 연결한다.
% VBoxManage storageattach CentOS7.2 --storagectl "SATA" --port 0 --type hdd --medium CentOS7.2.vdi

가상 머신의 storage controller 를 수정한다.
--storagectl : IDE 형태의 controller 를 추가한다.
% VBoxManage storagectl CentOS7.2 --name "IDE" --add ide

가상 머신의 storage controller 의 storage 를 수정한다.
--medium : IDE 에 CD-ROM 을 연결한다.
% VBoxManage storageattach CentOS7.2 --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium emptydrive

가상 머신를 수정한다.
--nic1 : 네트워크를 NAT Network 형태로 연결한다.
% VBoxManage modifyvm CentOS7.2 --nic1 natnetwork --nictype1 82540EM


가상 머신을 시작한다.
만약 headless 옵션을 추가하면 background 로 실행한다.
% VBoxManage startvm CentOS7.2 --type headless


가상 머신의 전체 리스트를 출력한다.
% VBoxManage list vms

가상 머신의 실행중인 리스트를 출력한다.
% VBoxManage list runningvms

가상 머신을 컨트롤한다.
acpipowerbutton : 본체의 종료 버튼을 누른 형식으로 가상머신을 종료한다.
% VBoxManage controlvm CentOS7.2 acpipowerbutton

가상 머신을 등록 해지한다.
% VBoxManage unregistervm CentOS7.2

그 외 더 많은 명령어와, 옵션들이 존재한다.
자신이 필요한것들을 더 찾아서 사용하면 된다.
그리고 쉘 스크립트와 연동해서, 자동적으로 virtualbox 를 관리할 수 있다.

옵션도 많고, 영어로 설명되어 있고,,,,, 휴 피곤하다.






출처
https://www.joinc.co.kr/w/Site/Development/Forum/manager/Command_Line_Power
https://blog.itanoss.kr/ko/command-line으로-virtualbox-vm-생성하기
https://www.virtualbox.org/manual/ch08.html
http://www.oracle.com/technetwork/articles/servers-storage-admin/manage-vbox-cli-2264359.html

2018년 7월 3일 화요일

Ubuntu 16.04 에서 VirtualBox 5.2.12 설치

ubuntu 16.04 desktop 에서 virtualbox 를 설치해서 이것저것 해야할 일이 생겼었다.

apt 를 통해서 virtualbox 를 설치했다.
% sudo apt-get install virtualbox

그리고 virtualbox 를 실행했는데, 에러가 발생했다.

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
               available for the current kernel (4.4.0-47-generic) or it failed to
               load. Please recompile the kernel module and install it by

               sudo /sbin/vboxconfig

               You will not be able to start VMs until this problem is fixed.

응? 뭐지?
구글링을 해봤다.
구글 자료를 보면서 이것저것 해봤는데, 해결하지 못 했다.
시간은 시간대로 소비하고, 삽질은 삽질대로 하고, 해결은 못 하고,,,,,,
엄청 짜증났다.

apt 가 아니라 virtualbox 공식 홈페이지에서 다운받기로 했다.
https://www.virtualbox.org/wiki/Linux_Downloads
ubuntu 이므로 Debian-based Linux distributions 을 따라했다.

따라하기 전에 먼저, ubuntu 를 새로 설치했다.
virtualbox 에러 때문에 이것저것 막 건드려놨기 때문에 엉망진창이 되었기 때문이다.

apt repository 에 추가한다.
% sudo vi /etc/apt/sources.list

맨 밑에 아래 내용을 추가한다.
ubuntu 16.04 이므로 xenial 으로 입력한다.
deb https://download.virtualbox.org/virtualbox/debian xenial contrib

artful, zesty, yakkety, xenial, trusty, stretch, jessie, wheezy,,,,,,,
자신의 OS 에 맞는것으로 입력하면 된다.

자신의 OS 에 맞는게 뭔지 모르겠다고?
/etc/apt/sources.list 을 열어보면 알게 된다.

key 를 add 한다.
% sudo apt-key add oracle_vbox_2016.asc
% sudo apt-key add oracle_vbox.asc

apt 를 사용해서 설치하자.
% sudo apt-get update
% sudo apt-get install virtualbox-5.2

착실히 따라하기를 했더니, 짠하고 설치가 되고, 실행도 잘 되었다.
도대체 뭐가 문제지,,,,, 아씨 모르겠다.
이것 때문에 시간 엄청 걸렸다.
처음에는 CentOS 로 했다가 안되서, Ubuntu 로 했다가 안되서,
Desktop 용으로 했다가, Server 용으로 했다가,,,,, 휴


암튼, 혹시라도 apt 를 통해서 virtualbox 가 설치되지 않는다면,
위와 같은 방식으로 설치하면 된다.



출처
https://www.virtualbox.org/wiki/Linux_Downloads

화곡 어쩌라고, 굴사냥

석화찜(굴찜)을 먹으러 여의도로 갔다 그런데 재료가 모두 소진되었다고 마감이라고 한다 응? 다들 굴에 미쳤나? 굴을 찾아 헤매다 보니, 화곡까지 가게 되었다. 화곡은 처음 가본다. 첫인상은 "술집 겁네 많네" 피똥쌀때까지 마실 수 있...