August 14, 2010

Extract file initrd.img

Menurunkan sebuah distro, tidak sesulit seperti yang kebanyakan orang bayangkan. Beberapa ilmu yang perlu diketahui antara lain, packaging, init script, scripting, dan melakukan patching serta kompilasi program dari source code. Jika malas, cukup hapus paket yang tidak diperlukan, atau tambah paket yang diperlukan. Pada tingkat lanjutan, tentunya sudah menjamah (modifikasi) script-script yang ada pada distro master-nya. Diantaranya boot-script, init-script dan install script. Lebih expert lagi adalah builder yang mau membuat atau menambahkan script-script buatannya sendiri.

Hal tersebut diatas adalah di-sisi distronya. Dan bagaimana di sisi pengembangan? menurut saya, seorang builder yang baik, yang ingin terus mengembangkan distro turunannya dengan versi-versi yang akan datang, tentu memiliki atau membuat script yang dapat digunakan untuk otomatisasi pembuatan paket atau blok file pada pengembangan berikutnya. Sehingga tidak perlu dilakukan secara manual (by hand). Sebagai contoh, pada Slackware tentunya ada master script, dimana untuk proses ekstraksi, kompilasi, pemaketan program, hingga pembuatan file iso distro menjadi siap rilis, dapat dilakukan hanya dengan memanggil satu script utama.

Tidak pernah ada kata terlambat untuk memulai, untuk membuat custom installer, hal pertama yang perlu dilakukan adalah memodifikasi file initrd.img dari CD/DVD installer. Sebelum dimodifikasi, tentunya perlu ekstraksi. Berikut adalah file script yang saya buat untuk melakukan ekstraksi file initrd.img (extract-initrd.sh):

#!/bin/bash
extract_initrd()
{
    echo "extracting initrd.img.."
    mkdir initrd
    cd initrd
    gzip -dc ../initrd.img | cpio -id
    cd ../
    echo "done!"
}

if [ -f initrd.img ]
then
    if [ -d ./initrd ]
    then
        echo "removing old initrd directory.."
        rm -Rf ./initrd/
    fi
    extract_initrd
else
    echo -e "\E[31;40minitrd.img file not found!"; tput sgr0
fi

Script diatas akan membuat direktori initrd, didalamnya adalah hasil ekstraksi dari file initrd.img. Direktori hasil ekstraksi memiliki struktur sistem file yang sama dengan root filesystem, pada saat CD installer dijalankan.

Referensi: OpenVz

August 13, 2010

MySQL Replication pada Sistem Operasi Microsoft Windows

Mencoba teori pada "MySQL Reference - Chapter#6", yaitu tentang MySQL Replication, beberapa orang mungkin menyebutnya sebagai mirroring MySQL.

Komputer yang digunakan sebagai bahan percobaan adalah:
  • Komputer MASTER, MySQL 5.0 dengan sistem operasi Windows XP x64 SP1, dan IP 192.168.1.5
  • Komputer SLAVE, MySQL 5.0 dengan sistem operasi Windows XP SP2, dengan IP 192.168.1.1

Berikut adalah tahapan yang dilakukan, dan mungkin sedikit berbeda dan lebih ringkas dibanding contoh pada Chapter#6 - MySQL Reference.


Set Database MySQL pada Komputer MASTER

Pertama masuk ke console MySQL dengan login root, kemudian buat user untuk database SLAVE replikasi.

mysql> GRANT REPLICATION SLAVE ON *.* 
    -> TO 'repl'@'192.168.1.1' IDENTIFIED BY 'rahasia';
Kemudian buka file konfigurasi MySQL, pada section [mysqld] tambahkan dua baris seperti sebagai berikut:
[mysqld]
log-bin=mysql-bin
server-id=1
Restart ulang service MySQL, salah satu caranya dari command prompt, ketik (nama service MySQL menyesuaikan):
NET STOP MySQL
NET START MySQL
Setelah itu, masuk kembali ke console MySQL dengan login root, dan jalankan perintah sebagai berikut:
mysql> SHOW MASTER STATUS;
+------------------+----------+--
| File             | Position | 
+------------------+----------+--
| mysql-bin.000001 |       98 |  
+------------------+----------+--
1 row in set (0.00 sec)

Catat dengan baik-baik, bahwa file log binary yang digunakan database MASTER adalah mysql-bin.000001 dengan posisi 98, nilai kedua variabel diatas mungkin berbeda untuk komputer lain. Dan nilai kedua variable ini nantinya digunakan pada konfigurasi database SLAVE.


Set Database MySQL pada Komputer SLAVE

Pertama, stop service MySQL, salah satu caranya adalah dengan mengetikkan perintah berikut pada command prompt:

NET STOP MySQL
Kemudian buka file konfigurasi MySQL, dan tambahkan satu baris berikut pada section [mysqld]:
[mysqld]
server-id=2
Kemudian copy beberapa database yang diperlukan dari master (kecuali database mysql) terutama database yang ingin di-replikasi, langkah peng-copy-an dapat melalui sistem dump ke file SQL atau copy langsung folder database-nya dari komputer MASTER ke komputer SLAVE.

