SVN(linux版)安裝與使用


 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

 
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以上重新安裝

參考: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] :在標准錯誤輸出不顯示進度(僅錯誤)

備份恢復:

svnadmin create /svn/project/test  #創建一個新的版本庫
svnadmin load /svn/project/test < full.svn.bak  #現還原完全備份

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM