CentOs7에 subversion 설치하고 저장소만들기

개발환경 및 시작하기

CentOs7(Nas 가상머신), putty

CentOs7의 Selinux를 disabled 한 상태에서 진행함

글에서 SubVersion 와 svn 이라는 단어를 혼용해서 사용함.

Centos7 SubVersion 설치

아래 명령어를 입력해서 설치 할수 있는 subversion 을 확인해보자.

1
yum list subversion

실행결과

1
2
3
4
5
6
7
8
9
[root@localhost ~]# yum list subversion
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
* extras: mirror.kakao.com
* updates: mirror.kakao.com
Available Packages
subversion.i686 1.7.14-11.el7_4 updates
subversion.x86_64 1.7.14-11.el7_4 updates

아래 명령어로 subversion 을 설치하자.

1
yum install -y subversion

실행결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Total                                                        1.3 MB/s | 1.9 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : subversion-libs-1.7.14-11.el7_4.x86_64 1/2
Installing : subversion-1.7.14-11.el7_4.x86_64 2/2
Verifying : subversion-libs-1.7.14-11.el7_4.x86_64 1/2
Verifying : subversion-1.7.14-11.el7_4.x86_64 2/2

Installed:
subversion.x86_64 0:1.7.14-11.el7_4

Dependency Installed:
subversion-libs.x86_64 0:1.7.14-11.el7_4

Complete!
[root@localhost ~]#

SubVersion의 저장소들을 저장할 폴더를 생성하고 설정을 하자

서브버전에서 원격저장소를 저장할 최상위 폴더를 생성하자. 나는 CentOs의 root 경로에 svn_repos (/svn_repos) 라는 폴더를 만들었다.

1
2
3
[root@localhost /]# ls
bin dev home lib64 mnt proc run srv sys usr
boot etc lib media opt root sbin svn_repos tmp var

방금 생성한 폴더를 SubVersion에 설정해야 한다. /etc/sysconfig/svnserve 파일을 vi로 열고 아래처럼 수정하자.

svnserve 파일에 방금 생성한 svn 저장소를 관리할 폴더를 지정한다.

1
vi /etc/sysconfig/svnserve

1
2
3
4
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /svn_repos"

SubVersion 서비스 포트 방화벽 해제 설정

아래 명령어를 통해 SubVersion의 서비스 포트를 리눅스 방화벽에서 제외하자. svn의 기본 포트는 3960이다.

1
2
sudo firewall-cmd --permanent --zone=public --add-port=3690/tcp
sudo firewall-cmd --reload

SubVersion 을 실행하자

SubVersion 실행 관련 명령어

1
2
3
systemctl start svnserve.service #실행
systemctl stop svnserve.service #중지
systemctl restart svnserve.service #재실행

svn 서비스 실행 및 확인

1
2
3
4
5
6
7
[root@localhost ~]# systemctl start svnserve.service
[root@localhost ~]# ps -ef | grep svn
root 8827 1 0 19:28 ? 00:00:00 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /svn_repos
root 9373 7879 0 19:28 pts/2 00:00:00 grep --color=auto svn
[root@localhost ~]# netstat -anp | grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 8827/svnserve
[root@localhost ~]#

ps -ef | grep svn : 서브 버전의 프로세스가 동작하는 것을 확인 할 수 있다.

netstat -anp | grep svnserve : 서브버전 서비스의 포트를 확인할 수 있다. 기본적으로 3690 포트를 사용한다.


SubVersion에 테스트 저장소 생성

지금까지 SVN설치과 실행을 해보았다. 이제 실제 프로젝트의 단위가 될 svn 저장소를 만들어 보자

1.테스트 저장소 생성

아래 명령으로 TestStore1이라는 저장소를 생성하자.

1
2
3
4
5
6
[root@localhost svn_repos]# svnadmin create --fs-type fsfs TestStore1
[root@localhost svn_repos]# ls
TestStore1
[root@localhost svn_repos]# cd TestStore1/
[root@localhost TestStore1]# ls
README.txt conf db format hooks locks

자동으로 svn_repos 폴더에 TestStore1 저장소가 생긴것을 확인 할 수 있다.

2.생성한 저장소 폴더 권한 수정

방금 생성한 저장소의 폴더 권한을 수정한다.

1
2
3
4
5
6
[root@localhost svn_repos]# chmod -R g+ws TestStore1
[root@localhost svn_repos]# ls -al
합계 4
drwxr-xr-x. 3 root root 23 4월 30 15:42 .
dr-xr-xr-x. 18 root root 4096 5월 1 01:22 ..
drwxrwsrwx. 6 root root 80 4월 30 15:42 TestStore1

권한을 변경하지 않을 경우 root 이외에는 svn 명령어가 동작하지 않을수 있습니다.

최초 생성한 subversion 저장소 설정

방금 생성한 TestStore1 저장소의 svnserve.conf 파일을 수정해야 한다. 이 파일은 SVN 서버를 실행할 때 해당 저장소에 접근할 수 있는 권한을 관리하는 설정 파일이다. svnserve.conf의 위치는 저장소명/conf/svnserve.conf 이다.

