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월 27일 금요일

Atlassian Confluence 6.10.1 구매

예전에는 뭔가를 기록할 일이 생기면, 노트에 기록을 하곤 했었다.
아날로그 세대 답게, 샤프로 쓱싹쓱싹......

그 후,
디지털 세대로 급변하는 격동기(激動期) 시대를 맞이하게 되어서.....
디지털 인(人) 답게 기록의 형태를 디지털 형태로 변경하기로 하였다.

스마트폰, 데스크탑, 노트북을 사용하여 이것저것 기록하기 시작했다.
기록하는 형태의 서비스를 제공하는 프로그램 종류는 엄청 많았다.
그 중, 사용해 본 프로그램은 아래 리스트 정도.

에버노트(Ever Note), 원노트(One Note), 킵(Keep), 페이퍼(Dropbox Paper), 솜노트(Som Note), 큅(Quip)......  (더 있을텐데 기억이 잘 안 남)

위 제품들은 일반적으로 개인용으로 사용하기에 잘 되어 있다.
물론 공유 기능을 사용해서 여러 사람들과 협업적으로 사용 가능하다.
실제로 위 제품들을 사용하는 회사, 단체, 집단 등도 있다고 한다.

그렇긴 한데,
위 제품보다 좀 더 회사에서 사용하는 용도로 특화된 제품도 있다.

바로,
Atlassian 회사에서 만든 Confluence 라는 제품이다.

회사에서는 여러 사람들과 서로 문서를 공유하고, 작성할 수 있도록 특화된 제품이라고 해야 하나? (협업 제품)
아님 plugin 이 많아서 기능은 무한대로 추가할 수 있는 제품이라고 해야 하나?
암튼, 좋긴 좋다.

수 많은 회사에서 Confluence 를 사용한다고 알려져 있다.

Confluence 가 많이 알려지면서, 회사 뿐만 아니라 개인적으로 사용하는 사람들도 많이 생겼다.

혼자 사용하기도 하고, 친구들과 같이 정보 공유를 위해 사용하기도 하고, 작은 단체에서 사용하기도 하고, 다양하게 사용되는 같다.

원래는 비쌌었는데, 나처럼 돈도 빽도 없는 사람들을 위해 $10 에 판매한다는 소문을 들었다.
(2016년 9월 부터 인듯)

진짜? 레알? 리얼리?


소규모 단체를 위해 저렴하게 내 놓은거라고 한다.
그리고 $10 는 기부를 한다고 한다. (그러므로 환불은 안된다)
누이좋고 매부좋고.

자세한 내용은 아래 링크를 보면 된다.
https://www.facebook.com/notes/atlassian-korea-아틀라시안-한국/10달러로-시작하는-비지니스-효율화/1307770519246999

이번 기회에 나도 구매해 보기로 했다.
홈페이지에 방문해 보자.
https://ko.atlassian.com


Atlassian 회사에서는 Confluence 뿐만 아니라, 다양한 여러 제품이 많다.
나는 Confluence 제품만 구매할 것이다.


가격을 클릭해 보자.


클라우드와, 셀프호스팅 2가지 형태가 존재한다.
클라우드는 말 그대로, "Atlassian 에서 제공하는 서버를 사용하겠다. ID 만 부여해 달라" 라는 형태이다.
"셀프호스팅은 내 서버에 직접 설치하고 운영하겠다" 라는 형태이다.


셀프 호스팅 방식으로 사용할 것이므로, 셀프호스팅을 클릭하자.
오~ 진짜 $10


추가적으로 Add-on 을 선택하고 싶음 해도 된다.


체크아웃을 클릭하고, 신용카드(체크카드) 번호를 입력하고,
집 주소를 입력하면 결제가 완료된다.


이메일에 invoice 가 도착해 있다.
"Get your product license" 를 클릭하자.


"Confluence (Server) 10 Users: Starter License" 가 새롭게 추가되었다.


"Download Confluence (Server)" 를 클릭하자.


자신의 OS 에 맞는 파일을 다운로드 하면 된다.


혹시나 해서 URL 을 기록한다.

OS Xhttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.tar.gz
Linux 64 Bithttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1-x64.bin
TAR.GZ Archivehttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.tar.gz
Windows 64 Bithttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1-x64.exe
ZIP Archivehttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.zip

다운을 받았으니 실행을 해야 하는데,
실행하기 전에 DATA 디렉토리를 지정해 줘야 한다.

Confluence 가 실행되면서 필요한 파일들을 이것저것 기록해 놔야 하는데,
그 디렉토리를 설정해 줘야 한다.

문서 편집기를 사용해서, 아래 파일을 열어보자.
atlassian-confluence-6.10.1/confluence/WEB-INF/classes/confluence-init.properties
맨 밑에 "confluence.home" 항목의 주석을 제거하고, 디렉토리를 입력하자.

실행은 백그라운드로 해야 하므로, -fg 옵션을 주도록 하자.
% atlassian-confluence-6.10.1/bin/start-confluence.sh -fg

뭔가 주룩룩 뜨면서 마구 실행되는 모습을 확인할 수 있다.

접속해 보자.
http://127.0.0.1:8090

