2011年12月8日木曜日

[项目管理] 源码安装 SVN

0. 所需软件版本
Apache 2.2.11
neon 0.25.5
swig 1.3.29

1. 安装 apr (Apache Portable Runtime)
cd /usr/local/src/httpd-2.2.x/srclib/apr
./configure --prefix=/usr/local/apr --enable-threads
make
make install

2. 安装 apr-util (Apache Portable Runtime Utility)
需要事先安装 apr, iconv, expat

cd /usr/local/src/httpd-2.2.x/srclib/apr-util
./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr
make
make install

# confiture 时可以指定 --with-expat=/usr/local --with-iconv=/usr/local

3. 安装与设置 apache2 (./configure --help)
3-1. 安装
./configure --prefix=/usr/local/apache2 --enable-dav --enable-dav-fs --enable-dav-lock --enable-auth-digest --enable-rewrite --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr
make
sudo make install

3-2. 设置
3-2-1. apache 用户
groupadd apache
useradd -g apache -s /sbin/nologin apache

3-2-2. 设置文件
vim /usr/local/apache2/conf/httpd.conf

修改
- User deamon
- Group deamon
+ User apache
+ Group apache
+ LoadModule dav_svn_module modules/mod_dav_svn.so

3-2-3. apache 自启动
cp /usr/local/src/httpd-2.2.11/build/rpm/httpd.init /etc/rc.d/init.d/httpd
chmod 755 /etc/init.d/httpd

vim /etc/rc.d/init.d/httpd
- CONFFILE=/etc/httpd/conf/httpd.conf
+ CONFFILE=/usr/local/apache2/conf/httpd.conf
- apachectl=/usr/sbin/apachectl
+ apachectl=/usr/local/apache2/bin/apachectl
- httpd=${HTTPD-/usr/sbin/httpd}
+ httpd=${HTTPD-/usr/local/apache2/bin/httpd}
- pidfile=${PIDFILE-/var/log/httpd/${prog}.pid}
+ pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}

chkconfig --add httpd
chkconfig httpd on
chkconfig --list httpd

3-2-4. 查看 apache2 加载模块和编译模块
../bin/httpd -l
../bin/httpd -M

4. 安装 Neon (WebDAV 客户端库)
事先安装 zlib, expat, libxml2

./configure --prefix=/usr/local/neon --with-libxml2 --with-expat
make
make install

vim /etc/ld.so.conf.d/neon.conf
+ /usr/local/neon/lib

ldconfig
ldconfig -p | grep 'neon'

5. 安装 swig (Simplified Wrapper and Interface Generator)
事先安装 python
./configure --prefix=/usr/local/swig --with-python=/usr/bin/python
make
make install

vim /etc/ld.so.conf.d/swig.conf
+ /usr/local/swig/lib

ldconfig
ldconfig -p | grep 'swig'

6. 安装 Subversion
事先安装 arp, apr-util, neon, zlib, gettext, iconv

./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-neon=/usr/local/neon --with-swig=/usr/local/swig --without-jdk
make
make install

6. 配置 Subversion
/home/svn
   |-- .htpasswd
   |-- .svnaccess
   `-- repos
      |-- proj1
      |   |-- trunk
      |   |-- branches
      |   `-- tags
      |-- proj2
          |-- trunk
          |-- branches
          `-- tags

6-1. 创建仓库
mkdir -p /home/svn/repos
chown -R go:go /home/svn
cd /home/svn/repos
mkdire proj
svnadmin create sample
svn mkdir file:///home/svn/repos/proj/trunk -m "create"
svn mkdir file:///home/svn/repos/proj/branches -m "create"
svn mkdir file:///home/svn/repos/proj/tags -m "create"

6-2. 设定 web 访问权限
6-2-1. 方法 1
cd /home/svn/repos
chgrp -R apache proj
chmod -R g+s proj

6-2-2. 方法 2
cd /home/svn/repos
chown -R apache:apache proj

vim /usr/local/apache2/conf/httpd.conf
+ Include conf/extra/httpd-subversion.conf

vim /usr/local/apache2/conf/extra/httpd-subversion.conf
+ <Location /svn>
+  DAV svn
+  SVNParentPath /home/svn/repos
+ </Location>

重启 apache
/etc/init.d/httpd restart
http://localhost/svn/proj/

6-3. basic 认证
vim /usr/local/apache2/conf/extra/httpd-subversion.conf
+ <Location /svn>
+   DAV svn
+   SVNParentPath /home/svn/repos
+   # only authenticated users may access the repository
+   Require valid-user
+   # how to authenticate a user
+   AuthType Basic
+   AuthName "Subversion repository"
+   AuthUserFile /home/svn/.htpasswd
+ </Location>

生成密码文件
cd /home/svn
创建文件: /usr/local/apache2/bin/htpasswd -c .htpasswd go
添加用户: htpasswd .htpasswd hoge
删除用户: hpasswd -D .htpasswd hoge

6-4. Digest 认证
vim /usr/local/apache2/conf/httpd.conf
+ LoadModule authz_svn_module   modules/mod_authz_svn.so

vim /usr/local/apache2/conf/extra/httpd-subversion.conf
+ <location /svn>
+    DAV svn
+    SVNParentPath /home/svn/repos
+    AuthType Digest
+    AuthName "Subversion repository"
+    AuthDigestProvider file
+    AuthUserFile /home/svn/.htdigest
+    Require valid-user
+    BrowserMatch "MSIE" AuthDigestEnableQueryStringHack = On
+    AuthzSVNAccessFile /home/svn/.svnaccess
+ </location>
或
+ <location /svn>
+    DAV svn
+    SVNParentPath /home/svn/repos
+    AuthType Digest
+    AuthName "Subversion repository"
+    AuthDigestFile /home/svn/.htdigest
+    Require valid-user
+    BrowserMatch "MSIE" AuthDigestEnableQueryStringHack = On
+ </location>

"Subversion repository" 的地方使用 AuthName 的设定值

cd /home/svn
创建文件: htdigest -c .htdigest "Subversion repository" go
追加用户: htdigest .htdigest "Subversion repository" hoge

重启 apache
/etc/init.d/httpd restart
http://localhost/svn/proj/

6-5. Subversion 访问权限设置
vim /usr/local/apache2/conf/extra/httpd-subversion.conf
+ <Location /svn>
+    DAV svn
+    SVNParentPath /home/svn/repos
+    # only authenticated users may access the repository
+    Require valid-user
+    # how to authenticate a user
+    AuthType Basic
+    AuthName "Subversion repository"
+    AuthUserFile /home/svn/.htpasswd
+    # how to access a user
+    AuthzSVNAccessFile /home/svn/.svnaccess
+ </Location>

vim /usr/local/apache2/conf/httpd.conf
+ LoadModule authz_svn_module   modules/mod_authz_svn.so

vim /home/svn/.svnaccess
+ [/]
+ admin = rw
+
+ # proj1
+ [proj1:/]
+ user1 = rw
+ user2 = r
+
+ # proj2
+ [proj2:/trunk/test]
+ user1 = rw
+ user2 = r
+
+ # proj3
+ [/proj3]
+ * =

重启 apache
/etc/init.d/httpd restart
http://localhost/svn/sample/

6-6. 使用 SSL
事先安装 openssl

编译 neon
./configure ... --with-ssl=openssl

编译 apache
./configure ... --with-ssl=/usr/local/openssl

编译 subversion
./configure ... --with-ssl

0 件のコメント:

コメントを投稿