이전 기사에서 임베디드 Linux 업데이트 시스템의 기본과 구현에 대해 논의했습니다. 여기에서는 현재 Embedded Linux 프로젝트와 통합할 수 있는 기성 오픈 소스 업데이트 시스템에 대해 설명합니다.
수리
이 업데이트 시스템은 매우 전문적이며 즉시 사용할 수 있습니다. 이전 기사에서 설명한 것과 매우 유사한 이중 rootfs 업데이트 시스템을 사용합니다. 부팅되지 않는 이미지의 경우 폴백을 허용하기 위해 U-Boot와 긴밀하게 통합됩니다.
다양한 구성 요소를 설정하고 통합하는 방법에 대한 명확한 단계별 문서가 있으므로 Mender를 시작하는 것은 매우 쉽습니다. 이들은 Raspberry Pi 및 BeagleBone Black과 같은 인기 있는 플랫폼에서 참조 구현을 제공하며, 이를 통해 플랫폼에서 작동하는 데 필요한 작업량에 대한 아이디어를 얻을 수 있습니다.
통합하고 작동하는 데 약 3일이 걸렸다는 것을 알았습니다. 내 Yocto 빌드 설정(Morty 기반)과 함께 작동하도록 하기 위해 많은 작은 변경이 있었습니다. 이러한 문제를 해결하려면 OpenEmbedded 전문 지식이 필요합니다. 듀얼 부팅 메커니즘을 올바르게 통합하려면 U-Boot 전문 지식이 필요합니다.
이 작업이 끝나면 플래시 메모리에 어떻게든 기록해야 하는 부트로더와 파일 시스템을 포함하는 "sdimg"를 출력합니다. 이 작업을 수행하는 방법은 대상 하드웨어에 따라 다릅니다. 또한 새로운 파일 시스템 이미지와 다양한 메타데이터를 포함하는 '아티팩트'라는 것을 출력합니다.
아티팩트는 수동 설치를 위해 Mender 명령줄 도구를 통해 설치할 수 있습니다(이는 이론적으로 USB 스틱에서 자동 설치로 확장될 수 있음). 아티팩트는 웹 인터페이스를 통해 백엔드 업데이트 웹 서비스에 업로드할 수도 있으며 여기에서 개별 단위로 푸시다운할 수 있습니다.
백엔드 업데이트 서버를 제어하는 웹 인터페이스는 잘 설계되었으며 사용하기 쉽습니다. 설정은 Docker를 통해 수행되므로 초기 설정이 매우 간단합니다. 완전한 프로덕션 준비 시스템에서는 Docker에 대한 전문 지식이 필요합니다. 이 웹 인터페이스에서 현장에 현재 배포된 모든 장치를 볼 수 있으며 개별적으로 또는 그룹으로 업데이트를 푸시할 수 있습니다.
더 큰 이미지를 보려면 클릭하십시오.
그림 1:Mender에는 기기 업데이트를 푸시하기 위한 맞춤형 웹 인터페이스가 포함되어 있습니다(출처:Mender)
Mender의 대부분은 Go 프로그래밍 언어로 작성됩니다. Go에 대한 일부 전문 지식은 장기적인 채택 및 프로덕션 릴리스에 필요합니다. 이것은 임베디드 세계에서 아직 흔하지 않은 언어이지만 앞으로 더 널리 사용될 것입니다.
하드 코딩된 단일 부팅 장치(예:/dev/mmcblk0)에 묶여 있으므로 여러 매체에서 부팅할 수 있는 간단한 방법이 없습니다. 또한 부트로더 및 커널의 다양한 옵션(예:특정 파일 시스템 지원 포함)과 같이 시스템에 대해 많은 가정을 합니다. 결정적으로 일부 프로젝트에는 적합하지 않을 수 있는 systemd가 필요합니다.
SW업데이트
이 업데이트 시스템은 고도로 구성 가능합니다. 대부분의 Embedded Linux 개발자에게 친숙한 "kconfig" 시스템을 사용하여 구성합니다. 구성 옵션의 몇 가지 예:여러 부트로더(U-Boot, GRUB, EFI Boot Guard)를 지원합니다. 주어진 공개 키를 기반으로 서명된 이미지에 서명하고 확인할 수 있습니다. 대칭 키 암호화를 사용하여 이미지 암호화를 지원할 수 있습니다.