****************************************************************
* Description: Install SVN server and repository on RHEL server
* Date: 05:50 PM EST, 04/27/2018
****************************************************************

		 
<1> Apache Subversion is a software versioning and revision control system distributed as open source under the Apache License:
     |
     |__ o. Install Apache as web server, since SVN needs web console.
     |
     |__ o. Install SVN software, and setup SVN server.
     |
     |__ o. Create SVN repository.	 
	
	
	
	
	

	
<2> In RHEL, the httpd package provides the Apache HTTP Server. Run below command as sudo to verify if httpd package is installed:
     |
     |__ $ rpm -q httpd	 
	
                 >> package httpd is not installed



			
			
	
<3> Install Apache by following command as sudo:
     |
     |__ $  yum install httpd


             Loaded plugins: downloadonly, security
             Bad id for repo: root@m1crh226 adm-nnassif, byte = @ 4
             mahc_rhel5-els_repo                                                                                                                              |  951 B     00:00
             mahc_rhel5-i386_repo                                                                                                                             |  951 B     00:00
             mahc_rhel5_repo                                                                                                                                  | 1.2 kB     00:00
             rhel5s-x86_64-epel                                                                                                                               | 2.5 kB     00:00
             rhel5s-x86_64-optional                                                                                                                           | 2.5 kB     00:00
             rhel5s-x86_64-rhn-updates                                                                                                                        | 2.5 kB     00:00
             rhel5s-x86_64-rpmfusion-free-updates                                                                                                             | 2.5 kB     00:00
             rhel5s-x86_64-rpmfusion-nonfree-updates                                                                                                          | 2.5 kB     00:00
             rhel5s-x86_64-spacewalk                                                                                                                          | 2.5 kB     00:00
             rhel5s-x86_64-spacewalk-client                                                                                                                   | 2.5 kB     00:00
             rhel5s-x86_64-supplementary                                                                                                                      | 2.5 kB     00:00
             rhel5s-x86_64-virtualization                                                                                                                     | 2.5 kB     00:00
             Setting up Install Process
             Resolving Dependencies
             --> Running transaction check
             ---> Package httpd.i386 0:2.2.3-92.el5_11 set to be updated
             mahc_rhel5-els_repo/filelists                                                                                                                    | 3.8 MB     00:00
             mahc_rhel5-i386_repo/filelists                                                                                                                   | 3.0 MB     00:00
             mahc_rhel5_repo/filelists                                                                                                                        |  34 MB     00:01
             rhel5s-x86_64-epel/filelists_db                                                                                                                  | 3.7 MB     00:00
             rhel5s-x86_64-optional/filelists_db                                                                                                              | 2.1 MB     00:00
             rhel5s-x86_64-rhn-updates/filelists_db                                                                                                           |  26 MB     00:01
             rhel5s-x86_64-rpmfusion-free-updates/filelists_db                                                                                                |  54 kB     00:00
             rhel5s-x86_64-rpmfusion-nonfree-updates/filelists_db                                                                                             |  11 kB     00:00
             rhel5s-x86_64-spacewalk/filelists_db                                                                                                             |  13 kB     00:00
             rhel5s-x86_64-spacewalk-client/filelists_db                                                                                                      |  13 kB     00:00
             rhel5s-x86_64-supplementary/filelists_db                                                                                                         | 2.1 MB     00:00
             rhel5s-x86_64-virtualization/filelists_db                                                                                                        | 209 kB     00:00
             --> Processing Dependency: libpcre.so.0 for package: httpd
             ---> Package httpd.x86_64 0:2.2.3-92.el5_11 set to be updated
             --> Running transaction check
             ---> Package pcre.i386 0:6.6-9.el5 set to be updated
             --> Finished Dependency Resolution
             
             Dependencies Resolved
             
             ========================================================================================================================================================================
              Package                          Arch                              Version                                       Repository                                       Size
             ========================================================================================================================================================================
             Installing:
              httpd                            i386                              2.2.3-92.el5_11                               mahc_rhel5-i386_repo                            1.2 M
              httpd                            x86_64                            2.2.3-92.el5_11                               mahc_rhel5-els_repo                             1.3 M
             Installing for dependencies:
              pcre                             i386                              6.6-9.el5                                     mahc_rhel5_repo                                 118 k
             
             Transaction Summary
             ========================================================================================================================================================================
             Install       3 Package(s)
             Upgrade       0 Package(s)
             
             Total download size: 2.6 M
             Is this ok [y/N]: y
             Downloading Packages:
             (1/3): pcre-6.6-9.el5.i386.rpm                                                                                                                   | 118 kB     00:00
             (2/3): httpd-2.2.3-92.el5_11.i386.rpm                                                                                                            | 1.2 MB     00:00
             (3/3): httpd-2.2.3-92.el5_11.x86_64.rpm                                                                                                          | 1.3 MB     00:00
             ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             Total                                                                                                                                   6.5 MB/s | 2.6 MB     00:00
             Running rpm_check_debug
             Running Transaction Test
             Finished Transaction Test
             Transaction Test Succeeded
             Running Transaction
               Installing     : pcre                                                                                                                                             1/3
               Installing     : httpd                                                                                                                                            2/3
               Installing     : httpd                                                                                                                                            3/3
             
             Installed:
               httpd.i386 0:2.2.3-92.el5_11                                                      httpd.x86_64 0:2.2.3-92.el5_11
             
             Dependency Installed:
               pcre.i386 0:6.6-9.el5
             
             Complete!
	
	


	

