svn相关配置及学习,   linux搭建ZenTaoPMS,readmine项目管理软件

http://svenman.blog.51cto.com/6867097/1577385 

http://blog.sina.com.cn/s/blog_963453200101eiuq.html 

http://dragondragon.blog.51cto.com/6170889/1657173 

一:svn独立安装配置

svn服务器有2种运行方式

1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);

1.svn安装

#最新版本svn需要sqlite的版本最低为3.7.15,yum自带sqlite版本为3.7.12,所以需要手动编译安装最新版本sqlite

wget http://www.sqlite.org/2013/sqlite-autoconf-3071700.tar.gz

tar xf sqlite-autoconf-3071700.tar.gz

cd sqlite-autoconf-3071700

./configure && make && make install && echo OK

编译安装subversion需要apr,apr-util这里apr apr-util安装略

wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.1.tar.bz2

tar subversion-1.8.1.tar.bz2

cd subversion-1.8.1

./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

make && make install

为了方便下操作,把svn相关的命令添加到环境变量中:
echo “export PATH=$PATH:/usr/local/subversion/bin/” >> /etc/profile
source /etc/profile

/usr/local/subversion/bin/svnserve --version

如果显示如下,svn安装成功:

2.svn配置

1)创建svn库

   创建 svn专用户  # useradd pocsvn

   创建SVN版本库目录  #mkdir /home/pocsvn/project

   创建SVN仓库 # svnadmin create /home/pocsvn/project/poc

版本仓库创建成功后,会在/home/pocsvn/project/poc/conf目录下生成三个配置文件:

authz       #权限配置

passwd    # 用户和口令配置

svnserve.conf # SVN服务配置

   将目录 project 目录拥有者修改为 pocsvn 用户:

   #chown -R pocsvn:pocsvn /home/pocsvn/project

   #chmod 755 /home/pocsvn/project

2)配置passwd文件

   vim /home/pocsvn/project/poc/conf/passwd

   fuquanjun = fuquanjun    #配置允许访问svn库的帐户,前面是用户名,后面是密码

3)配置authz(详细配置参考svn+apache)

4)配置svnserve.conf

    vim /home/pocsvn/project/poc/conf/svnserve.conf

    anon-access = read        #匿名用户只读

   auth-access = write                                      #认证用户访问版本库的权限

   password-db = /home/pocsvn/project/poc/conf/passwd  #指定用户口令配置文件名
        authz-db = /home/pocsvn/project/poc/conf/authz            #指定权限配置文件名

5)启动svn

切换到pocsvn用户  

#/usr/local/subversion/bin/svnserve -d -r /home/pocsvn/project

#默认的启动端口号为3690

-d 表示以 daemon 方式(后台运行)运行

-r 指定根目录是/home/pocsvn/project

#/usr/local/subversion/bin/svnserve -d �Clisten-port 9999 -r /home/pocsvn/project

�Clisten-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限;

这里编写一个svn服务启动脚本

#!/bin/bash
# build this file in /etc/rc.d/init.d/svn
# chmod 755 /etc/rc.d/init.d/svn
# centos下可以用如下命令管理svn: service svn start(restart/stop)
SVN_HOME=/home/pocsvn/project
if [ ! -f "/usr/local/subversion/bin/svnserve" ]
then
    echo "svnserver startup: cannot start"
    exit
fi
case "$1" in
    start)
        echo "Starting svnserve..."
        /usr/local/subversion/bin/svnserve -d -r $SVN_HOME
        echo "Finished!"
        ;;
    stop)
        echo "Stoping svnserve..."
        killall svnserve
        echo "Finished!"
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: svn { start | stop | restart } "
        exit 1
esac

6)查看后台进程

$ ps -ef | grep svn

root      2983     1  0 09:19 ?        00:00:00 svnserve -d -r /home/pocsvn/project

jackie    4570  2496  0 10:51 pts/1    00:00:00 grep svn

其实也可以将svn加入到开机启动
编辑rc.local文件:vi /etc/rc.d/rc.local
加入如下启动命令:
/usr/local/svn/bin/svnserve -d �Clisten-port 9999 -r /home/pocsvn/project
11、如果想停止svn,则使用如下命令:
killall svnserve

客户端连接SVN

在windows下比较好用的客户端是 TortoiseSVN ,下载地址:http://tortoisesvn.net/downloads.html

安装TortoiseSVN 在Windows下新建一个文件夹svn,右键点击文件夹,选择SVN Checkout:

地址如下:
svn://{your-server-ip}:9999/poc 或者 svn://{your-server-ip}/poc

 

 

二:源码配置svn+apache

1. 安装apache

pcre apr apr-util安装略

wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.6.tar.bz2

tar zxf httpd-2.4.6.tar.bz2

cd /usr/local/httpd-2.4.6

