임베디드 리눅스 OTA 업데이트 – 2부: 기성 업데이트 플랫폼 평가
1부에서는 임베디드 리눅스 OTA 업데이트 시스템의 기초와 구현을 다뤘습니다. 이번 편에서는 오늘 프로젝트에 통합할 수 있는 인기 있는 기성 오픈소스 플랫폼을 평가합니다.
Mender
Mender는 세련된 즉시 사용 가능한 경험을 제공합니다. 앞서 설명한 것과 유사한 듀얼 루트fs 전략을 사용하며 U-Boot와 긴밀히 통합되어 이미지 부팅 실패 시 매끄러운 롤백을 가능하게 합니다.
명확한 단계별 문서 덕분에 시작이 간단합니다. 라즈베리 파이와 비글본 블랙용 레퍼런스 빌드는 사용자 하드웨어에 맞게 솔루션을 적용하는 데 필요한 노력을 보여줍니다.
제 경험상 통합에 약 3일 소요되었습니다. 과정은 Yocto(Morty) 빌드에 약간의 수정이 필요했으며 듀얼 부트 메커니즘을 올바르게 구성하기 위해 OpenEmbedded와 U-Boot 지식이 요구되었습니다.
빌드 완료 후 Mender는 부트로더와 파일시스템을 포함한 'sdimg' 파일을 출력하며 이를 플래시에 기록합니다. 또한 새 파일시스템 이미지를 메타데이터와 번들한 '아티팩트'를 생성합니다.
아티팩트는 mender CLI로 수동 설치하거나 웹 인터페이스를 통해 백엔드 서버에 업로드해 대상 유닛에 자동 배포할 수 있습니다.
백엔드 관리 콘솔은 도커 기반으로 초기 배포를 단순화합니다. 웹 UI로 현장 모든 디바이스 모니터링과 개별 유닛 또는 그룹에 업데이트 푸시 가능.
이미지 클릭으로 확대

그림 1: 업데이트 푸시용 Mender 커스텀 웹 인터페이스 (출처: Mender)
Mender 대부분은 Go로 작성되어 장기 유지보수를 위해 Go 지식이 권장됩니다. Go는 아직 임베디드 개발에서 보편적이지 않지만 채택이 늘고 있습니다.
그러나 Mender는 단일 부트 디바이스(예: /dev/mmcblk0)에 종속되며 특정 부트로더와 커널 구성(특정 파일시스템 지원 등)을 가정합니다. 또한 systemd를 강제해 대체 초기 시스템을 쓰는 프로젝트는 배제될 수 있습니다.
SWUpdate
SWUpdate는 높은 구성 가능 프레임워크를 제공합니다. 설정은 친숙한 kconfig 문법을 사용해 개발자가 시스템을 필요에 맞게 조정할 수 있게 합니다.
주요 기능으로 다중 부트로더 지원(U-Boot, GRUB, EFI Boot Guard), 공개 키로 이미지 서명 및 검증, 선택적 대칭 키 페이로드 암호화 포함.

그림 2: SWUpdate 구성 시스템 (출처: SWUpdate)