Qt for Device Creation 개발 도구는 빠른 UI 개발을 위해 미리 구성된 소프트웨어 스택과 툴 체인을 사용하여 시장 진입 시간을 대폭 단축하여 새롭고 흥미 진진한 제품을 시장에 출시하는 데 성공했습니다. 우리는 OTA (Over-the-Air) 시스템 업데이트를 위한 옵트 인 (opt-in) 기능을 제공함으로써 이 단계를 더욱 발전시키고자 합니다.

 

OTA 업데이트는 무엇입니까?
OTA 업데이트는 장치에 실제로 액세스하지 않고도 무선 네트워크를 통해 소프트웨어 업데이트를 배포하는 메커니즘입니다. 대상 장치가 무선으로 업데이트 할 수 있으려면 소프트웨어에서 이를 지원해야합니다.

 

OTA 업데이트의 중요성.
IoT 시대에서 모든 것이 인터넷에 의해 연결되고 모든 사람이 스마트 폰을 소유하고 있기 때문에 사용자는 기기로부터 더 많은 기능을 받기를 원합니다. 현대적인 임베디드 디바이스를 구축 하면서 OTA 는 소프트웨어에 대한 업데이트 방식으로 점점 더 중요한 구성 요소가 되었습니다. 임베디드 소프트웨어는 소프트웨어 버그에 대한 업데이트를 포함하여 전체 라이프 사이클에 대한 지원을 요구하고 있습니다. 소프트웨어는 지속적으로 더 많은 사용자를 유치하고 기존 사용자를 유지하기 위해 새로운 기능을 제공합니다. 인터넷에 접속되면서 우리는 또한 노출된 보안 공격에 대해서 적시에 해결해야만 하는 문제점을 안고 있습니다.

OTA를 사용하면 센터에서 모든 사용자에게 업데이트를 전송할 수 있습니다. 소프트웨어 업데이트를 수행 할 때 제품 회수에 대한 고비용, 출방 비용, 장치에 물리적으로 액세스 해야 하는 프로세스를 거치지 않아도 됩니다. 테크놀러지가 변화하고 트렌드가 이동할 때 이에 발맞춰 고객에게 업데이트를 제공하는 일은 매우 중요합니다. 그렇지 않으면 제품은 곧 도태될 것입니다. 우리는 오늘날 모든 종류의 장치에 OTA 업데이트를 볼 수 있는데, 심지어 소프트 웨어 업데이트가 필요할 때 마다 정비소로 이동해야 했던 자동차에서도 말입니다. 단 한 번 소프트웨어 배포를 끝으로 장비의 공급이 완료되던 시기는 끝났습니다. (물론 이러한 방법으로 적용되는 사례는 여전히 있습니다.)

 

시스템 업데이트는 복잡합니다.

일관성 없는 상태로 시스템에서 전송되는 소프트웨어 업데이트는 도중에 잘못 될 수 있는 많은 것들이 있습니다. 업데이트가 실패하면 부팅 할 수 없거나 무한 재부팅이 되는 장치, 정상적으로 시작되지 않는 응용 프로그램 또는 구성 파일이 누락 되어 시스템을 사용할 수 없게 되는 경우 등입니다. 업데이트 중에는 데이터가 손상되거나 변조 될 수 있으므로 보안 측면도 해결해야 합니다. 보시다시피, 우리가 생각해야 할 많은 실패 요소가 있습니다. 이 문제에 대한 수많은 솔루션이 존재하지만 종종 비정기적이고, 사용자 정의가 어렵거나, 불완전하거나, 배포판이 유니크하거나, 원하는 모든 요구 사항을 충족하지 못합니다. 기존의 많은 업데이트 솔루션을 살펴보면서 OTA 업데이트 시스템에 필수적인 것으로 간주되는 요구 사항 목록을 안내해 드리고자 합니다.

 

> 유연하고 재사용 가능.
업데이트 솔루션은 특정 파티션 레이아웃, 파일 시스템 유형 또는 배포로 사용자를 제한해서는 안됩니다. 새로운 대상 장치로 이식하는 것은 단순 명료해야 합니다.

> Atomic 업데이트.
모두 또는 아무것도. 시스템을 일관성없는 상태에서 업데이트를 강제로 중단 할 경우에도 안전해야 합니다. 업데이트가 완전히 완료되지 않은 경우에도 현재 실행중인 시스템은 수정되지 않은 상태로 유지되어야합니다.

> Atomic 롤백.
설치된 업데이트에 원하지 않는 이슈가 있는 경우 이전 버전으로 전환 할 수 있어야 합니다.

> 백그라운드에서 진행되는 업데이트.
업데이트중에도 프로세스는 구동되어야 합니다. 업데이트가 백그라운드에서 적용되는 동안 사용자는 시스템을 사용할 수 있어야합니다.

> 안전함.
인증 및 업데이트 무결성 확인으로 업데이트 전송을 보호합니다.

> 디스크 공간의 효율적인 처리.
많은 업데이트 솔루션은 대부분 중복 파일이 있는 파티션 스왑 패턴을 기반으로합니다. 이것은 큰 문제는 아니지만 이상적으로 더 나은 해결 방법이 있습니다 (아래 참조).