./configure --prefix=/usr/local/apache --enable-dav --enable-so --enalbe-maintainer-mode --enable-rewrite --with-deflate --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre 

make && make install

2. 安装svn

#最新版本svn需要sqlite的版本最低为3.7.15,yum自带sqlite版本为3.7.12,所以需要手动编译安装最新版本sqlite

wget http://www.sqlite.org/2013/sqlite-autoconf-3071700.tar.gz

tar xf sqlite-autoconf-3071700.tar.gz

cd sqlite-autoconf-3071700

./configure --prefix=/usr/local/sqlite

make && make install

wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.1.tar.bz2

tar subversion-1.8.1.tar.bz2

cd subversion-1.8.1

./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite 

make && make install

3. 在apache配置文件中加载svn模块

cp subversion-1.8.1/subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/local/apache/modules/

cp subversion-1.8.1/subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/local/apache/modules/

vim /usr/local/apache/conf/httpd.conf

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module    modules/mod_dav_svn.so
LoadModule authz_svn_module  modules/mod_authz_svn.so
注:必须要先加载mod_sav_svn再加载mod_authz_svn,否则报错
4.配置 svn+apache

1)创建svn库

   创建svn专用户  # useradd pocsvn

   创建SVN 版本库目录  #mkdir /home/pocsvn/project

   创建SVN仓库 # svnadmin create /home/pocsvn/project/poc

   将目录 project 目录拥有者修改为 pocsvn 用户:

   #chown -R pocsvn:pocsvn /home/pocsvn/project

   #chmod 755 /home/pocsvn/project

2)配置svn依赖apache

sed -i 's/User daemon/User pocsvn/' /usr/local/apache/conf/httpd.conf

sed -i 's/Group daemon/Group pocsvn/' /usr/local/apache/conf/httpd.conf

sed -i 's/#ServerName.*/ServerName localhost/' /usr/local/apache/conf/httpd.conf

sed -i 's/[email protected]/root@localhost/' /usr/local/apache/conf/httpd.conf

vim /usr/local/apache2/conf/httpd.conf

<Location /home/pocsvn/project>  ##url访问路径 
DAV svn                ##进行申明
SVNParentPath /home/pocsvn/project   #svn库的根目录,表示根目录下每个子目录都是一个版本库
SVNListParentPath on 

AuthType Basic     ##基本认证
AuthName "welcome to project"      #浏览器登陆时的提示信息。随便写
AuthUserFile /home/pocsvn/project/passwd    #用户的密码信息
AuthzSVNAccessFile /home/pocsvn/project/poc/conf/authz      #指向svn库的conf目录下authz
Require valid-user      #告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库
</Location>

3)生成passwd文件

htpasswd -bc /home/pocsvn/project/passwd  hello  hello123

#在/home/pocsvn/project/下生成passwd文件,用户名为hello,密码为hello123

htpasswd -b /home/pocsvn/project/passwd  hello2  hello123

#在/home/pocsvn/project/passwd文件中添加用户名为hello,密码为hello123

4)编辑用户权限文件 authz

vi /home/pocsvn/project/poc/conf/authz

[groups]          #表示群组设置
admin = hello     #表示admin群组里的成员有hello,如果要配置多个,用逗号分隔
develop = hello2  #表示develop群组里的成员有hello2,如果要配置多个,用逗号分隔
[poc:/]           #表示仓库poc的根目录下的访问权限
hello = rw        #poc仓库hello用户具有读和写权限
hello2 = r        #poc仓库hello2用户具有只读权限
@admin = rw       #表示群admin的成员都具有读写权限
@develop = r      #表示群poc的成员都具有只读权限
[/]               #表示在所有仓库的根目录下
* = r             #表示对所有的用户都具有读权限

注:在编辑authz时,所有行都必须要顶头写,不能有缩进,否则报错。

5)修改权限

chmod 644 /home/pocsvn/project/passwd

chown -R pocsvn:pocsvn  /home/pocsvn/project/passwd

6)启动apache

service httpd start

7)通过http访问方式

http://ip地址/home/pocsvn/project/poc 会提示输入用户名密码,进去以后就可以看到相关文件了。

Windows桌面安装客户端后 --> 右击桌面 --> 点TortoiseSVN --> 选择Repo-breowser --> 输入URL(http://192.168.1.153/svn/test)--> 输入用户和密码登录 --> 登录后右击即可上传和删除文件。

8)linux客户端访问方式  svn co svn://192.168.2.185/poc

 http://huoyingdk.blog.51cto.com/3932829/1165043 

 

 

三:svn多版本配置实例

既可以通过Windows客户端访问,也可以通过http访问

代码仓库有三个仓库:project1,project2,project3

假设人员有3个人:eg1,eg3,eg5,

eg1,只能访问project1;

eg3,只能访问project2;

eg5,只能访问project3;

二 实现

创建svn用户  useradd svn

创建版本库/home/svn

