Book2014.11.22 00:19

안녕하세요~!! 


어제였죠~!! 제가 운영하고 있는 오픈스택 한국 커뮤니티 11월 정기 세미나에서 드디어 "오픈스택을 다루는 기술" 집필 후기를 발표하였습니다. 그리고, 제 집필 후기를 못 들으신 분들을 위해서 이곳 블로그에도 몇 글자 남겨봅니다.


집필 후기 발표를 앞두고 어떤 내용으로 집필 후기를 이야기 하면 좋을까? 하고 곰곰히 생각을 하다 책을 쓰게 된 동기! 책을 쓰면서 있었던 에피소드! 그리고 책이 출간된 이후의 지금의 내 모습에 대해 이야기를 하면 좋을 것 같다는 생각을 했습니다. 



1. 책을 쓰게 된 동기

사실 저는 어려을 때부터 꿈이 책을 쓰는것이 꿈이였습니다. 내 이름 석자로 된 책을 출간하는 일 말입니다. 그런데, 오픈스택으로 책을 쓰게 될 꺼라고는 상상조차 하지 못했습니다.사실 저는 자바 웹 개발자였습니다. 주로 했던 일은 자바 언어를 이용하여 웹 사이트를 만드는 일이었습니다. 그래서, 스트럿츠, 스프링 같은 것들을 했었죠!! 제가 처음 접한 OpenStack 역시 Java Web을 개발 하기 위한 수단에 불과했습니다. 그러기 위해서 전 오픈스택을 설치할 수 있어야만 했습니다. 그 당시에 들어간 회사에서 "자네는 이제부터 오픈스택을 설치하고 이것을 기반으로 하는 시스템을 만들어야 돼" 라고 해서 시작을 한 것이였습니다!!

자바 개발자였던 저는 오픈스택을 알아가기 위하여 클라우드 컴퓨팅이 무엇인지 알아야만 했습니다. 그리고, 영어로 된 설치 매뉴얼을 볼 수 있어야 했습니다. 서버에 우분투 리눅스도 설치할 줄 알아야만 했었죠! 또한 설치된 우분투 서버에 네트워크 IP 설정은 기본으로 할 줄 알아야만 했습니다. 게다가 이 모든것을 혼자서 스스로 다 할 줄 알아야 했습니다.

그래서 이때부터 저는 커뮤니티 활동을 하기 시작했습니다. 모르니까 배우기 위해서죠~!! 처음에 우분투 커뮤니티에 가입을 했습니다. 그리고 우분투 커뮤니티에서 하는 세미나에 나갔죠~!! 그때 만났던 가장 기억에 남는 분이 바로 지금 오픈스택 한국 커뮤니티를 함께 운영하고 있는 유명환 네트워크 분과장님입니다. 

그 다음에 오픈스택 한국 커뮤니티를 가입하였습니다. 그 당시 커뮤니티 대표님이셨던 안재석 박사님이 홈페이지가 없어서 다시 만들어야 한다면서 만들 사람을 모집했는데 그때 제가 그 자리를 한달음에 달려갔었던 기억이 납니다. 

그리고, 열심히 커뮤니티 활동을 했습니다. 안 박사님을 졸졸 따라니면서 오픈스택을 배우기 위해서 정말 열심히 노력했습니다. 이렇게 커뮤니티를 통해서 배우다 보니~~ 내가 받은 것들을 다시 커뮤니티에 돌려주어야 한다는 생각을 했습니다. 과연 내가 할 수 있는 일은 무엇일까? 그게 바로 영어가 아닌 한국어로 된 설치 매뉴얼을 공개하는 것이였습니다. 그것이 제가 할 수 있는 커뮤니티에서 받을 것을 다시 돌려줄 수 있는 유일한 길이라고 생각했습니다. 그래서, 아마도 그때부터 오픈스택 설치 매뉴얼을 영어가 아닌 한국어로 만나면 좋겠다~~ 라는 꿈을 꾸기 시작했던것 같습니다.


2. 책을 쓰는 과정에서 있었던 에피소드

