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 디렉토리 그대로 복사 (디렉토리 구조가 동일하다는 전제하에)

끝.