SDN 테스트 환경 구성 - (2) ONOS controller 설치하기
컴퓨터/Software Defined Networking (SDN)

SDN 테스트 환경 구성 - (2) ONOS controller 설치하기

이 글은 SDN 테스트 환경 구성하기 시리즈 문서의 두 번째 글로, SDN 컨트롤러 중 Open Network Operating System (ONOS)를 설치하는 문서임.

SDN 테스트 환경 구성하기 시리즈 문서의 첫 번째 글 - Mininet 설치하기는 아래 링크를 참고.

https://vanilet.tistory.com/20

 

SDN 테스트 환경 구성 - (1) Mininet 설치하기

Mininet 소개 Mininet은 실제 환경과 아주 유사한 가상 네트워크를 생성할 수 있는 도구로, 실제 커널, 스위치 및 어플리케이션 코드를 하나의 컴퓨터에서 실행할 수 있다. http://mininet.org/ Mininet: An Ins

vanilet.tistory.com

1. 필수 패키지 설치

1.1 ONOS 빌드에 필요한 Linux 패키지 설치

이 문서에서 설치하는 ONOS 버전은, 작성 당시 최신버전인 2.3 버전임.

아래 명령어를 이용하여 ONOS 사용을 위한 필수 패키지를 설치함. 

sudo apt update
sudo apt -y upgrade
sudo apt -y install zip curl unzip bzip2 git git-review
sudo apt -y isntall python3 python3-pip python3-dev python3-setuptools
sudo apt -y install python python-dev python-setuptools
sudo apt autoremove
sudo apt autoclean

1.2 Python 2 버전용 pip 설치

ONOS 공식 문서는 python-pip 패키지도 설치하라고 되어있으나, Ubuntu 20.04 부터 Python 2버전 사용을 권장하지 않음 (deprecated). 그로 인해 python-pip 패키지는 더 이상 지원하지 않음.

이전 글 (1) Mininet 설치하기를 따라 mininet을 설치한 경우 이 단계는 넘어감.

아래 명령어를 이용하여 python 2 버전용 pip를 설치.

sudo apt -y install curl
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py

1.3 ONOS 빌드에 필요한 Python 패키지 설치

아래 명령어를 이용하여 ONOS 빌드에 사용되는 python 패키지를 설치함.

pip3 install --upgrade pip
pip3 install selenium

1.4 Bazelisk 설치

ONOS 2.2버전부터 Bazel을 이용하여 소스코드를 빌드하기 때문에 JDK를 따로 설치하지 않아도 됨.

ONOS는 JAVA 환경에서 동작하므로 JDK가 필요하나, bazelisk를 이용하여 ONOS를 설치하기 때문에 따로 설치하지 않아도 됨. bazelisk에 JDK가 내장되어 있음.

Bazelisk는 다양한 버전의 Bazel을 관리하기 위한 도구로, Bazel을 직접 설치하는 것 보다 Bazelisk를 통해 설치하는 것을 권장함.

1.4.1 npm 및 node 설치

※ 이미 npm이 설치되어 사용 가능한 경우, 이 단계는 건너뜀.

Bazelisk는 다양한 방법으로 설치가 가능하나, 본 문서에서는 npm을 이용하여 설치하기로 함.

아래 명령어를 이용하여 npm을 설치.

sudo apt -y install npm

아래 명령어를 이용하여 npm을 최신 버전으로 업데이트.

sudo npm install -g npm@latest

1.4.2 Bazelisk 설치

아래 명령어를 이용하여 Bazelisk를 설치

sudo npm install -g @bazel/bazelisk

2. ONOS 소스코드 다운로드

본 문서에서는 이전 글 (1) mininet 설치하기 문서에 구성한 mininet 환경을 이용하므로, 사용자 홈 디렉토리 아래에 sdn 디렉토리가 생성되어 있음. 아래 명령어는 이전 문서에서 생성한 sdn 디렉토리를 생성하는 명령어로, 이미 sdn 디렉토리가 있는 경우 생략함.

cd ~
mkdir sdn

아래 명령어를 이용하여 ONOS 소스코드를 다운받은 뒤, bazel을 이용하여 ONOS를 빌드함.

cd sdn
git clone https://gerrit.onosproject.org/onos

2021년 9월 7일 기준 위 명령어를 실행하면 ONOS 저장소의 master branch를 checkout 함.

현재 master branch의 버전은 2.3.0 버전이며, 아래 명령어를 통해 master branch의 ONOS 버전을 알 수 있음.

현재 빌드한 ONOS의 버전을 알고싶은 경우, 아래 명령어를 입력해서 확인 가능.

head RELEASES.md


# ONOS Release Notes
This documents provides a running log describing high-level features
introduced in each recent ONOS release. Developers are encouraged to describe
their changes to keep the ONOS community up-to-date with the recent developments.

## 2.3 - January 2020
#### Platform
* Upgraded to build via Bazel 1.0 - backported to 2.2 LTS and 1.15 LTS
* Publishing dependencies pom.xml for use by archetypes and 3rd party apps
* Updated 3rd party dependencies

3. ONOS 빌드하기

아래 명령어를 실행하여 ONOS를 빌드한다.

bazel build onos

빌드가 완료되면 아래 화면과 비슷한 결과를 볼 수 있음.

빌드가 제대로 되었다면 아래 화면과 같이 onos 디렉토리에 bazel-bin 링크가 생성되고, 해당 링크를 따라가면 onos.tar.gz 파일이 생성되어있음.

4. ONOS 실행하기

sdn/onos 디렉토리에서 아래 명령어를 실행하여 ONOS를 실행한다.

bazel run onos-local -- clean debug

위 명령어를 수행하면 이전 단계에서 확인할 수 있는 ONOS 빌드 결과물인 onos.tar.gz를 설치하여 ONOS 서버를 백그라운드에서 실행한다.

아래 화면처럼 터미널에는 ONOS (Apache Karaf) 로그 파일을 계속해서 보여준다.

clean 옵션은 ONOS를 새로 설치하는 명령어이며, 이전에 저장된 상태를 모두 제거한다. 또한 debug 옵션은 remote java debugger를 사용할 수 있도록 한다 (기본 포트 5005).

5. ONOS Command Line Interface (CLI) 접속하기

ONOS 서버를 제어하는 방법은 CLI를 이용하는 방법과 GUI (웹페이지)를 이용하는 방법이 있는데, 이 장에서는 CLI를 이용하는 방법을 알아본다.

새 터미널을 열어, 아래 명령어를 실행하여 ONOS CLI에 접속한다.

cd ~/sdn/onos
tools/test/bin/onos localhost

정상적으로 접속 될 경우, 아래 화면과 비슷한 결과물을 볼 수 있음.

CLI에서 사용가능한 명령어는 별도 문서로 작성할 것이다.

6. ONOS Graphical User Interface (GUI) 접속하기

이전 절에서 사용한 CLI보다 더 편리한 GUI 인터페이스를 이용하여 ONOS 서버를 제어하는 방법이 있다.

별도의 프로그램이 아닌 간단히, 웹브라우저를 이용하여 http://localhost:8181/onos/ui 로 접속하면 된다. 아래 화면에서 onos / rocks를 입력하여 로그인한다.

정상적으로 로그인이 되었다면, 아래 화면과 유사한 결과물을 확인할 수 있다.

7. ONOS 명령어 shell에 등록하기

5절, 6절에서 진행한 CUI, GUI를 통해 ONOS 서버 제어하기 위해 매번 tools/test/bin/onos를 입력해야 하는 불편함이 있다.

이를 간략하게 하기 위해 ~/.profile을 수정한다. 해당 파일이 없는 경우 생성한다.

본 문서에서는 아래 명령어를 실행하여, vim 에디터를 사용하여 해당 파일을 수정한다.

vim ~/.profile

이후 실행되는 vim 에디터에서, 파일 끝부분에 아래 두 줄을 입력한 후, 저장한다.

export ONOS_ROOT=~/sdn/onos
source $ONOS_ROOT/tools/dev/bash_profile

정상적으로 적용된 ~/.profile 파일은 아래와 유사한 내용으로 작성되어 있다.

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

export ONOS_ROOT=~/sdn/onos
source $ONOS_ROOT/tools/dev/bash_profile

이후, 아래 명령어를 실행하여 ~/.profile 파일을 적용한다.

source ~/.profile

이후, 아래 명령어를 실행하여 CLI 쉘로 접속한다. 오류 메시지가 나타나지 않으면 정상적으로 적용된 것이다.

onos localhost

Mininet과 연동하는 방법은 다음 글에서 다룰 것이다.