2010年12月14日 星期二

安裝apache, subverion

安裝Subverion筆記
   
    目標:
        visualsvn 移機
        再加上修改密碼功能
           
    環境:
        ubuntu10
        apache2.2
        php5
        Subversion
       
    1.使用samba mount到 VisualSvn
        mount.cifs //xx.xx.xx.xx/SvnRepository /usr/local/SvnRoot -o user=xxx,pass=xxx
       
    2.安裝apache2
        sudo apt-get install apache2 apache2-common apache2-utils apache2-doc
        預設裝在
            /etc/apache2/
            /etc/apache2/apache2.conf
        root
            /var/www
       
    3.安裝subversion
        sudo apt-get install subversion libapache2-svn
   
    4.設定環境, 使用apache2去管理Subversion
   
        4.1 文件有提到要使用liunx的group去管理權限 (重要, 才能commit)
            sudo addgroup subversion
            sudo usermod -G subversion -a www-data
           
            sudo chown -R root:subversion myproject
            sudo chown -R www-data:www-data /var/local/svnroot
            --> 授予 Apache(www-data) 使用者存取的權限
           
            /etc/group
           
        4.2 初始化一個repository
            sudo svnadmin create /usr/local/SvnRoot
   
        4.3 修改dav_svn.conf
            sudo vi /etc/apache2/mods-available/dav_svn.conf
            --> 此路徑底下的文件生效
                DAV svn
                #SVNParentPath /mnt/SvnRepository
                SVNParentPath /usr/local/SvnRoot

                   --> SVNPath指Subversion的檔案庫路徑,SVNParentPath指此路徑底下所有目錄
                   都會是Subversion檔案庫
                AuthType Basic
                AuthName "Agenda eSolution Java Dept Subversion repository"
                AuthUserFile /etc/subversion/passwd               
                AuthzSVNAccessFile /etc/subversion/authz
                Require valid-user
                #SVNAutoversioning on
           

        4.4 Subversion 設定文件路徑 /etc/subversion/
            新增Subversion使用者
                sudo htpasswd /etc/subversion/passwd todd (-c 會砍掉檔案重建)
           
            新增Subversion權限
                [aliases]
                # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=
                Research Institute/CN=Joe Average

                [groups]
                testgroup=todd

                [svn:/]
                *=

                [test:/]
                @agenda= rw
                todd2= rw
    5.SSL
        5.1 安裝
            sudo apt-get install ssl-cert
           
        5.2 Enable the SSL Apache module
            sudo a2enmod ssl
       
            /etc/apache2/ports.conf
            應該要有
               
                Listen 443
               

       
        5.3 生成一個 SSL證書
            mkdir /etc/apache2/ssl
            sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
           
        5.4 修改/etc/apache2/sites-available/default-ssl
           
            改成產生的路徑
            #SSLCertificateFile    /etc/apache/ssl/apache.pem
            #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key ?

        5.5 修改/etc/apache2/mods-available/dav_svn.conf
           
                ...
                SSLRequireSSL --> 加入
           

   
        5.6 這一步很重要
            sudo a2ensite default-ssl
            sudo /etc/init.d/apache2 restart
   
        5.7 根憑證 (Root CA) 作法:
            建立根憑證的 Private Key:
                openssl genrsa -des3 -out RootCA.key 2048
                    密碼請來問我
           
            產生根憑證的申請書:
                openssl req -new -key RootCA.key -out RootCA.req
                chmod og-rwx RootCA.key
               
            使用根憑證本身簽髮根憑證:
                openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey RootCA.key
                -in RootCA.req -out RootCA.crt

                rm -f RootCA.req
        5.8 伺服器憑證作法:
            建立伺服器憑證的 Private Key:
                openssl genrsa -out HostCA.key 2048
           
            產生伺服器憑證的申請書
                openssl req -new -key HostCA.key -out HostCA.req
                chmod og-rwx HostCA.key
               
                tip: 在填申請伺服器憑證申請書時 (Common Name) 要填上主機的全名,
                    不然用client去連subversion時會出現
                    server certificate was missing commonName attribute in subject name的錯誤
               
            使用根憑證簽發伺服器憑證
                openssl x509 -req -days 365 -sha1 -extensions v3_req -CA RootCA.crt
                -CAkey RootCA.key -CAserial RootCA.srl -CAcreateserial -in HostCA.req
                -out HostCA.crt

                rm -f HostCA.req
               
        5.9 修改 vi /etc/apache2/sites-available/default-ssl
            SSLCertificateFile    /etc/apache2/ssl/RootCA.crt
            SSLCertificateKeyFile /etc/apache2/ssl/RootCA.key
   
            tip: 這裡認證的檔案是使用 RootCA的,
                    我之前打了HostCA, 會出現
                    svn: OPTIONS of 'https://xxxx.xxxx.xxxx.xxxx/svn/xxxx':
                    SSL handshake failed: \ SSL error code 01 的錯誤
   
    6.新增修改帳密的 passwd.php
       
        5.1.安裝php5
            sudo apt-get install php5
            sudo apt-get install libapache2-mod-php5
       
        5.2.新增 /var/www/passwd.php
       
        5.3.修改 /etc/apache2/mods-available/dav_svn.conf, 目的是使用apache來做驗證
            在apache增加一個Alias, 設定該路徑需要認證, 指定認證的文件為 Subversion
       
            Alias /svntools "/var/www/"
           
                    Require valid-user
                    # how to authenticate a user
                    AuthType Basic
                    AuthName "Subversion Tools"
                    AuthUserFile /etc/subversion/passwd
           


        5.4.修改權限
            chmod 777 /etc/subversion/passwd
       
    最後 restart server時, 會要打上CA憑證的密碼 --> 這裡可以再改成起動時就設, 這部份未處理
    修改 httpd.conf 加入 ServerName xxxx.xxxx.xxxx.xxxx   
       
    7.改成對外
        將原本 VisualSVN Server導到 xx.xx.xx.xx:443
       
        所以修改 VisualSVN Server\conf\httpd.conf
        7.1 要打開 #LoadModule ssl_module bin/mod_ssl.so
       
            SSLProxyEngine on
            proxyPass xxx
            ProxyPassReverse xxx
       

安裝tomcat

    java
        sudo apt-get install openjdk-6-jdk
        cd /usr/lib/jvm/java-1.6.0-openjdk/
   
    tomcat
        tar xvzf apache-tomcat-6.0.14.tar.gz
        sudo mv apache-tomcat-6.0.14 /usr/local/tomcat
        vi /etc/init.d/tomcat
       
        export CATALINA_HOME=/usr/local/tomcat
        export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
        export PATH=$JAVA_HOME/bin:$PATH

        /usr/local/tomcat/lib/
            jtds-1.2.jar
            proxool-0.9.0RC3.jar
            proxool-0.9.1.jar
            proxool-cglib.jar

        /usr/local/tomcat/conf/content.xml
               
                factory="org.logicalcobwebs.proxool.ProxoolDataSource"
                name="jdbc/xxx"
                password="xxx"
                proxool.alias="xxx"
                proxool.driver-class="net.sourceforge.jtds.jdbc.Driver"
                proxool.driver-url="jdbc:jtds:sqlserver://xx.xx.xx.xx:1433;databaseName=xxx"
                proxool.prototype-count="4"
                type="javax.sql.DataSource"
                 user="xxx"/>

        目前先copy 到 /usr/local/tomcat/webapps/rbs
       
        sudo /etc/init.d/tomcat start
        sudo /etc/init.d/tomcat restart
       
        demo:
            http://xx.xx.xx.xx:8080/xxx/