Menjalankan Bitnami VM menggunakan QEMU-KVM

Virtual machine dari Bitnami merupakan VMWare virtual machine. Agar bisa dijalankan menggunakan QEMU-KVM dengan antar muka virt-manager, perlu kita rubah dulu menjadi img file yg didukung oleh QEMU-KVM. Berikut langkah-langkahnya:

  • Download VM dari Bitnami, misal http://bitnami.org/files/stacks/lampstack/5.3.17-0/bitnami-lampstack-5.3.17-0-ubuntu-12.04.zip
  • Unzip file tersebut:
    $ unzip bitnami-lampstack-5.3.17-0-ubuntu-12.04.zip
  • Hasilnya adalah beberapa file vmdk dan lainnya, file img-nya adalah bitnami-lampstack-5.3.17-0-ubuntu-12.04-s00*.vmdk. Ini yg perlu kita rubah menjadi img yang didukung QEMU-KVM
  • Rubah semua vmdk img tersebut menggunakan qemu-img
    $ cd bitnami-lampstack-5.3.17-0-ubuntu-12.04
    $ qemu-img convert -p -O qcow2 bitnami-lampstack-5.3.17-0-ubuntu-12.04-s00* bitnami-lampstack.qcow2
    Hasil img-nya berformat qcow2 dan kita namakan bitnami-lampstack.qcow2
  • Kita akan menggunakan virt-manager untuk aplikasi vm-nya. Pindahkan img tersebut ke folder default img-nya libvirt
    # mv /home/mht/Downloads/bitnami-lampstack.qcow2 /var/lib/libvirt/images/
  • Selanjutnya jalankan virt-manager dan buat vm baru dengan pilihan menggunakan file img yang sudah ada

Nah, virtual appliance dari Bitnami bisa dijalankan tanpa vmware ataupun virtualbox ;-)

Autentikasi Icecast dengan LDAP

Streaming server Icecast bisa di setting untuk pengguna tertentu yang memasukkan username dan password. Backend pengguna ini bisa macam-macam seperti database server atau LDAP. Settingannya ternyata mudah! Berikut adalah setingan Icecast yang memanfaatkan LDAP sebagai backend pengguna.

Pertama-tama kita tentukan URL untuk stream yang perlu autentikasi dan opsi-opsinya. Setingan ini ada di file /etc/icecast.xml

...
<mount>
  <mount-name>/stream</mount-name>
  <authentication type="url">
    <option name="listener_add" value="http://example.com/auth/connect.php" />
  </authentication>
</mount>
...

Yang perlu diperhatikan adalah tipe autentikasi “url” dan opsi dengan nama “listener_add”, yaitu ketika ada pendengar yang mencoba akses akan diautentikasi menggunakan file connect.php di server example.com. Value disini harus bisa diakses dari luar walau file connect.php dan icecast-nya berada dalam satu mesin. Nah, ini isi dari file connect.php:

<?php
$bind_user = $_REQUEST["user"];
$bind_pass = $_REQUEST["pass"];

$ds = ldap_connect("ldap://example.com");
if($ds) {
  $r = ldap_bind($ds, "uid=$bind_user,ou=people,dc=example,dc=com", $bind_pass);
  if($r) {
    header('icecast-auth-user: 1');
    header('icecast-auth-message: OK');
    ldap_close($ds);
    exit;
  } else {
    header('icecast-auth-user: 0');
    header('icecast-auth-message: Wrong username and/or password!');
    ldap_close($ds);
    exit;
  }
} else {
  header('icecast-auth-user: 0');
  header('icecast-auth-message: fail to connect to LDAP server');
  exit;
}
?>

Segitu saja, sederhana sekali bukan? ;-) Yang perlu diperhatikan adalah parameter kedua dari ldap_bind, ini tergantung dari data di ldap server kita, format diatas cocok untuk openldap server dan 389 directory server.

Untuk autentikasi dan sekaligus menghitung lama koneksi contohnya bisa dilihat di contoh yang disertakan pada paket Icecast dan baca dokumentasi dari Icecast.

Tautan:
Icecast, Icecast Documentation, 389 Directory Server, OpenLDAP

Mesin virtual untuk duplikasi sistem operasi

Ingin menginstall sistem operasi (SO) GNU/Linux di banyak komputer sekaligus? Malas install satu persatu? Mesin virtual bisa diminta bantuannya!

SO GNU/Linux dua-satu tahun terakhir ini lebih mudah dipindah-tempatkan. Install di satu komputer dan akan jalan juga bila dipindah ke komputer lain. Ini memudahkan kita bila ingin menginstal banyak SO sekaligus. Install di satu tempat, baru nanti kita distribusikan ke komputer lain. Menginstall satu-satu? Tidak perlu, kita install di satu hard disk dan kita bisa duplikasi. Cara duplikasinya macam-macam, bisa memakai partimage, dd, ddrescue dan aplikasi lain yang pada dasarnya menduplikasi (partisi) hard disk. Partimage menduplikasi partisi, sedang dd dan ddrescue menduplikasi hard disk.

