Mengenai subversionSubversion merupakan sebuah tools open source yang digunakan sebagai tempat penyimpanan source code dalam pembangunan aplikasi. Tools tersebut dibutuhkan terutama jika pembangunan dilakukan oleh tim yang memungkinkan terjadinya perubahan terhadap file secara bersamaan oleh anggota tim. Tetapi, jika anda melakukan pembangunan aplikasi sendirian pun, anda masih dapat pula mengambil manfaat dari penggunaan subversion dimana semua source code anda dapat terkumpul di satu tempat dan terdapat history perubahan dari aplikasi yang dibuat.
Salah satu hal yang menarik dari subversion adalah fitur yang memungkinkan melihat source code melalui web front end. Untuk itu dibutuhkan sebuah web server yang akan melayani pengaksesan subversion melalui protokol http tersubut. Integrasi antara subversion dengan web server Apache akan dibahas dalam blog ini sebagai bagian dari setting subversion.
Selain subversion, tools serupa yang dapat digunakan untuk dijadikan sebagai tempat penyimpanan source code adalah CVS. Di dalam blog ini saya tidak akan melakukan perbandingan antara subversion dan CVS.
InstalasiInstalasi dari subversion sendiri bukanlah hal yang sulit, terutama karena telah tersedia paket-paket dari distributor linux untuk subversion. Paket di bawah ini merupakan paket dari subversion sendiri:
1. subversion -- Subversion client
2. subversion-server -- Paket subversion server
Kemudian untuk integrasi dengan apache dibutuhkan paket-paket di bawah ini
1. apache2
2. apache2-prefork
3. libapr1
4. libapr-util1
5. neon
untuk instalasi di suse menggunakan rpm package dapat dilakukan (sebagai root) :
# rpm -ivh RPM_PACKAGE_FILE
perintah tersebut akan menginstall package yang dimaksud dan melakukan pengecekan terhadap package lain yang dibutuhkan. Jika terdapat paket-paket yang dibutuhkan, cari package tersebut dan install.
Lokasi Repository dan User PasswordDirectory untuk subversion repository dapat diletakkan di mana saja dalam file system. Dalam contoh ini saya akan menggunakan /opt/svn sebagai tempat penyimpanan
# mkdir -p /opt/svn/repos
# mkdir /opt/svn/user_access
# touch /opt/svn/user_access/svn_passwdfile
# chown root:www /opt/svn/user_access/svn_passwdfile
# chmod 640 /opt/svn/user_access/svn_passwdfile
Perhatikan di langkah ke empat, kita menggunakan root:www yang artinya file tersebut merupakan milik dari root dan group www, yang merupakan group dari user yang menjalankan server apache. Sesuaikan
Pada langkah ketiga di atas, kita membuat sebuah file yang akan digunakan untuk menampung data user dan password dari pengguna subversion yang boleh melakukan perubahan terhadap source code. Kita dapat pula membedakan hak akses user berdasarkan project. Untuk itu, kita harus membuat file yang berbeda untuk project yang berbeda. Misalnya kita memiliki project dengan name cool_project, kita dapat membuat file sebagai berikut:
# touch /opt/svn/user_access/cool_project_svn_passwdfile
# chown root:www /opt/svn/user_access/cool_project_svn_passwdfile
# chmod 640 /opt/svn/user_access/cool_project_svn_passwdfile
Demikian seterusnya untuk project yang berbeda. Dengan cara ini kita dapat membatasi user-user terhadap project yang boleh mereka ubah. Untuk menambah user gunakan perintah yang dimiliki oleh apache, yaitu
# htpasswd2 /opt/svn/user_access/svn_passwdfile YOUR_USER_NAME
masukkan password yang diinginkan dua kali.
Integrasi Apache SubversionIntegrasi apache dan subversion membutuhkan aktivasi dari module di apache, yaitu:
1. dav
2. dav_svn
Untuk itu, lakukan perintah berikut sebagai root:'
# a2enmod dav
# a2enmod dav_svn
Atau, tambahkan langsung module dav dan dav_svn di file /etc/sysconfig/apache2 pada bagian APACHE_MODULES. Setelah module ditambahkan edit file /etc/apache2/conf.d/subversion.conf untuk menunjukkan pada apache letak dari repository kita.
# vi /etc/apache2/conf.d/subversion.conf
masukkan baris-baris di bawah ini:
<ifModule mod_dav_svn.c>
# Set up single repository directory 'kdrepos'
# This has open read access, but limited write (commit) access
<Location /repos>
DAV svn
SVNParentPath /opt/svn/repos
# Allow the 'repos' index page to list all the repositories it contains
SVNListParentPath On
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
# Message to give to the committer
AuthName "Write access requires a password"
# File listing users with write (commit) access
AuthUserFile /opt/svn/user_access/svn_passwdfile
Require valid-user
</LimitExcept>
</Location>
</ifModule>
Jika kita ingin menggunakan file password yang berbeda untuk project yang berbeda, maka kita perlu membuat
tag yang berbeda untuk masing-masing. Misal, tambahkan bagian berikut di bawah tag di konfigurasi di atas.
<Location /repos/coolproject>
DAV svn
SVNParentPath /opt/svn/repos/coolproject
SVNListParentPath On
<LimitExcept GET PROPFIND OPTIONS REPORT >
AuthType Basic
AuthName "Write access requires a password"
AuthUserFile /opt/svn/user_access/cool_project_svn_passwdfile
Require valid-user
</LimitExcept>
</Location>
Setelah setting ini selesai, anda dapat melakukan restart apache, untuk mengaktifkan konfigurasi
# /etc/init.d/apache2 restart
Project RepositoryJika tidak terdapat permasalahan ketika kita melakukan restart apache, maka kita dapat melanjutkan dengan mempersiapkan subversion repository untuk project kita. Proses ini harus dilakukan untuk masing-masing project yang ingin kita tambahkan:
# svnadmin create /opt/svn/repos/myproject
# chown -R wwwrun:www /opt/svn/repos/myproject/{dav,db,locks}
Dua perintah di atas pertama membuat struktur directory untuk project dengan nama myproject. Kemudian kita memberikan hak akses kepada apache untuk melakukan penulisan ke directory dav, db dan locks di bawah directory project kita. Sekali lagi perlu diperhatikan user dan group yang menjalankan apache sendiri, dan sesuaikan dengan setting anda.
Setelah langkah di atas, kita dapat melakukan import dari source code yang sudah kita miliki ke subversion repository. Tetapi, merupakan langkah yang baik untuk membagi directory project kita ke dalam beberapa directory lagi, untuk digunakan kemudian. Lakukan perintah berikut menggunakan svn client (Tidak harus sebagai root) :
> svn mkdir http://localhost/repos/myproject/trunk
> svn mkdir http://localhost/repos/myproject/branches
> svn mkdir http://localhost/repos/myproject/tags
Pada dasarnya langkah di atas meminta svn client melakukan pembuatan directory di bawah directory project yang sudah dibuat sebelumnya. Perhatikan penggunaan akses http ketika kita membuat directory. Ini menunjukkan integrasi apache dengan subversion kita telah berjalan.
Directory yang kita buat ada tiga buah, trunk, branches dan tags. Mengapa kita membutuhkan directory sebanyak itu untuk project kita. Merupakan kebiasaan yang baik untuk mempersiapkan kemungkinan pengembangan ke depan sebagai berikut:
trunk: Digunakan untuk menyimpan kode-kode hasil pembangunan terbaru yang saat ini sedang berjalan. Semua update secara normal dilakukan di directory trunk.
branches: Digunakan untuk menyimpan pencabangan terhadap pembangunan. Sebagai contoh, jika kita membangun sebuah CMS dan kemudian hari diputuskan akan dimungkinkan terdapat dua buah CMS, atau ada sebagian developer yang ingin mengembangkan dengan cara yang berbeda, maka branches dapat digunakan untuk hal tersebut. Pada pelaksanaannya perlu dibuat directory lagi di bawah branches untuk mengakomodir pencabangan yang ada dari aplikasi yang dibuat.
tags: Dapat digunakan untuk menyimpan kode dari hari-hari yang berbeda. Kita dapat membuat sebuah cron job yang setiap malam melakukan pengambilan source code terbaru dari directory trunk dan menyimpannya di bawah tags dengan tanggal sebagai nama directory penyimpanannya. Dengan begitu kita memiliki tags untuk masing-masing tanggal. Hal ini dimaksudkan untuk mempermudah jika kita menginginkan untuk kembali ke salah satu tanggal.
Setelah itu, kita dapat mulai memasukkan source code yang sudah kita miliki pada saat ini:
> svn import /path/to/myproject/dir http://localhost/repos/myproject/trunk
Perhatikan bahwa kita melakukan import source code kita ke dalam directory trunk. Ganti /path/to/myproject/dir dengan directory tempat anda menyimpan project anda. Jika berhasil, kita perlu mencoba untuk melakukan checkout dari project yang baru saja kita masukkan:
> svn co http://localhost/repos/myproject/trunk theproject
Dengan perintah di atas akan terbentuk directory theproject yang berisi source code yang sebelumnya telah kita import. Sekarang, kita dapat mulai melakukan perbaikan terhadap sistem yang di bangun di directory theproject tersebut.
Jangan lupa, setelah anda selesai mengedit sebuah file, lakukan perintah 'commit' sehingga perubahan akan terkirim kembali ke repository.
> svn commit theproject
Untuk melakukan 'commit' terhadap keseluruhan project, atau untuk melakukan commit pada satu file perintah dapat diubah menjadi
> svn commit theproject/myfile.php
PenutupPada tulisan ini telah dibahas mengenai cara untuk melakukan instalasi subversion repository dan integrasinya dengan Apache di linux terutama untuk Opensuse. Prinsip yang sama dapat digunakan di distribusi linux yang lain, tetapi beberapa setting perlu disesuaikan.