cvs repository 백업 스크립트

송지석의 이미지

cvs로 프로젝트 관리하실 때
/cvs/ 와 같이 top 디렉토리 밑에 proj1 proj2 등으로 프로젝트별로 리포지토리가 여럿일 때 리포지토리 하나씩 백업하는 스크립트입니다.
저는 cvs 서버의 hdd가 모자라서 smb로 연결된 NAS에 ssh되는 서버를 물리고 ssh 터널로 삼바 연결해서 백업하도록 했습니다.

cron에 등록해서 매일 백업하고, 오래된 것은 자동으로 지우도록 했습니다. 며칠 전 것까지 보관할 지도 정할 수 있습니다.
단점은,
1. 터널을 미리 만들어두어야 함 : 보안상 암호를 안넣게 하기는 좀 찜찜해서 그렇습니다. ssh 연결시 rsa키로 인증하고 그냥 터널을 계속 켜놓기로 했습니다.
2. 삼바 암호가 스크립트에 그냥 들어감. : cvs 서버가 뚫리면 삼바 암호가 누출될 수 있습니다. 스크립트로 돌리려니 어쩔 수 없는 결과 같습니다.
혹시 더 좋은 생각 있으시면 코멘트 환영합니다.
이걸 응용해서 삼바말고 다른 방법으로 백업할 수도 있을 것 같습니다.

/home/cvs/.cron/bin/cvs-repbackup.sh

#!/bin/bash

# Daniel Jiseok Song
# cvs repository backup script
#
# 2004-1-19 tunneled smb version
# 2004-1-20 added old (4 days ago) back removing routine,
#           more generalization.

echo 'Start of cvs repository backup'
CVSROOT_TOP=/home/cvs
BACKUP_DIR=/home/cvs/.cron/tmp
REPO_NAME=test
REMOTE_BACKUP_DIR=samba-directory
SMB_USER=yourname
SMB_PASSWD=yourpasswd
TUNNEL_PORT=ssh-local-tunnel-port-number
NUMPARAM=($#)
BACKUP_KEEP_DAYS=4

if [ $NUMPARAM -eq 0 ]; then
    echo 'usage: cvs-repbackup.sh [cvsroot-top] [temporary-backup-dir] [repository-name]'
    echo 'doing default setting'
    echo $CVSROOT_TOP $BACKUP_DIR $REPO_NAME
fi

if [ $NUMPARAM -gt 0 ]; then
    CVSROOT_TOP=$1
fi
if [ $NUMPARAM -gt 1 ]; then
    BACKUP_DIR=$2
fi
if [ $NUMPARAM -gt 2 ]; then
    REPO_NAME=$3
fi
echo 'backing up cvs repository. cvsroot:'$CVSROOT_TOP/$REPO_NAME 'backup-dir:'$BACKUP_DIR

CUR_TIME=$(date +%Y-%m-%d)
OF=$REPO_NAME-$CUR_TIME.tar.gz
# to delete old backup file
AGO="$BACKUP_KEEP_DAYS days ago"
#OLD_TIME=$(date +%Y-%m-%d --date '4 days ago')
OLD_TIME=$(date +%Y-%m-%d --date "$AGO")
DELF=$REPO_NAME-$OLD_TIME.tar.gz
echo $OF

if [ ! -e $BACKUP_DIR ]; then
    echo 'not exist backup directory ' $BACKUP_DIR
    echo 'creating directory'
    mkdir $BACKUP_DIR
fi
cd $BACKUP_DIR
pwd
# make tar ball
if [ -e $OF ]; then
    echo 'already exist backup file ' $OF 'deleting..'
    rm $OF
fi
tar -cpszf "$OF" "$CVSROOT_TOP/$REPO_NAME"
if [ $? = 0 ] ; then
 echo success;
else
 echo failed;
 exit 0;
fi
# upload
# you should have ssh port forwarded local port
# ssh -f sshuser@firewall -L ssh-tunnel-port:samba-nas-ip:139 tail -f /etc/motd
echo upload $BACKUP_DIR/$OF $OF
smbclient //localhost/home_dir $SMB_PASSWD -p $TUNNEL_PORT -U $SMB_USER -c "cd $REMOTE_BACKUP_DIR; put $BACKUP_DIR/$OF $OF"
echo end upload
echo removing old $DELF from $REMOTE_BACKUP_DIR
smbclient //localhost/home_dir $SMB_PASSWD -p $TUNNEL_PORT -U $SMB_USER -c "cd $REMOTE_BACKUP_DIR; rm $DELF"
echo end remove
#echo deleting temporary tarball
rm "$OF"
echo 'End of cvs-repbackup.sh'
exit 0

(samba에서 자기 홈디렉토리는 home_dir로 가정했습니다)

아래는 위 스크립트를 cron으로 동작시키는 스크립트입니다.
/home/cvs/.cron/daily/cvs_backup.sh

#!/bin/bash

/home/cvs/.cron/bin/cvs-repbackup.sh /home/cvs /home/cvs/.cron/tmp repository1
/home/cvs/.cron/bin/cvs-repbackup.sh /home/cvs /home/cvs/.cron/tmp repository2

Quote:
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Mon Jan 19 17:26:35 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
02 4 * * * run-parts /home/cvs/.cron/daily >> /home/cvs/.cron/log
Forums: 

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.