<4> After Apache package installed, run below command to verify:
     |
     |__ $ rpm -q httpd
	 
                 >> httpd-2.2.3-92.el5_11
      
	
	
	
	

<5> Checking if Apache server up and running by either of the command:
     |
     |__ $ /etc/init.d/httpd status	 
     |
     |__ $ service httpd status
	 
                 >> httpd is stopped
	
	
	
	


<6> Some of the RHEL system enables SELinux[Security Enhanced]. If the feature turned on, before starting Apache , please take reference for addition step:
     |
     |__ $ sestatus

                 >> SELinux status: disabled	
	
	
	
	
	
	
<7> Start Apache server:
     |
     |__ $ service httpd start
     |
     |           >> Starting httpd:  [  OK  ]
     |
     |
     |__ $ service httpd status
  
                 >> httpd (pid  987) is running...
	 
	
	
	
	
	
<8> The URL of Apache landing page is https:localhost:
     |
     |__ o. The default html file is /var/www/index.html	 
	
	
	
	
	
	
	
	
<9> Install SVN software and module mod_dav_svn. The purpose of "mod_dav_svn" is communicating SVN with Apache to display the repository directory on Web GUI:	
     |
     |__ $ yum install mod_dav_svn subversion
		 
             Loaded plugins: downloadonly, security
             Bad id for repo: root@m1crh226 adm-nnassif, byte = @ 4
             Setting up Install Process
             Package subversion-1.6.11-12.el5_10.x86_64 already installed and latest version
             Package subversion-1.6.11-12.el5_10.i386 already installed and latest version
             Resolving Dependencies
             --> Running transaction check
             ---> Package mod_dav_svn.i386 0:1.6.11-12.el5_10 set to be updated
             ---> Package mod_dav_svn.x86_64 0:1.6.11-12.el5_10 set to be updated
             --> Finished Dependency Resolution
             
             Dependencies Resolved
             
             ========================================================================================================================================================================
             Package                               Arch                             Version                                    Repository                                      Size
             ========================================================================================================================================================================
             Installing:
             mod_dav_svn                           i386                             1.6.11-12.el5_10                           mahc_rhel5-i386_repo                            79 k
             mod_dav_svn                           x86_64                           1.6.11-12.el5_10                           mahc_rhel5-els_repo                             79 k
             
             Transaction Summary
             ========================================================================================================================================================================
             Install       2 Package(s)
             Upgrade       0 Package(s)
             
             Total download size: 158 k
             Is this ok [y/N]: y
             Downloading Packages:
             (1/2): mod_dav_svn-1.6.11-12.el5_10.i386.rpm                                                                                                     |  79 kB     00:00
             (2/2): mod_dav_svn-1.6.11-12.el5_10.x86_64.rpm                                                                                                   |  79 kB     00:00
             ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             Total                                                                                                                                   571 kB/s | 158 kB     00:00
             Running rpm_check_debug
             Running Transaction Test
             Finished Transaction Test
             Transaction Test Succeeded
             Running Transaction
             Installing     : mod_dav_svn                                                                                                                                      1/2
             Installing     : mod_dav_svn                                                                                                                                      2/2
             
             Installed:
             mod_dav_svn.i386 0:1.6.11-12.el5_10                                               mod_dav_svn.x86_64 0:1.6.11-12.el5_10
             
             Complete!
	
	
	
	
	
	
	
<10> After SVN package installed, then starting config SVN server. Firstly, creating SVN parent folder, which is equal to root volume of a system:
     |
     |__ $ mkdir /var/www/svn
           chmod 755 /var/www/svn	 
	
	
	
	
	
	 