책을 쓰기 시작한 건 2013년 12월의 어느날부터였습니다. 그때 출판사에서 찾아와 블로그에 글도 정리가 잘되어 있고 책을 쓰면 좋을 것 같다면서 함께 책을 써보자고 제안을 해 왔습니다. 꿈이 있었기 때문에 몇번의 망설임 끝에 책을 쓰겠다고 결정을 했습니다. 그런데 그 무렵에 "OpenStack Day in Korea"라는 행사를 준비 하느라 정말 너무 바뻐서 책을 쓸 시간이 없었습니다. 행사를 마치고 다시 책을 쓰기 시작했습니다. 제가 책을 쓰기 시작했을 때는 오픈스택 버전이 HAVANA였습니다. 그런데, 4장까지 집필을 하고나니 오픈스택 버전이 IceHouse로 변경이 되었습니다. 그래서, 저는 마음을 접고 처음부터 다시 집필을 하기 시작했습니다. 그러나 그것도 얼마 안가 저에게 바로 시련이 찾아왔습니다. 바로 오픈스택을 설치할 장비가 없었던 것입니다. 집필을 포기할까 몇 번을 망설였습니다. 게다가 설상가상으로 올해 초등학교를 들어간 딸 아이에게 문제가 생겼습니다. 행사 준비에 책을 쓴다는 이유로 제대로 챙겨주지 못한 아이가 학교 생활을 제대로 적응하지 못하고 있다는 것이였습니다. 뿐만 아니라 사랑하는 가족들이 아프기 시작했습니다. 하나뿐인 아버지가 그때 페암 말기 판정을 받으셨고, 아이를 봐 주시던 시어머니의 건강이 악화되었습니다. 일이 손에 잡히질 않았습니다. 그래서 그때 제가 내린 선택이 바로 육아휴직이였습니다. 

자~ 이제 휴직도 했고 집에서 쉬니 책을 또 한번 써보자 했는데 여전히 저에게는 오픈스택을 설치할 장비가 없었습니다. 출판사에 사정을 이야기하니 출판사에서 집필을 하는 동안 노트북을 빌려 주신다고 했습니다. 그래서, 그 무거운 노트북을 낑낑거리고 가지고 와서 한대는 컨트롤러 노드, 한대는 네트워크 노드, 한대는 컴퓨트 노드로 구성하기로 했습니다.

오픈스택에서 또 중요한 것은 네트워크입니다. 네트워크는 공유기를 이용하기로 했습니다. 노트북에는 네트워크 이더넷 카드가 한장밖에 없습니다. 오픈스택을 설치하기 위해서는 최소 3개의 이더넷 카드가 필요합니다. 그래서 이를 해결하기 위하여 외장 USB 이더넷 카드를 5개 샀습니다. 그래서 이것들을 이용해서 테스트 베드를 구축했습니다. 테스트 베드 구성도는 위에 첨부한 슬라이드 쉐어의 페이지를 넘기다 보면 확인하실 수 있을 것입니다. 이렇게해서 저는 5장 서비스가 되는 오픈스택 집필을 마칠 수가 있었습니다. 

사실 저는 RedHat에서 오픈스택을 설치해 보고 싶었습니다. 그 당시에 ROD Packstack이 유행을 했었습니다. 그래서 많은 분들이 설치를 하고 있다는 것을 알았고 저 또한 한번 설치해 보고 싶었습니다. 그래서 레드햇에 다시는 분에게 "책을 쓰고 있는데 레드햇에서 오픈스택을 설치해 보고 싶은데 레드햇을 구할수 없을까요?"라고 했는데 그때 그분이 하시는 말 "CentOS를 쓰세요" 였습니다 .그래서 갑자기 "RedHat에서도 오픈스택을 설치할 수 있어"가 "CentOS에서도 오픈스택을 설치할 수 있어"가 되어 버렸습니다. 이렇게해서 6장까지를 마무리하고 7장과 8장은 그동안 오픈스택을 운영하면서 그리고 오픈스택 기반으로 한 개발을 하면서 삽질했던 경험들을 모두 담았습니다.  9장과 10장은 나에게 만약 가상 서버가 생긴다면 무얼하고 싶을까? 라는 생각을 했을때 저는 바로 그 당시 유행이였던 워드프레스 블로그를 한번 설치해 보고 싶었습니다. 그래서, 워드프레스 블로그 설치편과 요즘 빅데이터 하면 생각나는 오픈소스인 하둡을 설치해 보자! 라는 생각이 들었습니다. 그래서 하둡 설치편을 마지막으로 다루었습니다. 이렇게 집필을 마무리하고 마지막 교정을 보던 날~~~ JUNO가 릴리즈되었습니다. ㅎㅎㅎ 어의없죠~~ ^^;;


3. 책이 출간 된 이후~~ 지금은?

책을 출간하고 보니 교정때는 보이지 않았던 오타들이 보이기 시작했습니다. 또한 책을 집필하고 출간하면서 정말 많은 것들을 배웠습니다. 출판하는 과정을 알게 되었으며, 책을 쓰시는 모든 분들이 존경스럽게 느껴졌습니다. 저는 이렇게 입문서를 썼는데도 정말 힘들었는데 다른 분들은 정말 대단해 보였습니다. 

