Category Archives: Coding

Ruby dan Sysadmin

Sebagai sysadmin sebenarnya saya tidak terlalu mengikuti perkembangan bahasa pemrograman, tapi mau tidak mau, sebagai orang yang ditugaskan untuk menyiapkan infrastruktur tentunya saya harus menjamin semua perangkat lunak yang terpasang di server sudah sesuai dengan standar yang sudah ditentukan dan disepakati untuk mempermudah perawatan.

Beberapa alat bantu yang dibutuhkan oleh rekan-rekan kerja saya kebetulan dibangun menggunakan ruby, nah alat bantu tersebut yang harus saya paketkan dalam format rpm.

Agar dapat membuat paket yang baik, tentunya saya harus tahu apa yang akan saya paketkan tersebut. Itulah kenapa akhirnya belakangan ini saya sering main-main dengan ruby.

Awalnya sih cuma sekadar mencari tahu beberapa info umum saja, sebatas untuk mempermudah ketika ingin membuat paket rpm. Dilanjutkan dengan belajar sedikit bahasa ruby dasar, sekadar agar bisa membaca kode sumber dan kalau diperlukan bisa sedikit melakukan penyesuaian. Lama-lama jadi ingin lebih tahu banyak.

Untungnya dulu pernah sedikit main-main dengan Laravel, jadi gak terlalu kagok waktu harus berhadapan dengan aplikasi-aplikasi ruby on rails.

Ada yang bisa ngajarin saya ruby? Atau kalau sampeyan punya kenalan programmer ruby dan kebetulan lagi nyari tempat kerja baru dan kebetulan ingin tinggal di Malang, boleh dong ane dikenalin. Mungkin kita bisa kerja bareng.

Git, Gitolite, Gitorious dan Gitlab

Salah satu tools yang dipakai di tempat kerja saya adalah versioning system. Selama ini kita pakai subversion, dengan workflow dan modeldevelopment yang kita anut sebenarnya ini sudah mencukupi. Meski di beberapa kesempatan kita pun juga memanfaatkan git.

Ada rencana iseng untuk menggantikan subversion dengan git. Kenapa harus diganti? Ada 1001 alasan, terlepas dari kenyataan teknis bahwa git jauh lebih superior dibandingkan dengan subversion.

Saya perlu menyiapkan sebuah git server (semacam github.com) yang nantinya akan dipakai untuk mempermudah kolaborasi. Kehadiran git server ini sebenarnya tidak wajib, karena git mengusung konsep sistem versioning yang terdistribusi, artinya setiap orang yang ingin berkolaborasi bisa langsung mengakses ke repositori lokal masing-masing developer. Tapi tentunya ini akan merepotkan, karena komputer sideveloper belum tentu hidup 24/7.

Dari hasil jalan-jalan, akhirnya saya mencoba beberapa alternatif solusi ini:

1. Gitolite + cgit
2. Gitorious
3. Gitlab

Gitolite + cgit

Gitolite, yang merupakan penyempurnaan dari gitosis, sebenarnya cukup sederhana dan keren. Manajemen repositori git ditangani menggunakan git itu sendiri :)

Cgit merupakan antarmuka web untuk mengakses repositori git, alternatif lainnya ada gitweb. Cgit cukup kencang waktu diakses karena dia menerapkan sistem caching untuk mengakses objek git.

Protokol http dan git disiapkan untuk akses read-only, sementara untuk akses write ditangani memakai ssh. Proses pemasangan dan konfigurasinya sangat sederhana. Setiap developer nantinya harus mengirimkan kunci publik ssh-nya ke admin git, untuk kemudian didaftarkan ke sistem. Gitolite mendukung konsep berbagi repositori antar developer dan masing-masing user juga bisa ditentukan hak aksesnya terhadap suatu repositori.

Paket gitolite dan cgit tersedia di repositori epel, jadi proses instalasinya relatif mudah.

Gitorious

Percobaan kedua saya jajal pasang gitorious. Aplikasi yang dibangun menggunakan ruby ini requirement yang dibutuhkan gak neko-neko, bisa dijalankan menggunakan ruby versi 1.8.7 (versi ruby yang secara bawaan terpasang di CentOS). Sayangnya progress pengembangan perangkat lunak ini terkesan lambat. Saat saya coba pasang notifikasi email menggunakan activemailer dengan metode smtp+tls (kebetulan saya coba kirim notifikasi menggunakan akun gmail) ternyata modul notifikasinya tidak kompatibel dengan activemailer versi baru. Harus diubah beberapa baris kode supaya proses pengiriman bisa berhasil. Akses ke antarmuka webnya terkesan agak berat.

Setiap project yang dibuat di gitorious dapat memiliki lebih dari satu repositori. Kalau di gitolite dibutuhkan peran serta admin untuk mendaftarkan user beserta kunci publik ssh-nya, di gitorious setiap user bisa membuat project dan repositorinya secara mandiri.

Proses Instalasi gitorious sebenarnya cukup ribet. Untuk mempermudah, saya coba menggunakan gitorious chef recipe punyanyamakewhatis

WARNING: saya tidak terlalu suka dengan cara instalasi yg dilakukan oleh chef recipe ini, alih-alih mengikuti pakem instalasi di CentOS, script ini justru mengadopsi model/gaya debian.

Gitlab

Terakhir, ini yang saya coba. Komunitas pengembang gitlab terlihat sangat aktif. Sayangnya dia butuh versi ruby yang lebih baru. Artinya harus ada usaha lebih untuk menyiapkan paket-paket pendukungnya, karena saya agak males kalau harus memasang sesuatu di luar pakem di server.

Versi terdahulu gitlab ini memanfaat gitolite sebagai backendnya, tapi di versi yang baru ketergantungan terhadap gitolite tersebut sudah dilepas, sebagai gantinya gitlab memakai gitlab-shell.

Sama seperti gitorious, di gitlab setiap user juga dapat mendaftar dan membuat project secara mandiri. Bedanya, setiap project di gitlab hanya memiliki satu repositori.

Kita bisa buat tim, grup dalam suatu project. Kemudian ada fitur merge request (request merge antar branch dalam satu project/repositori).

Atarmuka webnya terlihat modern, agak mirip github. Fitur pull-request masih belum ada di versi yang saya coba, katanya bakal tersedia di versi 5.2 yang akan datang.

Saat instalasi saya menggunakan gitlab-installer. Ada beberapa step di script tersebut yg harus dijalankan secara manual (mulai dari baris ke 157).
Sepertinya gitlab yang akan saya pakai nantinya, sementara ini masih dicoba-coba dulu manfaatin gitlab dengan berbagai skenario.