본문 바로가기

인프라/MW

SVN(Subversion)

SVN에 대해서 간략하게 소개를 하도록하겠다.

 

SVN은  형상관리를 해주는 필수 소프트웨어이다.

 

현재는 GitHub/GitLab과 같은 솔루션을 많이 사용하는 추세이나,  레거시에서 많이 확인된다.

 

SVN에 대한 상세한 내용은 SVN을 참고하면 되겠다.

 

SVN 이외에 CSVN라는 UI가 붙고 여러 기능이 추가된 상위호환 SVN이 존재한다.

 

CSVN은 서버 내, SVN 설정파일에서의 id,pwd,권한부여,등에 대한 설정작업에 대한 부분을 브라우저 상에서 간편하게 해결할 수 있다는 장점이 있으나 설치 후, mig 또는 upgrade 등과 같은 작업이 발생 시 상당히 난항을 겪는 경우가 발생한다. (apache/svn/ldap/etc 설정이 혼재로 인한 구조체 파악힘듬)

 

이런 부분에서 단편화된 기능과 의존성 관계가 적은 SVN이 어찌본다면 장점이라 볼 수 있을 것이다.

 

잡다한 이야기는 여기까지하고, SVN을 접하면서 만나볼 내용에 대해서 차례대로 기술하겠다.

 


SVN Compile 설치방법(SVN/Install)

더보기

1. 다운로드/설치 경로지정(사전준비)

※ 권고 사항 : SVN또는 형상관리 솔루션들은 되도록이면 CI/CD(jenkins)가 설치되어있는 계정으로 설치
- 계정 권한에 관련된 사항으로 이슈가 발생할 소지가 크기 때문

export ID=`whoami`
export BASE_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`

 

vi ${BASE_DIR}/.bash_profile

## Edit Server Env Setting
export ID=`whoami`
export BASE_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`
export PS1='[`id -nu`@`hostname`:$PWD]# '
export LANG=ko_KR.utf-8

stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" cs8 -ixany -parenb -istrip

## directory paths
export SVN_DIR=${BASE_DIR}/appsw/subversion-1.12.2
export REPO_DIR=${BASE_DIR}/svn/repo
export SCRIPT_DIR=${BASE_DIR}/scripts
export PATH=${SVN_DIR}/bin:$PATH

alias svnstart='${SCRIPT_DIR}/svnctrl start'
alias svnstop='${SCRIPT_DIR}/svnctrl stop'

 

변경된 환경변수 적용

source ${BASE_DIR}/.bash_profile

 

컴파일에 필요한 의존성 라이브러리 설치

sudo yum install zlib-devel
sudo yum install expat-devel
sudo yum install autoconf
sudo yum install libtool
sudo yum install utf8proc

 

설치를 위한 소프트웨어 다운로드

mkdir -p ${BASE_DIR}/appsw/backup
mkdir -p ${BASE_DIR}/scripts
cd ${BASE_DIR}/appsw

#- 설치 시, 서로 package가 호환되는지 여부를 released 내역을 확인하여 설치 진행
wget https://archive.apache.org/dist/subversion/subversion-1.12.2.tar.gz
wget https://archive.apache.org/dist/apr/apr-1.7.0.tar.gz
wget https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz

tar -xzf subversion-1.12.2.tar.gz; tar -xzf apr-1.7.0.tar.gz; tar -xzf apr-util-1.6.1.tar.gz; tar -xzf sqlite-autoconf-3300100.tar.gz
mv *.tar.gz ${BASE_DIR}/appsw/backup/

mv ${BASE_DIR}/appsw/apr-1.7.0 ${SVN_DIR}/
mv ${BASE_DIR}/appsw/apr-util-1.6.1 ${SVN_DIR}/
mv ${BASE_DIR}/appsw/sqlite-autoconf-3300100 ${SVN_DIR}/

 

2. 설치 진행(본작업)

cd ${SVN_DIR}/apr-1.7.0
./configure --prefix=${SVN_DIR}/apr-1.7.0
make clean; make; make install

cd ${SVN_DIR}/apr-util-1.6.1
./configure --prefix=${SVN_DIR}/apr-util-1.6.1 --with-apr=${SVN_DIR}/apr-1.7.0 --without-berkely-db
make clean; make; make install

cd ${SVN_DIR}/sqlite-autoconf-3300100
./configure --prefix=${SVN_DIR}/sqlite-autoconf-3300100
make clean; make; make install

