Yocto 프로젝트에서는 패키지 피드(Package Feed)를 활용하여 다양한 패키지를 관리하고 배포할 수 있다. 패키지 피드란 빌드된 패키지를 호스팅하고 네트워크를 통해 배포할 수 있도록 하는 저장소를 의미한다. 패키지 피드는 보통 IPK, RPM, Deb 포맷을 지원하며, 패키지를 다운로드받고 설치하는 작업을 효율적으로 수행할 수 있다.
패키지 피드를 구성하고 관리하는 일은 Yocto 프로젝트에서 중요한 역할을 하며, 이를 통해 사용자들은 원하는 대상 장치에 필요한 패키지를 쉽게 추가하거나 업데이트할 수 있다. 이 섹션에서는 패키지 피드의 구성 및 관리 방법에 대해 자세히 설명한다.
패키지 피드 구성
- 패키지 저장소 설정:
- 패키지 저장소는 보통 HTTP 서버, FTP 서버 또는 로컬 파일 시스템을 이용해 설정할 수 있다.
- 서버 설정 예제:
sh sudo apt-get install apache2 sudo systemctl start apache2 sudo systemctl enable apache2
-
Yocto 빌드 시스템에서 생성된 패키지를 저장소에 복사:
sh rsync -avz ./build/tmp/deploy/ipk/ /var/www/html/ipk/
-
패키지 인덱스 생성:
- 적절한 패키지 관리 도구를 사용해 패키지 인덱스를 생성해야 한다.
opkg-make-index
는 IPK 패키지에 대해 인덱스를 생성하는 도구이다:sh opkg-make-index -r /var/www/html/ipk > /var/www/html/ipk/Packages
패키지 피드 관리
- 패키지 업데이트:
- 주기적으로 빌드된 패키지를 패키지 피드로 복사하고 인덱스를 업데이트해야 한다.
-
새 패키지를 빌드한 후 다음 명령어로 피드를 동기화할 수 있다:
sh rsync -avz ./build/tmp/deploy/ipk/ /var/www/html/ipk/ opkg-make-index -r /var/www/html/ipk > /var/www/html/ipk/Packages
-
패키지 삭제:
- 더 이상 필요하지 않은 패키지를 삭제하고 인덱스를 갱신해야 한다.
- 패키지를 삭제한 후 다음 명령어로 인덱스를 업데이트한다:
sh rm /var/www/html/ipk/<package-name>.ipk opkg-make-index -r /var/www/html/ipk > /var/www/html/ipk/Packages
패키지 피드를 통한 패키지 설치
- 피드 URL 설정:
- 대상 장치에서 패키지 관리 도구가 패키지 피드 URL을 참조할 수 있도록 설정해야 한다.
-
예를 들어,
opkg
를 사용하는 경우/etc/opkg/opkg.conf
파일에 패키지 피드 URL을 추가한다:sh src/gz all http://<your-server-ip>/ipk
-
패키지 업데이트 및 설치:
- 패키지 데이터를 업데이트한 후, 원하는 패키지를 설치할 수 있다:
sh opkg update opkg install <package-name>
패키지 레시피 작성
Yocto 프로젝트에서 패키지 관리는 주요 기능 중 하나로, 특정 소프트웨어 패키지를 만들기 위한 레시피 재작성이 필수적이다. 패키지 레시피는 주로 .bb
파일로 작성되며, 소프트웨어 패키지의 소스 코드 다운로드부터 빌드, 설치, 패키지화까지의 과정을 정의한다.
주요 레시피 변수
- SRC_URI:
- 소프트웨어의 소스 코드 위치를 지정한다.
-
예:
sh SRC_URI = "http://example.com/software-${PV}.tar.gz"
-
DEPENDS:
- 현재 레시피가 빌드되기 전에 빌드되어야 하는 다른 레시피를 지정한다.
-
예:
sh DEPENDS = "libxyz"
-
do_compile 함수:
- 소스 코드를 컴파일하는 방법을 정의한다. 기본적으로 Yocto는
autotools
라든가cmake
를 사용하여 빌드하지만, 커스텀 빌드가 필요한 경우 직접 함수 내에 빌드 명령어를 작성할 수 있다. -
예:
sh do_compile() { oe_runmake }
-
do_install 함수:
- 컴파일된 소프트웨어를 패키지화할 때 필요한 설치 과정 정의.
- 예:
sh do_install() { install -d ${D}${bindir} install -m 0755 software ${D}${bindir}/software }
예제 레시피
다음은 간단한 예제 패키지 레시피이다:
DESCRIPTION = "Example software"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=<checksum>"
SRC_URI = "http://example.com/software-${PV}.tar.gz"
SRC_URI[md5sum] = "<md5sum>"
SRC_URI[sha256sum] = "<sha256sum>"
S = "${WORKDIR}/software-${PV}"
inherit autotools
do_install() {
install -d ${D}${bindir}
install -m 0755 software ${D}${bindir}/software
}
패키지 관리 도구
패키지 관리 도구는 Yocto 프로젝트에서 패키지를 설치, 삭제 및 업데이트하는 데 사용된다. 대표적인 도구로는 opkg
, rpm
, dpkg
가 있으며, 각 도구는 각각의 패키지 형식을 지원한다.
opkg
- 임베디드 시스템에서 가장 많이 사용되는 경량 패키지 관리 도구.
- 주요 명령어:
sh opkg update # 패키지 목록 업데이트 opkg install <name> # 패키지 설치 opkg remove <name> # 패키지 삭제
RPM
- Red Hat 패키지 매니저로, 주로 대형 리눅스 시스템에서 사용된다.
- 주요 명령어:
sh rpm -i <package.rpm> # 패키지 설치 rpm -e <package> # 패키지 삭제 rpm -U <package.rpm> # 패키지 업데이트
DPKG
- Debian 패키지 매니저로, 주로 Debian 기반 시스템에서 사용된다.
- 주요 명령어:
sh dpkg -i <package.deb> # 패키지 설치 dpkg -r <package> # 패키지 삭제 dpkg -P <package> # 패키지와 설정 파일 삭제
패키지 피드의 구성 및 관리는 Yocto 프로젝트에서 효율적인 소프트웨어 배포를 가능하게 한다. 패키지 레시피의 작성부터 패키지 관리 도구를 통한 설치 및 업데이트까지의 전체 과정을 이해하면, 사용자는 보다 효율적으로 임베디드 시스템 환경을 관리할 수 있다.