Lalu apa kaitannya dengan mesin virtual? Kita bisa install SO baru di mesin virtual dan hard disk virtual-nya bisa duplikasi ke hard disk beneran! dd dan ddrescue akan meng-copy data pada level blok. Bila kita punya hard disk 80GB ingin diduplikasi dengan dd/ddrescue maka 80GB itu yg di-copy, bukan data yang ada di hard disk (yg pasti lebih kecil dari kapasitas hard disk). Jadi kebayang berapa lama waktu dibutuhkan untuk duplikasinya, dan hard disk 80GB juga sudah mulai susah dicari ;-) Partimage bisa meng-copy datanya saja, tapi tidak kita bahas disini. Nah, kalau pakai mesin virtual kita bisa tentukan sekecil mungkin hard disk virtualnya dan nantinya kita duplikasi ke hard disk yang lebih besar, tinggal kita resize saja partisi hasil duplikasinya. Continue reading

Memonitor pemakaian bandwidth

Ketika menggunakan koneksi internet yang dibatasi besarnya pemakaian per waktu tentu membuat kita suka bertanya-tanya berapa besar pemakaian yang sudah digunakan? Apalagi kalau kita menggunakan koneksi dengan GSM atau CDMA yang terkenal mahal per KB-nya, bisa tekor kalau sering kelebihan kuota :D

Setelah sibuk berkeliling dengan om Google akhirnya mendapat informasi yang tepat dari situsnya forum opensuse. Dari situ saya coba adaptasi dengan kebutuhan saya. Berikut langkah-langkahnya.

  • Tentu kita memerlukan NetworkManager untuk koneksinya, versi 0.8.x adalah NM yang paling OK untuk koneksi menggunakan GSM atau CDMA. Untuk mengoleksi data pemakaian digunakan vnstat, aplikasi command line kecil yang sangat bermanfaat ;-)
  • Kita mulai konfigurasi, yang pertama kita perlu edit adalah file /etc/cron.d/vnstat, file ini digunakan untuk mengatur seberapa sering kita akan mengupdate data koneksi. Punya saya seperti ini:
    MAILTO=root
    # to enable interface monitoring via vnstat remove comment on next line
    */2 * * * *  vnstat /usr/sbin/vnstat.cron

    “*/2″ berarti kita akan mengupdate data setiap 2 menit. vnstat kemudian memakai /usr/sbin/vnstat.cron, yang isinya

    #!/bin/bash
    # this script (/usr/sbin/vnstat.cron) reads /etc/sysconfig/vnstat
    # to start /usr/bin/vnstat.
    # example for /etc/sysconfig/vnstat:
    # VNSTAT_OPTIONS="-u -i eth0"
    # see also: vnstat(1)
    
    VNSTAT_CONF=/etc/sysconfig/vnstat
    
    if [ ! -f  ]; then
     exit 0
    fi
    
    . $VNSTAT_CONF
    
    /usr/bin/vnstat $VNSTAT_OPTIONS

    Hmm…, file ini membaca /etc/sysconfig/vnstat, yg isinya

    # see also: vnstat(1)
    #
    # starting with vnstat-1.6 vnstat can also be
    # configured via /etc/vnstat.conf
    #
    # the following sets vnstat up to monitor ppp0
    VNSTAT_OPTIONS="-u -i ppp0"

    Perhatikan “ppp0″, itu interface yang dibuat NetwokManager ketika koneksi internet terhubung. Sesuaikan dengan interface dari distro anda. Oh ya, file-file setingan tersebut berdasarkan konfigurasi di Fedora, untuk distro lain bisa jadi berbeda, sesuaikan saja ;-)

  • Kemudian bagaimana menghubungkannya dengan NetworkManager? Pada prinsipnya kita hanya ingin menghitung manakali koneksi terjadi dan tidak perlu menghitung manakala tidak ada koneksi. Tetapi vnstat dijalankan dengan cron job dan data akan tidak akurat kalau koneksi tidak ada (ppp0 tidak ada). Ternyata vnstat ada option –disable dan –enable untuk menghindari penghitungan pada interface yang tidak ada. Nah, kita buat file script untuk menjalan vnstat dengan option tersebut dan taruh di /etc/NetworkManager/dispatcher.d/. File-file yang ada di folder tersebut akan dijalan ketika NM membuat atau memutus koneksi. File script saya adalah:
    #!/bin/sh
    
    case "$2" in
     up)
     /usr/bin/vnstat --enable -i ppp0
     ;;
     down)
     /usr/bin/vnstat -r --disable -i ppp0
     ;;
     *)
     exit 0
     ;;
    esac

    Ketika “up” (koneksi terhubung) vnstat dipanggil dengan option –enable yang akan membuat perhitungan untuk ppp0 dibuka. Ketika “down” vnstat dipanggil dengan option –disable yang membuat perhitungan untuk ppp0 ditutup/diabaikan.

