Dantami Repo Sync의 SynoCommunity 첫 리뷰 반영과 v1.6.3 배포 기록

GitHub와 NAS의 Gitea 저장소를 동기화하는 Dantami Repo Sync를 SynoCommunity에 등록하는 작업을 진행 중이다. 앞서 등록용 PR을 제출하고 자동 빌드까지 통과했다. 이번에는 첫 리뷰에서 받은 다섯 가지 의견을 반영하고, 앱 원본도 v1.6.3으로 배포했다.

이번 수정은 기능을 더하는 작업보다는 패키지의 설치와 업데이트 과정을 다듬는 쪽에 가까웠다. Go 버전 선언, 기존 패키지 식별자, 관리자 초기화 시점, 서비스 실행 방식처럼 평소 앱 화면에서는 잘 보이지 않는 부분들이 주요 검토 대상이었다.

Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 by momopanda123 · Pull Request #7537 · SynoCommunity/spksrc
Cross compilation framework to create native packages for the Synology's NAS - Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 by momopanda123 · Pull Request #7537 · SynoCommunity/spksrc

기록 시점은 2026년 10월 5일 오전 8시 45분(KST)이다. v1.6.3 수동 설치판은 배포했으며, SynoCommunity PR은 수정 후 CI 실행 승인을 기다리고 있다. 실제 NAS에서 커뮤니티 패키지를 설치하고 업데이트하는 검증도 남아 있다.


첫 리뷰에서 확인한 다섯 가지

SynoCommunity 등록 PR에 hgy59 님의 리뷰가 달렸다. 검토 내용을 정리하면 다음과 같다.

  • Go 버전 요구 사항을 원본 프로젝트에서 정리할 것
  • 기존 패키지 이름과 식별자를 유지할 것
  • DSM 7 서드파티 패키지에서 지원하지 않는 베타 표시를 제거할 것
  • 업데이트 과정에서 관리자 초기화가 중복 실행되지 않도록 할 것
  • 직접 만든 서비스 실행 스크립트 대신 spksrc의 공통 기능을 활용할 것

각 항목을 따라가 보니 원본 앱에서 고칠 부분과 SynoCommunity용 빌드 구성에서 고칠 부분이 나뉘었다. 원본에서 해결할 수 있는 내용은 원본에 반영하고 새 버전으로 배포했다.


Go 버전 선언 정리

기존 제출안은 SynoCommunity 빌드 환경에 맞추기 위해 Go 버전 선언을 별도 패치로 변경하고 있었다. 이번에는 원본 프로젝트의 go.mod에서 최소 Go 버전을 1.26.0으로 명시하고, 실제 빌드와 검증은 Go 1.26.8로 수행했다.

이렇게 바꾸면서 등록용 빌드 구성에 있던 Go 버전 패치를 제거했다. 커뮤니티 쪽에서 원본을 수정한 뒤 빌드하는 단계가 줄어들었고, 공개한 소스 그대로 테스트하고 패키지를 만들 수 있게 됐다.

여기서 버전 선언과 검증 환경은 구분해야 한다. go.mod에 적은 최소 버전은 1.26.0이며, 이번에 테스트를 실행한 버전은 1.26.8이다. 1.26.0 환경에서 별도로 모든 테스트를 실행했다는 뜻은 아니다.


DantamiRepoSync 식별자 유지

초기 제출안에서는 설치되는 패키지의 식별자를 dantami-repo-sync로 변경했었다. 리뷰에서는 기존 이름을 유지하면 안 되는 이유가 있는지 질문이 나왔다.

검토 후 원래 식별자인 DantamiRepoSync를 유지하도록 수정했다. 소스 저장소나 빌드 레시피의 폴더 이름을 소문자로 쓰는 것과, DSM이 설치된 패키지를 구분하는 식별자는 별개의 문제였다.

패키지 식별자와 함께 앱 식별자, CGI 진입 경로, 아이콘 경로, 데이터 경로도 기존 이름에 맞췄다. 이름을 바꾸기 위해 적용하던 소스 패치 역시 제거했다. 현재 제출안은 원본 v1.6.3 소스를 별도 패치 없이 빌드한다.

앞선 등록 준비 기록에서 소문자 식별자를 사용한다고 설명한 부분은 초기 제출안에 해당한다. 이번 리뷰 반영 후에는 DantamiRepoSync를 유지하는 것으로 변경됐다.

