Centos7安裝svn
2020-12-05 09:53:03
2020-11-18 16:54:08+0800 chenxizhan new
-
在Centos上安裝SVN服務器的步驟
-
簡單介紹每個安裝步驟的原理
-
CentOS Linux release 7.9
-
svn, version 1.7.14
公司專案使用svn做管理,但我用慣了git,好在有git-svn命令,
只是以前沒用過git-svn,想先找個地方練習一下,所以趁著周末在本地虛擬機上搭建了svn 服務,
把搭建程序記錄一下,
安裝
完整的安裝和啟動步驟,復制并執行即可,
# 1. 安裝服務
sudo yum install subversion
# 2. 創建存放倉庫的目錄
sudo mkdir -p /var/svn
# 3. 創建名為 rep1 的倉庫
pth=/var/svn/rep1
sudo svnadmin create $pth
# 4. 添加一個訪問倉庫的賬號密碼
# 4.1 先啟用賬號密碼認證
sudo sed -iE -e 's/# password-db = passwd/password-db = passwd/' $pth/conf/svnserve.conf
# 4.2 再添加用戶名 bob,密碼 cpc2020*
sudo sed '/^\[users\]/abob=cpc2020*' -i $pth/conf/passwd
# 5. 啟動服務
sudo systemctl start svnserve.service
# 5.1 確認服務啟動成功
sudo systemctl status svnserve.service
# 6. 設定服務開機啟動
sudo systemctl enable svnserve.service
客戶端訪問
在客戶端實際訪問一下,測驗服務是否搭建正常,
# 1. 檢出倉庫
$ svn co svn://localhost/rep1
Checked out revision 0.
# 2. 測驗提交檔案
# 2.1
$ cd rep1
# 2.2 新建檔案并提交
$ touch foo
$ svn add foo
$ svn commit -m test # 這時會提示輸入用戶名和密碼
Adding foo
Transmitting file data .
Committed revision 1.
# 3. 查看提交歷史
$ svn up # 先更新
Updating '.':
At revision 1.
$ svn log # 查看歷史
------------------------------------------------------------------------
r1 | bob | 2020-12-05 11:14:44 +0800 (六, 05 12月 2020) | 1 line
test
------------------------------------------------------------------------
安裝步驟解釋
步驟 1,2,5,6 是作業系統相關的內容,
步驟 3,4是svn中的知識點,
1. 安裝服務
sudo yum install subversion
這條命令用來安裝 subversion 軟體包,該軟體包同時包含服務器和客戶端程式,
安裝完成之后,機器上會多出來 svn, svnadmin, svnserve 等命令,
svn 是 subversion 的客戶端命令列工具,
svnadmin 和 svnserve 是服務器端程式,
執行 svn 命令,有類似輸出說明安裝成功,
$ svn --version
svn, version 1.7.14 (r1542130)
compiled Sep 30 2020, 17:44:04
Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/
……
安裝程序會在背后處理很多事情,其中一個就是“注冊”了subversion服務,只不過是處于禁用狀態,
$ systemctl list-unit-files --all | grep svn
svnserve.service disabled
簡單分析一下這個服務,
- centos 使用 systemd 作為 init 行程,它是個大管家,一個系統服務就是特定位置的一個 .service 檔案,
$ systemctl show svnserve.service | grep Path
FragmentPath=/usr/lib/systemd/system/svnserve.service
所以 subversion 服務對應的檔案就是/usr/lib/systemd/system/svnserve.service,
- 查看 .service 檔案內容
# 2.1 可以用 cat 命令
$ cat /usr/lib/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Install]
WantedBy=multi-user.target
# 2.2 也可以使用 systemctl cat 命令
$ systemctl cat svnserve.service
# /usr/lib/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Install]
WantedBy=multi-user.target
.service 檔案中各個欄位的含義,查閱man systemd.service,或者看中文翻譯:
systemd.service 中文手冊 [金步國]
2. 創建存放倉庫的目錄
sudo mkdir -p /var/svn
svnserve.service檔案內容很簡單,看一下[Service]小節,
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Service]表明這是一個系統服務,
ExecStart 給出了啟動服務的命令,
EnvironmentFile給出了環境變數設定,cat 一下,這個檔案只設定了一個環境變數 OPTIONS
$ cat /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /var/svn"
所以啟動服務實際執行的命令就會是:
/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /var/svn
這里的 -r /var/svn 是指定了 svn 服務存放倉庫的路徑,
一個 svn 服務可以同時管理多個倉庫,每個倉庫就是 /var/svn 下的一個子目錄,
安裝svn不會自動創建這個目錄,所以需要手動創建,
3. 創建名為 rep1 的倉庫
pth=/var/svn/rep1
sudo svnadmin create $pth
一個 svn 服務可以同時管理多個倉庫,每個倉庫就是 /var/svn 下的一個子目錄,
比如,如果svn服務管理了 rep1,rep2 兩個倉庫,則 /var/svn 下就會有兩個子目錄,
$ ls /var/svn/
rep1/ rep2/
從檔案系統的角度看,一個svn服務端的倉庫就是 /var/svn 目錄下一個具備特定結構的子目錄,
$ ls /var/svn/rep1 -F
conf/ db/ format hooks/ locks/ README.txt
svnadmin 是服務端輔助管理工具,它可以創建空倉庫,
專案中使用的倉庫一般有 trunk/, tags/, branches/ 三個子目錄,這里只簡單創建空的目錄,
svn 倉庫布局和svn的使用參考 svn-book(svn 官網的一本書),
4. 添加一個訪問倉庫的賬號密碼
# 4.1 先啟用賬號密碼認證
sudo sed -iE -e 's/# password-db = passwd/password-db = passwd/' $pth/conf/svnserve.conf
# 4.2 再添加用戶名 bob,密碼 cpc2020*
sudo sed '/^\[users\]/abob=cpc2020*' -i $pth/conf/passwd
每個倉庫下都有 conf/svnserve.conf 檔案,它是所在倉庫的主組態檔,賬號密碼和訪問權限的設定都是在這里,
該檔案默認的內容提供了檔案格式說明、可用的選項及其含義、選項默認值,
默認權限設定是:允許匿名用戶讀取倉庫,但必須有賬號密碼才能做提交,
相關的設定是這兩行:
# read 權限只能讀取,不能提交;write 可以讀取和提交;設定為anno則禁止訪問,
# 等號兩側的空格是可選的,
# anon-access = read
# auth-access = write
因為是默認值,所以svn就放在了注釋中,如果需要修改默認行為,去掉井號,設定特定的值就行了.
這一步驟的第一條命令執行完畢后,去掉注釋(井號開頭的行),有實際意義的行只有兩行:
[general]
password-db = passwd
行password-db = passwd指定存放賬號密碼的檔案是passwd,
第二條命令就在 passwd 檔案中添加了一個賬號,緊挨著[users]下面那一行就是,
[users]
chenx=1995*
# harry = harryssecret
# sally = sallyssecret
conf/svnserve.conf 檔案中還有個authz-db = authz選項,放開這一行可以開啟基于倉庫
路徑的訪問控制(默認是對整個倉庫授權),只要在 authz 檔案中設定權限即可,
5. 啟動服務
sudo systemctl start svnserve.service
這是 systemd 工具鏈中的組件,
驗證服務是否成功啟動:
$ sudo systemctl status svnserve.service
● svnserve.service - Subversion protocol daemon
Loaded: loaded (/usr/lib/systemd/system/svnserve.service; disabled; vendor preset: disabled)
Active: active (running) since 六 2020-12-05 12:27:33 CST; 5s ago
看到 active (running) 表示啟動成功,
6. 設定服務開機啟動
sudo systemctl enable svnserve.service
# 創建存放svn倉庫的目錄
sudo mkdir /var/svn
# 創建一個svn倉庫
sudo svnadmin create /var/svn/rep1
從 rep1/svnserve.conf 檔案可以看到,
默認,svn倉庫允許匿名用戶讀取,允許登錄用戶完整的讀/寫權限,
- 指定 authz-db 選項,可以開啟基于路徑的權限管理,默認是不開啟的,
讓svn服務以非特權用戶啟動
安裝svn之后,查看 svnserve 服務是以 root 身份運行的,
通產來說這是有安全隱患的,所以把它改成非特權用戶,
先查看 svnserve.service 的當前運行身份
$ systemctl show svnserve.service -p User,Group
User=
Group=
User=表示沒有指定身份,又因為該服務直接由 systemd 啟動,所以svn服務的有效用戶id就是root用戶,
man systemd.exec
User=, Group= 設定行程在執行時使用的用戶與組, 既可以設為一個數字形式的 UID/GID 也可以設為一個字串形式的名稱, 對于系統服務(由 PID=1 的 systemd 系統實體管理)以及由 root 運行的用戶服務(由 root 用戶啟動的 systemd --user 用戶實體管理), User= 的默認值是 “root” ,同時亦可明確將 User= 設為其他用戶, 對于普通用戶運行的用戶服務,User= 的默認值就是該用戶自身,并且禁止將 User= 切換為其他用戶, 如果沒有明確設定 Group= 選項,則使用 User= 所屬的默認組, 此選項不影響 帶有 “+” 前綴的命令,
下面是具體的操作步驟:
# 添加 svn 用戶(系統用戶)
$ sudo useradd svn --system
# 把相關檔案的所有權轉移到 svn
$ sudo chown svn:svn /var/svn
$ sudo chown svn:svn /run/svnserve
# 對 svnserve.service 檔案做一些定制
$ sudo EDITOR=$(which vim) systemctl edit svnserve.service
這里的 EDITOR=$(which vim) 是為了讓 systemctl 使用 vim 編輯器打開,否則它會使用的
古老的 nano 編輯器,
然后在編輯器界面輸入如下三行內容:
[Service]
User=svn
Group=svn
# 通知systemd,svnserve.service 服務配置發生了變化
$ sudo sytemctl daemon-reload
# 重新啟動服務
$ sudo systemctl start svnserve.service
到此,設定完成,
關于 systemctl edit 命令
為了避免和包管理軟體(如yum)沖突,不應該直接編輯軟體包提供的檔案(如 svnserve.serivce),
有兩種方法可以在不改動原始檔案的情況下修改單元檔案:創建一個優先級更高的本地單元檔案
或創建一個片段,應用到原始單元檔案之上,
systemctl edit 實際是創建了 /etc/systemd/system/svnserve.service.d/override.conf 檔案,
目錄 /etc/systemd/system/svnserve.service.d/ 下的檔案配置的同名選項會具有比
/etc/systemd/system/svnserve.service 更高的優先級,
而目錄 /etc/systemd/system/svnserve.service.d/ 不是軟體包的一部分,把自定義配置放在這里
可以防止更新 svn 軟體包的時候被覆寫掉,
用 systemctl cat 可以查看最終的配置效果:
$ sudo systemctl cat svnserve.service
# /etc/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/svnserve.service.d/override.conf
[Service]
User=svn
Group=svn
這個再看服務對應的用戶和組,已經都是 svn 了,
$ systemctl show svnserve.service -p User,Group
User=svn
Group=svn
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230661.html
標籤:其他
上一篇:Centos里安裝MySQL