잘 뜬다면 성공적으로 설치, 실행이 된것이다.
안된다면?
열심히 구글링을 해보면 된다.
구매 사용자 이므로, "Production Installation" 을 클릭하면 된다.


참고로,
"라즈베리파이 PI 3" 에 설치 했었는데,
처음에 "oracle-jdk-7" 을 사용해서 설치를 했는데, (jdk-7 사용중이라서)
뭔가 에러를 빼액~~~~ 하고 뿜어냈었다.

Tomcat Issue: Unsupported major.minor version 52.0
뭐 대충 이런 메세지.

해결은 간단했다.
open-jdk-8 로 업그레이드 하니까 잘 되었다.

"Production Installation" 을 클릭하면,
Add-on 이 나오는데, 더 구매한 것이 없으므로 그냥 Next 한다.


드디어! License Key 를 입력하는 단계.
화면에 표기된, Server ID 를 복사한다.


위에 나온 그림들중에 "View License" 가 있었다.
그것을 클릭한다.


처음 설치자 인지, 기존 설치자 인지 선택해야 한다.
기존에 Confluence 를 사용중이라면, 아래 안내 절차대로 수행하면 된다.

처음 사용자 이므로, "not installed yet" 을 선택하자.
그리고 아까 복사한 "Server ID" 를 붙여넣기 한다.


License Key 가 생성되었다.


License Key 를 이곳에 붙여넣기 한다.


Confluence 에서 글을 작성하면, 그 데이터를 어디에 저장할지 물어보는 단계이다.

"My own database" 는 외부 Database 를 사용하는 것이다.
MySQL, PostgreSQL, Oracle, MS-SQL

"Built in" 은 내부적으로 관리하는 방식이다.

외부 Database 를 사용하는 것이 여러모로 좋다.


DB 정보를 입력하자.
"Simple", "By connection string" 두 가지 중에 아무거나 해도 상관없다.



Test connection 이 성공적으로 잘되는지도 확인한다.
Next 를 클릭하면, 초기 Data 설정이 진행된다.
서버 상태에 따라 몇 분 소요될 수 있다.


근데 .... 한 20분 지났나?
에러가 걷잡을 수 없이 마구마구 뜨기 시작했다.

java.lang.Throwable

WARNING [ContainerBackgroundProcessor[StandardEngine[Standalone]]] org.apache.catalina.valves.StuckThreadDetectionValve.notifyStuckThreadDetected Thread [http-nio-8090-exec-6] (id=[43]) has been active for [68,417] milliseconds (since [7/26/18 1:34 PM]) to serve the same request for [.....] and may be stuck (configured threshold for this StuckThreadDetectionValve is [60] seconds). There is/are [1] thread(s) in total that are monitored by this Valve and may be stuck.

헐....
급기야 나중에는, 메모리가 부족하다는 메세지와 함께, 프로그램이 사망했다.

OpenJDK Client VM warning: INFO: os::commit_memory(0x563b4000, 119504896, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 119504896 bytes for committing reserved memory.
# An error report file with more information is saved as:

아~~ 어쩌지?
"라즈베리파이 PI 3" 라서..... 메모리가 1G 뿐인데..... ㅠㅠ

할 수 없이, 아래 URL 을 참고해서 Swap File 을 1G 추가했다.
http://faq.hostway.co.kr/?mid=Linux_ETC&page=7&document_srl=1443

현재 Swap 상태를 확인한다.
% swapon -s, free

임시파일 1G 를 생성한다.
% dd if=/dev/zero of=/home/pi/swapfile bs=1024 count=1000000

Swap File 형태로 만든다.
% mkswap /home/pi/swapfile

Swap File 로 지정한다.
% sudo swapon /home/pi/swapfile

나중에 해지할때는 아래처럼 하면 된다.
% sudo swapoff /home/pi/swapfile
% rm /home/pi/swapfile

그리고 다시 재시도 한다.

"라즈베리파이 PI 3" 라서 그런가?
20분 넘게 걸린거 같았다.

먹통된 줄....
더 좋은 서버에서 돌렸으면 좋았을텐데..... 가난이 죄다. ㅠㅠ

출처 : https://www.hooni.net/xe/?mid=media&document_srl=87518&order_type=asc&sort_index=readed_count&listStyle=viewer&page=30

후하~~
드디어 화면이 떴다.

썰렁한 화면 보다는 뭔가 있는게 나을거 같으니,
Example Site 를 클릭하자.


Jira 없이 Confluence 단독으로 사용할 것이므로,
"Manage users and groups within Confluence" 를 클릭하자.


Username : 사용하고 싶은 ID 를 입력한다.
Name : 화면에 표기될 자신의 Full Name 을 입력한다.


만세!!!!
Start 를 클릭하고, 즐겁게 사용하면 된다.


..... 라고 생각했는데,


완전~~~ 느려서 못 쓸거 같다.
저 뱅글뱅글 도는 그림이 없어지지 않고 있다. 어휴....


$11 가 사라지는 순간이었다.
기부했다 셈 치지 뭐~~ ^^


이상 삽질 끝.

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

화곡 어쩌라고, 굴사냥

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