목차
- 들어가기
- 주요특징
- RAUC 기초
- RAUC 사용하기
- RAUC 커스텀하기
- 마무리
들어가기
github 페이지(링크)를 보면 기본적으로 임베디드 디바이스를 위한 업데이트 솔루션이다.
RAUC는 다음과 같이 구성된다.
- 임베디드 디바이스 데몬 : 새로운 버전으로 업데이트를 담당하는 데몬
- 호스트 디바이스 툴 : 업데이트 이미지 생성/수정/점검을 위한 툴
주요특징
- File-based와 Block-based 모두 지원한다. 다만 Block-based가 디폴트이다.
- 특정 파티션 레이아웃을 강제하지 않는다. A/B System update 또한 지원한다.
- Rootfs의 제약사항 또한 없다. read-only 일수도, read-write일수도 있다.
- RAUC는 업데이트를 수행하는 core의 역할만 수행한다. 기본적으로 로컬에 저장된 이미지에 대한 업데이트를 수행한다. 즉, OTA를 위한 서버/클라이언트는 별도의 솔루션으로 구현해야 한다.
- delta 업데이트와 Streaming 업데이트를 지원한다.
- 부트로더 (Barebox, U-Boot, GRUB, UEFI)를 통한 fallback을 허용한다.
- OpenSSL 기반으로 업데이트 이미지에 대한 암호화 및 검증을 지원한다.
- IMA, SELinux, dm-verity 같은 verified boot와 호환성을 가지고 있다.
RAUC 기초
Bundles
- 파일시스템 이미지 혹은 아카이브 파일
- manifest 파일(manifest.raucm) : 이미지 리스트와 옵션들이 기술된 파일
- 스크립트파일 : 업데이트 전, 도중, 후에 호출됨
Slots
첫 번째로 중요한 것은 Bundle의 AppFS와 Target의 AppFS.0 Slot에 맵핑하는 것이다. 참고로 AppFS.0와 RootFS.0는 inactive slot group이다. 이렇게 여러 slot이 묶여있는 것을 slot group이라 한다. active/inactive를 구별하기 위해서 RAUC는 커널 커맨드라인 혹은 mount 정보를 사용한다.
Boot Slot
mark primary는 inactive/active slot group을 변경하는 인터페이스이다.
mark good/bad는 fallback을 위한 인터페이스이다. 부팅이 실제로 성공했다고 할지라도 해당이미지는 정상적으로 동작하지 않을 수 있다. 이때 해당 부트로더 인터페이스를 통해서 mark bad를 호출하고 fallback 루틴으로 진입한다.
RAUC 사용하기
이미지 생성하기
bundle 정보확인
bundle 업데이트
RAUC 커스텀하기
configuration
[system]compatible=FooCorp Super BarBazzerbootloader=barebox[keyring]path=/etc/rauc/keyring.pem[handlers]system-info=/usr/lib/rauc/info-provider.shpost-install=/usr/lib/rauc/postinst.sh[slot.rootfs.0]device=/dev/sda0type=ext4bootname=system0[slot.rootfs.1]device=/dev/sda1type=ext4bootname=system1
handlers
- system-info : configuration 파일이 로딩되고 호출. 타겟의 시리얼 번호 등을 읽어들이는 역할.
- post-install : 성공적으로 업데이트 되었을 때 호출됨. 일반적으로 reboot 등을 수행.
hooks
마무리
'소프트웨어 > OTA(on-the-air)' 카테고리의 다른 글
libostree (OStree) 예제 - 시작하기 (0) | 2019.01.30 |
---|---|
Eclipse hawkBit 간략하게 살펴보기 (0) | 2019.01.22 |
Clear Linux & swupd 살펴보기 (0) | 2019.01.18 |
SWUpdate (Software Update for Embedded Systems) 살펴보기 (0) | 2019.01.16 |
Mender (Over-the-air software updates) 솔루션 살펴보기 (0) | 2019.01.16 |
목차
- 들어가기
- 주요특징
- RAUC 기초
- RAUC 사용하기
- RAUC 커스텀하기
- 마무리
들어가기
github 페이지(링크)를 보면 기본적으로 임베디드 디바이스를 위한 업데이트 솔루션이다.
RAUC는 다음과 같이 구성된다.
- 임베디드 디바이스 데몬 : 새로운 버전으로 업데이트를 담당하는 데몬
- 호스트 디바이스 툴 : 업데이트 이미지 생성/수정/점검을 위한 툴
주요특징
- File-based와 Block-based 모두 지원한다. 다만 Block-based가 디폴트이다.
- 특정 파티션 레이아웃을 강제하지 않는다. A/B System update 또한 지원한다.
- Rootfs의 제약사항 또한 없다. read-only 일수도, read-write일수도 있다.
- RAUC는 업데이트를 수행하는 core의 역할만 수행한다. 기본적으로 로컬에 저장된 이미지에 대한 업데이트를 수행한다. 즉, OTA를 위한 서버/클라이언트는 별도의 솔루션으로 구현해야 한다.
- delta 업데이트와 Streaming 업데이트를 지원한다.
- 부트로더 (Barebox, U-Boot, GRUB, UEFI)를 통한 fallback을 허용한다.
- OpenSSL 기반으로 업데이트 이미지에 대한 암호화 및 검증을 지원한다.
- IMA, SELinux, dm-verity 같은 verified boot와 호환성을 가지고 있다.
RAUC 기초
Bundles
- 파일시스템 이미지 혹은 아카이브 파일
- manifest 파일(manifest.raucm) : 이미지 리스트와 옵션들이 기술된 파일
- 스크립트파일 : 업데이트 전, 도중, 후에 호출됨
Slots
첫 번째로 중요한 것은 Bundle의 AppFS와 Target의 AppFS.0 Slot에 맵핑하는 것이다. 참고로 AppFS.0와 RootFS.0는 inactive slot group이다. 이렇게 여러 slot이 묶여있는 것을 slot group이라 한다. active/inactive를 구별하기 위해서 RAUC는 커널 커맨드라인 혹은 mount 정보를 사용한다.
Boot Slot
mark primary는 inactive/active slot group을 변경하는 인터페이스이다.
mark good/bad는 fallback을 위한 인터페이스이다. 부팅이 실제로 성공했다고 할지라도 해당이미지는 정상적으로 동작하지 않을 수 있다. 이때 해당 부트로더 인터페이스를 통해서 mark bad를 호출하고 fallback 루틴으로 진입한다.
RAUC 사용하기
이미지 생성하기
bundle 정보확인
bundle 업데이트
RAUC 커스텀하기
configuration
[system]compatible=FooCorp Super BarBazzerbootloader=barebox[keyring]path=/etc/rauc/keyring.pem[handlers]system-info=/usr/lib/rauc/info-provider.shpost-install=/usr/lib/rauc/postinst.sh[slot.rootfs.0]device=/dev/sda0type=ext4bootname=system0[slot.rootfs.1]device=/dev/sda1type=ext4bootname=system1
handlers
- system-info : configuration 파일이 로딩되고 호출. 타겟의 시리얼 번호 등을 읽어들이는 역할.
- post-install : 성공적으로 업데이트 되었을 때 호출됨. 일반적으로 reboot 등을 수행.
hooks
마무리
'소프트웨어 > OTA(on-the-air)' 카테고리의 다른 글
libostree (OStree) 예제 - 시작하기 (0) | 2019.01.30 |
---|---|
Eclipse hawkBit 간략하게 살펴보기 (0) | 2019.01.22 |
Clear Linux & swupd 살펴보기 (0) | 2019.01.18 |
SWUpdate (Software Update for Embedded Systems) 살펴보기 (0) | 2019.01.16 |
Mender (Over-the-air software updates) 솔루션 살펴보기 (0) | 2019.01.16 |