> 대역폭 최적화.
업데이트 파일은 가능한 한 작아야 합니다. 이는 실행 파일이 변경되는 방식을 활용하여 다양한 바이너리 델타 기술로 구현됩니다. 전체 이미지 파일을 다운로드하는 대신 변경된 파일 만 다운로드해야 합니다.

> 불량 연결 및 전송 실패 처리.
중단 된 다운로드에서 다시 시작할 때 누락 된 파일 만 가져와야합니다.

> 무방비 및 탄력성.
재해로부터 복구 할 수있는 메커니즘이 내장되어 있어야 합니다. 이는 특정 사용 사례에 따라 크게 달라 지므로 사용자 정의가 가능해야합니다.

> 고정형 시스템 vs. 응용 프로그램 저장소 모델.
고정된 목적의 시스템과 OTA 를 경유하여 밑단에서 부터 플랫폼에 구애받지 않는 윗단의 응용 프로그램 전달 매커니즘의 OS 업데이트 까지 지원해야 합니다.
3rd 파티 응용 프로그램은 기본 OS와의 시너지 효과가 있어야 하며 독립적으로 업데이트 할 수 있어야 합니다. 이 요구 사항은 이 블로그 게시물에 설명 된 새로운 Minimalist Operating System 개념에 영감을 받았습니다. 안드로이드 OS는 이것의 좋은 예입니다.

> 버전 관리 시스템.
OTA 클라이언트 장치는 소프트웨어 업데이트 중에 대상 장치의 종속성을 확인하는 대신 서버 쪽에서 어셈블 된 컨텐트를 복제해야합니다. 이는 예측 가능하고 재생 가능하며 안정적인 환경을 제공합니다. 특정 시스템의 버전에 어떤 파일이 있는지 항상 인지하며 대상 장치에서 사용할 수있는 라이브러리의 정확한 조합을 테스트 할 수 있습니다 (시스템 스냅 샷과 같은 종류). 3rd 파티 응용 프로그램은 시스템 라이브러리를 사용하거나 컨테이너에서 실행할 수 있습니다. 버전 시스템 사이에서 유저가 수정 가능 한 공간이 제공되어야 합니다.

> 미려한 Qt / QML API 로 확장 가능.
이것에 대한 자세한 내용은 다음 블로그에서 소개합니다.

 

OSTree 의 사용과 백엔드로 선택한 이유?

OSTree는 부트 가능한 파일 시스템 트리를 커밋하고 다운로드하는 git-like 모델로 부트 로더 구성을 관리하고 부트 로더 레이어를 결합한 도구입니다. OSTree는 개별 파일을 체크섬하고 content address 객체 저장소가 있다는 점에서 git 과 동일합니다. 하지만 OSTree 저장소에서 하드 링크를 통해 파일을 체크 아웃한다는 점에서는 git과는 다릅니다. 이 하드 링크 팜을 사용하면 각 시스템의 버전 중복이 제거된다는 의미입니다. 업그레이드 프로세스는 단지 새 파일에 비례하는 디스크 공간과 작은 고정 오버 헤드를 필요로합니다.

OSTree 모델에서 운영 체제는 더 이상 실제 “/”루트 디렉토리에 있지 않습니다. 대신 새로운 최상위 / ostree 디렉토리에 병렬로 설치됩니다. 부팅시 병렬로 설치된 트리 중 하나가 실제 “/”루트로 전환됩니다. 이것은 Atomic 업데이트 및 롤백 기능의 기본입니다. 부팅 된 OSTree 시스템의 파일 시스템 레이아웃은 OSTree가 아닌 시스템과 크게 다르지 않습니다. OSTree는 여러면에서 매우 진화적이며 다양한 프로젝트에서 도입 된 개념과 아이디어를 바탕으로합니다. OTA 업데이트 기능 외에도,이 기능을 통해 stateless 시스템 같은 흥미로운 개념을 Qt for Device Creation에 가져올 수 있습니다.

OSTree는 위 목록의 요구 사항 중 대부분을 다루며 (일부는 직접적인 소스 임) OTA 업데이트 도구를 작성하는 강력한 기반이 됩니다. 현재 우리는 API 및 생성된 OTA 기능을 위한 Qt for Device Creation 을 개발하고 있으며 Qt 기반 응용 프로그램과 쉽게 통합 할 수 있도록 노력하고 있습니다. OSTree는 GitHub에서 소스 코드를 사용할 수있는 오픈 소스 프로젝트 (LGPLv2)입니다.

 

결론.

Qt for Device Creation 의 OTA 솔루션은 시장 진입 시간을 단축하고 편리하게 지속적으로 공급 된 제품을 개선 할 수있는 방법을 제공합니다. 이 Technical Preview 는 Qt 5.7 for Device Creation (Qt 5.7 Device Creation 다운로드는 오큐브에 문의해 주세요.) 에서 사용할 수 있습니다. 블로그 포스트 시리즈의 두 번째에서는 디바이스 통합,  API, 향후 출시되는 새로운 기능, OSTree가 OTA 솔루션에 어떻게 적용되는지 자세히 설명합니다.

 

본 문서는 qt.io 의 “Over-the-Air Updates, Part 1: Introduction” 을 번역한 블로그로 의역 및 오역 이 있을 수 있습니다.