การติดตั้ง svn server ร่วมกับ apache อย่างง่าย

หากเราต้องการใช้งาน Subversion เพื่อช่วยให้เราเขียนโค๊ดได้อย่างมีประสิทธิภาพขึ้น ใน debian แล้วเราสามารถทำได้ง่ายๆ เพียงแค่พิมพ์

# aptitude install subversion

หากเราต้องการติดตั้ง svn server เพื่อใช้เป็นที่เก็บข้อมูลต่างๆ แล้ว เราสามารถใช้ svnserve ได้ทันที แต่การใช้งานวิธีนี้อาจไม่เหมาะสม เช่น ไม่สามารถใช้งานได้บนระบบเครือข่ายที่ติดตั้ง proxy บางโปรแกรม และไม่ค่อยเป็นที่นิยม บนระบบอินเตอร์เน็ตนิยมใช้งานผ่านโปรโตคอล http มากกว่า ซึ่งมีคนใจดีทำโมดูลให้สามารถใช้งาน SVN ร่วมกับ apache webserver ได้ จึงขอแนะนำในที่นี้

เริ่มแรกต้องติดตั้ง apache และ โมดูลที่ใช้งานก่อน

# aptitude install apache2 libapache2-svn

เมื่อติดตั้งเรียบร้อยแล้วตรวจสอบดูก่อนว่า apache ได้ enable โมดูล dav_svn ไว้ให้แล้วหรือยัง โดยใช้

# a2enmod dav_svn
Considering dependency dav for dav_svn:
Module dav already enabled
Module dav_svn already enabled

โดยปรกติ เมื่อเราติดตั้ง apache จะ enable ให้เราอัตโนมัติ หลังจากนั้นเริ่ม config ให้สามารถใช้งานได้กันเลย โดยที่ต้องแก้ไข config ที่ /etc/apache2/mods-enabled/dav_svn.conf

# vim /etc/apache2/mods-enabled/dav_svn.conf

โดยแก้ไขให้ออกมาหน้าตาอย่างนี้

<Location /svn>
   DAV svn
   # ให้เลือกเอาอย่างใดอย่างหนึ่งว่าจะให้เป็น svn parent path หรือ svn path ไปเลย
   # svn parent path สามารถใช้งานได้หลายๆ repository 
   # svn path เป็นการระบุให้สามารถใช้งานได้เพียง repository เดียว
   #SVNPath /var/lib/svn
   SVNParentPath /var/lib/svn
   
   # หากต้องการใช้ตรวจสอบผู้ใช้งาน
   AuthType Basic
   AuthName "Subversion Repository"
   AuthUserFile /etc/subversion/dav_svn.passwd
 
   # หากต้องการ ควบคุมการเช้าถึงของ user
   AuthzSVNAccessFile /etc/subversion/dav_svn.authz

   Require valid-user
</Location>

จากค่าเบื้องต้นที่กำหนดไว้ด้านบน ต้อการไฟล์สำหรับเห็บข้อมูลผู้ใช้งานและไฟล์สำหรับควบคุมผู้ใช้งานให้สามารถทำอะไรกับ repository ได้บ้างโดยในที่นี้จะให้เก็บข้ามูลไว้ที่ /etc/subversion

# htpasswd -cm dav_svn.passwd boatkrap
New password: 
Re-type new password: 
Adding password for user boatkrap
# htpasswd -m dav_svn.passwd sdayu
New password: 
Re-type new password: 
Adding password for user sdayu

โดยครั้งแรกที่มีการสร้างไฟล์ต้องมี option -c เพิ่มเข้าไปด้วย ส่วนครั้งต่อไปไม่ต้อง หลังจากนั้นสร้างไฟล์สำหรับควบคุมการใช้งาน ที่ /etc/subversion/dav_svn.authz โดยอาจมีเนื้อหาคราวๆ ดังต่อไปนี้

[groups]
developer = boatkrap, sdayu

[test:/]
@developer = rw
testuser = r 

[test:/doc]
@developer = rw
testuser = rw
* = r