기존 파일을 열어보면 anon-access, auth-access, password-db, authz-db 항목을 찾아 아래처럼 수정하자. 만약 해당 설정이 주석이 되어있다면 주석을 제거한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.apache.org/ for more information.

[general]
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file. If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
# realm = My First Repository
### The force-username-case option causes svnserve to case-normalize
### usernames before comparing them against the authorization rules in the
### authz-db file configured above. Valid values are "upper" (to upper-
### case the usernames), "lower" (to lowercase the usernames), and
### "none" (to compare usernames as-is without case conversion, which
### is the default behavior).
# force-username-case = none

[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256

anon-acess: 로그인 하지 않은 사용자에게 접근 권한을 설정하는 부분이다. read, write, none 세가지 값을 설정 할 수 있다. auth-acess: 로그인한 사용자에 대한 접근 권한을 설정하는 부분이다. read, write, none 세가지 값을 설정 할 수 있다. passwd-db: 저장소에 접근할 사용자 계정과 비밀번호를 관리할 파일의 이름을 지정하는 설정이다. 기본 파일명은 passwd를 사용하며, 다른 이름을 사용할 수 있다. authz-db: 파일과 디렉토리에 대한 접근 권한을 관리하는 파일의 이름을 지정하는 설정이다. 기본파일명은 authz를 사용하며, 다른 이름을 사용할 수 있다.

위 네가지 항목중 anon-access, auth-access, passwd-db 항목은 필수 설정이며, authz-db는 생략 가능하다.

아래처럼 자동으로 저장소를 생성할때 authz, passwd파일도 같이 생성되어 있는 것을 확인 할 수 있다.

1
2
3
4
5
6
7
8
9
[root@localhost conf]# pwd
/svn_repos/TestStore1/conf
[root@localhost conf]# ls -al
합계 12
drwxr-xr-x. 2 root root 51 4월 30 15:48 .
drwxr-xr-x. 6 root root 80 4월 30 15:42 ..
-rw-r--r--. 1 root root 1080 4월 30 15:42 authz
-rw-r--r--. 1 root root 309 4월 30 15:42 passwd
-rw-r--r--. 1 root root 3168 4월 30 15:48 svnserve.conf

passwd에 저장소에 접근할 계정정보를 추가하자

위의 passwd 파일을 열어 아래처럼 수정하자

1
2
3
4
5
6
7
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
admin = admin

admin이라는 계정에 admin 이라는 비밀번호를 설정했다 아이디 = 비밀번호 형태로 사용자명과 비밀번호를 추가하면 된다.

authz파일에 저장소에 접근할 계정정보를 추가하자

authz 다음 스크립트를 하단에 추가하자

1
2
3
4
[/]
* = r #TestStore1저장소의 루트경로에 모든 사용자가 read 할수 있는 권한을 부여
root = rw #TestStore1저장소의 루트경로에 root 계정은 read, write 권한 부여
admin = rw #TestStore1저장소의 루트경로에 admin 계정은 read, write 권한 부여

지금까지 svn의 저장소 생성과 설정을 하였다.

생성한 저장소 확인하기

아래 명령어를 이용하여 svn의 저장소 정보를 확인 할 수 있다. 주의:SeLinux가 활성화 되어있는 경우 svn저장소 접근이 안된다. 나는 SeLinux 설정을 disabled 하였다.(테스트 환경이이라 스스로 변명한다.)

CentOs7 selunix disabled 하기

/etc/selinux/config 파일을 열어 수정하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost conf]# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

SELINUX 항목을 disalbed 설정하면 된다.

svn 저장소 확인 명령어

1
2
svn list svn://저장소ip/저장소명
svn info svn://저장소ip/저장소명

실행결과

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost conf]# svn list svn://127.0.0.1/TestStore1
asdfadf
[root@localhost conf]# svn info svn://127.0.0.1/TestStore1
경로: TestStore1
URL: svn://127.0.0.1/TestStore1
저장소 루트: svn://127.0.0.1/TestStore1
저장소 UUID: 34f9c9c8-3847-47ce-8317-dc2485562f5e
리비전: 1
노드 종류: 디렉토리
마지막 수정 작업자: admin
마지막 수정 리비전: 1
마지막 수정 일자: 2018-04-30 17:28:43 +0900 (2018-04-30, 월)

마무리

지금까지 centos에 subversion(svn) 설치하고 원격저장소를 생성하고 그 결과를 확인했다.

이클립스와 같은 개발툴에서 방금 생성한 저장소인 svn://127.0.0.1/TestStore1 에 url로 접속해 보면 접속이 가능한 것을 확인 할 수 있다.

물론 이번 예제를 따라했다면 root/root, admin/admin 계정을 사용해야 할 것이다.

Subversion과 apache를 연동하여 저장소의 접속 url을 svn이 아니라 http로 접근하는 방법이 있는 것 같은데, 그것은 나중에 한번 해봐야 겠다.

추가 서버동작시 svn 서비스 자동 실행하기

1
[root@localhost svn]# systemctl enable svnserve.service