【DEVOPS】SVN Server迁移 - 从VisualSvnServer到iF.SVNAdmin
將原本部署在Windows服務器下的SVN服務端VisualSvnServer遷移到Linux下的iF.SVNAdmin,實現基于瀏覽器端的SVN管理,提升管理體驗,降低管理成本。
0. 目錄
- 1. 前言
- 2. 注意事項 - iF.SVNAdmin安裝
- 3. 注意事項 - 現有倉庫遷移
- 3.1 倉庫本身的遷移
- 3.2 用戶的遷移
- 3.3 權限的遷移
- 4. 注意事項 - https支持
- 5. 注意事項 - 關于pre-commit等hook
- 5.1 坑爹的換行符
- 5.2 中文編碼錯誤`Error output could not be translated from the native locale to UTF-8.`
- 6. 優化
- 6. Links
1. 前言
現有SVN服務端管理每次需要遠程登錄服務器的痛苦如同壓抑良久的火山終于爆發,部門近期終于下定決心將SVN Server從VisualSvnServer遷移到iF.SVNAdmin。
本文將介紹將VisualSvnServer所管理的現有SVN倉庫遷移到iF.SVNAdmin中時候的一些注意事項。
2. 注意事項 - iF.SVNAdmin安裝
關于iF.SVNAdmin的安裝,網上已經有了非常詳盡的資料(可參見底部鏈接),并且 iF.SVNAdmin的最近一次更新追溯到2013年,因此也不用擔心網上資料時效性的問題,因此筆者這里就不再拾人牙慧。
以下筆者僅就個人在安裝過程中遇到的一些典型問題進行總結:
Error: Could not copy configuration file template. Require write permission (777) to "data" folder and all containing files.
把SELinux狀態狀態改為disabled并重啟電腦。在終端輸入 setenforce 0(臨時關閉),永久關閉參考:https://jingyan.baidu.com/article/851fbc37a05a0d3e1f15abe3.html。
訪問錯誤日志查詢。
在iF.SVNAdmin的架構體系下,響應請求的其實是Apache所提供的服務,因此相關的錯誤日志,我們可以從/etc/httpd/logs/error_log下進行尋找。
SVN訪問地址。
svnadmin的管理頁面為 http://ip/svnadmin,而與之對應的,每個倉庫的訪問地址則為 http://ip/svn/{倉庫名}
3. 注意事項 - 現有倉庫遷移
3.1 倉庫本身的遷移
2021/07/26更正。
我們依然可以使用"復制VisualSvnServer下指定倉庫到iF.SVNAdmin對應目錄下"的方式來完成的SVN倉庫的遷移。
重要: 對比Windows端VisualSvnServer所擁有svn.exe的版本,然后將安裝了iF.SVNAdmin的Linux端的SVN客戶端工具升級為同樣的版本。方法參見【Linux】centos7.x 升級svn版本到指定版本。
在保證兩端SVN版本號相同之后,接下來的事情就簡單了:
cd /var/www/svn/{倉庫明}/db/ vi format # 內容修改為: # 4 # layout sharded 1000關于這一塊,筆者本來打算直接采取復制VisualSvnServer下指定倉庫到iF.SVNAdmin對應目錄下的方式來完成的,但是在實際的操作過程中發現現實并沒有那么美好,遷移過來的倉庫要么無法正常展示倉庫層級,要么甚至網頁都報錯。
無奈之下祭出最為穩妥的方式: 備份還原大法:
#################### VisualSvnServer(Windows Server下), 使用svnadmin進行指定倉庫的備份 ### 千萬注意: 以下操作必須在CMD下進行, 切勿使用powershell # PATH-TO-REPO - SVN 項目倉庫目錄 # PATH-TO-DUMP - 導出SVN項目倉庫dump目錄文件名 svnadmin dump PATH-TO-REPO > PATH-TO-DUMP# 范例 cd d:/SVN/Repositories/ svnadmin dump ./DEVOPS > D:/fulizhe/DEVOPS#################### iF.SVNAdmin(Centos7下), 依然是使用svnadmin進行指定上述svn備份庫的還原 # 1. 首先使用 iF.SVNadmin的瀏覽器管理工具創建一個空的SVN倉庫(這里注意直接選擇"空庫") # 2. 使用svnadmin進行上述svn備份庫的還原 # PATH-TO-NEW-REPO - SVN 項目倉庫目錄 # PATH-TO-DUMP - 已保存的SVN項目倉庫dump文件 svnadmin load PATH-TO-NEW-REPO < PATH-TO-DUMP# 范例 svnadmin load /var/www/svn/DEVOPS/ < /root/DEVOPS3.2 用戶的遷移
遷移完倉庫,接下來就該遷移SVN用戶。關于這一點,得益于SVN服務端本身良好的設計,這一塊工作量很少。
VisualSvnServer倉庫根目錄下有:
3.3 權限的遷移
依次對VisualSvnServer中的倉庫完成上述3.1小節的操作之后,我們將得到完整提交日志的SVN倉庫。接下來我們要做的是將原本在VisualSvnServer中配好的權限管理遷移到iF.SVNAdmin下。
得益于SVN服務端本身良好的設計,這一塊工作量也很少。
VisualSvnServer下針對每個倉庫的權限配置存放在每個倉庫文件夾下的 VisualSVN-SvnAuthz.ini 中(例如: F:\Repositories\{RepositoryName}\conf\VisualSVN-SvnAuthz.ini)。
復制上述文件中的權限配置項,粘貼到iF.SVNAdmin中的authz文件中(形如/var/www/svn/authz),形如:
[DEVOPS:/] # 倉庫根目錄, 這一部分由當前所操作的倉庫名決定 admin=rw # 用戶權限,這一部分正是從第一步中拷貝而來 @agroup-read=r # 組權限,這一部分正是從第一步中拷貝而來重要!如果想要正常登錄系統,還需要一步額外操作,這個屬于iF.SVNAdmin所專屬地。
cd /var/www/html/svnadminvi ./data/userroleassignments.ini# 增加以下內容, 按用戶名[zhubowen]User= # 擁有登錄和修改密碼地權限4. 注意事項 - https支持
為了最大化地減少使用者對于遷移的感知,降低遷移成本。我們還決定引入對于https的支持,最大化地模擬VisualSVNServer的訪問方式。
################################################ 生成ssl證書 # 本地生成ssl證書 (我們可以使用openssl工具自己生成證書, 這里我們就自己生成一個自簽名證書) # 1. 首先,生成2048位的加密私鑰 openssl genrsa -out server.key 2048# 2. 然后,生成證書簽名請求(CSR),這里需要填寫許多信息,如國家,省市,公司等 # 其中在輸入" Common Name (eg, your name or your server's hostname) []: "時候, 主機名一定要和httpd.conf文件中的ServerName 172.16.x.x保持一致,否則會報錯。 openssl req -new -key server.key -out server.csr# 3. 最后,生成類型為X509的自簽名證書。有效期設置3650天,即有效期為10年 openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt################################################ 安裝ssl模塊 # 安裝ssl模塊 # 安裝完成后,會在/etc/httpd/conf.d/下生成一個ssl.conf配置文件。 yum install mod_ssl -y# 建一個目錄用來放ssl證書文件 mkdir /etc/httpd/ssl/ # 復制秘鑰和證書文件到指定位置 cp server.crt server.key /etc/httpd/ssl/# 編輯ssl配置文件 vi /etc/httpd/conf.d/ssl.confDocumentRoot "/var/www/html" #網頁文件路徑ServerName 域名:443 #改為自己的域名SSLEngine on #啟用SSL功能SSLCertificateFile /etc/httpd/ssl/2_www.**.cn.crt #填寫證書文件路徑SSLCertificateKeyFile /etc/httpd/ssl/3_www.***.cn.key #填寫私鑰文件路徑SSLCertificateChainFile /etc/httpd/ssl/1_root_bundle.crt #填寫證書鏈文件路徑# 重啟服務器 service httpd restart#### 關鍵路徑 /etc/httpd/conf.d/ssl.conf # ssl相關配置 /etc/httpd/conf.modules.d/00-ssl.conf # 配置加載 mod_ssl.so 模塊 /etc/httpd/modules/mod_ssl.so參考:
5. 注意事項 - 關于pre-commit等hook
5.1 坑爹的換行符
從 Windows下的VisualSVN遷移到Linux下的iF.SVNAdmin,原本正常生效的pre-commit報錯,最終發現是腳本里換行符導致的。以下是筆者所面臨問題的解決方案:
# 去掉多余的 \r sed -i 's/\r$//' pre-commit5.2 中文編碼錯誤Error output could not be translated from the native locale to UTF-8.
# 修改/etc/httpd/conf/httpd.conf文件 #往文件中添加內容:<IfModule mod_dav_fs.c># Location of the WebDAV lock database.DAVLockDB /var/lib/dav/lockdbSVNUseUTF8 On</IfModule># 重啟 service httpd restart6. 優化
使用iF.SVNadmin代替VisualSvnServer進行SVN管理之后,確實杜絕了每次SVN服務端操作需要登錄遠程服務器的窘境,但iF.SVNadmin的權限配置這一塊確實不如VisualSvnServer來的方便,你必須手動輸入需要進行權限配置的SVN目錄,這是筆者目前體驗下來最大的痛點。
還有就是即使在進行了iF.SVNadmin的遷移之后,SVN倉庫創建以及權限的分派之初,依然是一個相當明顯的重復枯燥工作。
我們完全可以考慮借助Jenkins + Ansible 來將SVN倉庫的創建和權限維護操作自助化。
6. Links
總結
以上是生活随笔為你收集整理的【DEVOPS】SVN Server迁移 - 从VisualSvnServer到iF.SVNAdmin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: usb驱动修复_win10 1903 5
- 下一篇: THREE 天空盒