티스토리 뷰

여기서는 Ubuntu에서 ONOS를 빌드하고 실행하는 방법을 다룬다.

ONOS 빌드

Dependency 설치

ONOS는 버전에 따라 빌드 도구가 다르다. onos-build로 빌드하면, 1.7까지는 Maven, 1.8부터 1.13까지는 Buck, 1.14부터는 Bazel을 사용하여 빌드한다.

먼저 ONOS를 받아서 빌드하기 위한 dependency를 설치한다.

$ sudo apt-get update
$ sudo apt-get install -y ca-certificates zip python python3 git bzip2 build-essential curl unzip net-tools maven

JDK 설치 및 Java 관련 환경 변수 설정

원하는 JDK 구현체를 선택하여 JDK를 설치한다. Target ONOS 버전이 2.2 이상인 ONOS 애플리케이션을 개발할 때 Java 11을 사용하도록 강제되어 있으므로, ONOS 2.2 이상 버전을 사용하려는 경우 Java 11을 사용하는 것이 좋다. 2.2보다 낮은 버전을 사용하려는 경우 Java 8을 사용해야 한다.

이 예제에서는 apt-get으로 OpenJDK 11을 설치한다. java -versionjavac -version 실행 시 나타나는 메시지는 구현체와 버전에 따라 다를 수 있다. 패키지 관리자 없이 직접 설치했다면 환경 변수 설정 없이 javajavac 실행 시 "command not found" 같은 메시지가 나올 것이다.

$ sudo apt-get install -y openjdk-11-jdk
$ java -version
openjdk version "11.0.5" 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04, mixed mode)
$ javac -version
javac 11.0.5

이제 Java 관련 환경 변수를 설정한다. 먼저, 다음과 같이 JDK가 설치된 위치를 찾는다.

$ which -a javac
/usr/bin/javac
$ readlink -f /usr/bin/javac
/usr/lib/jvm/java-11-openjdk-amd64/bin/javac

이제 Java 관련 환경 변수를 설정한다. ~/.bashrc를 텍스트 에디터로 열어서, 맨 아래에 다음과 같은 내용을 추가한다. JAVA_HOME에는 아까 찾은 javac의 위치에서 /bin/javac를 제외한 앞부분만을 넣는다. 예제와 다른 JDK 구현체를 설치했다면 JAVA_HOME의 내용이 아래와 다르게 설정될 것이다.

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH="$JAVA_HOME/bin:${PATH}"

터미널 창을 다시 열거나 source ~/.bashrc를 실행하여 설정을 적용한다.

ONOS Git 저장소 Clone 및 빌드할 버전 선택

먼저 ONOS git 저장소를 clone한다. 이 예제에서는 홈 디렉터리(~)에서 진행한다.

$ git clone https://gerrit.onosproject.org/onos

Clone이 완료되면 git checkout으로 빌드할 ONOS 버전을 선택한다. 간혹 태깅된 버전인데도(예: 1.7.1) 빌드가 잘 안 될 수 있다. 그런 경우에는 다른 태그를 선택하거나, 아예 태그(1.7.1) 말고 브랜치(onos-1.7)를 선택한다. 이 예제에서는 2.3.0-rc2 태그로 checkout하여 2.3.0-rc2 버전을 선택한다.

[2020-01-20 덧붙이는 글] 2020년 1월 15일부터 Maven Central Repository에서 HTTP의 지원을 종료하고 HTTPS를 사용하도록 변경했기 때문에, Bazel이나 Buck으로 빌드하는 대부분의 ONOS 버전에서 "501 HTTPS Required"라는 메시지가 나타나면서 빌드에 실패한다. 아래 목록은 이 문제를 해결한 버전이며, 그 외의 버전을 사용해야 하는 경우를 위해서, "501 HTTPS Required 에러 없이 ONOS 빌드하기"에 빌드 방법을 기술해 두었다.

  • 2.3.0-rc2 태그 또는 그 이후 버전
  • 2.2.1-b4 태그 또는 그 이후 버전
  • onos-1.15 브랜치의 2020년 1월 15일 이후 버전(1.15.0보다 높은 버전)
  • 1.13.10-rc2 태그 또는 그 이후 버전
  • onos-1.12 브랜치의 2020년 1월 15일 이후 버전(1.12.2-rc2보다 높은 버전)
