由於項目須要在CentOS 7.4環境下搭建一個SVN服務器,可是CentOS裏自帶的subversion版本只到1.7.14html
與Subversion官網8月10日發佈的SVN 1.8.19, SVN 1.9.7相去甚遠,會嚴重影響SVN客戶端的使用,所以咱們須要卸載掉自帶的Subversion,使用yum方式從新安裝Subversion最新版本linux
咱們執行命令shell
yum remove subversion* yum clean all
直接卸載subversion和相關庫包centos
可是當咱們使用yum命令再安裝subversion時,發現CentOS自帶源的Subversion版本仍然是1.7.14bash
說明從CentOS自帶源安裝Subversion最新版本此路不通,咱們須要另行添加Repo源服務器
參考https://tecadmin.net/install-subversion-1-8-on-centos-rhel/#一文,咱們在tcp
/etc/yum.repos.d目錄下添加subversion.repo文件,內容以下svn
[Subversion] name=Wandisco SVN Repo baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/ enabled=1 gpgcheck=0
因爲咱們這裏安裝的是SVN1.9,在repo文件裏配置的是svn-1.9,若是要安裝SVN1.8,能夠改成svn-1.8字體
執行yum install -y subversion命令安裝Subversionurl
下列步驟參考了https://www.cnblogs.com/fuyuanming/p/6123395.html一文,
有部分有所修改
1)建立運行SVN服務器所需的用戶svn
groupadd svn useradd -g svn svn
這裏之因此要建立svn用戶啓動SVN服務器,而不使用root用戶啓動SVN服務器,是由於若是使用root用戶啓動SVN服務器,經過SVN客戶端使用非root帳戶訪問SVN服務器時,會出現
"xxxxxxxx db/txn-current-lock:permission denied"錯誤。
將svn用戶加入sudoers用戶中
2)執行rpm -ql subversion命令瞭解SVN安裝的位置
3)建立SVN版本庫文件夾
mkdir -p /opt/svnRepos
切換到svn用戶,爲svn用戶添加這個文件夾的訪問權限
sudo chmod -R o+rw /opt/svnRepos
4)建立SVN版本庫
svnadmin create /opt/svnRepos
執行命令後/opt/svnRepos文件夾下新增了一些文件夾
5)添加用戶密碼和訪問權限
進入conf目錄,能夠看到如下文件
authz文件是權限控制文件
passwd是賬號密碼文件
svnserve.conf是SVN服務配置文件
修改passwd文件,在[users]段添加用戶svnuser1和訪問密碼
修改authz文件,在文件最後爲svnuser1用戶添加svn根目錄訪問權限
這裏[/]表示是svn根目錄,svnuser1=rw說明svnuser1用戶對根目錄有讀寫權限。若是要限制某些用戶對某些文件夾的
讀寫權限, 這裏的[/]能夠改成具體的文件夾目錄,再添加具體的用戶權限,這裏再也不贅述。
6) 修改svn配置文件
修改svnserve.conf文件
打開如下幾項的註釋(圖中以白色字體標註)
anon-access = read #匿名用戶可讀
auth-access = write #受權用戶可寫
password-db = passwd #使用哪一個文件做爲帳號文件
authz-db = authz #使用哪一個文件做爲權限文件
realm = /opt/svnRepos # 認證空間名,版本庫所在目錄
7)啓動SVN服務器
執行如下命令
svnserve -d -r /opt/svnRepos --config-file=/opt/svnRepos/conf/svnserve.conf
這條指令的參數-d表示以守護進程形式運行Svn服務器,-r表示Svn服務器的根目錄,後接SVN的根目錄。
--config-file是Svn服務器啓動所引用的配置文件,後接配置文件路徑。
svnserve指令的更多參數能夠參考此文
https://linux.die.net/man/8/svnserve
啓動後能夠查看到svnserve進程已經啓動
8)在防火牆上開放SVN服務器端口
SVN服務器默認端口是3690,若是要修改默認端口,能夠在運行svnserve命令時添加--listen-port參數,後接須要指定的端口號。
執行如下命令在CentOS7系統防火牆上開放SVN服務器端口
firewall-cmd --permanent --add-port=3690/tcp systemctl restart firewalld.service
在客戶端安裝Tortoise SVN 1.9.7,安裝完成後新建一個文件夾,在文件夾中右擊,在彈出右鍵菜單中選擇[Repo-brower]菜單,在彈出的地址對話框中輸入SVN://IP(咱們這裏是SVN://192.168.56.102),再在驗證對話框中輸入用戶名rick和密碼,便可以訪問SVN根目錄,咱們使用svnuser1用戶登陸SVN,以下圖所示
咱們使用svnuser1用戶在根目錄下新建trunk,tags和branches三個文件夾
9)將SVN服務器設置爲開機啓動服務。
網上有相關文件經過修改/etc/rc.local文件設置SVN服務器開機啓動,這種作法在CentOS 7環境下已通過時,咱們使用CentOS 7正常添加服務的方式。
咱們切換到/usr/lib/systemd/system目錄下,建立名爲svnserver.service的文件,添加如下內容
[Unit] Description=SVN Server service After=network.target [Service] Type=forking ExecStart= /usr/bin/svnserve -d -r /opt/svnRepos --config-file=/opt/svnRepos/conf/svnserve.conf ExecStop= /home/svn/stopSVN.sh User=svn Restart=on-abort [Install] WantedBy=multi-user.target
這裏啓動SVN服務器直接使用命令,我試過寫一個.sh文件替換,但啓動後出現code=exited,status=203/EXEC錯誤,改用如今這種形式。
stopSVN.sh是用於關閉SVN服務的腳本文件,內容以下:
#!/bin/sh #查找是否有svnserve對應的進程,有的話關閉進程 ps -ef|grep svnserve |grep -v grep if [ $? -ne 0 ] then echo "the svn server does not start" else killall -9 sh svnserve fi #####
保存svnserver.service文件後,執行如下命令
systemctl daemon-reload systemctl enable svnserver.service systemctl start svnserver.service
若是shell窗口沒有出現錯誤信息,表示啓動已成功,咱們能夠執行如下命令檢查啓動狀態
systemctl status svnserver.service
運行如下命令中止服務
systemctl stop svnserver.service
咱們這時再運行systemctl stop svnserver.service,能夠看到服務已經被停掉
至此SVN服務器在Linux服務器安裝成功,再次啓動CentOS系統後SVN服務器會開機啓動。
補充一點,CentOS自帶的SELinux默認是Enforcing,處於打開狀態,對於自啓動的SVN服務,會致使客戶端訪問SVN服務器時出現Permisson Denied的錯誤,咱們須要手動關閉它,修改/etc/selinux/config文件
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
把SELINUX從enforcing改成disabled,重啓系統,SVN服務自啓動後,從客戶端訪問再也不出現Permssion Denied錯誤。