Metainformationen zur Seite
Dies ist eine alte Version des Dokuments!
SVNC Skript
Skript zum Anlegen, Löschen, … von Subversion Repositories
svnc
#!/bin/bash ############################################################################## # # Wrapper Script for svn command. # ############################################################################## # # JHE Development / IT-Service Huber, # Chiemgaustr. 20, # 83552 Evenhausen, # Germany # ############################################################################## SVNBASE="/var/local/svn" SVNBASEURL="file:///$SVNBASE" SVNEXEC="/usr/bin/svn" CONFIGDIR="/etc/subversion" WEBCONFIGDIR="/var/www/vhosts/it-service-huber.de/subdomains/svn/include" BACKUPDIR="/private-backup/auto_backup/subversion" BACKUPSCRIPT="/private-backup/auto_backup/subversion/runSvnBackup.sh" REPOFILE="$WEBCONFIGDIR/repo_list.php" SVNADMINUSER="admin" SVNADMINPASSWD="********" AUTHZFILENAME="dav_svn.authz" USERFILENAME="dav_svn.passwd" GROUPDEVELOPER="developer" quit() { clear exit } interactiveSelectCommands() { clear echo "" echo " Subversion (SVN) Administration " echo " =============================== " echo "" printf " 1 - empty Erstellt leeres Repository in SVN\n" printf " 2 - project Erstellt neues Projekt in SVN mit Grundstruktur\n" printf " 3 - delete Löscht Repository (ACHTUNG! Daten für immer verloren)\n" printf " 4 - dump Repository dump\n" printf " 5 - load Repository wiederherstellen\n" printf " 6 - info Zeige Repository Infomrationen\n" printf " 7 - log Zeige Repository Logs\n" printf " 8 - list Zeige Repository Inhalt\n" printf " u - adduser Erstelle neuen SVN-Benutzer oder aendere Passwort\n" printf " t - tag/branch Erstelle einen Tag oder Branch\n" echo "" echo " editCfg - Konfigurations-Dateien bearbeiten" echo "" echo " q - Abbruch" echo "" printf " Auswahl: " read sel case $sel in 1|empty) COMMAND="empty" ;; 2|project) COMMAND="project" ;; 3|delete) COMMAND="delete" ;; 4|dump) COMMAND="dump" ;; 5|load) COMMAND="load" ;; 6|info) COMMAND="info" ;; 7|log) COMMAND="log" ;; 8|list) COMMAND="list" ;; u|adduser) COMMAND="adduser" ;; t|tag|branch) COMMAND="copy" ;; reconfig) COMMAND="reconfig" ;; editCfg) COMMAND="editCfg" ;; q) quit ;; esac return } getRepo() { clear if [ "$1" = "" ] then echo "" echo " Repository-Auswahl" echo " =============================== " echo "" repos=`find $SVNBASE -maxdepth 1 -type d -printf "%f\n"` cnt=0 for srepo in $repos; do if [ "$cnt" = "0" ] then repolist[$cnt]=$srepo else printf " $cnt:\t${srepo} \n" repolist[$cnt]=$srepo fi ((cnt=$cnt+1)); done echo "" echo " q - Abbruch" echo "" printf "\n Auswahl: " read sel if [ "$sel" = "q" ] then quit fi REPO=${repolist[$sel]} echo " -> $REPO" # read hallo fi return } createRepo() { if [ "$1" = "" ] then printf " Repository Name: " read REPO else REPO=$1 fi svnadmin create $SVNBASE/$REPO printf " Repository Titel: " read title if [ "$title" = "" ] then title=$REPO fi chown -R www-data:www-data $SVNBASE/$REPO return } createStructure() { REPO=$1 svn co file://$SVNBASE/$REPO /tmp/$REPO --username $SVNADMINUSER --password $SVNADMINPASSWD OldPWD=`pwd` cd /tmp cd $REPO mkdir tags mkdir work mkdir public mkdir work/docs mkdir work/source touch work/docs/Anforderungen.xls svn add * svn commit -m "Projekt $REPO angelegt" --username $SVNADMINUSER --password $SVNADMINPASSWD cd .. rm -rf $REPO cd $OldPWD return } registerRepo() { REPO=$1 # register in WebSVN printf "\$config->addRepository(\'$title\', \'file://$SVNBASE/$REPO\');\n" >> $REPOFILE case $COMMAND in empty) ;; project) printf "\$config->setMinDownloadLevel(1, \'$title\');\n" >> $REPOFILE ;; esac printf "\n" >> $REPOFILE # register in AUTHZ file printf "\n[$REPO:/]\n@$GROUPDEVELOPER = rw\n" >> $CONFIGDIR/$AUTHZFILENAME cp -f $CONFIGDIR/$AUTHZFILENAME $WEBCONFIGDIR/$AUTHZFILENAME # register for backup printf "backupSVN '$REPO'\n" >> $BACKUPSCRIPT return } editSvnFiles() { mcedit $REPOFILE mcedit $CONFIGDIR/$AUTHZFILENAME cp -f $CONFIGDIR/$AUTHZFILENAME $WEBCONFIGDIR/$AUTHZFILENAME return } unregisterRepo() { printf "Bitte manuell austragen...\n"; } deleteRepo() { REPO=$1 printf " LÖSCHEN bitte mit JA bestätigen: " read ja if [ "$ja" = "JA" ] then rm -rf $SVNBASE/$REPO unregisterRepo $REPO echo " $REPO unwiederruflich gelöscht!" fi return } dumpRepo() { REPO=$1 FILE=$2 if [ "$FILE" = "" ] then FILE=$BACKUPDIR/$REPO/dump_$REPO if [ ! -d "$BACKUPDIR/$REPO" ]; then mkdir $BACKUPDIR/$REPO fi fi svnadmin dump "$SVNBASE/$REPO" > "$FILE" gzip -f9 $FILE return } loadRepo() { REPO=$1 FILE=$2 if [ "$FILE" = "" ] then if [ -e "$BACKUPDIR/dump_$REPO" ] then svnadmin load $SVNBASE/$REPO < $BACKUPDIR/$REPO/dump_$REPO else ls -1 $BACKUPDIR/$REPO printf " Dateinamen bitte angeben (ohne Endung .gz): " read file gunzip -kc $BACKUPDIR/$REPO/$file > $BACKUPDIR/$REPO/dump.tmp svnadmin load $SVNBASE/$REPO < $BACKUPDIR/$REPO/dump.tmp rm $BACKUPDIR/$REPO/dump.tmp printf "\n" fi else gunzip -kc $FILE > $BACKUPDIR/$REPO/dump.tmp svnadmin load $SVNBASE/$REPO < $BACKUPDIR/$REPO/dump.tmp rm $BACKUPDIR/$REPO/dump.tmp printf "\n" fi return } addUser() { USER=$1 PASSWD=$2 if [ "$USER" = "" ] then echo cat $CONFIGDIR/$USERFILENAME echo printf " Benutzername (Login): " read USER fi if [ "$PASSWD" = "" ] then printf " Passwort für \"$USER\": " read PASSWD fi htpasswd -b $CONFIGDIR/$USERFILENAME $USER $PASSWD mcedit $CONFIGDIR/$AUTHZFILENAME cp -f $CONFIGDIR/$USERFILENAME $WEBCONFIGDIR/$USERFILENAME cp -f $CONFIGDIR/$AUTHZFILENAME $WEBCONFIGDIR/$AUTHZFILENAME return } cpRepo() { clear REPO=$1 cpDirList=`svnlook tree $SVNBASE/$REPO/ --full-paths | egrep "/$"` cnt=0 printf "Wähle Quell- und Ziel-Verzeichnis von $REPO: \n=====================================================\n" for sdir in $cpDirList; do if [ "$cnt" = "0" ] then dirlist[$cnt]=$sdir else printf " $cnt:\t${sdir} \n" dirlist[$cnt]=$sdir fi ((cnt=$cnt+1)); done echo "" echo " q - Abbruch" echo "" printf " Quelle: " read SOURCE if [ "$SOURCE" = "q" ] then quit fi SOURCE=${dirlist[$SOURCE]} printf " -> $SOURCE \n Ziel: " read TARGET if [ "$TARGET" = "q" ] then quit fi TARGET=${dirlist[$TARGET]} printf " -> $TARGET \n Tag/Branch-Name: " read NAME if [ "$NAME" = "q" ] then quit fi svn copy $SVNBASEURL/$REPO/$SOURCE $SVNBASEURL/$REPO/$TARGET/$NAME -m "Creating tag/branch $TARGET/$NAME from $SOURCE" return } reconfig() { clear echo -e "\nInstall svnc script ... " cp $BACKUPDIR/svnc /bin/svnc chmod a+x /bin/svnc chown root:root /bin/svnc echo -e "Copy authz files from $CONFIGDIR to $WEBCONFIGDIR ... \n" cp -f $CONFIGDIR/$USERFILENAME $WEBCONFIGDIR/$USERFILENAME cp -f $CONFIGDIR/$AUTHZFILENAME $WEBCONFIGDIR/$AUTHZFILENAME exit } if [ ! -e "/bin/svnc" ] then reconfig fi COMMAND=$1 if [ "$COMMAND" = "" ] then interactiveSelectCommands else shift fi REPO=$1 FILE=$2 echo "$COMMAND $REPO $FILE" case $COMMAND in empty) createRepo $REPO registerRepo $REPO editSvnFiles ;; project) createRepo $REPO registerRepo $REPO createStructure $REPO editSvnFiles ;; delete) getRepo $REPO deleteRepo $REPO editSvnFiles ;; dump) getRepo $REPO shift dumpRepo $REPO $FILE ;; load) getRepo $REPO shift loadRepo $REPO $FILE ;; info) getRepo $REPO svn info $SVNBASEURL/$REPO --username $SVNADMINUSER --password $SVNADMINPASSWD ;; log) getRepo $REPO svn log $SVNBASEURL/$REPO --username $SVNADMINUSER --password $SVNADMINPASSWD ;; list) getRepo $REPO svn list -v --depth files --recursive $SVNBASEURL/$REPO --username $SVNADMINUSER --password $SVNADMINPASSWD ;; adduser) # REPO = Benutzername, FILE = Passwort addUser $REPO $FILE ;; copy) getRepo $REPO cpRepo $REPO ;; reconfig) reconfig ;; editCfg) editSvnFiles ;; quit) quit ;; esac
Diskussion