mkdir /home/svn

cd /home/svn

//创建三个代码仓库

svnadmin create project1

svnadmin create project2

svnadmin create project3

//把两个权限配置文件复制到SVN

//根路径下,统一管理所有代码仓库

cd/projcet1/conf

cp authz passwd /home/svn

//打开配置文件

vi svnserve.conf

 修改成如下:

anon-access = none               //禁止匿名访问

auth-access = write

password-db = /home/svn/passwd   //统一使用密码文件

authz-db = /home/svn/authz

realm =   project1               //权限域名,很重要,写你的工程名

分别修改project2的svnserve.conf和上面一样,最后一行分别写

anon-access = none               //禁止匿名访问

auth-access = write

password-db = /home/svn/passwd   //统一使用密码文件

authz-db = /home/svn/authz

realm =   project2              //权限域名,很重要,写你的工程名

 

分别修改project3的svnserve.conf和上面一样,最后一行分别写

anon-access = none               //禁止匿名访问

auth-access = write

password-db = /home/svn/passwd   //统一使用密码文件

authz-db = /home/svn/authz

realm =   project3              //权限域名,很重要,写你的工程名

 

修改两个权限管理文件:

passwd文件

//用户名 = 密码

[users]

eg1 = 123

eg3 = 123

eg5 = 123

 

authz文件

[groups]                  //分组

admin = eg1

guest = eg3

guset1 = eg5

 

[/]                 //管理者拥有所有读写权限

* =

@admin = rw

 

[project1:/]                 //工程1的访问控制,guest1,2无法访问

@admin = rw

eg1 = rw

 

[project2:/]          

@guest = rw

eg3 = rw

 

[project3:/]

@guest1 = rw

eg5 = rw

 

三 重启

svnserve -d -r /home/svn

停止命令  killall svnserve

实际测试:各组成员只能访问自己的项目,无权限查看别人的项目,只有管理员能查看所有项目工程。

 

四:http访问方式配置

vim /usr/local/httpd/conf/httpd.conf

<Location /home/svn>
DAV svn
SVNParentPath /home/svn 
AuthType Basic
AuthName "welcome to project"      
AuthUserFile /home/svn/passwd_web    
AuthzSVNAccessFile /home/svn/authz     
Require valid-user     
</Location>

因为http方式访问需要的密码文件需要加密,所以这里重新创建了一份用户名和密码的文件

htpasswd -bc /home/svn/passwd_web eg1 123

htpasswd -b /home/svn/passwd_web eg3 123

htpasswd -b /home/svn/passwd_web eg5 123

将目录 project 目录拥有者修改为 pocsvn 用户:

#chown -R svn:svn /home/svn

#chmod 755 /home/svn

#chmod 644 /home/svn/passwd_web  ###加强文件安全

采用http访问 http://ip地址/home/svn/project1 或者 http://ip地址/home/svn/project2 

linux客户端访问 svn co svn://192.168.2.185/project1 

 

假设在/home/svn/share下面还有二个项目game,mobile

方法如下:

mkdir /home/svn/share

svnadmin create /home/svn/share/game

svnadmin create /home/svn/share/mobile

修改相关文件

vim /home/svn/share/game/conf/svnserve.conf

anon-access = none               //禁止匿名访问

auth-access = write

password-db = /home/svn/passwd   //统一使用密码文件

authz-db = /home/svn/authz

realm =   game             //权限域名,很重要,写你的工程名

vim /home/svn/authz

[/]                 //管理者拥有所有读写权限

* =

eg1 = rw

[share/game:/]

eg5 = rw

[share/mobile:/]

eg1 = rw

vim /usr/local/httpd/conf/httpd.conf

<Location /home/svn>
DAV svn
SVNParentPath /home/svn 
AuthType Basic
AuthName "welcome to project"      
AuthUserFile /home/svn/passwd_web    
AuthzSVNAccessFile /home/svn/authz     
Require valid-user     
</Location>

<Location /home/svn/share>
DAV svn
SVNParentPath /home/svn/share
AuthType Basic
AuthName "welcome to project"      
AuthUserFile /home/svn/passwd_web    
AuthzSVNAccessFile /home/svn/authz     
Require valid-user     
</Location>

重新启动httpd服务

访问方式:http://ip/home/svn/share/game   http://ip/home/svn/share/mobile输入用户密码就可

以看到相关内容。

Linux客户端访问 svn co svn://192.168.2.185/share/game 

           svn co svn://192.168.2.185/share/mobile

 

 

四:svn迁移

svnadmin 命令用法:

   create :创建版本库

   dump :数据备份

   verify :版本校验

1,进入原始svn库所在路径

cd /data/svn

2,使用svnadmin将需要迁移的项目dump出来

svnadmin dump test > test.bak

3,在新服务器上安装服务端和客户端程序

yum install -y subversion