$ cd onos
$ git checkout 2.3.0-rc2

ONOS 관련 환경 변수 설정

~/.bashrc를 텍스트 에디터로 열어서 파일의 마지막에 아래 내용을 추가한다. 이 예제에서는 홈 디렉터리(~)에서 ONOS git 저장소를 clone했으므로 ONOS_ROOT~/onos로 설정했다.

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

터미널 창을 다시 열거나 source ~/.bashrc를 실행하여 설정을 적용한다. 이후에 ONOS를 다른 버전으로 checkout하면 터미널 창을 다시 열거나 같은 명령어를 실행하여 ~/.bashrc를 다시 적용해야 한다.

ONOS 버전별 빌드 환경 구성

이제 빌드하려는 버전에 맞게 환경을 구성한다.

Bazel로 ONOS 1.14 이후 버전 빌드 환경 구성

Bazel로 ONOS 1.14 이후 버전을 빌드하려면 먼저 Bazel을 설치해야 한다. ONOS 루트 디렉터리의 Dockerfile 파일의 BAZEL_VER 값을 확인한다. 이 예제에서 설치하는 ONOS 2.3.0-rc2는 Bazel 1.0.0을 사용한다.

$ cat $ONOS_ROOT/Dockerfile | grep BAZEL_VER
ARG BAZEL_VER=1.0.0
ARG BAZEL_VER
RUN curl -L -o bazel.sh https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VER}/bazel-${BAZEL_VER}-installer-linux-x86_64.sh

Dockerfile에 명시된 Bazel 버전에 맞게 다음과 같이 Bazel을 설치한다. 이 예제에서는 1.0.0 버전을 설치한다. curl로 받은 bazel.sh를 실행할 때 옵션을 줄 수 있는데, 여기서는 --user 옵션을 주어 ~/bin에 설치한다.

$ export BAZEL_VER=1.0.0
$ curl -L -o bazel.sh https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VER}/bazel-${BAZEL_VER}-installer-linux-x86_64.sh
$ chmod +x bazel.sh
$ ./bazel.sh --user
Bazel installer
---------------

...

Bazel is now installed!

Make sure you have "/home/username/bin" in your path. You can also activate bash
completion by adding the following line to your :
  source /home/username/.bazel/bin/bazel-complete.bash

See http://bazel.build/docs/getting-started.html to start a new project!

이제 ~/.bashrc 파일을 열어서 다음 내용을 추가하고, 터미널 창을 다시 열거나 source ~/.bashrc를 실행하여 설정을 적용한다.

export PATH="$PATH:$HOME/bin"

Buck으로 ONOS 1.8-1.13 버전 빌드 환경 구성

추가적인 환경 구성 없이 바로 빌드 가능하다.

Maven으로 ONOS 1.7 이하 버전 빌드 환경 구성

ONOS 1.7 이하 버전의 ONOS를 실행하려면 Maven과 Karaf가 필요하다. Maven은 앞서 설치했으므로, 다음과 같이 Karaf를 설치한다. source $ONOS_ROOT/tools/dev/bash_profile이 적용된 상태여야 한다.

$ cd ~
$ mkdir Applications Downloads
$ cd Downloads
$ wget http://archive.apache.org/dist/karaf/${KARAF_VERSION}/apache-karaf-${KARAF_VERSION}.tar.gz
$ tar zxvf apache-karaf-${KARAF_VERSION}.tar.gz -C ~/Applications

~/Downloadsapache-karaf-x.x.x.tar.gz 파일은 삭제하지 않도록 주의한다. 이 파일은 ONOS를 실행할 때마다 쓰인다.