cd ${SVN_DIR}
./configure --prefix=${SVN_DIR} --with-apr=${SVN_DIR}/apr-1.7.0 --with-apr-util=${SVN_DIR}/apr-util-1.6.1 --with-sqlite=${SVN_DIR}/sqlite-autoconf-3300100 --with-lz4=internal --with-utf8proc=internal
make clean; make; make install

 

3. 컨트롤 스크립트 작성(권한부여)

touch ${SCRIPT_DIR}/svnctrl
chmod 755 ${SCRIPT_DIR}/svnctrl

 

vi ${SCRIPT_DIR}/svnctrl

#!/bin/bash

#--------------------------------------------------------------------------
#-- Set Error if Variable is Not Set
#-- Set Exit if Error is Occured
#--------------------------------------------------------------------------

#set -o nounset
set -o errexit

#--------------------------------------------------------------------------
# // Check Parameter & Define Variable
#--------------------------------------------------------------------------

if [[ $# -lt 1 ]]; then
    if [[ $# != $1 ]]; then
        echo
        echo " *** NOT FOUND CMD : $1  ***"
        echo " ex ) ./svnctrl (start or stop)"
        echo
        exit 1
    fi
fi

CMD=$1
LOG_DIR=${SCRIPT_DIR}/logs
REPO_DIR=${BASE_DIR}/svn/repo

CMD_LIST=("start" "stop")
DIR_LIST=("${LOG_DIR}" "${REPO_DIR}")
ST_LIST=("0" "1")

DATE=`date +%Y%m%d-%H%M%S`
PORT=8003
APP_NAME="SVN"
UNAME=`id -u -n`
SVN_USER="ec2-user"
PID=`ps -ef | grep svnserve | grep -v "grep" | awk '{print $2}'`

#---------------------------------------------------------------
# // Validate Parameter & Run Script
#---------------------------------------------------------------

func_output() {
    PID=$1
    if [[ -z $PID ]]; then
        echo "[ INFO ] ${APP_NAME} is not running."
    else
        echo "[ INFO ] ${APP_NAME} is running."
        echo "[ INFO ] ${APP_NAME} PID is $PID."
    fi
}

func_pid_chk() {
    args=$1
    if [[ e$args != "e" ]]; then
        echo "0"
    else
        echo "1"
    fi
}

func_cmd_ctrl() {
    if [[ ${CMD} = "${CMD_LIST[0]}" ]]; then
        status=$(func_pid_chk ${PID})
        if [[ ${status} = "${ST_LIST[0]}" ]]; then
            func_output ${PID}      
            exit 0;
        elif [[ ${status} = "${ST_LIST[1]}" ]]; then 
            func_output ${PID}
            echo "[ INFO ] ${APP_NAME} start now."
            svnserve -d -r ${REPO_DIR} --listen-port ${PORT}
        fi
    elif [[ ${CMD} = "${CMD_LIST[1]}" ]]; then
        status=$(func_pid_chk ${PID})
        if [[ ${status} = "${ST_LIST[0]}" ]]; then
            func_output ${PID}
            echo "[ INFO ] ${APP_NAME} shudown now."
            kill -9 ${PID}
        elif [[ ${status} = "${ST_LIST[1]}" ]]; then 
            func_output ${PID}
            exit 0;
        fi
    else
        echo "[ WARN ] check parameter. -> ${CMD}"
    fi
}

func_dir_chk() {
    for DIR_NAME in "${DIR_LIST[@]}"; do
        if [[ ! -d $DIR_NAME ]]; then
            echo "[INFO] CREATE DIRECTORY : $DIR_NAME"
            mkdir -p $DIR_NAME
        fi
    done
    func_cmd_ctrl 2>&1 | tee "${LOG_DIR}"/${DATE}.log
}

func_user_chk() {
    if [[ ${UNAME} != ${SVN_USER} ]]; then
        echo "[INFO] ${APP_NAME} can be start ${SVN_USER} user only ."
        exit 1;
    else
        func_dir_chk
    fi
}

func_user_chk

 

4. 설정파일 공통화/커스텀 (svnserve.conf / passwd)

cd ${REPO_DIR}
svnadmin create rord
mv ${REPO_DIR}/rord/conf ${REPO_DIR}/
cd ${REPO_DIR}/rord
ln -s ${REPO_DIR}/conf ${REPO_DIR}/rord/conf
configuration files 공통화작업(추후, 신규 repo 생성 시, 동일 심볼릭만으로 계정관리 공통화)

vi ${REPO_DIR}/rord/conf/svnserve.conf

대상 repo 사용 설정정보(계정있는 사용자만 허용설정)


vi ${REPO_DIR}/rord/conf/passwd

사용자정보 등록(id/pwd)

 

5. SVN 재기동 및 정상화 확인

설정완료 후, 적용을 위한 재기동

 

빈 repo 생성에 따른 정상 적용여부 확인 진행(디렉터리 및 초기영역 생성 후, commit)

 

미리 설치해둔 거북이SVN으로 정상여부 확인

 

 


TortoiseSVN 설치방법(SVN/로컬Install)

더보기

1. 다운로드/설치(References : 거북이SVN 참조)

OS bit에 맞는 설치파일 선택하여 다운 받아 설치

 

main(next) > License Agreement(next) > Setup(Install) task의 main단계

 

Setup(Install) 단계

 

설치완료(Finish)

 

2. 확인

 

생성한 계정으로 접속(ID/PWD)

 

정상접속확인

 

 

 

 


CSVN 설치방법(CSVN/Install)

더보기

※ CSVN 필수 스펙

Subversion Edge 5.2.4(Linux 64-bit) requirements

 

1. 다운로드/설치(사전준비)

export ID=`whoami`
export BASE_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`

 

vi ${BASE_DIR}/.bash_profile

## Edit Server Env Setting
export ID=`whoami`
export BASE_DIR=`cat /etc/passwd|grep ${ID}|cut -f6 -d ':'`
export PS1='[`id -nu`@`hostname`:$PWD]# '
export LANG=ko_KR.utf-8

stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" cs8 -ixany -parenb -istrip

## directory paths
export CSVN_DIR=${BASE_DIR}/appsw/csvn

 

변경된 환경변수 적용

source ${BASE_DIR}/.bash_profile

 

설치를 의존성 필수 소프트웨어 다운로드 설치(jre1.8)

cd ${BASE_DIR}/appsw
wget https://javadl.oracle.com/webapps/download/AutoDL?BundleId=239848_230deb18db3e4014bb8e3e8324f81b43
mv "AutoDL?BundleId=239848_230deb18db3e4014bb8e3e8324f81b43" jre-8u221-linux-x64.tar.gz
tar -xzf jre-8u221-linux-x64.tar.gz

 

설치를 의존성 필수 소프트웨어 다운로드 설치(python)

sudo yum -y install python*

 

csvn 다운로드를 위한 e-mail인증절차 후, link 받아 다운로드 진행

e-mail 인증 절차 후, 본인 e-mail로 다운로드 링크 전송

 

email로 링크 복사하여, 보관

 

wget http://www.collab.net/webform_protected_file/Ja1-iUWg3FnYWzbmNBA9MLHeilo-rXe3nswvNfWMkOs/download

mv download CollabNetSubversionEdge-5.2.4_linux-x86_64.tar.gz

tar -xzf ${BASE_DIR}/appsw/CollabNetSubversionEdge-5.2.4_linux-x86_64.tar.gz

mv ${BASE_DIR}/appsw/CollabNetSubversionEdge-5.2.4_linux-x86_64.tar.gz ${BASE_DIR}/appsw/backup/

cd ${CSVN_DIR}

  

2. JAVA_HOME 정의 후 기동&확인

 

vi ${CSVN_DIR}/bin/csvn

JAVA_HOME=/home/ec2-user/appsw/jre1.8.0_221

./bin/csvn start

 

csvn 내, JAVA_HOME 경로 지정 후, 기동(프로그세스 확인 필수)

  

main page default id/pwd (admin/admin)

 

1. 초기 패스워드 변경 필수 task진행

 

2. Server Setting Task 필수 설정 진행(서비스 기동에 필요한 설정정보)

 

서비스 기동하면, 정상동작 여부 바로 확인 가능

 

#- Repository Create
Repository List > 생성 > Name: 설정 > Initialize: Create standard trunk/branches/tags structure

#- Authentication Rules Settings
Access Rules > 권한정의

#- 상세내용 References 내, (csvn)user_guide 참조

 

csvn id/pwd 접속

 

정상접근가능확인

 

 

#- References

(SVN)main_page

(SVN)detail

(SVN)docs

(SVN)quick start

(SVN)install options

(IBM) List of control key assignments for your terminal (stty command)

(APR)Apache Portable Runtime 최신 버전확인

(sqllite)최신 버전확인

(SVN)dependency

거북이SVN

(csvn)download main page

(csvn)user_guide

(csvn)docs

'인프라 > MW' 카테고리의 다른 글

[GitLab/Linux or Unix] password reset (Root/Admin)  (0) 2019.12.20
(Keystore)Self-Signed-Cert-Trust-Manager(InstallCert.java)  (0) 2019.10.16
Nginx  (0) 2019.09.26
Apache  (0) 2019.09.26
Jenkins  (0) 2019.09.25