4,确定svn版本库存放路径,并使用svnadmin创建版本库

mkdir -p /data/svn

cd /data/svn

svnadmin create test

5,将备份出来的数据,导入到新的数据库

svnadmin load test < test.bak

6,数据导完后,确定conf下的几个文件:authz,passwd,svnserve.conf

7,配置svn启动脚本,并开启服务。

vim /etc/init.d/svnserve

args="--daemon --root /data/svn --pid-file=${pidfile} $OPTIONS"

 

 

五:svn自动备份

 

利用svnadmin hotcopy可以实现完全备份,但不能进行增量备份。svnadmin hotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。

 

优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要

进行简单配置即可切换到备份库上工作。

 

缺点是:比较耗费硬盘,需要有较大的硬盘支持。

 

备份命令:

svnadmin hotcopy /path/to/repository /path/to/backup

 

1)定义备份策略

备份频度:每天进行一次全量备份。

备份地点:备份目录以当前时间命名,备份路径到/data/svnbackup/。

备份保留时期:保留7天,超过7天的进行删除。

备份时间:每晚11点59分开始。

备份检查:备份完毕后自动检查备份是否正确、记录日志。

 

2)建立备份脚本

在/data/shell目录建立备份脚本svnbak.sh,假如svn仓库路径为/data/svn,要备份到/data/svnbackup

#!/bin/bash
# Filename:    svnbak.sh
# Description: SVN完全备份
# Notes:      将脚本加入crontab中,每天定时执行
 
MAXDAYS=7                      # 备份保留最大天数
TIME=`date +'%Y%m%d%H%M%S'`
SVNPATH=/data/svn              # 定义仓库repos路径,这里的svn就是库项目
BAKDIR=/data/svnbackup         # 定义备份主目录
BAKSUBDIR=${BAKDIR}/${TIME}    # 定义全备路径
BAKLOG=${BAKDIR}/${TIME}.log    # 定义备份日志
[ ! -f "${BAKSUBDIR}" ] && mkdir -p ${BAKSUBDIR}
exec 1>${BAKLOG}
exec 2>&1
set -x
# 删除历史备份
find ${BAKDIR} -maxdepth 1 -type f -mtime +$(expr ${MAXDAYS} - 1) -exec echo "Delete {}" \; -exec rm "{}" \;
# 全备份
svnadmin hotcopy ${SVNPATH} ${BAKSUBDIR}
# 如果能打印版本号说明备份正确
svnlook youngest ${BAKSUBDIR}
[ $? -ne 0 ] && exit 1
cd ${BAKDIR}
# 压缩备份
tar cvzf ${TIME}.tar.gz ${TIME}/
rm -rf ${BAKSUBDIR}

# 可以通过rsync把备份文件同步到远程备份机上

 

3)设置定时crontab

每天23点59分开始执行脚本:

59 23 * * * /bin/bash /data/shells/svnbak.sh

 

例如:

我的svn项目如下分布

/home/svn/arts   /home/svn/doc   这里的arts,doc是版本库

/home/svn/server/game  /home/svn/server/hall  /home/svn/server/mall /home/svn/server/website   这里game,hall,mall,website是版本库

/home/svn/client/mobile /home/svn/client/website  /home/svn/client/qzone 

这里mobile,website,qzone是版本库

我这里因为目录不一样,所以采用3个脚本方式进行备份.

[root@svn ]# cat back_art_doc.sh 
#!/bin/bash
# Filename:    svnbak.sh
# Description: SVN完全备份
# Notes:      将脚本加入crontab中,每天定时执行
  
MAXDAYS=7                              # 备份保留最大天数
TIME=`date +'%Y%m%d%H%M%S'`
SVNPATH=/home/svn                      # 定义仓库repos路径
BAKDIR=/home/backup_svn/art_doc        # 定义备份主目录
BAKSUBDIR=${BAKDIR}/${TIME}            # 定义全备路径
BAKLOG=${BAKDIR}/${TIME}.log           # 定义备份日志
[ ! -f "${BAKSUBDIR}" ] && mkdir -p ${BAKSUBDIR}
exec 1>${BAKLOG}
exec 2>&1
set -x
# 删除历史备份
find ${BAKDIR} -maxdepth 1 -type f -mtime +$(expr ${MAXDAYS} - 1) -exec echo "Delete {}" \; -exec rm "{}" \;
# 全备份
svnadmin hotcopy ${SVNPATH}/arts ${BAKSUBDIR}/arts
svnadmin hotcopy ${SVNPATH}/doc ${BAKSUBDIR}/doc
# 如果能打印版本号说明备份正确
svnlook youngest ${BAKSUBDIR}/arts
svnlook youngest ${BAKSUBDIR}/doc
[ $? -ne 0 ] && exit 1
cd ${BAKDIR}
# 压缩备份
tar cvzf ${TIME}.tar.gz ${TIME}/
rm -rf ${BAKSUBDIR}
[root@svn ]# cat back_server.sh 