<11> Under Apache server folder, there is configuration file for SVN. By which, telling the SVN metadata to Apache:
     |
     |__ $ vi /etc/httpd/conf.d/subversion.conf	 
	
	
                     #========== Original ============= 
                     #    LoadModule dav_svn_module     modules/mod_dav_svn.so
                     #    LoadModule authz_svn_module   modules/mod_authz_svn.so
                     #    
                     #    <Location /svn>
                     #    DAV svn
                     #    SVNParentPath /var/www/svn
                     #    
                     #    Limit write permission to list of valid users.
                     #    <LimitExcept GET PROPFIND OPTIONS REPORT>
                     #    	# Require SSL connection for password protection.
                     #    	# SSLRequireSSL
                     #    
                     #    	AuthType Basic
                     #    	AuthName "Subversion repositories"
                     #    	AuthUserFile /etc/svn-auth-users
                     #    	Require valid-user
                     #    </LimitExcept>
                     #    </Location>
	
	
                     #=========== After re-configurion ==========
                     <Location /svn>
                       DAV svn
                       SVNParentPath /var/www/svn
                     
                       <LimitExcept GET PROPFIND OPTIONS REPORT>
                         AuthType Basic
                         AuthName "Subversion repositories"
                         # Create repository username/password, and saving the credential enclosed this file: 
                         AuthUserFile /etc/svn-auth-users
                         # Saving repository user permission enclosed this access control file:
                         AuthzSVNAccessFile /etc/svn-access-control
                         Require valid-user
                       </LimitExcept>
                     </Location>
	
	
	
	
	
	
	
<12> Creating repository username. For example, "test_user" is the username:
     |
     |__ $ htpasswd -cm /etc/svn-auth-users test_user            
     |	
     |             New password: <typeing in password>
     |             Re-type new password: <typeing in password again>
     |             Adding password for user test_user	 
     |
     |
     |
     |
     |_ $ cat /etc/svn-auth-users
			
                   test_user:$apr1$opiTm...$RxRjzf.tj.q/cQBvcba/y0
	
	
	


	
<13> Creating SVN repository:
     |
     |__ $ pwd 
     |
     |            /var/www/svn
     |
     |
     |__ $ svnadmin create testrepo
     |
     |
     |__ $  ls -ltr
     |             
     |            drwx------ 6 root root 4096 Apr 12 12:38 testrepo
     |		  
     |		  
     |__ $ chown -R apache.apache testrepo
     |
     |
     |__ $ ls -ltr
     |
     |            drwx------ 6 apache apache 4096 Apr 12 12:38 testrepo	 
     |
     |
     |__ $ service httpd restart
	 
	 
	 
	 
	
	
	
<14> Assigning permission to repository users/roles by copying following content within repo access control file:	
     |
     |__ $ cp /var/www/svn/testrepo/conf/authz /etc/svn-access-control 
     |
     |
     |__ $ vi /etc/svn-access-control	 
		
		
                         [groups]
                         admin=test_user
                         
                         [/]
                         @admin=rw
                         
                         [testrepo:/]
                         test_user=rw
	
	
	
	
	
	
	
	
<15> Modify SVN repository config file to limit anonymous control by uncommenting below 2 parameters:
     |
     |__ $ vi /var/www/svn/testrepo/conf/svnserve.conf	
		
			
                         ## Disable anonymous access ##
                         anon-access = none
                         
                         ## Enable access control ##
                         authz-db = authz
	
	

	
	
	
	
	
<16> Restart Apache:
     |
     |__ $ service httpd restart
	 
	 
                         Stopping httpd:         [  OK  ]
                         Starting httpd:         [  OK  ]	
	
	
	
	
	
	
<17> Create trunk, branches and tags structure under testrepo:
     |
     |__ o. Create “template” directories with following command:
     |      |
     |      |__ $ mkdir -p /tmp/svn-structure-template/{trunk,branches,tags}
     |	
     |	
     |
     |
     |__ o. Then import template to project repository using “svn import” command:
             |
             |__  $ svn import -m 'Initial import' /tmp/svn-structure-template/ http://10.234.92.21/svn/testrepo/
			 
			 
                         Adding         /tmp/svn-structure-template/trunk
                         Adding         /tmp/svn-structure-template/branches
                         Adding         /tmp/svn-structure-template/tags
                         
                         Committed revision 1.	
	
	
	
	
	
	
	
<18> Now, the SVN parent folders should be hooked with Web GUI on browser - http://10.234.92.21/svn/testrepo/	


                 
	
	
	
		
	
	
	
	
<19> Reference:
     |
     |__ o. SVN Installation - https://www.if-not-true-then-false.com/2010/install-svn-subversion-server-on-fedora-centos-red-hat-rhel/
     |
     |__ o. SELinux Status Verification - https://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-selinux-status-viewing.html
     |
     |__ o. REHL Apache - https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/managing_confined_services/chap-managing_confined_services-the_apache_http_server