Yocto

Yocto 소스 코드 MIRROR를에 AWS S3와 연결

chbae 2024. 8. 15. 04:01
728x90

앞의 글 (https://yocto.tistory.com/315)에서 Yocto의 MIRROR에 대해서 설명했고 이를 설정할 수 있는 AWS EFS와 S3에 대해서 간단히 설명했다. 이제 실제로 AWS S3에 MIRROR를 어떻게 설정하고 테스트하는 것에 대해서 적어보고자 한다.

 

PREMIRROR를 구성할 때 AWS S3가 EFS에 비해 좋은 점은 엄청난 비용 절감 및 같은 AWS 리전 내이면 네트워크 비용이 없고 속도가 빠르다는 장점이 있다. 솔직히 Yocto에서 S3를 지원하기 때문에 간단한 설정만으로도 사용할 수 있어 표준을 지원하지 않는 다는 단점은 없는 것 같다.

GPT-4o로 그려본 아키텍처

 

이제 본격적으로 AWS S3를 사용하여 MIRROR 서버를 구축하는 방법을 알아보자. 사전에 AWS S3에 들어가서 chanbae라는 이름의 S3 bucket 하나를 생성해 놓고 그곳에 소스파일 tarball을 넣어서 구성할 예정이다. 단, S3 bucket을 만드는 것 및 보안 설정은 버튼 클릭 몇번으로 가능하기 때문에 여기서 설명하지 않는다.

MIRROR 서버에 올린 데이터 생성 및 업로드

Yocto에서 BB_GENERATE_MIRROR_TARBALLS = "1"local.conf 설정에 추가하여 빌드하면 모든 소스코드가 tarball로 압축되어 DL_DIR에서 지정한 폴더에 쌓이게 된다. DL_DIR의 기본 값은 build/tmp/downloads 이다. 여기서 아래 명령어로 aws cli를 설치한 후 aws 명령어로 S3 버킷에 데이터를 올린다.

$ sudo apt-get install awscli
build/tmp/downloads $ aws s3 cp [다운로드 디렉토리] s3://chanbae/ --recursive --exclude "*.done"

 

이때 patch 파일 및 .git2 디렉토리 밑에 있는 쓸데없는 파일도 올라간다. find 명령어와 결합해서 하나로 만드는 방법은 추후에 댓글로 올리기로 하고, 여기서는 S3 버킷에 가서 필요 없기 때문에 우선 지운다.

S3 MIRROR 서버 설정

S3에 있는 소스코드를 다운로드 받을 수 있게 local.conf에 다음 두 줄을 추가한다.

SOURCE_MIRROR_URL = "s3://chanbae/"
INHERIT += "own-mirrors"

 

이걸로 끝이다. 그렇게 되면 이전 글에서 설명한 것처럼 DL_DIR -> PREMIRRORS -> SOURCE_MIRROR_URL -> SRC_URI (원본) -> MIRRORS에 있는 순서대로 소스가 받아진다. 처음부터 시작했으면 DL_DIR과 PREMIRROS에 아무것도 없고 SOURCE_MIRROR_URL 에 s3 주소가 할당되어 있어 S3 bucket에서 받게 된다.

테스트

테스트는 bitbake [이미지 이름] --runall=fetch로 하면 소스만 다운로드 받아지기 때문에 buildstat에서 fetch 시간이나 -DDD 옵션을 주고 로그를 조금 더 자세히 살펴보면 된다. 아직 -DDD 옵션을 주고 로그까지는 확인을 안해봤지만 이부분도 추후 확인하고 올릴 예정이다.

 

현재 회사에서 EFS에서 S3로 바꾸는 작업을 하고 있다. 이러면 엄청난 비용 절감과 안정된 빌드 두마리 토끼를 다 잡을 수 있을 것으로 기대한다. 마지막 테스트로 대규모 프로젝트에 부하를 주어 견딜 수 있는지 보는 것이 남아있다. Shared State Cache와 함께 사용할 것이므로 큰 문제가 없을 것으로 판단된다.