#!/bin/bash
# Filename:    svnbak.sh
# Description: SVN完全备份
# Notes:      将脚本加入crontab中,每天定时执行
  
MAXDAYS=7                              # 备份保留最大天数
TIME=`date +'%Y%m%d%H%M%S'`
SVNPATH=/home/svn/server                      # 定义仓库repos路径
BAKDIR=/home/backup_svn/server        # 定义备份主目录
BAKSUBDIR=${BAKDIR}/${TIME}            # 定义全备路径
BAKLOG=${BAKDIR}/${TIME}.log           # 定义备份日志
[ ! -f "${BAKSUBDIR}" ] && mkdir -p ${BAKSUBDIR}
exec 1>${BAKLOG}
exec 2>&1
set -x
# 删除历史备份
find ${BAKDIR} -maxdepth 1 -type f -mtime +$(expr ${MAXDAYS} - 1) -exec echo "Delete {}" \; -exec rm "{}" \;
# 全备份
svnadmin hotcopy ${SVNPATH}/mall ${BAKSUBDIR}/mall
svnadmin hotcopy ${SVNPATH}/website ${BAKSUBDIR}/website
svnadmin hotcopy ${SVNPATH}/hall ${BAKSUBDIR}/hall
svnadmin hotcopy ${SVNPATH}/game ${BAKSUBDIR}/game
# 如果能打印版本号说明备份正确
svnlook youngest ${BAKSUBDIR}/mall
svnlook youngest ${BAKSUBDIR}/website
svnlook youngest ${BAKSUBDIR}/hall
svnlook youngest ${BAKSUBDIR}/game
[ $? -ne 0 ] && exit 1
cd ${BAKDIR}
# 压缩备份
tar cvzf ${TIME}.tar.gz ${TIME}/
rm -rf ${BAKSUBDIR}

 

[root@svn ]# cat back_client.sh 
#!/bin/bash
# Filename:    svnbak.sh
# Description: SVN完全备份
# Notes:      将脚本加入crontab中,每天定时执行
  
MAXDAYS=7                              # 备份保留最大天数
TIME=`date +'%Y%m%d%H%M%S'`
SVNPATH=/home/svn/client                      # 定义仓库repos路径
BAKDIR=/home/backup_svn/client         # 定义备份主目录
BAKSUBDIR=${BAKDIR}/${TIME}            # 定义全备路径
BAKLOG=${BAKDIR}/${TIME}.log           # 定义备份日志
[ ! -f "${BAKSUBDIR}" ] && mkdir -p ${BAKSUBDIR}
exec 1>${BAKLOG}
exec 2>&1
set -x
# 删除历史备份
find ${BAKDIR} -maxdepth 1 -type f -mtime +$(expr ${MAXDAYS} - 1) -exec echo "Delete {}" \; -exec rm "{}" \;
# 全备份
svnadmin hotcopy ${SVNPATH}/qzone ${BAKSUBDIR}/qzone
svnadmin hotcopy ${SVNPATH}/mobile ${BAKSUBDIR}/mobile
svnadmin hotcopy ${SVNPATH}/website ${BAKSUBDIR}/website
# 如果能打印版本号说明备份正确
svnlook youngest ${BAKSUBDIR}/qzone
svnlook youngest ${BAKSUBDIR}/mobile
svnlook youngest ${BAKSUBDIR}/website
[ $? -ne 0 ] && exit 1
cd ${BAKDIR}
# 压缩备份
tar cvzf ${TIME}.tar.gz ${TIME}/
rm -rf ${BAKSUBDIR}

 

 svn dump 全自动增量备份脚本

只需要修改源库所在的目录,和备份存放的目录就可以了。

第一次运行会全部备份,然后以后每次运行会增量备份。

所以,恢复的时候,先恢复全部备份,然后依次按照日期恢复增量备份即可。

#!/bin/bash
# this script is used for svn repository backup
#########################################################
[email protected]
BACKUPDIR=/svnroot/svnback
SVNDIR=/svnroot/repository
ProjectLst=$BACKUPDIR/projectlist.txt
LogFile=$BACKUPDIR/svnback.log
DATE=`date +%Y%m%d-%T`

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

do_accounting()
{
        echo " " >> $LogFile
        echo "###########################" >> $LogFile
        echo "$DATE" >> $LogFile
        echo "###########################" >> $LogFile
        cd $BackDir
}


