SW/Yocto

yocto의 임시 빌드 폴더와 패키지 지원 고찰에 대해 알아볼까요?

얇은생각 2018. 12. 10. 12:00
반응형

빌드 폴더

빌드 폴더는 가장 주용한 정보이자 모든 욕토 프로젝트의 사용자들을 위한 결과물 저장 공간이다주요 폴더는 다음과 같다.


Conf/ downloads/sstate-cache/tmp

 


빌드 폴더 구성

다운로드 : 우선 비트베이크는 소스코드를 다운로드한다. 이단계에서 build/download 폴더 내에 새로운 압축파일을 생성하는 것이 포함된다.

소스 준비 : 소스코드를 모두 다운로드하고 사용하기 위해 준비한다

환경설정  빌드 : 소스코드사용 준비가 되면 빌드를 시작할  있다. 빌드 옵션을 성정하고 빌드를 한다.

설치 : 빌드된 결과물은 적절한 폴더에 설치된다.

Sysroot 복사 : 크로스 컴파일을 하기 위해 공유될 필요가 있는 라이브러리, 헤더,  이외의 파일들은 build/tmp/sysroot 복사가된다.

패키지 생성 : 패키지들은 설치된 콘텐츠 사용, 하위 패키지에서 파일분리, 패키지 생성 단계를 걸쳐 만들어진다.



임시 빌드 폴더 분석

임시 빌드 폴더를 이해하는 것은 중요하다. 임시 빌드 폴더는 빌드가 시작된 직후에 만들어지고 특히 기대하지 않은 행동이  발생했는지 파악하는데 도움이되 떄문에 중요하다.




Work 폴더

Build/tmp/work 폴더는 아키텍처에 따라 분리되어 있다.




Systoot 폴더


변수 D 쓰면 포키는 필요한 파일들을 sysroot 정확한 위치에 복사한다. 헤더를 빠트리거나 링크가 실패된것을 알았을 , 호스트와 타깃의 sysroot 콘텐츠가 정확한지 다시 한번 확인해야 한다.

 

 

지원되는 패키지 포맷 이용

포키 태스크의 주요 목적은 패키지를 만드는 것이다. 다른 태스크들은 빌드된 패키지를 가지고 이미지나 툴체인 같은 다른 결과를 만든다레시피는 비트베이크 실행을 통해 하나 이상의 패키지를 만들  있다. 반면에 이미지나 툴체인은 여러 패키지들의 압축해제와 환경 설정을 통해 만들어 진다.

 


지원 가능한 패키지 포맷

현재 비트베이크는 4개의 서로다른 패키지 포맷을 지원한다.

Rpm

Deb

Ipk

Tar

 


패키지 포맷 선택

패키지 포맷들에 대한 지원은 package_rpm package_deb, package_ipk 같은 클래스에 의해 지원된다. Package_classes 변수를 통해 하나 이상의 포맷을 지정할  있다포키의 기본 설정은 rpm 패키지 포맷이고, 이는 스마트 패키지 매니저를 이용한다. 하지만 프로젝트에 가장 적합한 포맷은 프로젝트의 패키지 포맷에 관한 요구사항, 메모리, 리소스 활용등과같은 이유에 따라 달라진다.

 


패키지 설치 시점의 코드 실행

패키지는 설치와 삭제 과정에서 스크립트를 사용할  있다. 포함된 스크립트는 다음과 같다.

Preinst / postinst / prerm / postrm

 


shared 스테이트 캐시

포키의 디폴트 동작은 비트베이트가 특정 레시피를 빌드할 필요가 없다고 결정하지 않는 이상 모든 것을 첨부터 빌드하는 것이다. 모든 것을 재빌드하는 방법의 장점은 최종 결과가 꺠끗하고 이전 빌드결과를 재사용하면서 오는 불안정성이 없다는 것이다. 하지만 모든 것을 다시 빌드하려면 컴퓨터에 부하를 주고 시간도 많이 걸린다.


포키는 비트베이크가 생성한  모든 정보를 이용하여 태스크들의 스냅샷을 저장하고  패키지로 묶인 캐시 정보를 셰어드 스테이트 캐시라 한다.  캐시들은 sstate_dir 폴더에 저장되고 패키지로 묶인 태스크들의 결과를 포함한다. 비트베이크가 태스크를 실행하려할떄 먼저 일치하는 sstate-cache 패키지가 있는지 확인한다. 패키지가 존재하면 빌드하지 않고 이미 빌드된 패키지를 이용한다.

 


패키지 버전 선택

패키지 버전을 정하는 것은 다른 상태에 있는 같은 패키지를 구분하기 위해서 사용된다. 또한 포키의 관점에서 비트베이크가 태스크를 재빌드해야하는지 정할떄 필요한 체크섬을 생성하는 곳에 사용된다.

 


패키지 피드

이미지와 sdk 사용되는 패키지는 매우 중요한 역할을 한다. 실제로 do_rootfs 로컬 패키지 저장소를 사용해서 패키지를 다운로드 받는다.  저장소는 패키지 피드라고 불린다.


bitbkae-prserv --host <ip> --port <port> --start

 


패키지 피드 사용

패키지 피드를 사용하기 위해서는 다음 두가지가 적용되어야 한다.


패키지에 대해 접근을 제공하는 

서버에 접근해서 패키지를 다운로드   있는 클라이언트


패키지 피드를 제공하기 위해서는 패키지의 인덱스를 만들어야 한다.


$: Bitbake packeage-index

$: Smart update

$: smart install, smart query


제품을 업그레이드 하기 위해 패키지 피드를 사용하는 것은 매우 좋은 해결책이다하지만 신뢰도가 있어야한다예상치 못한 장애를 겪지않기 위해서는 개발 과정에서 매우 주의하고 많은 테스트를 진행해야한다.


반응형