马哥linux干货分享之SVN服务器部署并实现双机同步及禁止普通用户删除文件

magedu_linux01 发布于 2014/08/29 21:29
阅读 823
收藏 11


下面来布署svn服务器

所有文件下载地址: http://pan.baidu.com/share/link?shareid=395023&uk=2501966565

环境:CentOS5.8 x64 ,开发包组已安装,iptables,selinux已经关闭

一.安装配置apache

1.1 下载编译安装apache

1 tar xvf httpd-2.2.22.tar.bz2 

2 cd httpd-2.2.22 

3 ./configure  --prefix=/opt/apache \ 

4 --enable-so \    

5 --enable-dav \    

6 --enable-dav-fs \  

7 --enable-maintainer-mode \  

8 --with-included-apr \ 

9 --enable-rewrite \ 

10 --enable-ssl \ 

11 --enable-proxy \ 

12 --enable-proxy-http 

13  

14 make && make install 

1.2 配置apache 

添加apache 用户

15 useradd -r apache 

以apache身份运行httpd

16 sed -i 's@User daemon@User apache@g ' /opt/apache2/conf/httpd.conf 

17 sed -i 's@Group daemon@Group apache@g' /opt/apache2/conf/httpd.conf 

1.3 为了方便将apache命令加入PATH,并将apache库导出

18 echo 'export PATH=$PATH:/opt/apache2/bin' > /etc/profile.d/httpd.sh 

19 . /etc/profile.d/httpd.sh 

20  

21 echo '/opt/apache2/lib' > /etc/ld.so.conf.d/apache.conf 

导出 

22 ldconfig  

23 rm -rf httpd-2.2.22 

二.安装MySQL

2.1安装cmake

24 tar xvf cmake-2.8.4.tar.gz 

25 cd cmake-2.8.4 

26 ./configure 

27 make && make install 

28 cd .. 

29 rm -rf cmake-2.8.4 

2.2 安装mysql

30 tar xf mysql-5.5.28.tar.gz 

31 cd mysql-5.5.28 

32  

33 cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql \ 

34 -DSYSCONFDIR=/opt/mysql/etc \ 

35 -DMYSQL_DATADIR=/opt/mysql/data \ 

36 -DMYSQL_TCP_PORT=3306 \ 

37 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ 

38 -DMYSQL_USER=mysql \ 

39 -DEXTRA_CHARSETS=all \ 

40 -DWITH_READLINE=1 \ 

41 -DWITH_SSL=system \ 

42 -DWITH_EMBEDDED_SERVER=1 \ 

43 -DENABLED_LOCAL_INFILE=1 \ 

44 -DWITH_INNOBASE_STORAGE_ENGINE=1 

45  

46 make && make install 

47 cd .. 

48 rm -Rf  mysql-5.5.28 

配置文件与启动脚本

49 cd /opt/mysql 

50 cp support-files/my-huge.cnf /etc/my.cnf 

51 cp support-files/mysql.server /etc/init.d/mysqld 

2.3 以mysql用户运行mysql,修改PATH并导出库

52 useradd -r mysql 

53 chown -R mysql:root . 

54 ./scripts/mysql_install_db --user=mysql --datadir=data/ 

55 echo 'export PATH=$PATH:/opt/mysql/bin' > /etc/profile.d/mysql.sh 

56 . /etc/profile.d/mysql.sh 

57 echo '/opt/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 

58 ldconfig  

启动mysql

59 service mysqld start 

三.安装php

3.1 安装php,安装它是因为svnmanager需要

60 cd /root/svn 

61 tar xvf php-5.3.18.tar.gz 

62 cd php-5.3.18 

63  

64 ./configure --prefix=/opt/php \ 

65 --with-apxs2=/opt/apache2/bin/apxs \ 

66 --with-mysql=/opt/mysql \ 

67 --enable-mbstring  

68  

69 make && make install 

70 cp php.ini-production /etc/php.ini 

71 cd .. 

72 rm -Rf php-5.3.18 

添加apache的php支持

73 sed -i '/AddType application\/x-gzip .gz .tgz/a\ 

74 AddType application/x-httpd-php .php' /opt/apache2/conf/httpd.conf 

75  

76 sed -i 's@DirectoryIndex index.html@DirectoryIndex index.php index.html@g' /opt/apache2/conf/httpd.conf 

启动apache测试