do_svndump()
{
   PROJECTLIST=`cat $ProjectLst`
   cd $SVNDIR
   for project in $PROJECTLIST
          do
          echo "begin to dump $project databases" >> $LogFile
                if [ ! -f $BACKUPDIR/$project.dump ]
                then
                YOUNGEST=`svnlook youngest $project`
                svnadmin dump $project > $BACKUPDIR/$project.dump
                echo "OK,dump file successfully!!"
                echo "$YOUNGEST" > $BACKUPDIR/$project.youngest
                else
                        echo "$project.dump existed,will do increatment job" >> $LogFile
                        if [ ! -f $BACKUPDIR/$project.youngest ]
                        then
                        echo "error, no youngest check!" >> $LogFile
                        else
                                PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
                                NEWYOUNGEST=`svnlook youngest $project`
                                if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]
                                then
                                        echo " no database updated!" >> $LogFile
                                else
                                        LASTYOUNGEST=`expr $PREVYOUNGEST + 1`
                                        echo "last youngest is $LASTYOUNGEST" >> $LogFile
                                        svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE
                                        echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest
                                fi
                        fi
  fi
        done
}


do_mail()
{
   mail $MAILADDR -s svn-back_log < $LogFile
}

do_accounting && do_svndump && do_mail



 

 

参考:http://songxj.blog.51cto.com/620981/396113 

   http://www.ha97.com/4467.html 

   http://www.oicto.com/centos6-linux-svn/ 

   http://www.cnblogs.com/sw926/p/3309619.html 

   http://51power.blog.51cto.com/3549599/1663904   Svn+Apache环境

   svn版本回滚参考:

   http://www.cnblogs.com/jndream/archive/2012/03/20/2407955.html

   http://keenwon.com/1072.html 

 

 

 

 

 

 

linux搭建zentaopms项目管理软件


禅道项目管理软件(ZenTaoPMS)是一款国产的,基于LGPL协议,开源免费的项目管理软件,它集产品管理、项目管理、测试管理于一体,同时还包含了事务管理、组织管理等诸多功能,是中小型企业项目管理的首选。官方网站:www.zentaoms.com 

禅道项目管理软件使用PHP + MySQL开发,基于自主的PHP开发框架──ZenTaoPHP而成。第三方开发者或者企业可以非常方便的开发插件或者进行定制

软件包:

   httpd-2.2.6.tar.gz

   php-5.2.14.tar.gz

   mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gz

   ZenTaoPMS.1.3.stable.zip

   PDO_MYSQL-1.0.2.tgz

 

Mysql安装

tar -zxvf  mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gzcp �Ca ./mysql-5.1.22-rc-linux-i686-icc-glibc23 /usr/local/mysql
groupadd mysql 
useradd -g mysql mysql 
cd /usr/localchown -R mysql:mysql mysqlcd mysql 
scripts/mysql_install_db --user=mysql 
chown -R mysql . 
chown -R mysql data 
chgrp -R mysql .cp support-files/my-medium.cnf  /etc/my.cnf vi /etc/my.cnf

[mysqld]部分下添加:

datadir = /var/lib/mysql

cp support-files/mysql.server /etc/init.d/mysqlchmod 755 /etc/init.d/mysqlchkconfig --add mysqlchkconfig --level 35 mysql onservice mysql start/usr/local/mysql/bin/mysqladmin -u root password ‘123456/usr/local/mysql/bin/mysql -u root -p 123456

SQL> create database zentao;  //管理软件要使用的数据库

SQL> grant all privileges on zentao.* to bug@'localhost' identified by 'bug*()'; //管理软件数据库用户



 

Apache安装

tar  -zxvf  httpd-2.2.6.tar.gz
cd httpd-2.2.6
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-rewrite --enable-so
make && make install 
cp support/apachectl  /etc/init.d/httpd vi 
/etc/init.d/httpd

加入一下的代码,apache可以用chkconfig方式启动: 

# Startup script for the Apache Web Server

# chkconfig: - 85 15

# description: Apache is a World Wide Web server. It is used to serve

# HTML files and CGI.

# processname: httpd   

# pidfile: /usr/local/apache2/log/httpd.pid

# config: /usr/local/apache2/conf/httpd.conf

chmod 755 /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 3 httpd on
mkdir -p /var/log/httpd/access_log
service httpd start


PHP安装

tar -jxvf php-5.2.4.tar.bz2
cd php-5.2.4
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --with-gd --with-jpeg-dir=/usr/lib --enable-gd-native-ttf --with-zlib-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/include/freetype2 --with-ttf --enable-sockets --enable-ftp --enable-mbstring
make && make install
cp php.ini-dist /usr/local/php/lib/php.ini
vi  /usr/local/apache2/conf/httpd.conf

加入一下代码,添加apache支持phpweb的默认文档: 

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps
###############for php and cacti################### 
AddType application/x-tar .tgz 
AddType application/x-httpd-php .php 
AddType image/x-icon .ico 
DirectoryIndex index.php index.html index.html.var 
#######################over######################## 

service httpd start


安装PDO_MYSQL

