Friday, April 26, 2013

ติดตั้ง SVN Server บน Ubuntu

ก่อนที่จะทำการติดตั้ง SVN เราจำเป็นต้องติดตั้ง apache2 ก่อน โดยขั้นตอนการติดตั้งสามารถดูได้ที่ วิธีลง apache, mysql และ phpmyadmin บน ubuntu

เริ่มต้นให้เปิดเทอร์มินอลขึ้นมาแล้วติดตั้งโปรแกรมที่จำเป็นตามคำสั่งด้านล่าง
sudo apt-get install subversion subversion-tools libapache2-svn

สร้าง subversion directory (ที่ๆเราจะเอาไว้เก็บงานต่างๆ) ในตัวอย่างนี้จะเก็บไว้ที่ /home/svn
sudo mkdir /home/svn

ทดลองสร้าง repository ในที่นี้เราจะให้ชื่อว่า repos1 และ repos2
sudo svnadmin create /home/svn/repos1
sudo svnadmin create /home/svn/repos2

เนื่องจากเราต้องการให้ user สามารถเข้าถึง SVN ผ่าน Apache ได้ ดังนั้น user ของ SVN กับ Apache จึงต้องเป็น user เดียวกัน ซึ่งโดยปกติ user ของ Apache โดย default คือ www-data (ทุกครั้งที่มีการสร้าง repository ใหม่ต้องทำการเปลี่ยน owner ทุกครั้ง)
sudo chown -R www-data:www-data /home/svn

ขั้นตอนถัดไปเราจะมาทำการคอนฟิก Apache กัน เริ่มด้วยการ enable module ที่จำเป็น
cd /etc/apache2

สร้างไฟล์บ่งบอก user ที่สามารถเข้าใช้งาน SVN ได้ (ตัวอย่างนี้จะเก็บไว้ในไฟล์ที่ /etc/svn-auth/svn-user) โดยในกรณีที่เราสร้าง user คนแรกให้เราใช้ option เป็น -c -m แต่สำหรับ user คนถัดไปให้เราใช้ -m อย่างเดียว เช่น (อย่าลืมใส่ sudo)
sudo htpasswd -c -m /etc/svn-auth/svn-user user1
sudo htpasswd -m /etc/svn-auth/svn-user user2
sudo htpasswd -m /etc/svn-auth/svn-user user3
sudo htpasswd -m /etc/svn-auth/svn-user user4

ขั้นตอนถัดไปเราจะแบ่งกลุ่มของ user ออกเป็นกลุ่มย่อย ซึ่งแต่ล่ะกลุ่มสามารถเข้าถึง repository ที่ต่างกัน โดยในที่นี้เราจะสร้างไฟล์นี้ไว้ที่ /etc/svn-auth/svn-access-control (ใช้ tool ใดสร้างก็ได้) และสมมติว่าภายใน /home/svn มี directory ย่อยอยู่สอง directory คือ repos1 กับ respos2 เราอาจกำหนดสิทธิ์ในการเข้าถึงของ user ได้เป็นแบบนี้
[groups]
admin = user1,user2

[/]
@admin = rw

[repos1:/]
user3 = rw

[repos2:/]
user3 = r
user4 = rw

โดยจากตัวอย่างนี้เราให้สิทธิ์การเข้าถึงในทุกระดับแก่ user กลุ่มที่เป็น admin และอนุญาติให้เฉพาะ user3 เขียนและอ่านข้อมูลที่อยู่ใน repos1 ส่วนใน repos2 อนุญาติให้ user3 อ่านได้อย่างเดียว

เปิดไฟล์ /etc/apache2/mods-enabled/dav_svn.conf ขึ้นมา ที่บรรทัดล่างสุดให้เพิ่มโค้ดที่อยู่ด้านล่างเข้าไป
Include mods-available/authz_svn.load
<Location /svn>
  DAV svn
  SVNParentPath /home/svn
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/svn-auth/svn-user
  AuthzSVNAccessFile /etc/svn-auth/svn-access-control
  Require valid-user
</Location>

สุดท้ายให้ทำการ restart apache ก็เป็นอันเรียบร้อย
sudo /etc/init.d/apache2 restart

No comments:

Post a Comment