1. 개요
SVN을 설치하는 법을 설명한 많은 가이드가 있지만 사실 따라하기 쉽지 않습니다. 혹 그대로 따라한다 하더라도 기본 환경에 차이가 있어 에러가 나는 경우가 많죠.
여하튼 오늘 또 하나의 SVN 설치 가이드를 작성하려 합니다.
- 설치 환경 : AWS Amazon Linux
- 설치 방식 : yum 패키지 설치 방식
2. 설치
2-1. 1.9.4 버전
시작합니다.
[ec2-user@ip-0-0-0-0 ~]$ sudo yum install svn Loaded plugins: priorities, update-motd, upgrade-helper Resolving Dependencies --> Running transaction check ---> Package subversion.x86_64 0:1.9.4-2.54.amzn1 will be installed --> Processing Dependency: subversion-libs(x86-64) = 1.9.4-2.54.amzn1 for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_fs_base-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_fs_util-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libserf-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_fs-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_fs_fs-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_ra_serf-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_client-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_diff-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_wc-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_subr-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_delta-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_fs_x-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_ra_local-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_ra-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_ra_svn-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Processing Dependency: libsvn_repos-1.so.0()(64bit) for package: subversion-1.9.4-2.54.amzn1.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.5.1-1.12.amzn1 will be installed ---> Package apr-util.x86_64 0:1.4.1-4.17.amzn1 will be installed ---> Package libserf.x86_64 0:1.3.7-1.7.amzn1 will be installed ---> Package subversion-libs.x86_64 0:1.9.4-2.54.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: subversion x86_64 1.9.4-2.54.amzn1 amzn-updates 1.6 M Installing for dependencies: apr x86_64 1.5.1-1.12.amzn1 amzn-main 116 k apr-util x86_64 1.4.1-4.17.amzn1 amzn-main 87 k libserf x86_64 1.3.7-1.7.amzn1 amzn-main 64 k subversion-libs x86_64 1.9.4-2.54.amzn1 amzn-updates 1.5 M Transaction Summary =========================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 3.3 M Installed size: 9.4 M Is this ok [y/d/N]: y
진행합니다.
Downloading packages: (1/5): apr-1.5.1-1.12.amzn1.x86_64.rpm | 116 kB 00:00 (2/5): apr-util-1.4.1-4.17.amzn1.x86_64.rpm | 87 kB 00:00 (3/5): libserf-1.3.7-1.7.amzn1.x86_64.rpm | 64 kB 00:00 (4/5): subversion-1.9.4-2.54.amzn1.x86_64.rpm | 1.6 MB 00:00 (5/5): subversion-libs-1.9.4-2.54.amzn1.x86_64.rpm | 1.5 MB 00:00 ------------------------------------------------------------------------------------------- Total 12 MB/s | 3.3 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.5.1-1.12.amzn1.x86_64 1/5 Installing : apr-util-1.4.1-4.17.amzn1.x86_64 2/5 Installing : libserf-1.3.7-1.7.amzn1.x86_64 3/5 Installing : subversion-libs-1.9.4-2.54.amzn1.x86_64 4/5 Installing : subversion-1.9.4-2.54.amzn1.x86_64 5/5 Verifying : subversion-libs-1.9.4-2.54.amzn1.x86_64 1/5 Verifying : apr-1.5.1-1.12.amzn1.x86_64 2/5 Verifying : subversion-1.9.4-2.54.amzn1.x86_64 3/5 Verifying : apr-util-1.4.1-4.17.amzn1.x86_64 4/5 Verifying : libserf-1.3.7-1.7.amzn1.x86_64 5/5 Installed: subversion.x86_64 0:1.9.4-2.54.amzn1 Dependency Installed: apr.x86_64 0:1.5.1-1.12.amzn1 apr-util.x86_64 0:1.4.1-4.17.amzn1 libserf.x86_64 0:1.3.7-1.7.amzn1 subversion-libs.x86_64 0:1.9.4-2.54.amzn1 Complete!
SVN 패키지는 잘 설치된 것 같습니다. 하지만 이제 시작일 뿐입니다.
2-2. 1.9.7 (2018년 4월 30일 on Amazon Linux)
$ sudo yum install svn Loaded plugins: priorities, update-motd, upgrade-helper Resolving Dependencies --> Running transaction check ---> Package subversion.x86_64 0:1.9.7-1.58.amzn1 will be installed --> Processing Dependency: subversion-libs(x86-64) = 1.9.7-1.58.amzn1 for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_wc-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_subr-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_repos-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_ra_svn-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_ra_serf-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_ra_local-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_ra-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_fs_x-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_fs_util-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_fs_fs-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_fs_base-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_fs-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_diff-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_delta-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libsvn_client-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libserf-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: subversion-1.9.7-1.58.amzn1.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.5.2-5.13.amzn1 will be installed ---> Package apr-util.x86_64 0:1.5.4-6.18.amzn1 will be installed ---> Package libserf.x86_64 0:1.3.7-1.7.amzn1 will be installed ---> Package subversion-libs.x86_64 0:1.9.7-1.58.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================================== Package Arch Version Repository Size =================================================================================================================== Installing: subversion x86_64 1.9.7-1.58.amzn1 amzn-main 1.6 M Installing for dependencies: apr x86_64 1.5.2-5.13.amzn1 amzn-main 118 k apr-util x86_64 1.5.4-6.18.amzn1 amzn-main 99 k libserf x86_64 1.3.7-1.7.amzn1 amzn-main 64 k subversion-libs x86_64 1.9.7-1.58.amzn1 amzn-main 1.7 M Transaction Summary =================================================================================================================== Install 1 Package (+4 Dependent packages) Total download size: 3.5 M Installed size: 10 M Is this ok [y/d/N]: y Downloading packages: (1/5): libserf-1.3.7-1.7.amzn1.x86_64.rpm | 64 kB 00:00:00 (2/5): apr-1.5.2-5.13.amzn1.x86_64.rpm | 118 kB 00:00:00 (3/5): apr-util-1.5.4-6.18.amzn1.x86_64.rpm | 99 kB 00:00:00 (4/5): subversion-1.9.7-1.58.amzn1.x86_64.rpm | 1.6 MB 00:00:02 (5/5): subversion-libs-1.9.7-1.58.amzn1.x86_64.rpm | 1.7 MB 00:00:04 ------------------------------------------------------------------------------------------------------------------- Total 854 kB/s | 3.5 MB 00:00:04 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.5.2-5.13.amzn1.x86_64 1/5 Installing : apr-util-1.5.4-6.18.amzn1.x86_64 2/5 Installing : libserf-1.3.7-1.7.amzn1.x86_64 3/5 Installing : subversion-libs-1.9.7-1.58.amzn1.x86_64 4/5 Installing : subversion-1.9.7-1.58.amzn1.x86_64 5/5 Verifying : apr-1.5.2-5.13.amzn1.x86_64 1/5 Verifying : subversion-1.9.7-1.58.amzn1.x86_64 2/5 Verifying : apr-util-1.5.4-6.18.amzn1.x86_64 3/5 Verifying : subversion-libs-1.9.7-1.58.amzn1.x86_64 4/5 Verifying : libserf-1.3.7-1.7.amzn1.x86_64 5/5 Installed: subversion.x86_64 0:1.9.7-1.58.amzn1 Dependency Installed: apr.x86_64 0:1.5.2-5.13.amzn1 apr-util.x86_64 0:1.5.4-6.18.amzn1 libserf.x86_64 0:1.3.7-1.7.amzn1 subversion-libs.x86_64 0:1.9.7-1.58.amzn1 Complete!
3. 설치 중
(일단 여기부터는 읽어만 보시길 바랍니다. 무작정 따라하진 마세요)
아는 명령어를 남발해 보겠습니다.
[ec2-user@ip-0-0-0-0 ~]$ svn 사용법은 'svn help'를 통해 볼 수 있습니다. [ec2-user@ip-0-0-0-0 ~]$ svnserve -d, -i, -t, -X 중 한가지만 지정하십시오. 사용법은 보시려면, 'svnserve --help' 을 이용하세요.
안되겠습니다. 일단 빨리 서비스 기동을 하지요.
[ec2-user@ip-0-0-0-0 ~]$ service svnserve start
Starting svnserve: svnserve: E200009: Root path '/var/svn' does not exist or is not a directory
[FAILED]
[ec2-user@ip-0-0-0-0 ~]$ cd /var/svn
-bash: cd: /var/svn: 그런 파일이나 디렉터리가 없습니다
아...... 빨리 뭐라도 만들어야겠네요.
[ec2-user@ip-0-0-0-0 bin]$ sudo svnadmin create /var/svn [ec2-user@ip-0-0-0-0 bin]$ ls -l /var/svn 합계 24 -rw-r--r-- 1 root root 246 7월 13 13:14 README.txt drwxr-xr-x 2 root root 4096 7월 13 13:14 conf drwxr-sr-x 6 root root 4096 7월 13 13:14 db -r--r--r-- 1 root root 2 7월 13 13:14 format drwxr-xr-x 2 root root 4096 7월 13 13:14 hooks drwxr-xr-x 2 root root 4096 7월 13 13:14 locks
다시 기동 시도합시다.
[ec2-user@ip-0-0-0-0 bin]$ service svnserve start Starting svnserve: [ OK ] touch: cannot touch ‘/var/lock/subsys/svnserve’: Permission denied
윽. 수도... sudo...
[ec2-user@ip-0-0-0-0 bin]$ sudo service svnserve start Starting svnserve: [ OK ]
떴습니다. 기본 포트 확인합시다.
[ec2-user@ip-0-0-0-0 bin]$ netstat -an | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
4. 설치 중
(지금부터는 하려고 했던 작업입니다)
그런데 생각해보니 저는 /svn 하위에 리파지토리를 만들고 싶었는데요. 그래서 뭔가 다시 해봅니다. 이 때 svnserve 서비스는 중단합니다. (sudo service svnserve stop)
[ec2-user@ip-0-0-0-0 ~]$ sudo mkdir /svn
그리고 여기에 stap 프로젝트를 위한 리파지토리를 만들 것입니다.
[ec2-user@ip-0-0-0-0 ~]$ cd /svn [ec2-user@ip-0-0-0-0 svn]$ sudo svnadmin create --fs-type fsfs stap.sarc.io [ec2-user@ip-0-0-0-0 svn]$ ls -l 합계 4 drwxr-xr-x 6 root root 4096 7월 13 13:29 stap.sarc.io
정말 뭔가 만들어진 것이 맞을까요?
[ec2-user@ip-0-0-0-0 conf]$ pwd /svn/stap.sarc.io/conf [ec2-user@ip-0-0-0-0 conf]$ ls -l 합계 20 -rw-r--r-- 1 root root 1080 7월 13 13:29 authz -rw-r--r-- 1 root root 885 7월 13 13:29 hooks-env.tmpl -rw-r--r-- 1 root root 309 7월 13 13:29 passwd -rw-r--r-- 1 root root 4371 7월 13 13:29 svnserve.conf
svnserve.conf 파일을 보겠습니다. 그런데 이 파일에 주석이 많으니 진짜 주석은 가리고 보겠습니다.
[ec2-user@ip-0-0-0-0 conf]$ grep -v '###' svnserve.conf [general] # anon-access = read # auth-access = write # password-db = passwd # authz-db = authz # groups-db = groups # realm = My First Repository # force-username-case = none # hooks-env = hooks-env [sasl] # use-sasl = true # min-encryption = 0 # max-encryption = 256
위 파일을 아래와 같이 수정합니다.
[ec2-user@ip-0-0-0-0 conf]$ cat svnserve.conf [general] anon-access = none auth-access = write password-db = passwd authz-db = authz # groups-db = groups realm = stap.sarc.io Repository # force-username-case = none # hooks-env = hooks-env [sasl] # use-sasl = true # min-encryption = 0 # max-encryption = 256
추가로 아래 두 파일에 대해서도 작업을 해주셔야 합니다. 이 부분에 대한 자세한 설명은 생략할테니 구글신의 도움을 받으시길 바라며.
- passwd
- authz
5. 기동
자, 이제 다시 띄웁니다. 단, 방식을 좀 더 바꿔서... 제가 따로 만든 디렉토리/리파지토리쪽으로.
[ec2-user@ip-0-0-0-0 svn]$ sudo svnserve -d --listen-port 3690 -r /svn [ec2-user@ip-0-0-0-0 svn]$ netstat -an | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
후속 작업 시작합니다.
[ec2-user@ip-0-0-0-0 ~]$ sudo svn mkdir svn://127.0.0.1:/stap.sarc.io/trunk svn: E205007: 로그 메시지를 구하기 위해 외부 프로그램을 사용할 수 없습니다. SVN_EDITOR 환경변수를 설정하시거나 --message (-m) 또는 --file (-F) 옵션을 사용하세요 svn: E205007: 환경변수 SVN_EDITOR, VISUAL, EDITOR 중 하나는 설정하거나, 'editor-cmd' 를 구성화일에 명시해야합니다
유명한 에러를 만났네요. 지금부터는 SVN_EDITOR 환경 변수를 지정해놓고 작업하기 위해서 sudo가 아닌 아예 root 계정으로 들어가겠습니다.
[root@ip-0-0-0-0 ~]# export SVN_EDITOR=/usr/bin/vim
다시 후속 작업 시작합니다.
[root@ip-0-0-0-0 ~]# svn mkdir svn://127.0.0.1/stap.sarc.io/trunk
Log message unchanged or not specified
(a)bort, (c)ontinue, (e)dit:
c
Authentication realm: stap.sarc.io Repository
Password for 'root':
Authentication realm: stap.sarc.io Repository
Username: short3300
Password for 'short3300': **********
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:
stap.sarc.io Repository
can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? y
Committing transaction...
Committed revision 1.
tags, branches도 마찬가지 방식으로요.
[root@ip-0-0-0-0 ~]# svn mkdir svn://127.0.0.1/stap.sarc.io/tags Log message unchanged or not specified (a)bort, (c)ontinue, (e)dit: c Committing transaction... Committed revision 2. [root@ip-0-0-0-0 ~]# svn mkdir svn://127.0.0.1/stap.sarc.io/branches Log message unchanged or not specified (a)bort, (c)ontinue, (e)dit: c Committing transaction... Committed revision 3.
6. 확인
이제 이클립스에서 확인해 보지요.

Browse를 누르고 인증을 받은 후에.

7. 마이그레이션
7-1. 신규 서버에 svn 설치
7-2. svn 디렉토리 그대로 복사 (디렉토리 구조가 동일하다는 전제하에)
끝.