#tar zxvf  PDO_MYSQL-1.0.2.tgz 
#cd PDO_MYSQL-1.0.2 
#/usr/local/php/bin/phpize           
#./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql/           
# make && make install                    
相应的模块就会生成在  /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

 # vi /usr/local/php/lib/php.ini //需要修改php配置文件,来扩PDO_MYSQL                              

//修改extension_dir加载模块的路径

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

//加载pdo_mysql模块 

extension=pdo_mysql.so  

//测试加载模块是否成功 

# /usr/local/php/bin/php -v   //没有报任何错误,表示加载模块成功

 

安装zentaoPMS

ZenTaoPMS.1.3.stable.zip移动到apache主目录下

 

# unzip ZenTaoPMS.1.3.stable.zip

 

打开浏览器,输入http://IP/zentaopms/www/install.php,然后安装它的提示进行安装.

wKiom1VBj1DjO0iXAAG8X_HBTl8487.jpg

这里我们直接点击开始安装

wKiom1VBj3Pwi6fiAAFYQHWnMz4719.jpg

这里是检验安装zentaopms项目管理软件的环境是否通过,这里是都通过,点击下一步

wKioL1VBkPmyN8fRAAG7geO6YNs157.jpg

这里填入mysql的用户、密码以及数据库名字,点击保存

wKioL1VBkRijrSRsAAG6A4_PHII072.jpg

这里在/usr/local/apache2/htdocs/bug/config/这个路径下面生成了my.php文件,这个文件是专门用来配置连接mysql数据库的配置文件,可以进行修改,继续点击下一步.

wKiom1VBj83DM70DAADpWotDd-w042.jpg

这里填入相关的信息,点击保存,出现了如下的提示对话框,

wKioL1VBkU_i4LdhAABgW-MOBmQ607.jpg

这个提示为了安全起见,让我们删除掉install.php,以免有人利用此文件进行重新安装zentaopms,导致数据丢失,至此zentaopms项目管理软件就安装完毕了,现在我们浏览下安装好的项目管理web页面,在浏览器上输入http://IP/zentaopms/www,出现登陆界面,我们输入刚才创建的管理员账号和密码,

wKioL1VBkXairR-OAAENHRO1EZY149.jpg

wKioL1VBkYCTEbA6AAE89L5MRRc807.jpg

禅道及其数据库自动备份及短信、邮件通知脚本

一、添加SMTP服务器

    bin/mail会默认使用本地sendmail发送邮件,而通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的。

    在需要发送自动报警的服务器上修改如下文件,在mail.rc最后增加如下内容

# vim /etc/mail.rc
set [email protected] smtp=smtp.126.com
set smtp-auth-user=doteyplay smtp-auth-password=123456
set smtp-auth=login

使用redhat的时候,在/etc/mail.rc里改了一下外部smtp的设置,就可以使用外部邮箱发邮件了,但在ubuntu下可能没有/etc/mail.rc这个文件
ubunut上mailx这个命令对应的deb包有bsd-mailx
apt-get install sendmail
apt-get install mailutils
apt-get install bsd-mailx
bsd-mailx对应的配置文件是/etc/mail.rc跟centos一样。

 

有时,设置完上面的,当echo一卦邮件时,接收邮箱仍然不能接收到邮件,此时可能并不是服务器上设置有问题,而是被反垃圾邮件给做掉了,如果用126的smtp服务器,发给腾讯和sina,就会出现550的错误(在服务器上mail中查看),腾讯说是群发了大量邮件,即使你新申请一个,依然是这个报错。而sina就很直接了“退信原因:外发IP历史信誉度低”,很有可能是之前测试一些什么太多了,所以导致了这个问题。然而直接发给126的就没有问题。所以,单位测试环境有问题,部到线上的时候不一定有问题

    当然,这里的SMTP服务器也可以使用别的,比如QQ的,但是QQ只能发几卦,在测试的时候,总报错:smtp-server: 454 Error: authentication failed, system busy,万恶的TX啊!所以,后来就改126的SMTP服务器了,用起来还是相当不错的。对于邮箱嘛,就用139邮箱吧,因为有短信提醒,同样,在测试的时候,QQ邮箱那个慢呀……

二、禅道自动备份脚本  

1、自动备份脚本

#vim chandao_backup.sh

#!/bin/bash
date=`date +%Y-%m-%d`
tarball="tar -jcf /opt/backup/chandao-$date.tar.bz2 chandao/"
[email protected]
[email protected]

if [ ! -d "/opt/backup/" ]; then
  mkdir -p /opt/backup/
fi
cd /var/www/html/ && $tarball

judge=`echo $?`
if [ $judge == 0 ];then
  echo "backup is ok" | mail -s "Auto backup for chandao" $user1 $user2;
else
  echo "backup is failure" | mail -s "Auto backup for chandao" $user1 $user2;
fi

find /opt/backup/ -type f -mtime +30 -name "*.bz2" -exec rm -rf {} \;