77 rm -f /opt/apache2/htdocs/index.html 

78  

79 echo '<?php 

80 phpinfo() 

81 ?>' > /opt/apache2/htdocs/index.php 

82 apachectl start 

访问http://$IP/测试apache,php,mysql是否部署下确

四.安装subversion

4.1 解压安装subversion

83 tar xf subversion-1.6.13.tar.bz2   

84 tar xf subversion-deps-1.6.13.tar.bz2 

85 cd subversion-1.6.13 

86 ./configure --prefix=/opt/subversion \ 

87 --with-apxs=/opt/apache2/bin/apxs \ 

88 --with-apr=/opt/apache2/bin/apr-1-config \ 

89 --with-apr-util=/opt/apache2/bin/apu-1-config 

90  

91 make && make install 

92 echo 'export PATH=$PATH:/opt/subversion/bin' > /etc/profile.d/svn.sh 

93 . /etc/profile.d/svn.sh 

94 cd .. 

95 rm -rf subversion-1.6.13 

4.2 让apache与svn结合

96 sed -i '/httpd-default.conf/a\ 

97 Include conf/extra/httpd-svn.conf' /opt/apache2/conf/httpd.conf 

98 echo ' 

99 <Location /svn> 

100 DAV svn 

101 SVNListParentPath On 

102 SVNParentPath /opt/svn_repos 

103 AuthType Basic 

104 AuthName "Subversion Repository" 

105 AuthUserFile /opt/subversion/conf/passwdfile 

106 AuthzSVNAccessFile /opt/subversion/conf/accessfile 

107 Require valid-user 

108 </Location> ' > /opt/apache2/conf/extra/httpd-svn.conf 

4.3 创建提到的文件

109 mkdir /opt/subversion/conf 

110 touch /opt/subversion/conf/passwdfile 

111 touch /opt/subversion/conf/accessfile 

112 mkdir /opt/svn_repos 

4.4 创建一个repo,添加一个测试账户,配置权限,测试

113 svnadmin create /opt/svn_repos/test/  ##创建一个repo

114 chown -R apache:apache /opt/subversion/  ##我们通过apache来管理svn

115 chown -R apache:apache /opt/svn_repos/ 

116 htpasswd -bm /opt/subversion/conf/passwdfile test  "admin" 

117 echo ' 

118 [test:/] 

119 * = r 

120 test = rw ' > /opt/subversion/conf/accessfile  ##access文件是权限控制文件

4.5 重启apache测试

121 apachectl restart 

访问http://$IP/svn/test 

输入账号,密码

如果看到test - Revision 0: / 证明没问题,继续

五.安装svnmanager,以图形化的方式管理svn

5.1 安装VersionControl_SVN,svnmanager需要它

122 /opt/php/bin/pear install VersionControl_SVN-0.3.4 

出现ok,等代表成功

5.2 安装svnmanager

123 tar xf svnmanager-1.08.tar.gz 

124 mv svnmanager-1.08 /opt/apache2/htdocs/svnman 

5.3 修改配置文件 

125 cp /opt/apache2/htdocs/svnman/config.php.linux /opt/apache2/htdocs/svnman/config.php 

126  

127 vim /opt/apache2/htdocs/svnman/config.php 

128  

129 $htpassword_cmd                         =       "/opt/apache2/bin/htpasswd"; ##意思很明显

130 $svn_cmd                                        =      "/opt/subversion/bin/svn"; 

131 $svnadmin_cmd                           =       "/opt/subversion/bin/svnadmin"; 

132  

133 //Subversion locations 

134 $svn_config_dir                         =       "/opt/subversion/conf"; 

135 $svn_repos_loc                          =       "/opt/svn_repos"; 

136 $svn_passwd_file                        =       "/opt/subversion/conf/passwdfile"; 

137 $svn_access_file                        =       "/opt/subversion/conf/accessfile"; 

138 $dsn                   =      "mysql://svnmanager:admin@localhost/svnmanager";  ##mysql,去掉i

139 $admin_name                                             =       "admin"; ##初始的账号密码

140 $admin_temp_password                    =       "admin"; 

5.4 创建数据库

141 mysql  

142 mysql> create database svnmanager; 

143 mysql> grant all on svnmanager.* to 'svnmanager'@'localhost' identified by 'admin'; 

144 mysql> flush privileges; 

5.5 将VersionControl_SVN拷到svnmanager中