Langkah selanjutnya, jalankan kembali service MySQL, salah satu caranya adalah dengan mengetikkan perintah berikut dari command prompt:

NET START MySQL
Kemudian login ke console MySQL sebagai user root, konfigurasi SLAVE dan jalankan dengan mengetikkan perintah dan memberikan nilai konfigurasi sebagai berikut:
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.1.5',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='rahasia',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=98;
Query OK, 0 rows affected (0.36 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
Itu saja, sekarang coba lakukan perubahan data pada salah satu table database MASTER, jika mengikuti tahapan diatas dengan benar, pasti data pada database SLAVE juga ikut berubah secara otomatis.

SLAVE dapat dibuat lebih dari satu komputer, jika komputer MASTER mengalami kerusakan, maka aplikasi bisa langsung di switch menggunakan server database SLAVE, namun jangan lupa menyesuaikan konfigurasi database (username, password, host) yang sesuai dengan komputer SLAVE.

Menurut informasi pada MySQL reference, dengan mengaktikan fitur log-bin, MySQL akan berjalan 1% lebih lambat dari sebelumnya.


Dan yang terakhir, akan lebih bermanfaat jika ada yang mau membuat tools replikasi MySQL secara otomatis, mungkin dengan memanfaatkan NSIS.

January 20, 2010

MySQL - Selisih Tanggal

Perintah:

SELECT (date(sysdate())-date(waktu)) AS selisih FROM trx
berjalan dengan hasil yg sesuai harapan pada MySQL Windows, namun tidak bisa dijalankan di MySQL pada sistem operasi GNU/Linux.

Pada MySQL sistem operasi tersebut, nilai kalkulasi selisih tanggal selalu sama dengan nol, padahal untuk tanggal yang berbeda, seharusnya bernilai bukan nol.

Setelah berpusing-pusing ria dan membuka-buka MySQL 5.0 Reference, disertai dengan serangkaian trial and error. Akhirnya ketemu juga solusinya, yaitu mengubah metode date calculation mejadi sebagai berikut:
SELECT DATEDIFF(SYSDATE(),waktu) AS selisih FROM trx

January 15, 2010

Cursor mouse loncat-loncat

Bagi pengguna ubuntu, adakah yang sering mengalami terkadang cursor mouse loncat-loncat? Sangat mengganggu bukan? Jika iya, mungkin hal berikut bisa menjadi solusinya.

Pertama buka file konfigurasi xorg.conf dengan perintah berikut:
$ sudo gedit /etc/X11/xorg.conf

Cari kelompok baris yang menunjukkan device mouse anda, kemudian ganti protocol-nya menjadi auto.

Jika sudah simpan file tersebut, kemudian lakukan logoff atau restart komputer anda. Dan hasilnya, rasakan hidup lebih nyaman tanpa mouse yang meloncat-loncat.

January 10, 2010

AVR - Konversi Double ke String

Pada pemrograman mikrokontroler AVR 8-bit (contoh ATmega8) dengan menggunakan compiler avr-gcc, mungkin sebagian newbie agak bingung bagaimana cara melakukan konversi variable dengan tipe double menjadi string (array of char). Semisal kita melakukan perhitungan sebagai berikut:

double v_sekarang;
v_sekarang = ((ADCH << 8) + ADCL) * 0.0048828125;

Hasil dari rumus diatas, jelas adalah variable double (bilangan tidak bulat).

Untuk dapat ditampilkan ke LCD atau dikirim ke UART (dalam bentuk string), tentunya bilangan tersebut diatas perlu dikonversi terlebih dahulu. Caranya adalah sebagai berikut:

  • Pada kode program, tambahkan header stdlib.h
    #include <stdlib.h>
    
  • Buat variable array of char sepanjang presisi yang anda inginkan. Misal jika hasil perhitungan adalah range dari 0.000 hingga 9.999, maka dibutuhkan 5 karakter pada array. Supaya lebih aman compiler mengalokasikan memory, tambahlah minimal satu karakter untuk menyimpan termination string.
    char v_char[6];
    
  • Lakukan konversi dari double ke string dengan menggunakan fungsi dtostrf().
    dtostrf(v_sekarang,1,3,v_char);
    
    dengan 1 adalah panjang bilangan di depan koma, dan 3 adalah panjang bilangan di belakang koma.

Variable string hasil konversi yang berbentuk array of char telah didapatkan, anda bisa langsung menampilkan ke LCD, atau dikirim melalui UART.

Jika ditulis kembali, kode program adalah sebagai berikut:
...
//pada header
#include <stdlib.h>
...
//pada variable global
double v_sekarang;
char v_char[6];
...
...
//pada tubuh program
v_sekarang = ((ADCH << 8) + ADCL) * 0.0048828125; //konversi ADC
dtostrf(v_sekarang,1,3,v_char); //double to string
uart_puts(v_char); //kirim ke UART
...
...

June 8, 2008

Port Forwarding Modem ADSL Speedy, Webserver Komputer Local menjadi Public..

Apakah halaman utama konfigurasi modem anda seperti berikut ini..?

Jika iya, maka anda dapat melakukan konfigurasi modem seperti berikut:

Langkah pertama, catat IP Address modem anda saat ini (Jika menggunakan Speedy Personal, alamat ini akan selalu berubah setiap modem melakukan restart). Seperti yang tertera pada screenshoot diatas, bahwa IP modem yang terdaftar saat ini adalah 125.164.99.23 (alternatifnya dapat anda buka alamat www.whatismyip.com).

Langkah kedua, catat alamat IP komputer yang akan digunakan sebagai web server. Secara umum adalah 192.168.1.3 jika anda menggunakan DHCP (automatic configuration pada Windows atau roaming mode pada Linux). Atau lebih jelas bisa anda ketik perintah berikut melalui command prompt Windows pada komputer yang akan digunakan sebagai web-server tersebut:

ipconfig
atau, ketik perintah berikut jika anda menggunakan sistem operasi GNU/Linux melalui shell (terminal):
ifconfig eth0
Kembali ke halaman konfigurasi modem ADSL anda. Klik Tab "Services", secara default anda akan berada dalam halaman "Network Address Translation (NAT) Configuration". Pada combo box "Nat Options" pilih "NAT Rule Entry". Kemudian klik tombol "Add". Aksi tersebut membuka pop-up form konfigurasi, maka isikan nilai sebagai berikut:

Rule Flavor : RDR
Rule ID : 2
IF Name : ALL
Protocol : ANY
Local Address From : 192 168 1 3
Local Address To : 192 168 1 3
Global Address From : 125 164 0 0 (range awal atau IP modem anda sekarang)
Global Address To : 125 164 255 255 (range akhir atau IP modem anda sekarang)
Destination Port From : HTTP (80)
Destination Port To : HTTP (80)
Local Port : HTTP (80)
Untuk menentukan range awal Global Address, berbasis pada IP modem anda saat ini 2 byte terakhir diganti dengan 0.0, dan untuk range akhir Global Address, IP modem anda saat ini dengan 2 byte terakhir diganti dengan 255.255.

Begitu anda melakukan klik tombol Submit, maka seketika webserver pada IP local anda sudah dapat dipanggil dari komputer luar. Tapi ingat, anda sendiri tidak dapat merasakan efeknya, karena jika diakses dari komputer yang satu jaringan dengan modem maka akan tetap keluar halaman konfigurasi modem. Akan tetapi jika diakses dari komputer diluar jaringan modem, maka redirecting port 80 akan bekerja. Jika setelah diakses dari luar masih keluar jendela login konfigurasi modem ADSL, maka lakukan commit dan reboot.

Kurang puas dengan penjelasan diatas, baiklah akan saya coba jelaskan lebih detail, namun tolong benarkan jika ternyata saya salah.
  • Baris pertama "RDR" mungkin artinya adalah redirect.
  • Baris kedua di-isi dengan nilai 2, karena sebelumnya sudah ada rule nomor 1 secara default.
  • Kemudian pada baris ketiga untuk IF Name kita gunakan "ALL" supaya modem dapat melakukan pengenalan redirecting secara otomatis.
  • Baris berikutnya, protocol kita pilih "ANY" daripada bingung menentukan mana saja yang dipakai, hehe..
  • Nah bagian berikutnya ini yang penting, Local Address From/To adalah range IP Address Local target redirecting port. Jika di isi dengan range alamat tertentu, maka modem akan melakukan network load balancing pada komputer yang terdaftar pada DHCP. Artinya modem akan membagi load request ke beberapa komputer dalam jaringan, tentunya dianjurkan dengan data webserver yang sama. Jika anda hanya berencana menggunakan satu komputer saja sebagai webserver, maka isikan dengan alamat IP lokal komputer tersebut, sebagai contoh "192.168.1.3".
  • Parameter berikutnya adalah range alamat IP Public yang kita dapatkan dari telkom. Amannya kita buat sama sesuai IP yang kita dapat saat ini. Namun secara teory, jika kita tahu range IP yang digunakan speedy pada daerah anda, maka kita tidak perlu melakukan konfigurasi ulang setiap kali modem melakukan restart. Sebagai contoh, untuk wilayah Kota Malang, IP Modem SPEEDY selalu 125.164.xxx.xxx. Jadi supaya modem ADSL dapat melakukan redirecting secara otomatis, saya gunakan range "125.164.0.0" sampai "125.164.255.255"
  • Untuk tiga konfigurasi terakhir sudah sangat jelas bahwa dua diatas adalah port request untuk web-server (80), dan yang terakhir adalah port web-server komputer ip lokal anda (boleh jadi anda tidak menggunakan port 80).


Satu hal lain yang perlu di-ingat, jika anda juga berencana melakukan forwading port lain, request untuk keperluan tertentu sehingga komputer ip-local anda dapat benar seperti menggunakan ip-public, maka lakukan hal yang sama, namun untuk port yang berbeda (sesuai request).

Informasi lebih lengkap, bacalah manual modem dengan melakukan klik pada tombol "Help" ketika anda masuk halaman konfigurasi modem anda.