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
![](https://blog.kakaocdn.net/dn/AAFd2/btqy32DtFzy/qgkGSPj1DJcmtIh9x8VUYk/img.jpg)
vi ${REPO_DIR}/rord/conf/svnserve.conf
![](https://blog.kakaocdn.net/dn/d5j1Jy/btqy0GvlYKG/QNmDKQ1YLvH1NV92eTpUx1/img.jpg)
vi ${REPO_DIR}/rord/conf/passwd
![](https://blog.kakaocdn.net/dn/HwVGf/btqy0qM5kVq/Foe863JIpm4l0ek3pIH1Pk/img.jpg)
5. SVN 재기동 및 정상화 확인
![](https://blog.kakaocdn.net/dn/bQ02rB/btqy04vK2Vq/CfI92U6U67GGHvqsAuZYv1/img.jpg)
![](https://blog.kakaocdn.net/dn/D4w7D/btqy0S99N2t/b2oagNs68kXYlONJwRiPQk/img.jpg)
![](https://blog.kakaocdn.net/dn/sKYwE/btqy1gCJhSM/lNddMzFSNSs9PSkjKQjMzk/img.jpg)
TortoiseSVN 설치방법(SVN/로컬Install)
1. 다운로드/설치(References : 거북이SVN 참조)
![](https://blog.kakaocdn.net/dn/b3jl63/btqy2omLU9b/31rOKHASU02p8NwfwiAWuK/img.jpg)
![](https://blog.kakaocdn.net/dn/baDokg/btqy4e4TE2g/YjXkN7F3ZaGlEwqlXpQhQk/img.jpg)
![](https://blog.kakaocdn.net/dn/bifoq3/btqy04pbGao/b8ofG8ENi9uz0gFOENkE6k/img.jpg)
![](https://blog.kakaocdn.net/dn/lusED/btqy4eRnknB/y8FyNjOn8EoGJLgKWesG51/img.jpg)
2. 확인
![](https://blog.kakaocdn.net/dn/bklua1/btqy03Rjbei/KvckCCKio2CMEiaHUNvs90/img.jpg)
![](https://blog.kakaocdn.net/dn/blcmB3/btqy0SoVYmj/EkXldVbFDKkrkmjaVS7dWk/img.jpg)
![](https://blog.kakaocdn.net/dn/RlJvR/btqy2omROqu/O7cIOHK7qUiO7ekaeAYQwK/img.jpg)
CSVN 설치방법(CSVN/Install)
※ CSVN 필수 스펙
![](https://blog.kakaocdn.net/dn/qyPrF/btqy0EEr6V7/H6OkF5sr9MkARW63OaZof0/img.jpg)
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 받아 다운로드 진행
![](https://blog.kakaocdn.net/dn/kG9Wb/btqy03wZzKT/62zyjlHfRzUNBGYK4vqsFk/img.jpg)
![](https://blog.kakaocdn.net/dn/ddl8DQ/btqy02SseO0/PLDMjH4fRrYKSnGcfTjoT1/img.jpg)
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
![](https://blog.kakaocdn.net/dn/1Vrgo/btqy4dyd0on/L9mpLLQXKR6LZLpSh9Cuz1/img.jpg)
![](https://blog.kakaocdn.net/dn/cN1nkv/btqy03X8r9J/ik4RmSYXEIQwWlUaR1lBMk/img.jpg)
![](https://blog.kakaocdn.net/dn/BfAwl/btqy4drsbMW/ppD8fZGtQrkeJbGxzKdm10/img.jpg)
![](https://blog.kakaocdn.net/dn/PXOAm/btqy04v0CEE/cBklDBk4Tn22VJHpVTf5h1/img.jpg)
![](https://blog.kakaocdn.net/dn/cEC4H7/btqy2n2EhC1/9HSJ4QgkoEl2l44yeMoGbK/img.jpg)
#- Repository Create
Repository List > 생성 > Name: 설정 > Initialize: Create standard trunk/branches/tags structure
#- Authentication Rules Settings
Access Rules > 권한정의
#- 상세내용 References 내, (csvn)user_guide 참조
![](https://blog.kakaocdn.net/dn/n8vqv/btqy0FQXymF/WLMSMRtUmZkVCS3bwL0sP0/img.jpg)
![](https://blog.kakaocdn.net/dn/bTK1bt/btqy2nuSq08/2U6xUDNk0dgtJ6O6yOaXk1/img.jpg)
#- References
(IBM) List of control key assignments for your terminal (stty command)
'인프라 > 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 |