Yocto

Yocto Package Feed (패키지 피드)

chbae 2023. 9. 27. 04:50
728x90

Yocto에서 패키지 피드라고 해서 패키지 저장소를 놓고 바이너리 패키지 (rpm, ipk, deb)를 다운로드할 수 있도록 제공한다. 쉽게 말하면 우분투의 apt-get과 같은 명령어로 패키지를 쉽게 설치할 수 있도록 서버단에서 빌드된 패키지들을 저장소에 올려놓고 클라이언트 (타깃)에서 dnf, opkg 등과 같은 명령어로 패키지를 설치를 의존성 있는 패키지와 함께 설치하도록 도와준다.

 

 

 

위의 강좌에서 Package Feed를 어디서 어떻게 사용하는지에 대해서 간단히 설명했고, 최종 제품을 만들 때 사용하는 것보다는 개발 단계에서만 사용하도록 권장한다. 물론 설정을 잘해서 양산 이미지에도 사용할 수 있겠으나 의존성 관리, 재빌드 등 다양한 문제가 나올 때 대처해야한다.

PR 서비스

깨지지 않는 빌드를 만들기 위해 패키지가 변경될 때마다 PR (Package Revision)을 변경해 줘야한다. 수작업으로 하기에는 거의 불가능해 Yocto에서는 변경될 때마다 자동으로 PR을 올려주는 PR 서비스를 제공한다.

 

build/conf/local.conf 에 설정 (빌드가 하나의 컴퓨터에서 이루어 질 때)

PRSERV_HOST = "localhost:0"

여러 컴퓨터가 공통 패키지 피드를 가지고 작업을 할 때는 $ bitbake-prserv --host <ip> --port <port> --start 를 사용하여 PR 서비스를 실행한다.

패키지 Index 생성

$ bitbake package-index

 

bitbake로 이미지를 빌드하면 rpm, ipk, deb와 같은 패키지가 build/tmp/deploy/rpm 등과 같은 디렉토리에 생성이 되고 이 패키지들의 인덱스를 만들어 주기 위해 위의 명령어를 사용한다.

웹서버 실행

패키지와 패키지 인텍스는 http 같은 서버를 통해 클라이언트 (타깃)에서 접속할 수 있도록 제공을 해주어야 한다. apache 등과 같은 웹서버를 설치하고 패키지가 있는 build/tmp/deploy/rpm등과 같은 디렉토리를 접근할 수 있게 해준다. 이 글에서는 간단헤 python 서버를 사용하는 것을 보여준다.

$ cd build/tmp/deploy/rpm
$ python3 -m http.server 1234

클라이언트 (타깃 설정)

dnf와 같은 도구를 이용할 수 있도록 package-management를 EXTRA_IMAGE_FEATURE 변수에 추가하고 PACKAGE_FEED_URIS 변수를 build/conf/local.conf에 다음과 같이 추가한다.

PACKAGE_FEED_URIS = "http://ip:1234"
EXTRA_IMAGE_FEATURES:append = " package-management"

 

이렇게 하면 타깃에서 dnf 명령어를 사용하여 패키지를 설치할 수 있다.

 

$ dnf install curl

 

https://subscription.packtpub.com/book/iot-&-hardware/9781788399210/1/ch01lvl1sec24/setting-up-a-package-feed  (Embedded Linux Development Using Yocto Project Cookbook - Second Edition 책의 일부) 에 보면 signing rpm 등의 내용들에 대해서도 나와 있으니 필요하면 해보면 좋다.