다만 식별자가 같다고 기존 수동 설치판에서 커뮤니티 패키지로 안전하게 업데이트된다고 단정할 수는 없다. 두 패키지의 실행 사용자 설정에 차이가 있어 기존 데이터의 소유권과 접근 권한, DSM에서 앱을 실행하는 경로까지 실제 NAS에서 확인해야 한다.


DSM 7에서 지원하지 않는 베타 표시 제거

리뷰에 따라 SynoCommunity 패키지 구성의 BETA 설정을 제거했다. 원본 수동 설치판의 INFO 파일에 들어 있던 동일한 성격의 beta 메타데이터도 함께 정리했다.

메타데이터에서 베타 표시를 없애는 작업과 등록 심사의 완료 여부는 별개다. 현재 PR은 여전히 Draft 상태이며, 실제 장비 검증과 커뮤니티 검토를 마쳐야 한다.


관리자 초기화는 처음 설치할 때만

설치와 업데이트는 같은 설정을 무조건 다시 실행해도 되는 과정이 아니다. 처음 설치할 때는 관리자 계정을 만들어야 하지만, 업데이트할 때는 기존 계정과 설정을 이어서 사용해야 한다.

기존 구성에는 service_postinst와 service_postupgrade가 있었다. spksrc의 설치 흐름에서는 업그레이드 과정에서도 service_postinst가 호출될 수 있으므로, 초기화 코드가 어떤 상태에서 실행되는지 명확하게 제한할 필요가 있었다.

중복된 service_postupgrade 훅을 제거하고, service_postinst 안에서 SYNOPKG_PKG_STATUS가 INSTALL인 경우에만 --init-admin을 호출하도록 변경했다.

설치와 업데이트 초기화에 대한 실제 리뷰
설치와 업데이트 초기화에 대한 실제 리뷰

리뷰 원문. 업그레이드에서도 설치 후처리 훅이 호출되므로 초기화 조건을 제한하라는 의견이다. 수정 후 확인한 화면이며 Outdated는 이전 코드에 달린 의견임을 뜻한다.

업데이트 안내 화면도 함께 손봤다. 기존 관리자 정보를 새로 입력하도록 요구하지 않고, 계정과 설정이 유지된다는 내용을 한국어와 영어로 안내한다. 모의 테스트에서는 신규 설치 시에만 초기화가 실행되고, 업그레이드 상태에서는 실행되지 않는 것을 확인했다.


공통 서비스 스크립트로 전환

초기 제출안에서는 서비스를 시작하고 멈추는 start-stop-status 스크립트를 직접 작성했다. 이번에는 그 스크립트를 제거하고 spksrc의 공통 서비스 관리 기능을 사용하도록 바꿨다.

서비스 설정에는 실행 명령, 백그라운드 실행 여부, PID 파일과 로그 파일의 위치를 지정한다. 백그라운드 실행에는 SVC_BACKGROUND=yes를 사용한다.

PID 파일은 실행 중인 프로세스를 식별하기 위한 파일이다. 앱이 이미 자신의 PID를 기록하므로 서비스 프레임워크가 같은 파일을 따로 쓰지 않도록 했다. 공통 스크립트에서는 앱이 기록한 PID 파일을 참조한다.

서비스 실행과 관리자 초기화 코드 변경
서비스 실행과 관리자 초기화 코드 변경

실제 수정 커밋의 변경 비교. 왼쪽은 이전 코드, 오른쪽은 공통 서비스 설정과 INSTALL 조건을 적용한 코드다.

이 변경으로 별도로 유지해야 할 실행 스크립트가 줄었다. 시작, 상태 확인, 이미 실행 중일 때 다시 시작 명령을 내리는 경우, 종료 흐름은 모의 환경에서 확인했다. NAS 재부팅 후 자동 시작과 DSM에서의 실제 실행은 추가 검증 대상으로 남겨 뒀다.


v1.6.3 배포와 검증 결과

원본 앱에는 Go 최소 버전 선언과 베타 메타데이터 정리를 반영했다. 앱 화면과 상태 API의 버전 표기도 1.6.3으로 맞췄다. 수정된 소스와 수동 설치용 SPK는 v1.6.3 릴리즈에 공개했다. 이전 버전의 릴리즈와 설치 파일은 그대로 유지했다.

Release v1.6.3 · SynoCommunity build compatibility / 빌드 호환성 · momopanda123/dantami-repo-sync
A Synology DSM app for safe GitHub–Gitea repository synchronization, with a multi-repository dashboard and independent account management. - Release v1.6.3 · SynoCommunity build compatibility / 빌드 호환성 · momopanda123/dantami-repo-sync

