SVN(linux版)安裝與使用html
一 簡述: linux
SVN有2種運行方式,一種是 linux自帶的輕量級服務器svnserve,一種是基於Apache的。nginx
基於svnserve的,默認端口爲3690,經過「svnserve -d -r 目錄 端口」 命令啓動。使用的是svn協議。sql
基於Apache的,默認端口爲Apache的默認端口80。配置好後apache啓動就能夠訪問。使用的是http協議。apache
一項目,因爲部署在內網,外網經過nginx轉發,那就只能經過http轉發,只能採用apache這種方式了。即nginx+apache+svn。vim
二: 安裝centos
Linux下單獨安裝SVN,那就是安裝svnserve這種了。緩存
步驟參考:安全
http://www.javashuo.com/article/p-bjokbndm-dx.htmlbash
http://www.javashuo.com/article/p-znhbonwh-go.html
主要步驟與命令:
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以上從新安裝
參考:http://www.javashuo.com/article/p-nrathelh-bd.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的備份&備份恢復
參考:
http://www.javashuo.com/article/p-qsgaaozh-v.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] :在標準錯誤輸出不顯示進度(僅錯誤)
備份恢復: