Cách thiết lập máy chủ SVN trên CentOS

theanh

Administrator
Nhân viên
Hướng dẫn này giải thích cách thiết lập và sử dụng máy chủ lưu trữ SVN trên CentOS. Trước khi bắt đầu, hãy để tôi giải thích SVN thực sự đại diện cho cái gì và nó được sử dụng để làm gì. SVN thực sự là viết tắt của SubVersion do nhà phát triển phần mềm Apache tạo ra. Nó cho phép bạn tạo và duy trì kho lưu trữ của riêng mình và cấp quyền truy cập chi tiết cho người dùng chuyên dụng.

Nó rất hiệu quả để kiểm soát phiên bản của tệp, tài liệu hoặc thư mục. Nó rất hữu ích cho bất kỳ nhóm hoặc đội nào có ý định bắt đầu các dự án phần mềm của riêng họ.


1. Lưu ý sơ bộ​

Đối với hướng dẫn này, tôi đang sử dụng CentOS 6.4 ở phiên bản 32 bit. Kết quả cuối cùng sẽ cho bạn thấy cách một máy khách chuyên dụng có thể quản lý để truy cập kho lưu trữ SVN bằng bất kỳ loại nền tảng hệ điều hành nào.


2. Cài đặt SVN​

Để bắt đầu với máy chủ SVN mới, chúng ta cần cài đặt một số gói nhất định. Các gói liên quan là apache httpd, mod_dav_svn và subversion. Gói HTTPD là cần thiết như một dịch vụ máy chủ web cho quá trình này.

