LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux配置 >

SVN服务器部署并实现双机同步及禁止普通用户删

时间:2013-02-26 22:38来源:51CTO 编辑:laoguang 点击:
环境:CentOS5.8 x64 ,开发包组已安装,iptables,selinux已经关闭 一.安装配置apache 1.1 下载编译安装apache tar xvf httpd-2.2.22.tar.bz2 cd httpd-2.2.22 ./configure --prefix=/opt/apache \ --enable-so \ --enable-dav \ --ena
环境:CentOS5.8 x64 ,开发包组已安装,iptables,selinux已经关闭

一.安装配置apache
1.1 下载编译安装apache
tar xvf httpd-2.2.22.tar.bz2 
cd httpd-2.2.22 
./configure  --prefix=/opt/apache \ 
--enable-so \    
--enable-dav \    
--enable-dav-fs \  
--enable-maintainer-mode \  
--with-included-apr \ 
--enable-rewrite \ 
--enable-ssl \ 
--enable-proxy \ 
--enable-proxy-http 
 
make && make install

1.2 配置apache
添加apache 用户
useradd -r apache

以apache身份运行httpd
sed -i 's@User daemon@User apache@g' /opt/apache2/conf/httpd.conf 
sed -i 's@Group daemon@Group apache@g' /opt/apache2/conf/httpd.conf 

1.3 为了方便将apache命令加入PATH,并将apache库导出
echo 'export PATH=$PATH:/opt/apache2/bin' > /etc/profile.d/httpd.sh 
. /etc/profile.d/httpd.sh 
 
echo '/opt/apache2/lib' > /etc/ld.so.conf.d/apache.conf

导出
ldconfig  
rm -rf httpd-2.2.22

二.安装MySQL
2.1安装cmake
tar xvf cmake-2.8.4.tar.gz 
cd cmake-2.8.4 
./configure 
make && make install 
cd .. 
rm -rf cmake-2.8.4

2.2 安装mysql
tar xf mysql-5.5.28.tar.gz 
cd mysql-5.5.28 
 
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql \ 
-DSYSCONFDIR=/opt/mysql/etc \ 
-DMYSQL_DATADIR=/opt/mysql/data \ 
-DMYSQL_TCP_PORT=3306 \ 
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ 
-DMYSQL_USER=mysql \ 
-DEXTRA_CHARSETS=all \ 
-DWITH_READLINE=1 \ 
-DWITH_SSL=system \ 
-DWITH_EMBEDDED_SERVER=1 \ 
-DENABLED_LOCAL_INFILE=1 \ 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
 
make && make install 

cd .. 
rm -Rf  mysql-5.5.28

配置文件与启动脚本
cd /opt/mysql 
cp support-files/my-huge.cnf /etc/my.cnf 
cp support-files/mysql.server /etc/init.d/mysqld

2.3 以mysql用户运行mysql,修改PATH并导出库
useradd -r mysql 
chown -R mysql:root . 
./scripts/mysql_install_db --user=mysql --datadir=data/ 

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

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

启动mysql
service mysqld start

三.安装php
3.1 安装php,安装它是因为svnmanager需要
cd /root/svn 
tar xvf php-5.3.18.tar.gz 
cd php-5.3.18 
./configure --prefix=/opt/php \ 
--with-apxs2=/opt/apache2/bin/apxs \ 
--with-mysql=/opt/mysql \ 
--enable-mbstring  
     
make && make install 

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

cd .. 
rm -Rf php-5.3.18

添加apache的php支持
sed -i '/AddType application\/x-gzip .gz .tgz/a\ 
AddType application/x-httpd-php .php' /opt/apache2/conf/httpd.conf 
 
sed -i 's@DirectoryIndex index.html@DirectoryIndex index.php index.html@g' /opt/apache2/conf/httpd.conf

启动apache测试
rm -f /opt/apache2/htdocs/index.html 
     
echo '<?php 
phpinfo() 
?>' > /opt/apache2/htdocs/index.php 

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

四.安装subversion
4.1 解压安装subversion
tar xf subversion-1.6.13.tar.bz2   
tar xf subversion-deps-1.6.13.tar.bz2 
cd subversion-1.6.13 

./configure --prefix=/opt/subversion \ 
--with-apxs=/opt/apache2/bin/apxs \ 
--with-apr=/opt/apache2/bin/apr-1-config \ 
--with-apr-util=/opt/apache2/bin/apu-1-config 
 
make && make install 

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

cd .. 
rm -rf subversion-1.6.13

4.2 让apache与svn结合
sed -i '/httpd-default.conf/a\ 
Include conf/extra/httpd-svn.conf' /opt/apache2/conf/httpd.conf 

echo ' 
<Location /svn> 
DAV svn 
SVNListParentPath On 
SVNParentPath /opt/svn_repos 
AuthType Basic 
AuthName "Subversion Repository" 
AuthUserFile /opt/subversion/conf/passwdfile 
AuthzSVNAccessFile /opt/subversion/conf/accessfile 
Require valid-user 
</Location> ' > /opt/apache2/conf/extra/httpd-svn.conf

4.3 创建提到的文件
mkdir /opt/subversion/conf 
touch /opt/subversion/conf/passwdfile 
touch /opt/subversion/conf/accessfile 
mkdir /opt/svn_repos