Bereslah sudah dan ketika berinternet ria dengan GSM/CDMA kita bisa cek jumlah pemakain kita dengan mengetikkan “vnstat” dari terminal. Option untuk menampilkan data-nya banyak, silahkan baca dari “man vnstat” ;-)

[Seri HA 3] Sentuhan Terakhir

DRBD sudah, Heartbeat juga sudah, sekarang tinggal menggabungkan keduanya dan memilih layanan apa saja yang akan tersedia di HA kita. Layanan yang akan kita pasang sebagai HA adalah vitual IP, dimana IP ini yang akan dituju oleh kilen, file server dengan nfs dan samba, web server httpd dengan php-nya serta database server MySQL. Sebelum mengintegrasikan layanan tersebut dengan heartbeat ada baiknya dicobakan dulu tanpa heartbeat dan sudah jalan dengan benar.

Agar semua perubahan data dari layanan tersebut dapat tersinkronisasi dengan baik maka ada beberapa lokasi data layanan diatas akan ditempatkan di folder yang tersinkronisasi oleh drbd, dalam hal ini di folder /drdisk. Untuk file server kita tempatkan di /drdisk/shares. Halaman web kita tempatkan di /drdisk/html dan file untuk php session kita tempatkan di /drdisk/php/session, sementara file upload lewat php tempat penyimpanan sementaranya ada di /drdisk/tmp. MySQL database di folder /drdisk/mysql.

Pada tutorial sebelumnya kita matikan dulu layanan drbd, nah sekarang kita hidupkan di kedua komputer dan kerjakan pembuatan folder diatas pada komputer yang dijadikan primary.

[root@hb1 ~]# drbdadm primary r0
[root@hb1 ~]# mount /dev/drbd1 /drdisk/
[root@hb1 ~]# mkdir -p /drdisk/shares /drdisk/html /drdisk/mysql /drdisk/tmp /drdisk/php/session
[root@hb1 ~]# chmod ugo=rwXt /drdisk/tmp/ /drdisk/shares/
[root@hb1 ~]# chmod 770 /drdisk/php/session/
[root@hb1 ~]# chgrp apache /drdisk/php/session/

/drdisk/tmp dan /drdisk/shares permission-nya kita jadi seperti /tmp. /drdisk/php/session ber-permisson 700 dan group owner adalah apache. Setelah itu kita konfigurasi masing-masing layanan agar menggunakan folder yang telah kita sediakan tersebut. File-file konfigurasi ini harus sama di kedua komputer.

Untuk nfs file konfigurasinya adalah file /etc/exports dan isinya cuma satu baris saja:

/drdisk/shares            *(rw,squash_uids=0-99,sync)

Untuk keterangan variabelnya coba saja cari tutorial tentang nfs di internet ;-)

Untuk samba, tambahkan baris berikut pada file /etc/samba/smb.conf:

[shares]
        comment = Shares Stuff
        path = /drdisk/shares
        public = yes
        writable = yes
        printable = no

File-file yang ada di /etc/samba juga perlu diduplikasi di komputer satu lagi.

Untuk apache (httpd) file yang perlu dirubah adalah /etc/httpd/conf/httpd.conf. Cari ‘DocumentRoot’ dan isikan dengan /drdisk/html. Kemudian cari ‘<Directory “/var/www/html”>’ dan ganti menjadi ‘<Directory “/drdisk/html”>’. Untuk konfigurasi php, silahkan rubah file /etc/php.ini pada bagian sbb:

....
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /drdisk/tmp
....
session.save_path = "/drdisk/php/session"
....

Pada dasarnya itu saja yang dirubah, kalau ternyata masih ada yang perlu dirubah karena terkait dengan modul lain silahkan baca-baca di www.php.net

Untuk MySQL file konfigurasi yang dirubah adalah /etc/my.cnf:

[mysqld]
datadir=/drdisk/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nah, kalau semua layanan diatas sudah jalan dengan baik tanpa terintegrasi dengan heartbeat, maka kini saatnya mengintegrasikan dengan heartbeat. Layanan-layanan diatas berposisi off pada waktu komputer dinyalakan (termasuk drbd), heartbeat yang akan menyalakannya.

File konfigurasi untuk layanan diatas kita tuliskan (misal) di hb-resources.xml dan hb-constarint.xml. hb-resources.xml untuk mengatur setingan layanan dan hb-constaint.xml untuk mengatur batasan/urutan layanan dinyalakan. Continue reading