Vì hướng dẫn này sử dụng hệ điều hành CentOS, chúng ta sẽ lấy các gói từ kho lưu trữ yum. Bạn có thể sử dụng các gói khác như nginx, lighttpd hoặc bất kỳ dịch vụ máy chủ web quen thuộc nào để thay thế httpd nếu bạn thích. Sau đây là các bước:
Mã:
ifconfig
Mã:
[root@SVNSVR641 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:192.168.43.101 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4640 errors:0 dropped:0 overruns:0 frame:0
TX packets:6845 errors:0 dropped:0 tràn:0 sóng mang:0
va chạm:0 txqueuelen:1000
RX byte:444461 (434,0 KiB) TX byte:549473 (536,5 KiB)
Mã:
lo Liên kết encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Phạm vi:Máy chủ
LỒNG LÊN ĐANG CHẠY MTU:16436 Metric:1
Gói RX:2125 lỗi:0 bị loại bỏ:0 tràn:0 khung:0
Gói TX:2125 lỗi:0 bị loại bỏ:0 tràn:0 sóng mang:0
va chạm:0 txqueuelen:0
RX byte:186888 (182,5 KiB) TX byte:186888 (182,5 KiB)
Mã:
yum install -y httpd
Mã:
[root@SVNSVR641 ~]# yum install -y httpd
Các plugin đã tải: refresh-packagekit, security
Kho lưu trữ 'OEL64' bị thiếu tên trong cấu hình, sử dụng id
Thiết lập quy trình cài đặt
Giải quyết các phụ thuộc
--> Đang chạy kiểm tra giao dịch
---> Gói httpd.i686 0:2.2.15-26.0.1.el6 sẽ được cài đặt
--> Đã hoàn tất giải quyết phụ thuộc
Mã:
Đã giải quyết phụ thuộc
Mã:
= ... Kích thước
= ... Tóm tắt
= ... httpd-2.2.15-26.0.1.el6.i686 1/1
Mã:
Đã cài đặt:
httpd.i686 0:2.2.15-26.0.1.el6
Mã:
Hoàn tất!
Mã:
yum install -y subversion
Mã:
[root@SVNSVR641 ~]# yum install -y subversion
Các plugin đã tải: refresh-packagekit, security
Kho lưu trữ 'OEL64' bị thiếu tên trong cấu hình, sử dụng id
Đang thiết lập quy trình cài đặt
Giải quyết các phụ thuộc
--> Đang chạy kiểm tra giao dịch
---> Gói subversion.i686 0:1.6.11-7.el6 sẽ được cài đặt
--> Đã hoàn tất giải quyết phụ thuộc
Mã:
Đã giải quyết phụ thuộc
Mã:
= ... Kích thước
= ...
Tóm tắt giao dịch
= ... 1/1
Đang xác minh: subversion-1.6.11-7.el6.i686 1/1
Mã:
Đã cài đặt:
subversion.i686 0:1.6.11-7.el6
Mã:
Hoàn tất!
Mã:
yum install -y mod_dav_svn
Mã:
[root@SVNSVR641 ~]# yum install -y mod_dav_svn
Các plugin đã tải: refresh-packagekit, security
Kho lưu trữ 'OEL64' bị thiếu tên trong cấu hình, sử dụng id
Đang thiết lập quy trình cài đặt
Giải quyết các phụ thuộc
--> Đang chạy kiểm tra giao dịch
---> Gói mod_dav_svn.i686 0:1.6.11-7.el6 sẽ được cài đặt
--> Đã hoàn tất giải quyết phụ thuộc
Mã:
Đã giải quyết phụ thuộc
Mã:
= ... Kích thước
= ... Tóm tắt
= ... mod_dav_svn-1.6.11-7.el6.i686 1/1
Mã:
Đã cài đặt:
mod_dav_svn.i686 0:1.6.11-7.el6
Mã:
Hoàn tất!


3. Cấu hình SVN​

Tuyệt, giờ thì phần cài đặt đã hoàn tất. Tiếp theo, chúng ta sẽ tiến tới phần cấu hình. Trước tiên, hãy tạo một thư mục chuyên dụng để sử dụng kho lưu trữ SVN. Đây là một quy trình tùy chọn nhưng là một thông lệ tốt khi triển khai cho một nhóm quy mô lớn hơn. Dưới đây là các bước:
Mã:
mkdir /data/svn
Bây giờ chúng ta sẽ tạo thư mục kho lưu trữ đầu tiên, tôi sẽ đặt tên là repo1. Vì sau này, máy khách có thể truy cập kho lưu trữ thông qua trình duyệt hoặc các công cụ máy khách SVN, chúng tôi sẽ cấp quyền sở hữu thư mục cho Apache vì đây là chủ sở hữu của dịch vụ máy chủ web. Dưới đây là các bước:
Mã:
svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1
Sau khi hoàn tất, bạn sẽ thấy rằng một số thư mục và tệp liên quan sẽ được tạo theo mặc định trong thư mục kho lưu trữ mới của chúng tôi.
Mã:
cd /data/svn/repo1
ls
Mã:
[root@SVNSVR641 repo1]# ls
conf db format hooks locks README.txt

Bây giờ chúng ta chỉnh sửa tệp cấu hình để đáp ứng các yêu cầu của mình. Đầu tiên, chúng ta sẽ chỉnh sửa tệp cấu hình svnserver.conf để chấp nhận các đặc quyền liên quan mà chúng ta sẽ chỉ định cho người dùng được cấp. Dưới đây là các bước:
Mã:
cd conf/
ls
Mã:
[root@SVNSVR641 conf]# ls
authz passwd svnserve.conf
Mã:
vi svnserve.conf
Mã:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
Sau đó, tạo một tệp mới có tên passwd sẽ chứa danh sách người dùng cho kho lưu trữ SVN. Dưới đây là các bước:
Mã:
htpasswd -c /data/svn/repo1/conf/passwd jay
Mã:
[root@SVNSVR641 conf]# htpasswd -c /data/svn/repo1/conf/passwd jay
Mật khẩu mới:
Nhập lại mật khẩu mới:
Đang thêm mật khẩu cho người dùng jay
Mã:
[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
Xong, chúng ta đã tạo thành công một người dùng để sử dụng kho lưu trữ SVN. Hãy tạo thêm 2 người dùng nữa để truy cập kho lưu trữ SVN. Sau đây là các bước:
Mã:
htpasswd /data/svn/repo1/conf/passwd fikri
Mã:
[root@SVNSVR641 conf]# htpasswd /data/svn/repo1/conf/passwd fikri
Mật khẩu mới:
Nhập lại mật khẩu mới:
Đang thêm mật khẩu cho người dùng fikri
Mã:
htpasswd /data/svn/repo1/conf/passwd farid
Mã:
[root@SVNSVR641 conf]# htpasswd /data/svn/repo1/conf/passwd farid
Mật khẩu mới:
Nhập lại mật khẩu mới:
Đang thêm mật khẩu cho người dùng farid
Mã:
[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo

Xong, bây giờ có 3 người dùng được liệt kê để sử dụng kho lưu trữ SVN. Đối với bài thực hành này, tôi muốn chỉ cho bạn cách chúng ta có thể giới hạn các đặc quyền của người dùng. Hãy chỉ định đặc quyền truy cập kho lưu trữ repo1. Để thực hiện việc này, chúng ta cần chỉnh sửa tệp cấu hình authz. Dưới đây là các bước:
Mã:
vi authz
Mã:
[repo1:/]
farid = r
fikri = rw
* =
Dựa trên cấu hình trên, chúng tôi đã thiết lập các đặc quyền khác nhau cho 3 người dùng mà chúng tôi đã tạo trước đó. Chúng tôi đã chỉ định người dùng FARID có đặc quyền CHỈ ĐỌC, FIKRI có đặc quyền ĐỌC GHI và JAY hoặc những người khác không có bất kỳ đặc quyền nào. Nghĩa là sau này trong quá trình thử nghiệm, tôi sẽ chỉ cho bạn thấy rằng người dùng JAY sẽ không thể xem bất kỳ tệp nào trong kho lưu trữ repo1.

Bây giờ, hãy chỉnh sửa tệp cấu hình dịch vụ HTTPD.
Mã:
vi /etc/httpd/conf/httpd.conf
Kiểm tra xem dòng sau có tồn tại để bao gồm các tệp cấu hình bên ngoài vào tệp httpd.conf không. Nếu không tồn tại, hãy thêm nó vào cuối tệp.
Mã:
[.....]
Bao gồm conf.d/*.conf
[.....]
Tiếp theo, chúng ta đến thư mục conf.d để thực hiện một số thay đổi trong các tệp cấu hình liên quan. Bạn sẽ thấy rằng đã có một tệp subversion.conf. Chỉnh sửa tệp để làm cho kho lưu trữ có thể xem được trong trình duyệt. Sau đây là các bước: -
Mã:
cd /etc/httpd/conf.d/
ls
Mã:
[root@SVNSVR641 conf.d]# ls
mod_dnssd.conf README subversion.conf welcome.conf
Mã:
vi subversion.conf
Mã:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user
Hai dòng đầu tiên tải mô-đun SVN của apache, các dòng tiếp theo xác định rằng URL /repo1 trỏ đến kho lưu trữ đã tạo của chúng tôi.

Chúng tôi cũng thiết lập rằng những người dùng cụ thể có quyền đọc/ghi đối với các mục cụ thể trong kho lưu trữ bằng cách sử dụng AuthzSVNAccessFile. Danh sách người dùng sẽ được lấy từ tệp /data/svn/repo1/conf/passwd.

Bây giờ hãy khởi động lại máy chủ HTTPD để tải các thay đổi cấu hình đã thực hiện.
Mã:
service httpd restart
Mã:
[root@SVNSVR641 conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]


4. Giai đoạn kiểm tra SVN​

Chúng ta hãy kiểm tra xem cấu hình chúng ta đã thực hiện có đáp ứng được mục đích hay không. Đối với giai đoạn kiểm tra, tôi sẽ sử dụng 2 máy khách khác nhau. Tôi sẽ sử dụng Microsoft Windows và Linux CentOS 6.4 Desktop.

Đầu tiên, tôi sẽ đến máy Linux CentOS 6.4 và kiểm tra kho lưu trữ trong hệ thống cục bộ. Là máy khách Linux, chúng ta cần cài đặt gói subversion để kết nối với kho lưu trữ SVN.
Mã:
yum install -y subversion
Mã:
[root@TEST01 ~]# yum install -y subversion 
Các plugin đã tải: refresh-packagekit, security
Kho lưu trữ 'OEL64' bị thiếu tên trong cấu hình, sử dụng id
Đang thiết lập quy trình cài đặt
Giải quyết các phụ thuộc
--> Đang chạy kiểm tra giao dịch
---> Gói subversion.i686 0:1.6.11-7.el6 sẽ được cài đặt
--> Đã hoàn tất giải quyết sự phụ thuộc
Mã:
Đã giải quyết sự phụ thuộc
Mã:
= ...
Kho lưu trữ phiên bản Arch gói Kích thước
= ... Tóm tắt
= ...
Cài đặt 1 gói
Mã:
Tổng kích thước tải xuống: 2,2 M
Kích thước đã cài đặt: 11 M
Các gói đang tải xuống:
-----------------------------------------------------------------------------------------------------------------
Tổng cộng 70 MB/giây | 2,2 MB 00:00
Đang chạy rpm_check_debug
Đang chạy Kiểm tra giao dịch
Kiểm tra giao dịch thành công
Đang chạy Giao dịch
Đang cài đặt: subversion-1.6.11-7.el6.i686 1/2
Đang xác minh: subversion-1.6.11-7.el6.i686 2/2
Mã:
Đã cài đặt:
subversion.i686 0:1.6.11-7.el6
Mã:
Hoàn tất!

Mã:
mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client
Mã:
[root@TEST01 ~]# mkdir repo_client
[root@TEST01 ~]# svn co http://192.168.43.101/repo1 repo_client
Vùng xác thực:  Kho lưu trữ của tôi
Mật khẩu cho 'fikri':
Mã:
-----------------------------------------------------------------------
LƯU Ý! Mật khẩu của bạn cho vùng xác thực:
Mã:
 Kho lưu trữ của tôi
Mã:
chỉ có thể được lưu trữ trên đĩa không được mã hóa! Bạn nên cấu hình
hệ thống của mình để Subversion có thể lưu trữ mật khẩu được mã hóa, nếu
có thể. Xem tài liệu để biết chi tiết.
Mã:
Bạn có thể tránh cảnh báo này xuất hiện trong tương lai bằng cách đặt giá trị
của tùy chọn 'store-plaintext-passwords' thành 'yes' hoặc 'no' trong
'/root/.subversion/servers'.
--------------------------------------------------------------------------
Lưu mật khẩu không được mã hóa (có/không)? có
Đã kiểm tra bản sửa đổi 0.
[root@TEST01 ~]# cd repo_client/
[root@TEST01 repo_client]# ls -a
. .. .svn
Tuyệt vời! Chúng tôi đã kiểm tra được kho lưu trữ từ máy chủ SVN của mình bằng cách sử dụng người dùng fikri. Bây giờ, để kiểm tra xem người dùng này có quyền ĐỌC và GHI hay không, chúng ta sẽ tạo một thư mục bên trong thư mục kho lưu trữ.
Mã:
cd repo_client/
svn mkdir first_dir
Sau đó commit thay đổi trở lại kho lưu trữ:
Mã:
svn commit -m "My first folder"
Bạn sẽ thấy nội dung sau:
Mã:
Đã commit bản sửa đổi 1.
Điều đó có nghĩa là commit của chúng ta đã thành công.


Làm tốt lắm! Chúng ta đã tạo được một thư mục bên trong thư mục kho lưu trữ và commit nó.

Bây giờ hãy thử nghiệm trên máy tính Microsoft Windows. Duyệt URL kho lưu trữ thông qua trình duyệt Firefox. Bạn có thể sử dụng bất kỳ trình duyệt yêu thích nào để thử nghiệm. Sau khi nhập URL http://192.168.43.101/repo1 vào trường trình duyệt, một cửa sổ xác thực như bên dưới sẽ bật lên:



Đăng nhập bằng người dùng JAY. Tôi sẽ cho rằng người dùng này sẽ không thể truy cập trang vì anh ta không phải là thành viên của nhóm đặc quyền.





Tốt, bây giờ chúng ta hãy thực hiện một bài kiểm tra cuối cùng cho hướng dẫn này. Hãy sử dụng máy Microsoft Windows làm máy khách SVN. Để thực hiện việc này, chúng ta phải cài đặt phần mềm máy khách SVN, trong trường hợp này, tôi sẽ sử dụng TortoiseSVN. Bạn có thể tải xuống tại đâyhoặc sử dụng bất kỳ máy khách SVN quen thuộc nào.

Sau khi cài đặt, hãy tạo một thư mục mới trong máy Windows của bạn và đặt tên là testSVN.




Sau đó, nhấp chuột phải vào thư mục, bạn sẽ thấy có các liên kết đến SVN CheckOut ngay bây giờ (nếu bạn không thấy các liên kết, hãy khởi động lại Windows). Nhấp vào "SVN Checkout" để tiếp tục.



Sau khi nhấp vào, một hộp bật lên sẽ hiển thị như hộp bên dưới. Nhập kho lưu trữ máy chủ SVN vào trường URL rồi nhấp vào OK.



Một hộp bật lên sẽ hiển thị yêu cầu bạn nhập tên người dùng và mật khẩu để xác thực. Đối với những trường hợp này, chúng ta sẽ sử dụng người dùng FARID để tiếp tục.



Sau khi hoàn tất, hộp thoại bật lên sẽ hiển thị rằng quá trình kiểm tra kho lưu trữ SVN đã hoàn tất. Từ đây, chúng ta có thể kết luận rằng người dùng FARID có đặc quyền ĐỌC từ kho lưu trữ.



Bạn sẽ nhận thấy rằng thư mục được tạo trước đó từ người dùng FIKRI tồn tại trong thư mục testSVN của bạn.





Để hoàn tất bài kiểm tra. Hãy kiểm tra xem người dùng FARID có quyền ĐỌC CHỈ không. Để thực hiện điều đó, hãy vào bên trong thư mục FIRST_DIR và tạo một thư mục khác, tôi gọi là SECOND_DIR





Sau khi tạo, nhấp chuột phải vào thư mục và di chuột đến TortoiseSVN, bạn sẽ thấy có một số tùy chọn được liệt kê ở đó. Để tiếp tục, hãy nhấp vào nút Thêm. Nút này sẽ thêm thư mục mà chúng ta đã tạo vào kho lưu trữ svn cục bộ.



Một hộp bật lên như hộp bên dưới sẽ hiển thị, nhấp vào OK để tiếp tục.



Sau khi hoàn tất, một thông báo bật lên như bên dưới sẽ hiển thị. Bây giờ bạn đã tạo thành công một thư mục trong kho lưu trữ máy khách của mình.





Mặc dù thư mục đã được tạo và thêm cục bộ thành công, nhưng nó vẫn chưa được đồng bộ hóa với máy chủ SVN, do đó, những người dùng khác từ các máy khác sẽ không thể nhìn thấy thư mục mà chúng ta vừa tạo. Lưu và xác nhận thư mục ngay bây giờ. Để thực hiện điều đó, nhấp chuột phải vào thư mục và nhấp vào SVN Commit theo ảnh chụp màn hình bên dưới.




Một hộp bật lên như bên dưới sẽ hiển thị để yêu cầu bạn xác nhận một số chi tiết. Nhập bất kỳ bình luận tùy chọn nào, sau đó nhấp vào OK để tiếp tục.



Một hộp ủy quyền sẽ xuất hiện để yêu cầu tên người dùng đăng nhập. Nhập tên người dùng FARID và tiếp tục.



Sau khi hoàn tất, bạn sẽ thấy lỗi nêu rằng bạn bị cấm thực hiện các thay đổi. Đó là những gì chúng tôi mong đợi vì người dùng farid chỉ có quyền Chỉ đọc.



Xin chúc mừng! Bây giờ chúng ta đã thiết lập máy chủ SVN đầu tiên và cấu hình thành công các đặc quyền phù hợp trên một số giới hạn người dùng nhất định.
 
Back
Bên trên