145 tar xvf VersionControl_SVN-0.3.4.tgz 

146 mv VersionControl_SVN-0.3.4 /opt/apache2/htdocs/svnman/VersionControl 

147  

148 chown -R apache:apache /opt/apache2 

5.6 访问测试

http://$IP/svnman

初始账号:admin

初始密码:admin 

建立新的管理账号后旧的就停用了

svnmanager用法见http://wenku.baidu.com/view/4d95d0303968011ca30091a2.html

建立库,与用户后测试。到此svn服务器构建完毕

 

六.配置svn双机同步

原来有svn服务器,现在做一个镜像服务器,当原来的服务器down掉后可以代替它

源服务器:192.168.17.140

镜像服务器:192.168.17.139

实例同步的为源服器为crm的项目到镜像服务器

6.1 在镜像服务器上建立一新库crm,与具有读写权限的用户

用svnmanager来建,svnadmin create 的话svnmanager中看不到

这个就不写了,假设源上是http://192.168.17.140/svn/crm,镜像的为http://192.168.17.139/svn/crm,用户为:laoguang,密码为:admin 对两个项目都可读可写

6.2 修改镜像服务下项目hook目录下的脚本并启用

149 cp /opt/svn_repos/crm/hooks/pre-revprop-change.tmpl /opt/svn_repos/crm/hooks/pre-revprop-change 

150  

151 vim /opt/svn_repos/crm/hooks/pre-revprop-change 

152 把最后的exit 1改为exit 0 即可 

6.3 镜像服务器执行初始化

153 svnsync init file:///opt/svn_repos/crm/ http://192.168.17.140/svn/crm/ 

输入具有读写账号密码,root的好像写的不对也没事

比如,我在192.168.17.140的一个账号laoguang 密码 admin

出现Copied properties for revision 0. 代表正确

6.4 开始同步源服务器上的数据

154 svnsync sync file:///opt/svn_repos/crm/ 

155 --------------------------- 

156 Store password unencrypted (yes/no)? yes  

157 Transmitting file data ..............................  

158 Committed revision 1.  

159 Copied properties for revision 1.  

160 Transmitting file data .  

161 Committed revision 2. 

162 Copied properties for revision 2.  

163 Transmitting file data .  

164 Committed revision 3.  

165 Copied properties for revision 3.  

166 ----------------------------- 

167  

168 代表同步成功 

6.5 配置当源版本改变时自动同步

下面开始在源服器上操作

169 cp /opt/svn_repos/crm/hooks/post-commit.tmpl /opt/svn_repos/crm/hooks/post-commit 

170  

171 chmod 755 /opt/svn_repos/crm/hooks/post-commit 

删除未注释的内容

在最下面写上

172 /opt/subversion/bin/svnsync sync --non-interactive http://192.168.17.139/svn/crm/ --username laoguang --password admin


升级源svn版本,测试镜像上同步了没。

七.配置svn 禁止普能用记删除文件

7.1修改源上的钩子脚本

173 cp /opt/svn_repos/crm/hooks/pre-commit.tmpl /opt/svn_repos/crm/hooks/pre-commit 

174 chmod +x /opt/svn_repos/crm/hooks/pre-commit 

175 vim /opt/svn_repos/crm/hooks/pre-commit 

176  

177 REPOS="$1"  ##库位置

178 TXN="$2"  ##版本

179  

180 SVNLOOK=/opt/subversion/bin/svnlook  ##svnlook的位置

181 SCMLIST="admin"  ##允许删除的用记

182 C_USER=`$SVNLOOK info -t $TXN $REPOS | sed -n "1p"`  ##执行commit的用户

183  

184 if [ -z `echo $SCMLIST | grep $C_USER` ];then  ## 如果commit的用户没在允许的里面

185     echo `$SVNLOOK changed -t $TXN $REPOS` > /opt/svn_repos/qingdao/commit_log  ##将操作写入日志

186    if  cat /opt/svn_repos/crm/commit_log|cut -d" " -f1|uniq -u|grep "^D";then ##如果日志开头包含DD代表删除)

187       echo "You do not have permisson to delete a file" > /dev/stderr ##提示错误

188       rm -rf /opt/svn_repos/crm/commit_log  ##删除文件

189       exit 1  ##错误退出

190    fi 

191 fi 

192  

193 exit 0 



加载中
返回顶部
顶部