You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
6.2 KiB
102 lines
6.2 KiB
|
1 month ago
|
# 릴리스 노트 — Web Configurator **v1.11.16**
|
||
|
|
|
||
|
|
- **배포일**: 2026-06-23
|
||
|
|
- **대상**: 디바이스 BSP 이미지 포함용 (DP World Smart Solutions · IoT 디바이스)
|
||
|
|
- **패키지**: 내부 git 태그 `v1.11.16` (커밋 히스토리가 없는 **클린 스냅샷**)
|
||
|
|
- **이전 버전**: v1.11.15
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 한눈에 보기
|
||
|
|
이번 릴리스는 **배포 패키지 정비 릴리스**입니다. 앱 기능·디바이스 계약·UI는 v1.11.15와 동일하며,
|
||
|
|
다음 두 가지를 정비했습니다.
|
||
|
|
|
||
|
|
1. **MemoryMax 상향** (`48M → 128M`) — 운영 중 OOM-kill 위험 제거.
|
||
|
|
2. **BSP 통합 가이드 정비** — 네트워크-적용 하드닝 스크립트의 권장 통합 방식을
|
||
|
|
**"펌웨어 원본 스크립트 직접 교체(BSP 베이킹)"** 를 1차 방식으로 재구성.
|
||
|
|
|
||
|
|
- Python 3 **표준 라이브러리(stdlib)만** 사용 — 외부 pip 패키지 없음
|
||
|
|
- systemd 유닛 포함, nginx 설정은 optional sample → **이미지에 바로 포함 가능**
|
||
|
|
- 기존 디바이스 DB는 **부팅 시 자동 변환**(1회, 멱등) — 수동 작업 불필요
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 주요 변경 (v1.11.15 → v1.11.16)
|
||
|
|
|
||
|
|
| 항목 | 변경 |
|
||
|
|
|---|---|
|
||
|
|
| **MemoryMax** | `web-configurator.service` 의 `MemoryMax` 를 **48M → 128M** 로 상향. 48M는 support-bundle(진단 zip, 메모리 빌드)과 UI 동시 사용 시 실측 피크 ~40-50MB로 OOM-kill 위험이 있었음. 128M = 실피크 ~2.5x 여유 + 누수 방지 캡 유지 (장비 RAM 3.4GB 대비 3.7%). |
|
||
|
|
| **BSP 통합 방식 1차 = 직접 교체** | 네트워크-적용 하드닝본을 **`/usr/bin/dpworld-network-apply.sh` 원본 이름으로 교체 설치**하는 것을 BSP 베이킹의 기본 방식으로 명시. `.service.d` override 드롭인은 **라이브 디바이스 후적용(over-the-top) fallback** 으로 강등. (자세히 `BSP-INTEGRATION.md` §7 + `docs/firmware-boot-hardening.md`) |
|
||
|
|
| 패키지 구성 정리 | 배포물을 repo 루트(flat)로 정리, 내부 전용 참조/링크 정돈. 런타임 코드 변경 없음. |
|
||
|
|
|
||
|
|
> 앱 코드 자체는 **v1.11.15와 동일**합니다 (UI/기능 무변경). 본 릴리스는 배포 단위의
|
||
|
|
> 메모리 정책 + 통합 가이드 정비입니다.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 네트워크-적용 하드닝 — 통합 방식 (중요)
|
||
|
|
|
||
|
|
디바이스 펌웨어는 다음 base 구성을 제공합니다(firmware-native):
|
||
|
|
- `dpworld-network-apply.service` / `dpworld-network-seed.service` (유닛)
|
||
|
|
- `/usr/bin/dpworld-network-apply.sh` (base 스크립트)
|
||
|
|
|
||
|
|
이 base 스크립트에는 WiFi 국가 코드 변경 시 `modprobe -r wlan` 으로 모듈을 라이브 재로드하는
|
||
|
|
경로가 있어, QCA6490(cnss_pci)에서 **PMU 워치독 재부팅 루프**를 유발한 이력이 있습니다.
|
||
|
|
본 패키지의 `dpworld-network-apply-hardened.sh` 가 이 문제를 제거한 **완전 대체본**입니다.
|
||
|
|
|
||
|
|
**① 권장 — BSP 베이킹(직접 교체):** 펌웨어 이미지를 빌드하는 협력사는
|
||
|
|
`deploy/dpworld-network-apply-hardened.sh` 의 내용을 **`/usr/bin/dpworld-network-apply.sh`
|
||
|
|
원본 이름으로 설치**(펌웨어 원본 교체)하면 됩니다. base 서비스/시드 유닛이 이미 그 경로를
|
||
|
|
호출하므로 apply·`--boot` 모두 자동으로 하드닝 동작을 탑니다. **드롭인은 베이킹하지 않습니다.**
|
||
|
|
|
||
|
|
**② Fallback — 라이브 후적용(override):** 이미 구워진 디바이스에 펌웨어 교체 없이 얹을 때만,
|
||
|
|
하드닝본을 별도 파일로 두고 `dpworld-network-apply.service.d/` + `dpworld-network-seed.service.d/`
|
||
|
|
드롭인으로 ExecStart를 교체합니다. (우리 개발용 `scripts/deploy.ps1` 가 이 방식을 사용)
|
||
|
|
|
||
|
|
→ 단계별 절차는 `docs/firmware-boot-hardening.md` "펌웨어 베이킹 (BSP) — 원본 교체 방법" 참조.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 호환성 · 주의사항
|
||
|
|
- **디바이스 적용 시점**: dpworldapp 재시작 시 새 계약값으로 config가 재적용됩니다.
|
||
|
|
- **nginx optional**: `deploy/nginx.conf`는 BSP에서 `:80` reverse proxy를 제공할 때 쓰는 sample입니다. `scripts/deploy.ps1`는 nginx를 설치/수정하지 않으며, 디바이스가 앱을 `:9090`으로 직접 접근하면 없어도 됩니다. sample을 쓸 경우 `proxy_pass`를 앱 포트 `:9090`으로 맞추세요.
|
||
|
|
- **런타임 의존성**: python3 stdlib만 필요 (RDEPENDS 목록은 `BSP-INTEGRATION.md` 참조). 외부 패키지 없음.
|
||
|
|
- **dpworldapp**(텔레메트리 바이너리)는 firmware-native.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. 배포 방법 (BSP)
|
||
|
|
1. **패키지 입수**: 내부 git 태그 `v1.11.16` (또는 동봉 스냅샷)
|
||
|
|
2. **레시피 작성**: `BSP-INTEGRATION.md`의 샘플 bitbake recipe + 설치 경로표 사용
|
||
|
|
- `src/` → `/opt/web-configurator/src/`
|
||
|
|
- `deploy/*.service` → systemd 유닛 디렉토리
|
||
|
|
- `deploy/dpworld-network-apply-hardened.sh` → **`/usr/bin/dpworld-network-apply.sh`** (펌웨어 원본 교체, §3 ①)
|
||
|
|
- `deploy/nginx.conf` → optional nginx sample site config
|
||
|
|
- `web-configurator.service` enable
|
||
|
|
3. **검증**: 이미지 부팅 후 `systemctl status web-configurator` + `curl http://127.0.0.1:9090/`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. 품질/검증
|
||
|
|
- v1.11.16 변경은 **앱 로직 무변경** — systemd 서비스 메모리 캡(MemoryMax) + 문서/주석/버전 문자열뿐입니다.
|
||
|
|
기능 동등 기준선 **v1.11.15**는 내부 테스트 스위트(Python + 프런트 `.mjs`)로 검증되었습니다.
|
||
|
|
- 테스트 스위트는 내부 저장소에서 관리되며 **본 배포물에는 포함되지 않습니다**.
|
||
|
|
- 패키지는 **커밋 히스토리 없음**(`git archive` 스냅샷) + 내부 분석/개발 자료 제외 (`DELIVERABLE-MANIFEST.txt` 참조).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. 롤백
|
||
|
|
- BSP recipe의 버전 핀(태그/SRCREV)을 **v1.11.15**로 되돌리면 이전 버전 배포.
|
||
|
|
- 마이그레이션은 **멱등 + 변경 전 자동 백업**(config_safety)으로 보호됩니다.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 버전 이력 (요약)
|
||
|
|
| 버전 | 일자 | 요약 |
|
||
|
|
|---|---|---|
|
||
|
|
| **v1.11.16** | 2026-06-23 | MemoryMax 48M→128M + BSP 베이킹(직접 교체) 가이드 1차 정비 (앱 기능 무변경) |
|
||
|
|
| v1.11.15 | 2026-06-23 | 사이드바 System 그룹 monitor 아이콘 정리 |
|
||
|
|
| v1.11.14 | 2026-06-23 | 사이드바 부모 그룹(System=Dashboard+Log / Firmware) 재편 |
|
||
|
|
| v1.11.11 | 2026-06-23 | config 쓰기 경로를 디바이스 config-reader 계약에 정렬 + 자동 마이그레이션 |
|
||
|
|
| v1.11.10 | 2026-06-20 | 전체 코드리뷰 fix (37건) |
|