โดยที่
[groups] เป็นการสร้างกลุ่มตามตัวอย่างหมายถึงมีกลุ่มชื่อ developer โดยมีสมาชิกคือ boatkrap กับ sdayu
[test:/] คือ repository ชื่อ test โดยมี การกำหนดสิทธิ์ให้ กลุ่มของ developer สามาารอ่านและเขียนได้(หมายถึงสามารถอ่านข้อมูลจาก repository และส่งข้อมูลจาก working copy ขึ้นมาเก็บบน repository ได้) นอกจากนี้ยังอนุญาติให้ผู้ใช้ชื่อ testuser สามารถอ่านข้อมูลได้อย่างเดียว และไม่อนุญาตให้คนอื่นอ่านข้อมูลได้
[test:/doc] เป็นการกำหนดการเข้าถึงใน directory ย่อย โดยให้ directory ชื่อ doc กลุ่มของ developer สามารถอ่านและเขียนข้อมูลได้นอกจากนั้นผู้ใช้ชื่อ testuser สามารถอ่านและเขียนข้อมูลได้ และผู้ใช้อื่นๆสามารถอ่านข้อมูลได้เท่านั้น
หากต้องการข้อมูลเพิ่มเติมสามารถอ่านได้ที่ Version Control with Subversion

เมื่อกำหนดสิทธิ์เบื้องต้นเสร็จแล้วเราก็ต้องสร้าง repository เพื่อให้สามารถใช้งานได้ ดังนี้

 
# mkdir /var/lib/svn/
# cd /var/lib/svn/
# svnadmin create test
# chown -R www-data: test

repository พร้อมที่จะใช้งานแล้ว แต่ต้อง restart apache ก่อนจึงจะใช้งานได้

# /etc/init.d/apache2 restart

ทดสอบการทำงานดู

$boatkrap@wasugree:$ svn ls http://localhost/svn/test
Authentication realm:  Subversion Repository
Password for 'boatkrap': 
หรือ
# svn ls http://localhost/svn/test
Authentication realm:  Subversion Repository
Password for 'root': 
Authentication realm:  Subversion Repository
Username: sdayu
Password for 'sdayu':

svn จะถามก่อนหากเราใช้ user ที่ login เขาใช้งานคอมพิวเตอร์เป็นผู้ใช้งานเดียวกับ svn ก็สามารถใส่ระหัสผ่านได้เลยทันที แต่ถ้าไม่ใช้ก็ enter ให้ผ่านไปก่อน svn จะถามชื่อผู้ใช้ใหม่อีกครั้ง ก็ตอบให้ตรงก็สามารถใช้งานได้ โดยในครั้งแรกจะไม่มี ข้อมูลอะไรอยู่ใน repository ก็สามารถทดลองสร้างขึ้นมาได้

$ svn mkdir http://localhost/svn/test/doc -m "create document directory"

Committed revision 1.
$ svn ls http://localhost/svn/test
doc/

เมื่อสร้างเสร็จแล้ว ทดลองใช้ svn ls ดูก็จะปรากฏ ว่ามี directory ปรากฏขึ้นมา

เพียงเท่านี้ก็สามารถสร้าง SVN Server โดยใช้งานร่วมกับ apache อย่างง่ายขึ้นมาใช้งานได้แล้ว ที่กล่าวมาทั้งหมดสามารถใช้งานได้กับ Debian และ Ubuntu เท่านั้นไม่ครอบคลุมถึงการ ลงโดยไม่ผ่านระบบ apt หากนำไปทดสอบกับระบบอื่นโปรดใช้วิจารญาณในการเทียบเคียง เนื่องจากการลงโปรแกรม หรือ packet บางอย่างที่นำเสนอไป apt และ debian จะจัดการเปิดการใช้งาน module บางอย่างให้อัตโนมัติ หากลงด้วยวิธีอื่นอาจจะต้องเปิด หรือเริ่มต้นการใช้งานโปรแกรมเอง

นอกจากนี้ยังสามารถหาความรู้เพิ่มเติมเกี่ยวกับ svn ได้ที่ Version Control with Subversion หรือ เขียนโค้ดร่วมกันด้วย SVN (Subversion) ใช้ Tortoise svn ซึ่งเป็น subversion client ตัวนึงบนระบบปฏิบัติการ Windows

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้