소개
Yocto 프로젝트는 임베디드 Linux 배포판을 만들기 위한 오픈 소스 도구 모음입니다. 한 줄 정의: Yocto는 특정 하드웨어에 맞춘 Linux 이미지를 자동으로 생성하는 빌드 시스템입니다.
이 글의 목표는 Ubuntu 환경에서 Poky(yocto의 reference distribution) morty 브랜치를 사용해 qemux86-64용 최소 Linux 배포판을 만들고, QEMU에서 실행해 확인하는 것입니다.
중요: 예제은 데스크탑(개발) 환경에서 진행합니다. 실제 타깃 하드웨어로 배포하려면 추가 설정 및 보안 조치가 필요합니다.
요구사항 (개발 머신)
- 메모리: 최소 4–6 GB 권장.
- 호스트 운영체제: 최근 Ubuntu (예: 16.04 LTS에서 테스트됨).
- 디스크 여유 공간: 최소 60–80 GB 추천.
- 초기 패키지 설치 전 약 1 GB 정도의 패키지 다운로드가 필요합니다.
- Yocto 레파지토리(Poky)를 클론합니다(본 예제는 morty 안정화 브랜치 사용).
시스템 패키지 업데이트:
apt-get update
필요 패키지 설치(예시):
apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
참고: 위 명령어는 Ubuntu 계열에서 동작합니다. 다른 배포판을 쓰면 패키지 이름이나 설치 명령이 다를 수 있습니다.
Poky 클론 및 빌드 환경 초기화
- Poky 레파지토리 클론(예: morty 브랜치)
git clone -b morty git://git.yoctoproject.org/poky.git
- poky 디렉터리로 이동 후 빌드 환경 스크립트 실행
source oe-init-build-env
이 스크립트는 현재 셸 환경을 설정하고 작업 디렉터리를 build/로 이동시킵니다.
빌드 환경이 준비되면 conf/local.conf와 conf/bblayers.conf 같은 설정 파일이 생성되거나 편집 가능한 상태가 됩니다.
local.conf 핵심 설정
local.conf는 타깃 머신, 다운로드·캐시 경로, 패키지 포맷 등 빌드 동작을 제어합니다. 아래 항목들을 주석 해제하거나 변경하세요.
- 타깃 머신 설정(예: qemux86-64)
아래 예시는 local.conf에 추가하거나 주석 해제하는 주요 변수들입니다.
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR ?= "${TOPDIR}/tmp"
PACKAGE_CLASSES ?= "package_rpm"
SDKMACHINE ?= "i686"
로그인 편의를 위해 루트 계정의 암호를 비워두거나 디버그 옵션을 활성화합니다(개발용).
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
중요: debug-tweaks는 개발 편의를 위해 루트 비밀번호를 비우거나 루트 셸 접근을 허용합니다. 배포 이미지에는 적합하지 않습니다.
빌드: bitbake로 이미지 생성
빌드는 bitbake 도구로 시작합니다. 터미널에서 일반 사용자로 다음을 실행하세요(루트로 실행하면 에러 발생).
bitbake core-image-minimal
주의: 루트 사용자로 실행하면 권한 관련 오류가 발생합니다.
만약 환경이 사라졌다면 다시 초기화 스크립트를 실행하세요.
source oe-init-build-env
bitbake core-image-minimal
빌드 로그는 다음 단계들을 거칩니다: 레시피 파싱 → 네트워크에서 소스 다운로드 → 컴파일 및 패키징. 첫 빌드는 많은 패키지를 내려받고 컴파일하므로 시간(예: 2–3시간)이 걸릴 수 있습니다.
빌드가 완료되면 작업 결과물은 build/tmp/deploy/images/qemux86-64 디렉터리에 생성됩니다.
QEMU에서 이미지 실행
일부 터미널(예: PuTTY)을 통해 원격으로 실행하면 그래픽이나 터미널 특성 때문에 명령이 실패할 수 있습니다. Ubuntu RDP나 로컬 터미널에서 실행하세요.
QEMU가 띄워지면 새로운 Yocto 기반 배포판의 콘솔 창이 열립니다.
로그인 화면(기본: root / 빈 비밀번호)이 보입니다.
로그인 후 날짜, 네트워크(ifconfig), 커널 정보(uname) 같은 기본 명령으로 동작을 확인합니다.
문제 해결(자주 발생하는 이슈와 대처)
- 빌드 중 네트워크 오류: DL_DIR 경로의 다운로드가 손상되면 해당 파일을 삭제하고 다시 시도합니다.
- 권한 문제: bitbake는 일반 사용자로 실행합니다. 루트로 실행하면 작업 디렉터리 권한이 꼬일 수 있습니다. 필요 시 소유권을 복구하세요(예: chown -R).
- 디스크 부족: 빌드는 많은 임시 파일을 생성합니다. TMPDIR, SSTATE_DIR을 큰 디스크로 옮겨 빌드하세요.
- 그래픽/원격 세션 문제: PuTTY 같은 클라이언트에서 qemu의 콘솔 입출력이 제대로 되지 않을 수 있습니다. 로컬 GUI 혹은 RDP, VNC를 사용하세요.
중요: 배포용 이미지에는 debug-tweaks나 빈 루트 비밀번호를 포함하지 마세요.
역할별 체크리스트
개발자:
- Poky 레파지토리와 브랜치 확인
- local.conf에서 타깃, DL_DIR, SSTATE_DIR, TMPDIR 설정
- 최초 빌드 전 패키지 설치 확인
통합(QA/CI) 엔지니어:
- 캐시(SSTATE_DIR) 재사용 전략 계획
- 빌드 제출/자동화 스크립트 작성
- 실패 시 로그 수집·분석 절차 정의
테스트 엔지니어:
- 생성 이미지의 기본 부팅 확인
- 네트워크, 파일시스템 마운트, 셸 접근성 테스트
- 보안 관련 초기 검사(루트 접근, 포트 등)
간단한 플레이북(요약 절차)
- 호스트에 필수 패키지 설치 및 업데이트
- git clone -b morty git://git.yoctoproject.org/poky.git
- source oe-init-build-env
- conf/local.conf 에서 qemux86-64 등 변수 설정
- bitbake core-image-minimal (일반 사용자로 실행)
- build/tmp/deploy/images/qemux86-64/ 아래에서 이미지를 확인
- QEMU로 이미지 실행 및 로그인, 기본 동작 확인
수용 기준 (Критерии приёмки)
- core-image-minimal 빌드가 에러 없이 완료되어 deploy 디렉터리에 이미지가 생성되어야 합니다.
- QEMU에서 이미지가 부팅되어 로그인 프롬프트가 나타나야 합니다.
- 기본 명령(date, uname, ifconfig 등)이 동작해야 합니다.
대안 및 확장
- Toaster나 다른 웹 UI를 사용해 빌드 파이프라인을 관리할 수 있습니다(본 튜토리얼은 CLI 중심).
- Yocto 레이어를 추가해 패키지, 루트 파일 시스템 구성 요소를 확장하세요.
- 다른 타깃(ARM, Raspberry Pi 등)을 설정하려면 MACHINE 변수를 변경하고, 해당 BSP 레이어를 추가합니다.
빠른 체크리스트(안전 점검)
- 호스트에 충분한 디스크 여유(≥60GB)와 메모리(≥4GB)
- 필수 패키지 설치 완료
- Poky morty 브랜치 클론 완료
- conf/local.conf에서 DL_DIR, SSTATE_DIR, TMPDIR 설정
- bitbake를 일반 사용자로 실행
- QEMU에서 부팅 및 로그인 확인
요약
이 가이드는 Ubuntu에서 Yocto(Poky morty)를 이용해 qemux86-64용 최소 Linux 이미지를 빌드하고 QEMU에서 실행하는 전체 절차를 설명했습니다. 핵심은 로컬 설정(local.conf)에서 타깃과 캐시 경로를 정확히 정하고, 일반 사용자로 bitbake를 실행하는 것입니다. 빌드 시간은 네트워크와 하드웨어에 따라 몇 시간 걸릴 수 있으므로 캐시 재사용(SSTATE_DIR)과 DL_DIR 관리를 추천합니다.
요점 정리:
- Yocto는 임베디드 맞춤형 Linux 이미지를 생성합니다.
- 로컬 설정과 캐시 경로가 올바르게 설정되어야 합니다.
- bitbake는 일반 사용자로 실행하고 QEMU에서 부팅을 확인하세요.