Buildroot에서 업데이트 스크립트 작성 및 배포
개요
Buildroot를 활용한 시스템에서 Over-the-Air(OTA) 업데이트를 구현하기 위해서는 업데이트 스크립트를 작성하고 이를 배포하는 과정이 필요합니다. 본 포스팅에서는 업데이트 스크립트 작성 방법과 이를 Buildroot 환경에서 적용하는 과정을 설명합니다.
1. OTA 업데이트 개념
OTA 업데이트는 네트워크를 통해 시스템을 원격으로 업데이트하는 방식입니다. 이를 통해 제품을 현장에서 직접 업데이트할 필요 없이 소프트웨어를 유지보수할 수 있습니다. 일반적으로 OTA 업데이트는 다음과 같은 방식으로 이루어집니다.
- 업데이트 파일 다운로드: 원격 서버에서 최신 업데이트 파일을 다운로드합니다.
- 무결성 검증: 다운로드한 파일이 손상되지 않았는지 확인합니다.
- 백업 및 롤백 전략 적용: 업데이트 실패 시 기존 버전으로 복구할 수 있도록 합니다.
- 업데이트 적용: 새로운 파일을 기존 시스템에 덮어씌우거나, A/B 파티션을 활용하여 교체합니다.
- 재부팅 및 검증: 업데이트가 성공적으로 완료되었는지 확인하고 시스템을 재부팅합니다.
2. 업데이트 스크립트 작성
Buildroot 기반 시스템에서 OTA 업데이트를 수행하기 위한 스크립트는 일반적으로 shell script
로 작성됩니다. 기본적인 OTA 업데이트 스크립트는 다음과 같은 기능을 수행해야 합니다.
- 업데이트 패키지 다운로드
- 다운로드한 파일의 무결성 검증 (해시 또는 서명 확인)
- 기존 시스템을 백업 또는 롤백 가능하도록 구성
- 새로운 파일을 적용하고 재부팅 수행
예제: 기본적인 OTA 업데이트 스크립트
다음은 간단한 OTA 업데이트 스크립트 예제입니다.
#!/bin/sh
UPDATE_SERVER="https://update.example.com"
UPDATE_FILE="firmware_update.tar.gz"
DOWNLOAD_PATH="/tmp/${UPDATE_FILE}"
TARGET_DIR="/opt/firmware"
BACKUP_DIR="/opt/firmware_backup"
LOG_FILE="/var/log/ota_update.log"
log() {
echo "$(date) - $1" | tee -a "$LOG_FILE"
}
log "OTA 업데이트 시작"
# 1. 기존 펌웨어 백업
log "기존 펌웨어 백업 중..."
rm -rf "$BACKUP_DIR"
mv "$TARGET_DIR" "$BACKUP_DIR"
mkdir -p "$TARGET_DIR"
# 2. 업데이트 파일 다운로드
log "업데이트 파일 다운로드 중: $UPDATE_SERVER/$UPDATE_FILE"
wget -O "$DOWNLOAD_PATH" "$UPDATE_SERVER/$UPDATE_FILE"
if [ $? -ne 0 ]; then
log "다운로드 실패"
exit 1
fi
# 3. 무결성 검증 (SHA256 체크섬 사용)
log "파일 무결성 검증 중..."
EXPECTED_HASH="abcdef1234567890" # 서버에서 제공한 올바른 해시 값
DOWNLOADED_HASH=$(sha256sum "$DOWNLOAD_PATH" | awk '{print $1}')
if [ "$DOWNLOADED_HASH" != "$EXPECTED_HASH" ]; then
log "무결성 검증 실패"
exit 1
fi
# 4. 업데이트 적용
log "업데이트 적용 중..."
tar -xzf "$DOWNLOAD_PATH" -C "$TARGET_DIR"
if [ $? -ne 0 ]; then
log "업데이트 적용 실패"
exit 1
fi
# 5. 재부팅
log "업데이트 완료, 시스템 재부팅 중..."
reboot
3. Buildroot에서 업데이트 스크립트 패키징
위에서 작성한 업데이트 스크립트를 Buildroot 시스템에 포함하려면 패키지를 생성해야 합니다. Buildroot에서 사용자 정의 패키지를 추가하는 방법은 다음과 같습니다.
3.1 패키지 디렉터리 생성
먼저 Buildroot의 package/
디렉터리 내에 ota_update/
디렉터리를 생성합니다.
mkdir -p buildroot/package/ota_update
3.2 Config.in
파일 생성
패키지의 Config.in
파일을 작성하여 Buildroot의 설정 메뉴에서 활성화할 수 있도록 합니다.
menu "OTA Update"
config BR2_PACKAGE_OTA_UPDATE
bool "Enable OTA Update"
help
Enables the OTA update script for remote firmware updates.
endmenu
3.3 ota_update.mk
파일 생성
Buildroot에서 패키지를 빌드하기 위한 ota_update.mk
파일을 생성합니다.
################################################################################
# OTA Update Package
################################################################################
OTA_UPDATE_VERSION = 1.0
OTA_UPDATE_SITE = $(TOPDIR)/package/ota_update
OTA_UPDATE_INSTALL_TARGET = YES
define OTA_UPDATE_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(OTA_UPDATE_SITE)/ota_update.sh $(TARGET_DIR)/usr/bin/ota_update.sh
endef
$(eval $(generic-package))
3.4 업데이트 스크립트 추가
앞서 작성한 ota_update.sh
스크립트를 buildroot/package/ota_update/
디렉터리에 추가합니다.
3.5 Buildroot 패키지 설정에 추가
buildroot/package/Config.in
파일의 마지막 부분에 source "package/ota_update/Config.in"
을 추가합니다.
이제 Buildroot 메뉴 설정에서 make menuconfig
를 실행하여 OTA Update 패키지를 활성화할 수 있습니다.
4. OTA 업데이트 배포 및 실행
OTA 업데이트가 패키지로 포함된 경우, 시스템에서 해당 스크립트를 실행하여 업데이트를 진행할 수 있습니다.
/usr/bin/ota_update.sh
업데이트를 자동으로 수행하려면 cron
을 이용하여 정기적으로 실행하거나, 특정 조건에서 실행되도록 설정할 수 있습니다.
예를 들어, 매일 새벽 3시에 업데이트 스크립트를 실행하려면 crontab -e
를 열어 다음 내용을 추가합니다.
0 3 * * * /usr/bin/ota_update.sh
5. 결론
이번 포스팅에서는 Buildroot 환경에서 OTA 업데이트 스크립트를 작성하고 이를 시스템에 포함하는 방법을 다루었습니다. OTA 업데이트를 통해 원격으로 펌웨어를 안전하게 업데이트할 수 있으며, 이를 자동화하여 유지보수를 효율적으로 수행할 수 있습니다.
'Linux > buildroot' 카테고리의 다른 글
Buildroot 로그 분석 및 디버깅 방법 (0) | 2025.05.05 |
---|---|
Buildroot 빌드 속도 개선 및 캐시 활용 (0) | 2025.05.04 |
A/B 파티션을 이용한 안전한 업데이트 기법 (0) | 2025.05.01 |
Buildroot 기반의 시스템 OTA 업데이트 방법 (0) | 2025.04.30 |
디바이스 트리(Device Tree) 설정 및 수정 (0) | 2025.04.29 |