4.4 创建一个repo,添加一个测试账户,配置权限,测试
svnadmin create /opt/svn_repos/test/  ##创建一个repo
chown -R apache:apache /opt/subversion/  ##我们通过apache来管理svn的
chown -R apache:apache /opt/svn_repos/ 
htpasswd -bm /opt/subversion/conf/passwdfile test  "admin"
echo '
[test:/]
* = r
test = rw ' > /opt/subversion/conf/accessfile  ##access文件是权限控制文件

4.5 重启apache测试
apachectl restart

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

输入账号,密码

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

五.安装svnmanager,以图形化的方式管理svn
5.1 安装VersionControl_SVN,svnmanager需要它
/opt/php/bin/pear install VersionControl_SVN-0.3.4
出现ok,等代表成功

5.2 安装svnmanager
tar xf svnmanager-1.08.tar.gz
mv svnmanager-1.08 /opt/apache2/htdocs/svnman

5.3 修改配置文件
cp /opt/apache2/htdocs/svnman/config.php.linux /opt/apache2/htdocs/svnman/config.php 
 
vim /opt/apache2/htdocs/svnman/config.php 
 
$htpassword_cmd                         =       "/opt/apache2/bin/htpasswd"; ##意思很明显
$svn_cmd                                        =      "/opt/subversion/bin/svn"; 
$svnadmin_cmd                           =       "/opt/subversion/bin/svnadmin"; 
 
//Subversion locations 
$svn_config_dir                         =       "/opt/subversion/conf"; 
$svn_repos_loc                          =       "/opt/svn_repos"; 
$svn_passwd_file                        =       "/opt/subversion/conf/passwdfile"; 
$svn_access_file                        =       "/opt/subversion/conf/accessfile"; 
$dsn                   =      "mysql://svnmanager:admin@localhost/svnmanager";  ##mysql,去掉i
$admin_name                                             =       "admin"; ##初始的账号密码
$admin_temp_password                    =       "admin";

5.4 创建数据库
mysql> create database svnmanager; 
mysql> grant all on svnmanager.* to 'svnmanager'@'localhost' identified by 'admin'; 
mysql> flush privileges;

5.5 将VersionControl_SVN拷到svnmanager中
tar xvf VersionControl_SVN-0.3.4.tgz 
mv VersionControl_SVN-0.3.4 /opt/apache2/htdocs/svnman/VersionControl 
 
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目录下的脚本并启用
cp /opt/svn_repos/crm/hooks/pre-revprop-change.tmpl /opt/svn_repos/crm/hooks/pre-revprop-change 
 
vim /opt/svn_repos/crm/hooks/pre-revprop-change 
把最后的exit 1改为exit 0 即可

6.3 镜像服务器执行初始化
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 开始同步源服务器上的数据
svnsync sync file:///opt/svn_repos/crm/ 

--------------------------- 
Store password unencrypted (yes/no)? yes  
Transmitting file data ..............................  
Committed revision 1.  
Copied properties for revision 1.  
Transmitting file data .  
Committed revision 2. 
Copied properties for revision 2.  
Transmitting file data .  
Committed revision 3.  
Copied properties for revision 3.  
----------------------------- 
 
代表同步成功

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

下面开始在源服器上操作
cp /opt/svn_repos/qingdao/hooks/post-commit.tmpl /opt/svn_repos/qingdao/hooks/post-commit
chmod 755 /opt/svn_repos/qingdao/hooks/post-commit

删除未注释的内容

在最下面写上
/opt/subversion/bin/svnsync sync --non-interactive http://192.168.17.139/svn/crm/ --username laoguang --password admin

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

七.配置svn 禁止普能用记删除文件
7.1修改源上的钩子脚本
cp /opt/svn_repos/qingdao/hooks/pre-commit.tmpl /opt/svn_repos/qingdao/hooks/pre-commit 
chmod +x /opt/svn_repos/qingdao/hooks/pre-commit 
vim /opt/svn_repos/qingdao/hooks/pre-commit 
 
REPOS="$1"  ##库位置
TXN="$2"  ##版本
 
SVNLOOK=/opt/subversion/bin/svnlook  ##svnlook的位置
SCMLIST="admin"  ##允许删除的用记
C_USER=`$SVNLOOK info -t $TXN $REPOS | sed -n "1p"`  ##执行commit的用户
 
if [ -z `echo $SCMLIST | grep $C_USER` ];then  ## 如果commit的用户没在允许的里面
    echo `$SVNLOOK changed -t $TXN $REPOS` > /opt/svn_repos/qingdao/commit_log  ##将操作写入日志
   if  cat /opt/svn_repos/qingdao/commit_log|cut -d" " -f1|uniq -u|grep "^D";then ##如果日志开头包含D(D代表删除)
      echo "You do not have permisson to delete a file" > /dev/stderr ##提示错误
      rm -rf /opt/svn_repos/qingdao/commit_log  ##删除文件
      exit 1  ##错误退出
   fi 
fi 
 
exit 0
转自:http://laoguang.blog.51cto.com/6013350/1139645

转载请保留固定链接: https://linuxeye.com/configuration/1305.html

------分隔线----------------------------
标签:svn
栏目列表
推荐内容