이제는 오픈스택 설치는 대부분들 잘 하십니다. 단, 설치가 아닌 좀 더 많은 부분들을 필요로 한다는 것을 알았습니다. 

또한 아직도 저는 제자신이 많이 부족하다는 것을 또 한번 더 느꼈습니다. 

앞으로 저는 계속해서 블로그에 오타 수정을 포함하여 책의 모든 내용을 전부 공개할 생각입니다.

부족한 부분은 채우고 삽질도 계속 할 생각입니다. 사실 집에 봐야할 책들이 쌓여있습니다. 하나씩 하나씩 차근차근 봐야지요!

마지막으로 개정판이 나온다면 그때는 운영 부분을 좀 더 세부적으로 다룰 생각입니다. 개정판이 나오려면 책이 다 팔려야 할텐데 .... 다 팔리겠지요~!! ^^




Posted by 나리 짱!!! naleejang
Book2014.11.11 21:50

안녕하세요~!!


오늘은 책에 대한 이야기 그리고, 우분투에 대한 이야기를 좀 해 볼까 합니다. 


"오픈스택을 다루는 기술"의 5장은 서비스를 할 수 있는 오픈스택 설치를 다루고 있습니다.

제가 설치하고 테스트 했던 우분투 리눅스의 OS 버전은 12.04 LTS 버전이였으며, 오픈스택의 버전은 IceHouse였습니다.


그런데, 얼마전 10월 16일 오픈스택 Juno가 릴리즈되었고, 우분투 서버 역시 14.04.1까지 버전이 업그레이드되었습니다. 

우분투에서 네트워크 IP를 설정하려면 /etc/network/interfaces 파일을 수정해 주어야 합니다. 그리고, 시스템을 재부팅하지 않고 네트워크를 재설정하려면 ubuntu 12.04일 경우에는 sudo /etc/init.d/networking restart 명령어를 실행하면 되고, ubuntu 13.10부터는 sudo service networking restart 명령어를 실행 해주면 네트워킹이 재 적용됩니다. 


여기서, 문제가 발생합니다. Ubuntu 14.04 버전에서는 service networking restart 명령어를 실행하였을 때 네트워크 설정이 되지 않고 아래와 같은 메시지가 보이면서, 아무런 반응을 하지 않습니다.

$ sudo service networking restart

stop: Job failed while stopping

start: Job is already running: networking


예전에는 우분투가 업그레이드 되면 당연히 이 문제를 해결할 것이라고 생각을 했었는데, 아직까지도 이런 현상은 계속해서 확인이 되고 있습니다. 


오늘은 이런 현상을 쓰고자 하는것이 아니라, 14.04에서 오픈스택을 설치했을 경우 네트워크를 어떻게 설정할 수 있는지에 대한 방법을 공유하고자 이렇게 포스팅을 합니다.


일단, 3가지 방법이 있습니다. 


첫번째!  /etc/network/interfaces 파일의 네트워크 IP 설정을 마치면 시스템을 재부팅합니다. 가장 깔끔하고 쉬운 방법입니다. 이전 IceHouse install 문서에서는 service networking restart를 하라고 되어 있었지만, 최근 릴리즈된 Juno의 Install 문서에서는 재부팅을 하라고 변경되어 있습니다. 재부팅 명령어는 아래와 같습니다.

$ sudo reboot



두번째! 설정한 네트워크 인터페이스를 내렸다 올려도 네트워크를 설정할 수 있습니다. 바로 아래와 같은 명령어로 가능합니다. 여기서 eth0이 바로 interfaces에서 설정해 준 네트워크 인터페이스명입니다.

sudo ifdown eth0 && sudo ifup eth0



마지막 세번째!! 

우선, 네트워크 설정 명령어가 잘 실행이 되는 13.10 서버의 /etc/init/networking.conf 환경설정파일과 /etc/init.d/networking 실행 파일을 14.04 서버와 비교하여 봤습니다. 그리고, 13.10 서버의 networking.conf 환경설정파일과 networking 실행파일을 14.04에 대체합니다. 그러면, 14.04에서도 네트워크 설정이 아주 잘 됩니다.

root@ubuntu:/etc/init# mv networking.conf networking.conf.1401 #우선, 기존 환경설정 파일을 백업합니다.

root@ubuntu:/etc/init# tar xvf networking.tar    #13.10에서 가져온 환경설정파일의 압축을 풉니다.

networking.conf

root@ubuntu:/etc/init# diff networking.conf networking.conf.1401 #그리고, 두파일을 비교합니다.

