cvs repository 백업 스크립트
글쓴이: 송지석 / 작성시간: 화, 2004/01/20 - 11:42오전
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:
댓글 달기