Mengkopi/membuat mirror repository SVN

Untuk pengguna Linux, memang lebih enak jika menginstall SVN (alias Subversion) server di harddisk lokal yang digunakan untuk menyimpan file-file pengembangan, dokumen, program, dan lain-lain dalam suatu repository yang berbasis sistem versioning. Kita tidak perlu tersambung ke jaringan untuk melakukan revisi dokumen. Adapun sistem versioning ini memungkinkan kita untuk mentracking setiap perubahan dalam dokumen kita, melihat log perubahan serta mengupdate file kita ke versi dokumen tertentu. Lihat wiki tentang revision control dan Subversion untuk detail tentang sistem versioning dan svn.
Namun, menyimpan repository di harddisk lokal, ada resikonya misalnya saat harddisk atau sistem crash yang mengakibatkan fisik harddisk rusak. Kita memerlukan backup repository di server lain, selain localhost (tentunya ini membutuhkan akses jaringan ke server). Ingat: repository di server tersebut hanya boleh difungsikan sebagai mirror, jangan pernah melakukan commit ke server tersebut.

Setting repository di server

Server yang saya gunakan adalah distro Debian (distro yang lain, saya yakin bisa juga digunakan) dan mempunyai alamat IP 192.168.78.100. Yang perlu dilakukan adalah:

  1. membuat repository baru yang kosong
  2. mensetting ownership dan priviledge repository. Di debian user:group apache adalah www-data:www-data
  3. mensetting konfigurasi dav_svn di apache untuk memastikan repository dapat diakses lewat web

Repository lokal yang ingin saya mirror adalah proyek usblcd, yang berisi desain, layout dan dokumen pengembangan LCD board dengan interface USB beserta patch LCDproc untuk board ini. Sehingga, di server saya buat repository dengan nama usblcd: (Saya masuk lewat ssh dengan login root ke server 192.168.78.100)

  :#> svnadmin create /var/lib/svn/usblcd  #direktori repository di /var/lib/svn/usblcd
  :#> chown -R www-data:www-data /var/lib/svn/usblcd # user dan group yang bisa mengakses www-data
  :#> vi /etc/apache2/mods-enabled/dav_svn.conf # Tambahkan direktory usblcd ke server apache
  :#> /etc/init.d/apache2 restart # restart apache web server daemon

Tambahan isi konfigurasi apache ( /etc/apache2/mods-enabled/dav_svn.conf ) adalah sebagai berikut:

<Location /usblcd>

  # Uncomment this to enable the repository,
  DAV svn

  # Set this to the path to your repository
  SVNPath /var/lib/svn/usblcd

  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require valid-user
  </LimitExcept>
</Location>

Untuk bisa commit, dan akses penulisan ke repository lainnya (selain baca), diperlukan user http yang tersimpan di /etc/apache2/dav_svn.passwd. Gunakan program htpasswd untuk membuat file ini.

   #:> htpasswd2 -c /etc/apache2/dav_svn.passwd devel # user devel, dan masukkan passwordnya

Repository server dapat diakses dari http://192.168.78.100/usblcd. Dari sini, kita bisa mengakses svn repository dari web. Tampak bahwa versi repository adalah 0.

Membuat Mirror

Setting Server
Buat juga file executable /var/lib/svn/usblcd/hooks/pre-revprop-change, sebagai berikut:

   #:> echo "#!/bin/sh" > /var/lib/svn/usblcd/hooks/pre-revprop-change
   #:> chmod 755 /var/lib/svn/usblcd/hooks/pre-revprop-change

Tidak ada konfigurasi dan setting selanjutnya di server. Kita akan mulai konfigurasi di repository lokal di localhost.
Setting Repository Lokal
Lokasi repository lokal adalah di file:///home/dsp/svn/usbdisplay. Yang perlu dilakukan adalah:

  1. Persiapan sinkronisasi menggunakan svnsync
  2. Membuat script agar otomatis melakukan sinkronisasi

Untuk melakukan sinkronisasi digunakan program svnsync. Init sinkronisasi ke server dari repository lokal dengan nama user ‘devel’:

   :#> svnsync init http://192.168.78.100/usblcd file:///home/dsp/svn/usbdisplay --username devel
   Authentication realm:  Subversion Repository
   Password for 'devel':     # Masukkan password

Sinkronisasi dapat dilakukan secara manual, yaitu:

   :#> svnsync sync http://192.168.78.100/usblcd --username devel --password passwd

Sinkronisasi secara otomatis saat kita commit ke repository lokal dapat dilakukan dengan menambah file /home/dsp/svn/usbdisplay/hooks/post-commit dengan isi:

#!/bin/sh
TOREPO=http://192.168.78.100/usblcd
svnsync --non-interactive sync $TOREPO --username devel --password passwd

Ubah priviledge file ini menjadi 755.
Selain itu, tambahkan juga file /home/dsp/svn/usbdisplay/hooks/post-commit dengan isi:

#!/bin/sh
TOREPO=http://192.168.78.100/usblcd
svnsync --non-interactive copy-revprops $TOREPO $REV --username devel --password passwd

Ubah priviledge file ini menjadi 755. REV adalah nomor revisi yang diberikan oleh program svn commit.
Dengan langkah-langkah di atas, setiap kali kita melakukan commit ke repository lokal, akan disinkronisasikan (dikopikan) juga ke server.

Iklan

One Trackback to “Mengkopi/membuat mirror repository SVN”

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: