Yocto dunfell (3.1)이 릴리스되기 전까지 Yocto는 기본적으로 6개월 주기의 릴리스 과정을 거치고 새로운 버전이 릴리스되면 이전버전의 유지보수를 멈추었다. 하지만 많은 요구사항 중에 하나는 Kernel과 같이 LTS (Long Term Support)를 해달라는 것이였고 Board 미팅에서 지원하기로 결정했다. 그 시작은 Yocto dunfell (3.1)부터였고 2년간 유지보수를 하기로 결정하였다.
하지만 2년이 지나서도 커뮤니티 및 보드 멤버 회사에서 추가적인 유지보수를 요구하였고 dunfell은 4년 동안 유지보수를 하기로 결정하였다. 그리고 그 다음 LTS 버전은 kirkstone (4.0)이고 이미 릴리스가 되어 있다.
현재 프로젝트는 dunfell을 사용하고 있고 필자의 동료가 kirkstone으로 업그레이드 하려고 열심히 작업중에 있다. 사실 처음에 다른 동료가 맡아서 하던 것이 일이 진척이 잘 안되자 문제를 파악하고 거의 처음부터 작업하다시피 해서 지금까지 왔다. 현재도 dunfell 에 있는 리눅스 수준의 품질에는 한참 못미쳐 개발팀을 push하고 있다.
Yocto 업그레이드 진행 과정
- SoC 업체에 컨텍해 BSP 레이어를 kirkstone과 호환되도록 요청하였다. 다행이 이번엔 큰 변화 없이 오버라이드 문법 변경 정도만으로 빌드가 가능했다. 물론 자잘한 이슈가 있지만 크진 않았다.
- 그 위에 poky, meta-openembeddd 등 다른 yocto 레이어를 최신 kirkstone으로 변경하여 빌드한다.
- 동시에 자사의 meta layer를 현재 그대로 올려 빌드한다.
- 이번에 오버라이드 문법 변경이 있어 모두 kirkstone에 맞도록 변경했다. 다행히 dunfell에서 새로운 문법을 동시에 지원하여 추후 신규 변경사항에 대한 cherry-pick을 쉽게 하기 위해 dunfell도 모두 신규 문법에 맞게 변경하였다.
- 현 상태로 빌드에러가 나오는 것들을 수정하고 너무 큰 컴포넌트들은 개발팀에 요청하였다.
- 바이너리로 제공되는 컴포넌트는 SDK를 빌드하여 각 개발팀(주로 Supplier)에 요청하여 다시 받았다.
- 빌드가 되면 실제 타깃에 넣고 런타임 테스트를 진행하고 이슈가 있으면 각 개발팀에 할당을 한다.
- 어느정도 안정화가 됬다 싶으면 최종 테스트를 요청하고 mainline을 dunfell에서 kirkstone으로 변경한다.
위의 과정은 간단하게 적은 것이지 작업은 실로 엄청난다. 6개월 이상 걸리고 있고 각 개발팀도 SOP (Start of Production)으로 정신이 없어 잘 도와주지도 않고 심지어 Supplier과 소통하기도 정말 어렵다. 다행히 Head 레벨에서 지원을 해줘서 그나마 수월하게 소통을 하고 우선순위를 높여 개발팀에 이슈를 할당하였다.
현재 가장큰 문제는 vsomeip.. 이전에 업그레이드 할때 boost버전을 올리지 못한 이유중에 하나였고 지금도 이것 때문에 많은 논의를 거쳐 최신 버전으로 업그레이드를 하고 있다. 여기서 얻은 교훈은 업그레이드 할 수 있을 때 다같이 하자이다.
빌드 후 mainline에 넣기 전 까지 유지 보수
빌드를 한 후 kirkstone branch를 만들고 공식적으로 mainline을 변경하기 전까지 계속 유지보수를 해야한다. 즉 dunfell에 들어가는 내용을 지속적으로 cherry-pick을 해와야하고 매일 테스트도 해서 regression이 나는지 등을 확인해야한다. 또한 바이너리가 업데이트 되었으면 kirkstone용으로도 새로 받아야 한다. 이것도 만만치 않다.
정리
Yocto 업그레이드를 쉽게하기위해 yocto master를 지원하도록 branch를 하나 더 만들어 동시에 관리도 해봤으나 리소스 등의 이슈로 접었고 결국은 2년에 한번씩 LTS 업그레이드 하기로 결정을 했다.
프로젝트가 이게 다가 아니고 다음 프로젝트도 여기서 동시에 개발이 되기 때문에 항상 yocto 최신의 LTS 유지해야 유지보수 측면에서도 좋다. 다행히 Head 레벨에서 인지하고 서포트를 해준다. 그렇지면 여전히 엄청난 어려움이 있다.
간혹 왜 Yocto Upgrade, Kernel Upgrade를 하느냐는 질문이 많이 온다. 대부분 management 쪽에서 플랫폼 및 최신 버전으로 가야하는 이유를 잘 인지 못해서 그렇다. 특히 자동차 쪽은 HW에서 온 관리자들이 많아서 더더욱 그런 이야기를 한다. CVE, 컴포넌트 유지보수 중단 문제, 빌드 시스템 성능 문제, 다음 프로젝트와의 유지보수 등 다양한 이유로 항상 최신의 LTS를 유지하는 것이 좋다.
'Yocto' 카테고리의 다른 글
Yocto Overrides 문법 변화 (0) | 2023.08.04 |
---|---|
Yocto 빌드 통계 (buildstat) 시각화 (0) | 2023.08.03 |
QNX를 Yocto를 이용하여 빌드하는 것에 대한 생각 (0) | 2023.06.05 |
M1 Macbook에서 Yocto 빌드 환경 설정 2부 (네트워킹) (0) | 2023.05.23 |
[yocto] ld: cannot find /lib/libc.so.6: No such file or directory (0) | 2023.05.19 |