SVN(linux版)安裝與使用
一 簡述:
SVN有2種運行方式,一種是 linux自帶的輕量級服務器svnserve,一種是基於Apache的。
基於svnserve的,默認端口為3690,通過“svnserve -d -r 目錄 端口” 命令啟動。使用的是svn協議。
基於Apache的,默認端口為Apache的默認端口80。配置好后apache啟動就可以訪問。使用的是http協議。
一項目,由於部署在內網,外網通過nginx轉發,那就只能通過http轉發,只能采用apache這種方式了。即nginx+apache+svn。
二: 安裝
- 2.1) svnserve 運行模式
Linux下單獨安裝SVN,那就是安裝svnserve這種了。
步驟參考:
https://blog.csdn.net/zhihua_w/article/details/80631403
https://blog.csdn.net/qq_27868061/article/details/81094187
主要步驟與命令:
1. 查看是否安裝/版本號
svnserve --version
注意:使用以下命令安裝的,一般版本會比較低一些(1.06),如果需要使用最新版本(1.12),只能到官網上下載源代碼版,然后手工編譯。
2. 安裝命令(centos)
yum install subversion
安裝命令(suse)
zypper install subversion
如果沒有找到,可以按以下方式配置安裝源
zypper ar http://ftp5.gwdg.de/pub/opensuse/discontinued/distribution/12.2/repo/oss/ svnpkg
zypper refresh
3)查看安裝目錄
whereis subversion
4)創建一個SVN倉庫目錄
svnadmin create myProject
如:svnadmin create /home/svn/repos1
進入文件夾查看可看到文件夾包含了conf、db、format、hooks、locks、 README.txt等文件,說明一個SVN庫已經建立。
5) 用戶配置
conf下幾個文件authz,passwd,svnserve.conf。其中authz 是權限控制,可以設置哪些用戶可以訪問哪些目錄,passwd是設置用戶和密碼的,svnserve是設置svn相關的操作
5.1配置 svnserv.conf
# vim svnserv.conf
[general]
anon-access = none # 使非授權用戶無法訪問
auth-access = write # 使授權用戶有寫權限
password-db = password # 用戶密碼文件
authz-db = authz # 訪問控制文件
realm = /home/svn/project # 認證命名空間,subversion會在認證提示里顯示,並且作為憑證緩存的關鍵字。
# 采用默認配置,以上語句都必須頂格寫,左側不能留空格,否則會出錯。
5.2.配置passwd(格式:帳號=密碼)
[users]
# harry = harryssecret
# sally = sallyssecret
username = 123456
注: 這種配置的不好是密碼沒有加密,最好用htpasswd的方式創建,下有。
5.3.配置authz權限
# 在末尾添加如下代碼
[/]
username = rw
# r:讀,w:寫
6) 啟動服務
指定端口啟動:svnserve -d -r /etc/subversion/myProject/ --listen-port 9092
例:svnserve -d -r /home/svn/ --listen-port 9092
7) 測試訪問
防火牆臨時放開端口:iptables -I INPUT -ptcp --dport 9092 -j ACCEPT
訪問:svn://IP:端口
如:svn://127.0.0.1:9092
---------------------------------------
2) apache 運行模式
如果需要通過http這種方式訪問,那就需要apache的協助,安裝apache的mod_dav協議模塊。
1. 獲取一下svn的源碼包版本:
http://subversion.apache.org/download.cgi#recommended-release
2. 編譯svn讓生成mod_dav_svn.so與mod_auth_svn.so
./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apxs=/usr/local/apache2/bin/apxs --with-zlib --enable-maintainer-mode --with-apr-util=/usr/local/apr-util --with-lz4=internal --with-utf8proc=internal
紅色部分路徑按實際修改,如有些環境的apache是安裝在/usr/local/httpd目錄下的;另外,測試過--with-apxs這個可以不加,會自動去目標服務器上搜索尋找。
make
make install
如果只是為了生成mod_dav_svn.so與mod_auth_svn.so兩個文件,這個make install可以不用操作。
3. 配置生效apache的mod_dav_svn模塊關聯
1) 將mod_dav_svn.so與mod_auth_svn.so 復制到apache的modules目錄下
2) 配置httpd.conf模塊,增加mod_dav_svn的配置
配置apache通過mod_dav_svn模塊訪問SVN服務器,在文件的最后添加:
vim
/usr/locol/httpd/conf
/httpd
.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location
/svn
>
DAV svn
SVNParentPath
/home/svn111
----存放倉庫
AuthType Basic
AuthName
"SVN server of test!"
AuthUserFile
/home/svn111/passwd
----
passwd
存儲用戶名和密碼,自定義
AuthzSVNAccessFile
/home/svn111/auth
----存放用戶的權限,自定義
Require valid-user
<
/Location
>
4. 重啟apache啟動svn服務
說明:這種方式下,這樣就可以訪問svn了。
5.增加用戶與密碼(注意apache版的需要使用htpasswd創建)
htpasswd -c /home/svn111/repos1/.passwd admin
這時不需要配置svnserv.conf等文件
新增用戶:
htpasswd -b .passwd 用戶 密碼
6. 配置用戶權限
vi auth.conf
7. 配置SVN提交時強制寫日志(可選)
SVN默認可以不寫注釋提交,有時候可能忘記寫注釋,有的人也沒有寫注釋的習慣,導致翻看history的時候都不知道做了哪些更改,可以依照以下步驟修改SVN配置,強制提交SVN前寫注釋
cd /home/svn/hooks
cp pre-commit.tmpl pre-commit
chmod 700 pre-commit #獲取可執行權限
vi pre-commit
REPOS="$1"
TXN="$2"
comment=0
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9\u4e00-\u9fa5]" || comment=1
if [ $comment -eq 1 ]
then
echo "請填寫中文或者英文備注" 1>&2
exit 1
else
exit 0
fi
說明:
編譯subversion的時候,會有一些依賴包,sqlite3,apr,apr-util這3個是必須的,需要提前安裝配置好。
1) sqlite安裝
sqlite不需要安裝,只需要解壓,復制到svn解壓后的源碼包中即可。
下載路徑:https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip
unzip sqlite-amalgamation-3240000.zip
mv sqlite-amalgamation-3240000 subversion-1.10.0/sqlite-amalgamation
這里需要注意./configure命令,這個命令作為編譯配置有很多選項,如果失敗,需要添加合適的選項,錯誤如下:
錯誤1:configure: error: Subversion requires LZ4 >= r129, or use --with-lz4=internal
解決:./configure命令添加 --with-lz4=internal選項
錯誤2:configure: error: Subversion requires UTF8PROC
解決:./configure命令添加 --with-utf8proc=internal
錯誤3:配置好mod_dav_svn配置后重啟apache時,如果報make: *** [subversion/libsvn_subr/libsvn_subr-1.la] error 1,那就表麻煩了,還是說明這兩個mod_dav_svn.so與mod_auth_svn.so如果從別的地方copy過來,而不是編譯的話,會有很多依賴包的關系識別不到。只能本地重新編譯了。
/home/admin/subversion-1.10.4/subversion/libsvn_subr/xml.c:70: undefined reference to `XML_ExpatVersion'
.libs/xml.o: In function `expat_start_handler':
...
1.10.4/subversion/libsvn_subr/xml.c:536: undefined reference to `XML_SetCharacterDataHandler'
/home/admin/subversion-1.10.4/subversion/libsvn_subr/xml.c:538: undefined reference to `XML_SetEntityDeclHandler'
collect2: ld returned 1 exit status
make: *** [subversion/libsvn_subr/libsvn_subr-1.la] 錯誤 1
錯誤4:編譯過程如果報 /lib64/libc.so.6: version `GLIBC_2.14' not found,則需要下載GLIBC_2.17以上重新安裝
參考:https://www.cnblogs.com/bonelee/p/8310389.html
如果這過程,編譯的庫失敗導致出現系統連接不上等lib庫無法使用問題,則需要回退
LD_PRELOAD=/lib64/libc-2.14.so rm /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6
錯誤5:編譯過程如果報 configure: error: no XML parser was found: expat or libxml 2.x required
wget http://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz/download
安裝 expat 后重新安裝即可
獲取 neno configure后目錄下的libtool,替換到svn的安裝目錄下,重新編譯
錯誤6:Svn 不能打開文件 '*****/db/txn-current-lock': 權限不夠
https://blog.csdn.net/qq_36014367/article/details/84098634
-------------------------------------------------------------------------------------------
三:subversion目錄說明:
├── conf
│ ├── authz 配置用戶組權限
│ ├── passwd 配置用戶/用戶組密碼
│ └── svnserve.conf 配置文件主入口
├── db
│ ├── current
│ ├── format
│ ├── fsfs.conf
│ ├── fs-type
│ ├── min-unpacked-rev
│ ├── rep-cache.db
│ ├── revprops
│ │ └── 0
│ │ ├── 0
│ │ ├── 1
│ │ ├── 2
│ │ └── 3
│ ├── revs --上傳的文件放到這里
│ │ └── 0
│ │ ├── 0
│ │ ├── 1
│ │ ├── 2
│ │ └── 3
│ ├── transactions
│ ├── txn-current
│ ├── txn-current-lock
│ ├── txn-protorevs
│ ├── uuid
│ └── write-lock
├── format
├── hooks
│ ├── post-commit.tmpl
│ ├── post-lock.tmpl
│ ├── post-revprop-change.tmpl
│ ├── post-unlock.tmpl
│ ├── pre-commit.tmpl
│ ├── pre-lock.tmpl
│ ├── pre-revprop-change.tmpl
│ ├── pre-unlock.tmpl
│ └── start-commit.tmpl
├── locks
│ ├── db.lock
│ └── db-logs.lock
└── README.txt
-----------------------------------------------------------------------
四: SVN的備份&備份恢復
參考:
https://www.cnblogs.com/pipi928/p/7448586.html
https://blog.csdn.net/baidu_38432732/article/details/80637937
首次備份(全量備份): svnadmin hotcopy 待備份的目錄 備份到的目錄
后續備份(增量備份): svnadmin dump 待備份的目錄 --incremental --r [--revision] > 備份到的目錄 -q [--quiet]
說明:
1. svnadmin hotcopy是將整個庫都“熱”拷貝一份出來,包括庫的鈎子腳本、配置文件等;任何時候運行這個腳本都得到一個版本庫的安全拷貝,不管是否有其他進程正在使用版本庫。
2. 增量備份需要先查看下當前最新的版本號,svnlook youngest查看一下project最新的版本號,顯示最新版本記錄為4。-q [--quiet] :在標准錯誤輸出不顯示進度(僅錯誤)
備份恢復: