Synology NAS를 사용하면서 DSM 6에서는 패키지 센터를 통해 SVN 서버를 쉽게 설치할 수 있었지만,
DSM 7 이상에서는 패키지 센터에서 더 이상 SVN 서버가 제공되지 않습니다.
이에 따라 Docker를 활용하여 SVN 서버를 구축하고 기존 저장소를 복원하는 방법을 알아보겠습니다.
주요 학습 내용
- DSM 7에서 SVN을 설치하는 방법
- Docker 기반 SVN 서버 비교 (elleflorio/svn-server vs garethflowers/svn-server)
- SVN 저장소 포맷(FS format) 차이점
- 개발자가 SVN 최상위 디렉터리를 볼 필요가 없는 이유
DSM 7에서 SVN 서버를 구축해야 하는 이유
DSM 6에서는 패키지 센터에서 SVN Server를 설치하여 사용할 수 있었습니다. DSM 7 이상에서는 더 이상 공식적으로 지원되지 않기 때문에, Docker를 활용하여 SVN 서버를 구축하는 것이 최선의 방법입니다.
Docker를 활용하는 이유
- DSM 7에서 직접 SVN 설치가 불가능
- Docker를 사용하면 최신 SVN 버전을 유지 가능
- 기존 SVN 저장소 데이터를 유지하면서 이전 가능
Docker를 이용한 설치 방법 (Container Manager 이용)
1. 레지스트리에서 garethflowers/svn-server를 검색해서 다운로드합니다.

2. 컨테이너에서 생성 클릭 후 일반 설정을 진행합니다.

3. 고급 설정으로 넘어가 포트 / 볼륨을 설정합니다.

왼쪽이 로컬 포트 / 볼륨, 오른쪽이 docker 포트 / 볼륨
4. 완료 후 컨테이너 생성

5. 컨테이너 실행 중 확인

Docker 기반 SVN 서버 비교: elleflorio vs garethflowers
Synology NAS에서 DSM 7과 호환되며 안정적으로 동작하는 이미지를 선택하는 것이 중요합니다.
1. elleflorio/svn-server
문제점
- SVN 저장소의 FS format 오류 발생 → 기존 저장소를 연결할 수 없음 (기존 저장소가 높은 버전으로 생성 됐을 경우)
- SVN 버전이 최신이 아니어서 SVN format 8을 지원하지 않음 (사용 버전 : svnserve, version 1.9.7)
오류 예시
svn: E170000: Expected FS format between '1' and '7'; found format '8'
이는 SVN 서버 버전이 저장소 포맷을 지원하지 않기 때문에 발생하는 오류입니다.
2. garethflowers/svn-server
해결 방법
- 최신 SVN 버전(1.14 이상)을 포함하여 FS format 8 지원 가능
- 기존 SVN 저장소(FS format 8)도 정상적으로 연결 가능 (사용 버전 : svnserve, version 1.14.3)
설치 방법 (CLI로 접근하여 설치)
docker run -d --name svn-server \
-p 3690:3690 \
-v /svn/repo:/var/opt/svn \
garethflowers/svn-server
최신 SVN 서버가 Docker 컨테이너에서 동작하며, SVN 저장소 (/svn/repo)는 사용자 환경에 맞게 수정해 주시면 됩니다.
SVN 저장소 포맷(FS Format) 차이
SVN 저장소는 내부적으로 파일 시스템 포맷(FS format)을 사용합니다.
SVN 버전이 올라가면서 저장소 포맷이 변경되었고, SVN 서버는 특정 범위의 포맷만 지원합니다.
FS Format | SVN 버전 | 설명 |
4 | 1.6.x | 초기 FSFS 최적화 |
6 | 1.8.x | 새로운 fsfs.conf 추가 |
7 | 1.9.x | sharding layout 개선 |
8 | 1.10+ | LZ4 압축 적용, 성능 향상 |
elleflorio이미지로 설치 중 SVN 서버가 FS Format 8을 지원하지 않아서 특정 저장소에 접근할 수 없었습니다.
최신 SVN 서버(garethflowers/svn-server)를 사용하거나, svnadmin upgrade 명령어를 실행하여 포맷을 변환합니다.
svnadmin upgrade /svn/repo/저장소이름
* SVN 버전이 낮은 경우 svn: E170000: Expected FS format between '1' and '7'; found format '8' 오류 발생 *
개발자가 SVN 최상위 디렉터리를 볼 필요가 없는 이유
개발자가 아닌 저는 SVN 서버를 구성하면서 최상위 디렉터리를 개발자가 볼 수 있어야 한다고 생각했습니다.
하지만, 최상위 디렉터리를 조회 못하는 게 SVN 관리에 더 안전하다고 합니다.
왜?
- SVN은 개별 저장소 단위로 동작
- Git과 달리, SVN은 하나의 저장소만 클론 하는 것이 아니라 특정 저장소에 접근해야 합니다.
- 예: svn://172.16.32.111/SAMSO_ETC ← 특정 저장소 지정 필요
- 보안 이슈
- 만약 개발자가 svn://172.16.32.111 로 접근 시 모든 저장소가 보이면, 불필요한 정보 유출 가능성이 있습니다.
- SVN은 기본적으로 최상위 목록을 제공하지 않음
- svn://서버주소를 입력하면 저장소 목록이 자동으로 나오지 않고 오류가 발생합니다.
Unable to connect to a repository at URL 'svn://172.16.32.111' No repository found in 'svn://172.16.32.111'
- Apache mod_dav_svn을 사용하면 웹 인터페이스에서 저장소 목록을 볼 수 있도록 설정할 수 있으나...
- svn://서버주소를 입력하면 저장소 목록이 자동으로 나오지 않고 오류가 발생합니다.
개발자는 자신이 필요한 저장소만 접근하면 되고, 최상위 디렉터리를 알 필요가 없음!
결론
- DSM 7에서는 패키지 관리자에서 SVN 설치가 불가능 → Docker를 활용해야 함
- Docker 이미지 선택 중요: garethflowers/svn-server가 최신 SVN 버전을 지원하므로 안정적
- SVN 저장소 포맷(FS format)을 고려해야 함 → FS format 8은 SVN 1.10 이상에서만 지원됨
- 개발자는 최상위 디렉터리를 볼 필요 없음 → 특정 저장소만 접근하면 충분
Docker를 활용한 SVN 서버 구축은 DSM 7 이상에서 필수적인 방법이며, 이미지를 잘 선택하는 것이 중요합니다!
'DevOps' 카테고리의 다른 글
DevOps - Rocky Linux 9.5에 Jenkins 설치하기 (자동화 서버 구축 시작) (0) | 2025.04.09 |
---|---|
DevOps - Ansible 설치 및 Windows 서버 연결 (Rocky Linux 9.5 기준) (0) | 2025.04.09 |
DevOps - Zabbix Agent2로 SSL 인증서 만료 모니터링 설정하기 | 자동 알림 및 트리거 활용 (0) | 2024.12.18 |
DevOps - CentOS 8에 Zabbix 5.0 설치 및 한글 깨짐 해결 방법 (0) | 2024.11.11 |
DevOps - Zabbix_get 사용법 및 활용 가이드 | 에이전트 데이터 수집 & 디버깅 방법 (0) | 2024.11.07 |