做相关计划任务如下
#crontab -e
0 0 * * * /bin/sh /opt/scripts/chandao_backup.sh > /dev/null 2>&1

 三:数据库自动备份脚本

#!/bin/bash
date=`date +%Y-%m-%d`
[email protected]
[email protected]

main(){
tar -jcf /opt/backup/datadir-$date.tar.bz2 /data;
if [ $? -eq 0 ];then
  /usr/local/mysql/bin/mysqldump --all-databases > /opt/backup/alldb-$date.sql;
  if [ $? -eq 0 ];then
    sleep 2
    /usr/local/mysql/bin/mysqldump --databases zentao > /opt/backup/zentao-$date.sql;
      if [ $? -eq 0 ];then
        cd /opt/backup/
        tar -jcf ALLDB-$date.tar.bz2 alldb-$date.sql zentao-$date.sql --remove-files && echo "Backup is ok!" | mail -s "Auto backup for db" $user2;

      else
        echo "Zentao db backup failure" | mail -s "Auto backup for db" $user2;
      fi

  else
    echo "All databases backup failure" | mail -s "Auto backup for db" $user2;
  fi
else
  echo "Datadir backup failure,it's first step" | mail -s "Auto backup for db" $user2;
fi
find /opt/backup/ -type f -mtime +30 -name "*.bz2" -exec rm -rf {} \;
}

if [ ! -d "/opt/backup/" ]; then
  mkdir -p /opt/backup/;
  main;
else
  main;
fi

 

#crontab -e
0 0 * * * /bin/sh /opt/scripts/db_backup.sh > /dev/null 2>&1

http://nmshuishui.blog.51cto.com/1850554/1529829 

 

项目管理软件redmine安装

Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理系统和BUG跟踪系统,例如Perforce、 SVN、CVS、TD等等。这种 Web 形式的项目管理系统通过“项目(Project)”的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容 来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。

下面开始部署:

本文系统:centos6.5 x86_64

Ip:192.168.28.138

 

1、安装环境:(本地已经安装了epel源)

yum install gcc flex autoconf zlib curl zlib-devel curl-devel bzip2 bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel gcc+ gcc-c++ libxml2 libxml2-devel libxslt libxslt-devel -y

2、安装libyaml

yum install libyaml-devel  yaml -y

3、安装mysql

yum install mysql mysql-server mysql-devel -y

/etc/init.d/mysqld start

mysqladmin -uroot password '123456'

登录并创建个数据库

 mysql -uroot -p123456

 CREATE DATABASE redmine CHARACTER SET utf8;

 grant all on redmine.* to redmine@'localhost' identified by 'redmine123';

 flush privileges;

4、安装ruby(使用其他帐号来安装)

useradd -d /opt/redmine redmine
su - redmine
tar zxvf ruby-1.9.3-p547.tar.gz 
cd ruby-1.9.3-p547
./configure --prefix=/opt/redmine/ruby --enable-shared 
make && make install

4.2、设置环境变量

vim /etc/profile.d/redmine.sh

export PATH=/opt/redmine/ruby/bin:$PATH

测试命令

[redmine@master ruby-1.9.3-p547]$ ruby -v
ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]
[redmine@master ruby-1.9.3-p547]$ gem -v
1.8.23.2

5、安装Rails

安装指定版本

gem install rails -v "3.2.17" -V

如果出现如下错误,可以执行  gem install rdoc

wKioL1WfsbzQzgaLAAC5ilmJfq4443.jpg

安装Bundler

gem install bundler �CV

6、安装redmine

yum install ImageMagick-devel -y   ##此步需root
wget http://www.redmine.org/releases/redmine-2.5.1.tar.gz
tar zxvf redmine-2.5.1.tar.gz 
mv redmine-2.5.1 redmine
cd redmine/
cp config/database.yml.example config/database.yml
vim config/database.yml
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "redmine123"
  encoding: utf8
 
development:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "redmine123"
  encoding: utf8

7、安装ruby组件

进入redmine根目录,bundle执行注意不要使用root权限执行

bundle install --without development test

8、生成密钥

rake generate_secret_token

9、初始化数据库(如果已经有数据库结构,可以忽略此部)

RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data #此步现在语言,我们选择zh即可



[redmine@master redmine]$ RAILS_ENV=production rake redmine:load_default_data
 
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] zh
====================================
Default configuration data loaded.

10、构建文件结构以及权限 

mkdir  -p tmp tmp /pdf  public /plugin_assets
chown  -R redmine:redmine files log tmp public /plugin_assets
chmod  -R 755 files log tmp public /plugin_assets

11、运行

ruby script/rails server webrick -e production -p 3000 -d

浏览器:http://192.168.28.138:3000/login

用户名和密码都是admin;

Redmine使用手册:http://yunpan.cn/ccZRXQHpfchG5     访问密码 d30a 


 

你可能感兴趣的:(SVN,配置,学习)