SVN(linux版)安裝與使用

 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

  • 2.1) svnserve 運行模式

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

 
2)apr-util安裝
     tar -zxf apr-util -1.6.1.tar.gz 
cd ./apr-util -1.6.1
./configure --prefix= /usr/local/apr-util --with-apr=/usr/local/apr && make && make install
 

這裏須要注意./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] :在標準錯誤輸出不顯示進度(僅錯誤)

備份恢復:

svnadmin create /svn/project/test  #建立一個新的版本庫
svnadmin load /svn/project/test < full.svn.bak  #現還原徹底備份
相關文章
相關標籤/搜索