onos-build로 ONOS 빌드

ONOS 모든 버전에서 onos-build로 ONOS 빌드가 가능하다. $ONOS_ROOT/tools/dev/bash_profile에 등록된 alias ob로 테스트를 포함하여 빌드를 진행할 수 있다. 필요한 경우 인터넷을 통해 dependency를 다운로드하므로 인터넷에 연결되어 있어야 한다.

$ cd $ONOS_ROOT
$ onos-build

[2020-01-20 덧붙이는 글] 이 과정에서 "501 HTTPS Required"라는 메시지가 나타나면서 빌드에 실패하는 경우, "501 HTTPS Required 에러 없이 ONOS 빌드하기"를 참고하여 해결할 수 있다.


ONOS 실행

ONOS 모든 버전에서 ok clean으로 ONOS를 실행할 수 있다. ONOS를 실행하면, Karaf를 별도로 설치하는 1.7 이하 버전에서는 ONOS CLI가 나타나고, 1.8 이상 버전에서는 로그가 나타난다.

$ ok clean

ONOS CLI 열기

ONOS의 bash_profile을 사용할 수 있는 환경에서 ONOS CLI를 열려면 onos <IP>를 실행한다. 예를 들어, localhost의 ONOS CLI를 다음과 같이 열 수 있다.

$ onos localhost

그 외 환경(특히 외부)에서 ONOS CLI를 열려면 ssh를 이용한다. ONOS CLI는 8101 포트로 접근할 수 있다. ONOS의 기본 username과 password는 onos/rocks 또는 karaf/karaf이다.

$ ssh -p 8101 onos@172.17.0.2
The authenticity of host '[172.17.0.2]:8101 ([172.17.0.2]:8101)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[172.17.0.2]:8101' (RSA) to the list of known hosts.
Password authentication
Password:
Welcome to Open Network Operating System (ONOS)!
     ____  _  ______  ____
    / __ \/ |/ / __ \/ __/
   / /_/ /    / /_/ /\ \
   \____/_/|_/\____/___/

Documentation: wiki.onosproject.org
Tutorials:     tutorials.onosproject.org
Mailing lists: lists.onosproject.org

Come help out! Find out how at: contribute.onosproject.org

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'logout' to exit ONOS session.

onos@root >

ONOS GUI 열기

ONOS에서는 웹 GUI를 8181 포트로 제공한다. 웹 브라우저에서 <ONOS_IP>:8181/onos/ui/로 접근할 수 있다. 예를 들어, localhost의 ONOS GUI는 localhost:8181/onos/ui/로 접근할 수 있다.

아래와 같이 로그인 화면이 나타나면 기본적으로는 onos/rocks 또는 karaf/karaf로 로그인할 수 있다.

ONOS GUI 로그인 화면

로그인에 성공하면 아래와 같은 화면이 나타난다.

ONOS GUI 로그인 직후 화면

ONOS Web GUI에 대해 더 자세한 내용은 ONOS Wiki의 The ONOS Web GUI 문서에서 확인할 수 있다.

ONOS 로그 확인 및 필터링

다른 터미널 창에 로그를 띄우려면 onos-local-log를 실행한다.

$ onos-local-log

파이프라인과 grep을 이용하여 특정 레벨이나 애플리케이션만의 로그를 확인할 수 있다.

$ onos-local-log | egrep -e "WARN" -e "org\.onosproject\.fwd"

출력하는 로그의 레벨을 변경하려면 ONOS CLI에서 log:set 명령어를 사용한다.

onos@root > log:set DEBUG

로그가 어떤 레벨로 출력되고 있는지 확인하려면 ONOS CLI에서 log:get 명령어를 사용한다.

onos@root > log.get
Logger                  │ Level
────────────────────────┼──────
ROOT                    │ INFO
audit                   │ TRACE
karafAudit              │ TRACE
org.apache.aries.spifly │ WARN
org.apache.sshd         │ INFO
securityAudit           │ TRACE
댓글
공지사항