티스토리 뷰

하필 Ubuntu에서 ONOS 빌드하고 실행하기를 게시한 바로 다음 날부터 기존 ONOS 빌드에 문제가 생겼다. 2020년 1월 15일부터 Maven Central Repository에서 HTTP의 지원을 종료하고 HTTPS를 사용하도록 변경했는데, 그렇게 변경하기 전의 ONOS는 Bazel이나 Buck으로 빌드할 때 HTTP를 사용하여 Maven Central Repository에 접근하기 때문이다.

따라서 이제는 다음 두 가지 방법 중 하나를 선택하여 ONOS를 빌드해야 한다.

  1. 2020년 1월 15일 이후 업데이트된 ONOS를 빌드한다.
  2. 일부 파일을 직접 수정하여 빌드한다.

2020년 1월 15일 이후의 ONOS 빌드

다음 4가지 중 하나를 선택하여 빌드한다. 이 버전에서는 문제가 발생하지 않는다.

  • 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보다 높은 버전)
  • Maven으로 빌드할 수 있는 버전(권장하지 않음)

일부 파일을 직접 수정하여 빌드

권장하는 방법은 아니지만, 꼭 2020년 1월 15일 이전 버전을 사용해야 한다면 일부 파일을 직접 수정하여 빌드해야 한다.

Bazel로 빌드하는 버전

$ONOS_ROOT/WORKSPACE에서 아래 두 가지를 수정한다.

  • omit_com_google_android_annotations의 값을 False에서 True로 변경
  • omit_com_google_guava_failureaccess의 값을 False에서 True로 변경

$ONOS_ROOT/deps/deps.json에서 아래 내용을 수정한다.

  • http://repo1.maven.org/httphttps로 변경
  • // grpc related jars 부분에 다음 내용 추가
    "com_google_guava_failureaccess": "mvn:com.google.guava:failureaccess:1.0.1",
    "com_google_android_annotations": "mvn:com.google.android:annotations:4.1.1.4",

$ONOS_ROOT/tools/build/onos-lib-gen에서 아래 두 가지를 수정한다.

  • VER=x.x에서 x.x2.2로 변경
  • curl http://repo1.maven.org/maven2/$ARTIFACT > $JAR에서 httphttps로 변경

onos-lib-gen을 실행한다. 이 과정을 거치면 $ONOS_ROOT/tools/build/bazel/generate_workspace.bzl 파일이 변경된다.

$ onos-lib-gen
Downloading onos-libgen-2.2.jar...  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 6761k  100 6761k    0     0   353k      0  0:00:19  0:00:19 --:--:-- 1209k
Done.
aopalliance-repackaged mvn:org.glassfish.hk2.external:aopalliance-repackaged:jar:2.5.0-b42
amqp-client mvn:com.rabbitmq:amqp-client:jar:3.6.1
asm mvn:org.ow2.asm:asm:jar:5.2
...

onos-lib-gen 진행 중 Exception이 발생하면서 실패하면, 해당 버전 브랜치의 deps.json을 참고하여 수정한 뒤 다시 시도한다. 예를 들어, 2.2.0 태그로 checkout한 상태에서 이 과정을 수행하면 io_netty_netty에서 Exception이 발생하는데, onos-2.2 브랜치의 것을 참고하여 $ONOS_ROOT/deps/deps.json에서 다음 내용을 수정하고 다시 onos-lib-gen을 실행하면 정상적으로 진행된다.

  • 231행의 "io_netty_netty": "mvn:io.netty:netty:4.1.35.Final",에서 4.1.353.10.5로 변경

다음과 같이 Finish writing tools/build/bazel/generate_workspace.bzl이라는 메시지와 함께 onos-lib-gen이 정상적으로 끝나면 ONOS를 빌드할 수 있다.

...
Finish writing tools/build/bazel/generate_workspace.bzl
$ onos-build
Starting local Bazel server and connecting to it...
INFO: Analyzed target //:onos (782 packages loaded, 13159 targets configured).
INFO: Found 1 target...
...
INFO: Elapsed time: 682.669s, Critical Path: 226.95s
INFO: 2444 processes: 2116 linux-sandbox, 1 local, 327 worker.
INFO: Build completed successfully, 2472 total actions

Buck으로 빌드하는 버전

다음 두 파일에서 http://repo1.maven.org/httphttps로 변경한다. 버전에 따라서 deps.json에서는 해당 구문이 나타나지 않을 수 있다.

  • $ONOS_ROOT/tools/build/onos-buck
  • $ONOS_ROOT/lib/deps.json

deps.json을 수정하지 않아도 되는 경우(예: 1.13.9 태그)는 그대로 문제 없이 빌드할 수 있다. 이 파일을 수정해야 하는 경우, 다음 절차를 계속 진행한다.

$ONOS_ROOT/tools/build/libgen/src/main/java/org/onosproject/libgen/AetherResolver.java 파일의 CENTRAL_URL의 값에서 httphttps로 변경한다.

onos-lib-gen을 실행한다. cd에서 too many arguments라는 에러 메시지가 출력되면서 중단되면, onos-lib-gen을 다시 시도한다. Buck 업데이트 과정에서 출력된 다른 내용 때문에 발생한 에러이다.

$ onos-lib-gen
aopalliance-repackaged mvn:org.glassfish.hk2.external:aopalliance-repackaged:jar:2.5.0-b32
amqp-client mvn:com.rabbitmq:amqp-client:jar:3.6.1
asm mvn:org.ow2.asm:asm:jar:5.0.4
...

다음과 같이 Finish writing lib/BUCK이라는 메시지와 함께 onos-lib-gen이 정상적으로 끝나면 ONOS를 빌드할 수 있다.

...
Finish writing lib/BUCK
$ onos-build
Not using buckd because NO_BUCKD is set.
[-] PROCESSING BUCK FILES...FINISHED 1.6s [100%] 🐳  New buck daemon
[-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts)
...
댓글
공지사항