이번에 확인한 항목은 다음과 같다.

  • Go 1.26.8에서 최상위 테스트 57개와 하위 테스트를 race 검사와 함께 통과
  • go vet 정적 검사 통과
  • 한국어와 영어 문구 생성 검사 통과
  • x64 및 DSM 7.2 대상의 깨끗한 패키지 빌드 통과
  • 공개한 v1.6.3 소스 압축파일과 테스트에 사용한 추적 파일의 내용 일치 확인
  • 생성한 SPK의 식별자, 체크섬, 서비스 스크립트, CGI 및 아이콘 경로, 셸 문법, 라이선스 고지 확인
  • 모의 설치 및 업데이트 흐름에서 관리자 초기화 조건과 서비스 시작 및 종료 확인

race 검사는 동시에 실행되는 코드에서 데이터 경쟁 문제를 찾는 검사다. 이번 전체 테스트는 89.466초에 완료됐다. 이 수치는 테스트 실행 시간이며 앱의 동기화 성능을 측정한 결과는 아니다.

수동 설치용 SPK와 spksrc가 만드는 커뮤니티용 SPK는 같은 소스를 바탕으로 하지만 패키징 경로가 다르다. 원본 앱의 테스트, 생성된 패키지 구조 검사, 실제 NAS에서의 실행 검증을 각각 구분해 기록했다.

검증 결과와 v1.6.3 설치 파일 배포
검증 결과와 v1.6.3 설치 파일 배포

GitHub 릴리즈에 기록한 테스트 결과와 실제 SPK 첨부파일. 원본 소스와 설치 파일을 같은 버전의 릴리즈에서 확인할 수 있다.


PR 수정 반영과 리뷰 답변

등록용 PR도 v1.6.3을 사용하도록 갱신했다. 리뷰의 각 항목을 어떻게 바꿨는지, 어떤 테스트를 수행했는지, 아직 확인하지 못한 내용이 무엇인지 리뷰 답변에 정리했다.

Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 by momopanda123 · Pull Request #7537 · SynoCommunity/spksrc
Cross compilation framework to create native packages for the Synology's NAS - Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 by momopanda123 · Pull Request #7537 · SynoCommunity/spksrc
리뷰 의견에 대한 수정 답변
리뷰 의견에 대한 수정 답변

리뷰 답변 화면. 수정 완료 항목과 실제 NAS 검증이 필요한 항목을 함께 적었다.

이전 커밋의 자동 빌드는 통과했지만, 이번 수정 커밋은 별도 검사가 필요하다. 글을 작성하는 시점의 새 빌드 실행은 운영진의 실행 승인을 기다리는 상태다. 승인 대기를 코드 검사 실패로 보거나, 이전 성공 결과를 새 커밋의 결과로 대신할 수는 없다.

Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 · SynoCommunity/spksrc@646d0b1
Cross compilation framework to create native packages for the Synology's NAS - Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 · SynoCommunity/spksrc@646d0b1
Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 · SynoCommunity/spksrc@8c943c2
Cross compilation framework to create native packages for the Synology's NAS - Dantami Repo Sync: add v1.6.3 package for DSM 7 x64 · SynoCommunity/spksrc@8c943c2
새 커밋의 CI 실행 승인 대기
새 커밋의 CI 실행 승인 대기

이번 수정 커밋의 CI 상태. 실행 승인을 기다리고 있어 아직 새 빌드의 성공 결과는 없다.


다음에 확인할 부분

남은 핵심은 실제 NAS에서 커뮤니티 패키지의 설치와 업데이트를 검증하는 일이다. 신규 설치 후 로그인과 동기화가 되는지, 기존 설치판의 계정과 설정을 유지할 수 있는지, 서비스 사용자와 데이터 권한이 맞는지 확인해야 한다. 재부팅 후 서비스 시작과 DSM 앱 실행도 확인 대상이다.

이번 작업으로 첫 리뷰의 다섯 가지 의견을 코드에 반영했고, 원본 앱 v1.6.3 배포와 PR 답변까지 마쳤다. SynoCommunity 등록 심사는 진행 중이다.

패키지를 공개 배포하는 과정에서는 설치된 앱을 다음 버전으로 어떻게 이어 갈지도 함께 다뤄야 했다. 이번 리뷰는 그중에서도 패키지 식별자, 계정 초기화 시점, 서비스 관리 방식처럼 업데이트의 안정성에 영향을 주는 부분을 정리하는 계기가 됐다.

root@cyberpunk:~#