본문
ns-3 DCE(Direct Code Execution) 설치하기
베타버전일때 ns-3 DCE를 설치했으나 그 이후로 시간이 지나서 설치방법을 잊어버렸다. (그떄 상당히 삽질을 많이 했었는데) 그래서 기억을 되살려볼 겸 글을 작성해본다. 그리고 특수하게 설정해놓아 나에게만 오류가 발생하는줄 알았는데 알고보니 다른사람들에게도 동일한 오류가 발생한다고 하길래 공개한다. ns-3.17이 정식 발표됨에 따라 DCE(Direct Code Execution)이 편입되었는데, 사실은 편입이라고 하기보다는 안정성과 유용성을 인정받아 ns측에서 공식화 한 형태이다
아무튼 설치 방법은 http://www.nsnam.org/docs/dce/release/1.0/manual/singlehtml/index.html 이곳에 있다. 단, ns-3 dce라고 구글링하면 http://www-sop.inria.fr/members/Frederic.Urbani/DCE/getting-started.htm 의 오래된 페이지가 먼저 뜨는데 이 방법에 따르면 fedora 18에서는 설치가 되었으나, 현재 설치하려는 환경인 Ubuntu 12.04에서는 원활하게 설치되지 않으므로 참고한다
그런데 위의 링크를 따라해 봐도 원활하게 설치되지 않았다--그래서 이 글을 쓰는것이다. 우선 DCE advanced mode (with Linux kernel) 을 사용한다는 가정하에서, 다음의 라이브러리가 설치되어 있어야 한다. 이들이 설치되어있지 않으면 download 과정에서 오류를 발생시키며 다운로드가 중단된다. (qt4 라이브러리에 libqt4-dev만 필요한지 아니면 다른것도 필요한지 확실하지 않아 세개를 다 적어넣었다)
sudo apt-get install mercurial libdb-dev bison flex bzr libqt4-core libqt4-dbg libqt4-dev libc6-dbg
그리고 또하나, IOError: ('http protocol error', 0, 'got a bad status line', None) 등의 이유로 다운로드가 계속 실패하는 경우 bake/ModuleSource.py에서의 download 부분을 아래와 같이 wget 명령을 사용하는것으로 임시로 대체하여 다운로드 받을 수 있다.
def download(self, env):
"""Downloads the specific file."""
import urllib
import urlparse
import os
url_local = self.attribute('url').value
filename = os.path.basename(urlparse.urlparse(url_local).path)
tmpfile = os.path.join(env.srcrepo, filename)
try:
env.run(['wget', url_local])
env.run(['mv', filename, tmpfile])
"""urllib.urlretrieve(url_local, filename=tmpfile) <- 이게 원본이었음"""
except IOError as e:
raise TaskError('Download problem for module: %s, URL: %s, Error: %s'
% (env._module_name,self.attribute('url').value, e))
self._decompress(tmpfile, env)
처리를 해준 후 링크에 있는대로 다음의 명령을 실행하면 아래와 같은 그림이 출력되며 잘 설치 되었다고 안심할 수 있다. 다음 글은 umip와의 연동에 대해 적을 예정이다.
hg clone http://code.nsnam.org/bake bake
export BAKE_HOME=`pwd`/bake
export PATH=$PATH:$BAKE_HOME
export PYTHONPATH=$PYTHONPATH:$BAKE_HOME
mkdir dce
cd dce
bake.py configure -e dce-linux-1.0
bake.py download
bake.py build
cd source/ns-3-dce
./waf --run dce-udp-simple
ls -lR files-0
=============
* 다음에 다시 설치할때를 위한 개인적 메모. (출처: ImportError: No module named IPython.frontend.terminal.ipapp)
Fedora나 Ubuntu나 공유폴더상에서 컴파일 하는 경우 아래의 오류가 생기던데, 게스트 로컬에 설치할때는 이 문제는 발생하지 않는다. (symbolic 오류를 해결해도 나오는 사항) 다음에 설치할 때 ImportError: No module named 오류가 발생했을 경우 아래의 코드를 추가해보자.
import sys
if "/usr/lib/python2.7/dist-packages" not in sys.path:
sys.path.append("/usr/lib/python2.7/dist-packages")
댓글