do{학습}while

YOCTO) Source를 fetch하는 방식 본문

YOCTO

YOCTO) Source를 fetch하는 방식

하이오야이 2025. 3. 23. 18:53

Yocto에서 소스 코드를 어디에서 가져와서(fetch), 어떻게 패치하고 사용하는지는 실무에서 반드시 이해해야 할 내용이야.


✅ 1. Source Mirror (소스 미러)

💡 개념

: 이미 누군가 다운로드해둔 소스 코드 파일을 로컬 또는 내부 서버에서 가져오는 방식.

DL_DIR ?= "/path/to/shared/downloads"
PREMIRRORS += " \ http://.*/.* file:///mnt/mirror/downloads/ \n \ "

📦 예시

  • file:///mnt/nfs/downloads/
  • http://yocto.local/mirror/

✅ 장점

  • 네트워크 의존성 없음 → 속도 빠름
  • 사내 보안 유지 가능

🔧 용도

  • 사내 빌드 서버에서 외부 접속 없이 빌드하고 싶을 때
  • 여러 팀이 공용 다운로드 캐시를 쓸 때

✅ 2. Upstream Project Releases (업스트림 릴리즈)

💡 개념

: 공식 릴리즈 서버에서 .tar.gz, .zip 같은 정식 릴리즈 버전 소스 코드를 받아오는 방식

SRC_URI = "https://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz"

📦 예시

  • GNU, kernel.org, SourceForge, GitHub Release 페이지 등

✅ 장점

  • 안정적이고 검증된 버전 사용
  • 공식 배포 URL이기 때문에 패치 부담 적음

🔧 용도

  • BusyBox, bash, libpng 등 정식 릴리즈 버전이 존재하는 패키지

✅ 3. Local Projects (로컬 프로젝트)

💡 개념

: 이미 로컬 PC에 있는 소스를 file:// 형태로 직접 레시피에 포함시키는 방식

SRC_URI = "file://mydriver.c file://Makefile"

또는

SRC_URI = "file://myapp.tar.gz"

✅ 장점

  • 인터넷 없이 빌드 가능
  • 커스터마이징된 사내 코드 반영 가능

🔧 용도

  • 사내 프로젝트, 드라이버, 자체 개발 앱 등
  • POC 개발 시에도 편리

✅ 4. SCMs (소스 컨트롤 시스템, Git 등)

💡 개념

: Git, SVN, Mercurial 등 버전 관리 시스템에서 소스를 fetch

SRC_URI = "git://github.com/example/project.git;branch=main;protocol=https"
SRCREV = "e3cabc1d..." # 특정 커밋 고정

✅ 장점

  • 최신 개발 버전 사용 가능
  • 특정 브랜치/커밋으로 고정 가능 → 재현성 보장

🔧 용도

  • 개발 중인 오픈소스 라이브러리
  • 사내 GitLab 저장소 활용 시

✨ 요약 비교

방식URL 예시장점주 용도
Source Mirror file:///mnt/mirror/ 빠름, 내부망 캐시 공유
Upstream Release https://ftp.gnu.org/... 안정, 공개 공식 릴리즈
Local Project file://myapp.c 간단, 오프라인 사내 코드
SCM (Git 등) git://github.com/... 유연, 브랜치 가능 개발중 코드

🧠 실무 팁

  • 사내에서는 1 + 3 + 4 조합을 자주 써
  • SRC_URI로 여러 파일, 여러 위치를 혼합해서 사용 가능
  • Git을 쓰는 경우 SRCREV 고정으로 재현 가능한 빌드를 만드는 게 중요