ORAN SC project는 다른 일반적인 opensource project들과 달리, 전 세계의 주요 통신 벤더 기업들이 참여하여 협약을 맺고, 표준을 논의하며 code를 개발하는 복잡한 단계를 거친다. 따라서, code를 개발하기 위한 과정도 상당히 복잡하다. 또한, O-RAN SC는 gerrit으로 유지되어 gerrit의 code를 github로 미러링하는 방식을 쓰고 있다. 대부분의 B2B 회사가 쓰는 방식과 동일하다고 생각하면 된다.
먼저 O-RAN SC에 참가하기 위해서는 다음의 confluence에서 준비를 해야한다.
https://wiki.o-ran-sc.org/display/ORAN/Tutorial%3A+Making+code+contributions+to+O-RAN+open+source+project
하나하나 다 읽으면서 차근차근해보면 되지만...
과부하
사실 좀 복잡하다. 필자도 하나하나 하면서 어찌저찌 설정되기는 했지만, 다시 처음부터하라고 하면 잘 모르겠다. 그래서 정리는 했지만, 이게 정말 빠짐없이 했는 지는 모르므로 생략한 것이 있다면 부디 코멘트 부탁드립니다...
O-RAN SC 기여는 4단계로 구성된다.
ssh 설정을 자세히 설명하면 다음과 같다.
ssh-keygen -t rsa -C "robot@gmail.com"
linux foundation에 가입할 때의 email을 쓰자, robot@gamil.com
로 -C
옵션 부분을 써주면 된다. 참고로, 이 과정은 email 하나 당 한 번씩 해야한다. 가령 robot@gmail.com
으로 한 번 해줬다가, 나중에 robot@github.com
으로 해주고 싶다면 또 한 번 이 과정을 거치면 된다.
ssh-keygen -t rsa -C "robot@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gyu/.ssh/id_rsa): /tmp/testkey
실제 실행해보면 맨 처음부터 어디에 어떤 이름으로 저장할 지를 물어본다. 예제에서 /tmp/testkey
로 쓰고 있다. 이후에는 이러쿵 저러쿵들이 나오는데 그냥 엔터하면 된다.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /tmp/testkey
Your public key has been saved in /tmp/testkey.pub
The key fingerprint is:
...
+---[RSA 3072]----+
| |
...
| ..=.+++=.+|
| .o. . **+=|
+----[SHA256]-----+
이렇게 나왔다면 성공한 것이다. 다음으로 /tmp/
에 들어가서 정말 testkey
들이 만들어졌나 확인하면 된다. public key와 private key 두 개가 만들어져야 성공이다.
ls /tmp/testkey*
/tmp/testkey /tmp/testkey.pub
다음과 같이 나오면 성공이다. 참고로 testkey
는 private key file이고, testkey.pub
은 public key file이다. 유출되면 안되니 조심히 사용하자.
eval $(ssh-agent)
ssh-agent
를 실행하도록 하자. Agent pid ...
이렇게 나오면 성공이다.
ssh-add /tmp/testkey
Identity added: /tmp/testkey (robot@gmail.com)
다음으로 ssh-add
를 통해서 우리의 private key를 등록하도록 하자.
이제 O-RAN gerrit으로 달려가, 맨 오른쪽 위 자신의 계정을 우르고 Setting
패널에 들어가, public key를 등록시켜주도록 하자. https://gerrit.o-ran-sc.org/
여기에 New SSH Key
부분에 자신의 계정 public key를 넣어주면 된다.
cat /tmp/testkey.pub
ssh-rsa AAAAB3NzaC1...robot@gmail.com
이렇게 나온 값을 New SSH key
에 넣어주면 된다. 참고로 마지막 email은 개인이 맨처음에 ssh key pair를 만들 때 설정한 email이어야 한다.
다음과 같이 붙여주고 ADD NEW SSH KEY
를 눌러주면, 위의 Comment
부분에 ssh pair를 만들었던 email이 등록될 것이다.
등록을 완료하였다면, 이제 local PC으로 O-RAN gerrit에 ssh로 접근이 가능한 지 확인해보도록 하자.
ssh -p 29418 <Username>@gerrit.o-ran-sc.org
Username
부분은 gerrit Setting
에서 Username
으로 있을 것이다.
성공하면 다음과 같이 환영 문자가 나온다.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[gerrit.o-ran-sc.org]:29418,[34.215.66.175]:29418' (ECDSA) to the list of known hosts.
**** Welcome to Gerrit Code Review ****
Hi XXXX, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://testaccount@gerrit.o-ran-sc.org:29418/REPOSITORY_NAME.git
Connection to gerrit.o-ran-sc.org closed by remote host.
Connection to gerrit.o-ran-sc.org closed.
하핫 이제 끝인가!
아직 한 발 더 남았다. 그것은 CLA이다.
'CLA'는 'Contributor License Agreement'로 Linux Foundation process이다. O-RAN SC에서는 Apache license와 O-RAN license에 대한 CLA를 채택하고 있다. 사실 별거없다. 오픈소스에 참여하기 전에 하나의 서약을 하는 것인데, 기여한 코드를 자유로이 쓰되, 라이센스를 지켜야한다는 정도이다. 사실상 우리가 은행 가입할 때 문서가 더 어렵다
CLA를 발급받기 위해서는 O-RAN SC gerrit의 Setting
에서 아래로 쭉 내려가면 CLA 카테고리가 있다.
여기서 New Contributor Agreement
를 실행하면 된다. 참고로 필자는 이미 ICLA
CLA을 발급받아서 위와 같이 있다.
해당 버튼을 누르면 다음과 같이 어떤 걸로 CLA를 발급 받을 지 나올 것이다. 우리는 spec에 대한 논의가 아니라 코드 기여이기 때문에 O_RAN-SC
로 해야한다. 이중에 CCLA
는 회사 계정으로 지원하는 것이기 때문에 개인이 지원할 때는 ICLA
로 선택하도록 한다. 따라서 ICLA - O-RAN Software Community (ORAN-SC)
로 설정하자.
클릭을 하면 Please review the agreement.
이 나올텐데 클릭하여 설정들을 해주면 된다.
나머지 내용들에 대해서는 법적인 내용들이 있기 때문에 스크린샷으로 설명하기가 곤란하다. 단지 이메일에 회사 이메일 말고 개인 이메일을 써도 된다는 점만 참고해두기로 하자.
CLA를 신청해도 바로 approve가 나지 않을 수 있다. 필자의 경우는 무식하게 5번은 넘게 CLA을 재생성하여 요청했다. 더 좋은 방법은 담당자들에게 메일을 보내는 것이다.
CLA가 발급되지 않으면 code를 넣을 수 없으니 참고하도록 하자.
gerrit 역시도 git의 명령어를 동일하게 쓸 수 있다. 단지, gerrit plugin으로 git-review
를 사용한다는 점만 빼면 말이다.
sudo apt-get install git
sudo apt-get install git-review
다음과 같이 git
과 gerrit plugin인 git-review
를 설치하도록 하자.
이후에는 git config
를 이용하여 계정을 설정하도록 하자. 이때 주의할 것은 gerrit에 가입한 이메일로 설정하도록 하자. 그래야 우리가 위에서 설정한 ssh pair에 의해서 ssh접근에 성공한다. 위에서 robot@gmail.com
으로 ssh pair를 설정했으니, robot@gmail.com
로 썼다.
git config --global user.email "robot@gmail.com"
git config --global user.name "robot"
user.name
로 gerrit에 있는 Username
으로 설정해주면 된다.
잘 설정되었나 확인하고 싶다면 cat ~/.gitconfig
를 해보면 된다.
git이 잘 설정되었다면, O-RAN gerrit에 있는 repository를 clone해보도록 하자.
BROWSE tab에 가서 Repositories
로 들어가자
aimlfw-dep
이라고 검색하면 다음의 repository가 나올 것이다.
단, 여기서 반드시 Clone with commit-msg hook
으로 써져있는 것으로 clone하도록 하자. commit-msg hook이 없는 상태로 clone하면, 아래에 git commit
시에 Change-Id
가 안나온다. Change-Id
는 O-RAN opensource 전체에서 사용하는 하나의 hash value로 commit과 함께 사용되는 것으로 생각하면 된다.
download category가 있을텐데, ssh
로 바꾸어 git clone을 실행시켜주도록 하자. 만약 성공하면 문제없이 설정들이 완료된 것이고, 문제가 발생한다면 위의 ssh pair 설정부터 차근차근 다시해야한다. 참고로 CLA와는 상관없다. CLA는 code submit할 때만 문제가 생길 것이다.
먼저 기여할 부분이 있다면, O-RAN SC AIML Jira에 가서 issue를 만들어내도록 하자. https://jira.o-ran-sc.org/projects/AIMLFW/issues
가령 필자의 경우는 modelmgmtservice
의 image가 너무 커서 issue를 올리고 개선 사항에 대해서 글을 썻다.
https://jira.o-ran-sc.org/projects/AIMLFW/issues/AIMLFW-116
글의 형식은 남들 꺼를 보고 배끼면 된다.
issue를 만들었다면 다음으로 repository에 code를 변경하고 git을 통해 gerrit에 review를 올려주면 된다.
cd ~/oran/modelmgmtservice/
git review -s
git review -s
를 사용하여 O-RAN SC repo와 ssh 연결이 되는 지 확인할 수 있다. 더불어 계정 연동을 해당 repo에 시켜준다. 반드시 -s 를 써주어야 한다. 안그러면 그냥 commit된 code가 올라갈 수도 있다.
code 변경: code를 변경하되 조금만 바꾸도록 하자. gerrit은 issue가 되는 부분만 조금씩 넣는 것이 좋다.
git status
git status
를 통해서 무엇이 바뀌었는 지 확인할 수 있다. 아래에 modified
를 보면 필자가 Dockerfile
만 바꾼 것을 볼 수 있다.
git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: Dockerfile
no changes added to commit (use "git add" and/or "git commit -a")
git add .
쓰지말고 하나하나 file들을 git add
하도록 하자. 만약 file이 n개라면 n번 add해주면 된다.git add ./Dockerfile
-s
로 sign을 하는 것이다. 추가로 글들을 쓸 수 있는데, 그냥 안쓰고 terminal을 나오도록 하자. git commit -s
[master f9a90f6] Change-Id: I999675919d549bbe90d47f91967.... Signed-off-by: gyuyoung <gyoue200125@gmail.com>
Issue-ID
부분은 jira에 등록된 ID와 동일하게 적도록 하자.Author: gyuyoung <gyoue200125@gmail.com>
Date: Mon Jul 29 22:36:38 2024 +0900
Reduce image size of modelmgmtservice
- Updated stage1 to build modelmgmtservice golang binary
- Added stage2 to run modelmgmtservice golang binary with compact
environment
Issue-ID: AIMLFW-116
Change-Id: Idce95bef25c4505f0edb0a810bfebdc96b89283a
Signed-off-by: gyuyoung <gyoue200125@gmail.com>
Author
, Change-Id
모두 확인하도록 하자, Change-Id
가 만약 다른 이들과 동일하면 문제가 발생한 것이다. 이 경우는 대부분 최신 code를 pull하지 않았거나, commit이 엉켰거나 하는 경우이다. 이때에는 과감하게 git revert HEAD^
를 통해서 자신의 commit을 지우고 처음부터 만들도록 하자. 아니면, git revert
로 특정 file들만 지우거나 하면 된다.
git review
remote:
remote: Processing changes: refs: 1, new: 1
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: https://gerrit.o-ran-sc.org/r/c/aiml-fw/awmf/modelmgmtservice/+/13217 Reduce image size of modelmgmtservice [NEW]
remote:
To ssh://gerrit.o-ran-sc.org:29418/aiml-fw/awmf/modelmgmtservice
* [new reference] HEAD -> refs/for/master
review... 해주겠지...?