13c13
<       and (stopped udevtrigger or container)) or runlevel [2345] #13.10에 있는 파일 내용입니다.
---
>     and (stopped udevtrigger or container)) or runlevel [2345] or stopped networking RESULT=failed PROCESS=post-stop EXIT_STATUS=100 #14.04에서는 네트워크 stop시 몇가지를 체크하도록 변경되었습니다.
16a17,20  #아래 부분은 14.04에 추가된 부분입니다. 네트워크 stop 명령어가 들어오면 정상종료가  됩니다.
>     if [ "$UPSTART_EVENTS" = "stopped" ] && [ "$UPSTART_JOB" = "networking" ] && [ "$EXIT_STATUS" = "100" ]; then
>         exit 0
>     fi
21a26,31 # 아래 부분 역시 14.04에 추가된 부분입니다. 네트워크 stop 관련된 if문입니다.
>     if [ -z "$UPSTART_STOP_EVENTS" ]; then
>         echo "Stopping or restarting the networking job is not supported."
>         echo "Use ifdown & ifup to reconfigure desired interface."
>         exit 100
>     fi
root@ubuntu:/etc/init# cd ../init.d
root@ubuntu:/etc/init.d# mv networking networking.1401 #이번에는 실행파일을 백업합니다.
root@ubuntu:/etc/init.d# tar xvf network.tar  #13.10에서 가져온 실행파일의 압축을 해제합니다.
networking
root@ubuntu:/etc/init.d# diff networking networking.1401  # 두 파일을 비교합니다.
14a15 #14.04 에 추가된 변수입니다.
> STATEDIR="$RUN_DIR/state"
21,27d21 #아래는 13.10의 네트워크를 실행하기위해 시스템 상태를 체크하는 부분입니다.
< # Make sure that it's clear to the user that they shouldn't use this
< # script under upstart
< if init_is_upstart; then
< echo "ERROR: Calling a sysvinit script on a system using upstart isn't supported. Please use the 'service' command instead."
< exit 1
< fi
57a52,54 #14.04에서는 위 부분이 사라졌으며, check_ifstate 함수에 아래와 같은 조건문이 추가 되었습니다.
> if ! chown root:netdev "$RUN_DIR" ; then
>    log_warning_msg "can't chown $RUN_DIR"
> fi
162a160,162 #14.04의 reload하는 부분에 아래와 같은 조건문이 추가 되었습니다.
> if init_is_upstart; then
> exit 1
> fi
166c166 #13.10의 인터페이스 체크하는 부분이
< state=$(cat /run/network/ifstate)
--- #14.04에서는 아래와 같이 변경되었습니다.
> state=$(ifquery --state)
root@ubuntu:/etc/init.d# ifconfig #네트워크 설정을 하기전 먼저 IP를 확인합니다.
eth0      Link encap:Ethernet  HWaddr 08:00:27:bd:71:c0  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:febd:71c0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2568 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1547 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:236344 (236.3 KB)  TX bytes:353671 (353.6 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@ubuntu:/etc/init.d# service networking restart  #네트워크를 재시작합니다. 그러나 아직 서비스가 적용전인듯..
stop: Job failed while stopping
networking start/running
root@ubuntu:/etc/init.d# service networking restart #다시 네트워크를 재시작했습니다. 이제서야 적용이 된 듯...
networking stop/waiting
networking start/running
root@ubuntu:/etc/init.d# ifconfig # 재시작후 다시 IP 확인합니다. 설정이 제대로 되었습니다.
eth0      Link encap:Ethernet  HWaddr 08:00:27:bd:71:c0  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:febd:71c0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2892 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1742 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:264381 (264.3 KB)  TX bytes:375503 (375.5 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:ee:09:16  
          inet6 addr: fe80::a00:27ff:feee:916/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:318 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:75247 (75.2 KB)  TX bytes:1226 (1.2 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@ubuntu:/etc/init.d# 


13.10 네트워킹 파일과 14.04 네트워킹 파일은 Ubuntu 서버에서 각각 확인하여 보실수 있지만 편의를 위해 이곳에 올려드리도록 하겠습니다. 언제라도 다운로드 받아 보시길 바랍니다.



networking.1310

networking.1401

networking.conf.1310

networking.conf.1401



위 방법은 아래 사이트를 참조하시면 더 많은 정보들을 얻으실 수 있습니다.

http://askubuntu.com/questions/441619/how-to-successfully-restart-a-network-without-reboot-over-ssh

http://snoopybox.co.kr/1720


그럼, 다음에 다시 만나요~~~ ^^

Posted by 나리 짱!!! naleejang