Replika Master-Slave MySQL

Latar Belakang

Pokoke ada database penting yang perlu dibackup di secondary server. Period.

Asumsi

  • Server MySQL master dan slave menggunakan OS Ubuntu (walaupun sebenarnya tidak harus Ubuntu, tetapi semua contoh setup di sini berjalan di atas OS tersebut).
  • Di bakal server slave sudah terinstall MySQL-server.
  • Sebagai perumpamaan, ip address MySQL master (untuk selanjutnya akan disingkat master saja) adalah : 1.2.3.4.
  • Sebagai perumpamaan, ip address MySQL slave (untuk selanjutnya akan disingkat slave saja) adalah: 4.3.2.1.
  • Masing-masing server tersambung dan dapat melakukan ping satu sama lain melalui LAN/WAN/VPN. Pastikan firewall melewatkan paket di antara ke-2 server tersebut (jika ada firewall).
  • Semua perintah shell dijalankan dengan privilege root. Sebenarnya yang paling aman adalah dengan menggunakan sudo. Tapi kali ini biar saya jadi ignorant sebentar.
  • Database yang akan direplicate bernama : TheDataBase.

Setup Server Master

  • Edit file /etc/mysql/my.cnf dengan parameter sebagai berikut:
    bind-address   	    = 1.2.3.4
    server-id           = 1 
    log_bin             = /var/log/mysql/mysql-bin.log
    binlog_do_db  	    = TheDataBase

    note: server-id sebenarnya bisa diisi bebas, yang penting berbeda dengan server-id slave nantinya.

  • Restart MySQL dengan perintah: service mysql restart .
  • Masuk ke MySQL shell dengan perintah : mysql -u root -pR4h4514  (ganti dengan password root MySQL server yang sedang disetup). Lalu jalankan perintah:
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'P455w0rd';
    mysql> FLUSH PRIVILEGES;

    ganti password P455w0rd dengan yang lebih aman.

  • masih di dalam shell MySQL, jalankan langkah berikut:
    mysql> USE TheDataBase;
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> SHOW MASTER STATUS;

    perintah MySQL terakhir akan memunculkan table seperti berikut:

    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000235 |  7991253 | TheDatabase  |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    simpan output tersebut untuk keperluan nanti pada saat setup slave server.

  • Dengan kondisi terakhir database masih dilock, buka window/console shell linux baru untuk menjalankan langkah selanjutnya. Hal ini dilakukan agar database tetap dalam kondisi locked. Jika kita menjalankan perintah di windows/console MySQL yang sama, maka database akan otomatis unlocked. Setelah membuka windows/shell baru, jalankan langkah berikut:
    root@master:~# mysqldump -u root -p --opt TheDataBase > /usr/local/src/TheDataBase.sql

    Lokasi penyimpanan file hasil dump bebas bisa di mana saja. Ini hanya kebiasaan saya dalam menyimpan file dump di /usr/local/src.

  • Kembali ke window/shell MySQL sebelumnya lalu unlock database dengan cara:
    mysql> UNLOCK TABLES;
    mysql> QUIT;
  • Salin file hasil dump tersebut ke bakal server slave:
    root@master:~# scp /usr/local/src/TheDataBase.sql root@4.3.2.1:/usr/local/src/

Setup Server Slave

  • Login ke server slave dan masuk ke shell MySQL sebagai root. Jalankan langkah berikut ini:
    mysql> CREATE DATABASE TheDataBase;
    mysql> EXIT;
  • Import database yang sudah disalin sebelumnya:
    root@slave:~# mysql -u root -p TheDataBase < /usr/ocal/src/TheDataBase.sql
  • Edit file /etc/mysql/my.cnf seperti berikut:
    bind-address 	 = 4.3.2.1
    server-id	 = 2 
    relay-log 	 = /var/log/mysql/mysql-relay-bin.log
    log_bin          = /var/log/mysql/mysql-bin.log
    binlog_do_db 	 = TheDataBase
  • Restart MySQL dengan perintah: service mysql restart
  • Masuk ke shell MySQl sebagai root lalu jalankan perintah:
    mysql> CHANGE MASTER TO MASTER_HOST='1.2.3.4',MASTER_USER='backup', MASTER_PASSWORD='P455w0rd', MASTER_LOG_FILE='mysql-bin.000235', MASTER_LOG_POS=  7991253;
    mysql> START SLAVE;

    catatan:

    MASTER_HOST diisi dengan ip address MySQL master yaitu 1.2.3.4.

    MASTER_LOG_FILE dan MASTER_LOG_POS diisi dengan nama file log dan position sesuai di table output perintah SHOW MASTER STATUS pada saat setup master di atas.

    MASTER_USER dan MASTER_PASSWORD diisi dengan user dan password yang sudah ditambahkan pada saat setup master sebelumnya.

  • Jika kita menjalankan perintah shell MySQL di slave server dengan perintah:
    mysql> SHOW SLAVE STATUS\G

    maka akan muncul output:

    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 202.52.146.51
                      Master_User: backup
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000235
              Read_Master_Log_Pos: 7991253
                   Relay_Log_File: mysqld-relay-bin.000002
                    Relay_Log_Pos: 3282325
            Relay_Master_Log_File: mysql-bin.000235
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 7991253
                  Relay_Log_Space: 3282482
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1
    1 row in set (0.00 sec)

    Perhatikan Read_Master_Log_Pos dan Exec_Master_Log_Pos memiliki nilai yang sama dengan output table SHOW MASTER STATUS sebelumnya. Begitu juga dengan Master_Log_File dan Relay_Master_Log_File.

Setting IPTABLES

Untuk membatasi akses MySQL maka dibuat aturan sebagai berikut:

  • Akses MySQL di master server hanya boleh dari ip address slave server, dan localhost.
  • Akses selain dari source di atas, akan diblok.

Rule dasar iptables-nya adalah sebagai berikut:

iptables -A INPUT -p tcp -s 4.3.2.1 --sport 1024:65535 -d 1.2.3.4 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 1.2.3.4 --sport 3306 -d 4.3.2.1 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -p tcp --dport mysql -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport mysql -s 4.3.2.1 -j ACCEPT
iptables -A INPUT -p tcp --dport mysql -j DROP

Supaya rule iptables tersebut persistent walauapun server direstart, install package iptables-persistent:

root@master:~# apt-get install -y iptables-persistent
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libgsasl7 libgnutls-openssl27 libntlm0
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
iptables-persistent
0 upgraded, 1 newly installed, 0 to remove and 153 not upgraded.
Need to get 8,960 B of archives.
After this operation, 58.4 kB of additional disk space will be used.
Get:1 http://kambing.ui.ac.id/ubuntu/ precise/universe iptables-persistent all 0.5.3ubuntu2 [8,960 B]
Fetched 8,960 B in 0s (63.1 kB/s)
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend requires a screen at least 13 lines tall and 31 columns wide.)
debconf: falling back to frontend: Readline
Preconfiguring packages ...
Configuring iptables-persistent
-------------------------------
Current iptables rules can be saved to the configuration file /etc/iptables/rules.v4. These rules will then be loaded automatically
during system startup.
Rules are only saved automatically during package installation. See the manual page of iptables-save(8) for instructions on keeping
the rules file up-to-date.
Save current IPv4 rules? y <---- jawab Y

Current iptables rules can be saved to the configuration file /etc/iptables/rules.v6. These rules will then be loaded automatically
during system startup.
Rules are only saved automatically during package installation. See the manual page of ip6tables-save(8) for instructions on
keeping the rules file up-to-date.
Save current IPv6 rules? n <---- jawab N

Selecting previously unselected package iptables-persistent.
(Reading database ... 42575 files and directories currently installed.)
Unpacking iptables-persistent (from .../iptables-persistent_0.5.3ubuntu2_all.deb) ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up iptables-persistent (0.5.3ubuntu2) ...
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend requires a screen at least 13 lines tall and 31 columns wide.)
debconf: falling back to frontend: Readline
* Loading iptables rules... * IPv4... * skipping IPv6 (no rules to load)...

Secara otomatis, rule iptables akan di save di lokasi /etc/iptables/rules.v4.

 

Setting Log File di Elastix untuk troubleshoot

Salah satu file yang membantu saya dalam melakukan troubleshoot IP PBX Elastix adalah /var/log/asterisk/full. Output file ini tergantung dari setting yang ada di dalam file logger_logfiles_custom.conf . Setelah upgrade dari Elastix 2.4 ke 2.5, saya menemukan setup default file logger menjadi:

full => notice,warning,error,debug,verbose

Setting ini tidak terlalu membantu dalam troubleshoot, sehingga harus diubah menjadi:

full => notice,warning,error,debug,verbose(3),dtmf,fax

[stextbox id=”alert”]Untuk mengedit file ini tidak bisa dilakukan dari console shell. Editing harus dilakukan dari webGUI Elastix yang dapat diakses melalui menu PBX -> Tools -> Asterisk File Editor. Jika tidak, maka setiap kali reload config, Elastix akan meng-override semua perubahan yang sudah kita buat.[/stextbox]

Jika ingin menampilkan isi dari SIP packet ke dalam log /var/log/asterisk/full, masuk ke CLI Asterisk (asterisk -vvvr), lalu ketik:

*CLI> sip set debug on

Keluar dari CLI dengan mengetik quit, lalu periksa file log dengan tail -f /var/log/asterisk/full. Kali ini SIP packet akan dimunculkan juga. Untuk mematikan, masuk ke CLI lagi seperti di atas, lalu jalankan perintah:

*CLI> sip set debug off

[Elastix] Akses CDR dan Call Recording Untuk User Tertentu

Untuk keperluan monitoring penggunaan telepon dan rekaman panggilan, sebuah perusahaan memerlukan menambah user tertentu untuk login di WebGUI Elastix. Tapi karena user ini tidak masuk ke group administrator, maka CDR (Call Detail Record) dan call recording yang bisa diakses adalah untuk nomer ekstensi yang terkait dengan user tersebut. Agar supaya user tersebut tetap bisa melihat seluruh CDR dan call recording, yang perlu dilakukan adalah mengedit file /var/www/html/libs/paloSantoACL.class.php, terutama di blok:

[stextbox id=”grey” shadow=”false” image=”null”]function isUserAdministratorGroup($username)
{
$is=false;
$idUser = $this->getIdUser($username);
if($idUser){
$arrGroup = $this->getMembership($idUser);
//$is = array_key_exists(‘administrator’,$arrGroup);
$is = array_search(‘1’, $arrGroup);
}
return $is;
}[/stextbox]

Misalkan user yang kita tambahkan adalah user HRD, maka, tambahkan pada blok tersebut menjadi seperti:

[stextbox id=”grey” shadow=”false” image=”null”]function isUserAdministratorGroup($username)
{
$is=false;
$idUser = $this->getIdUser($username);
if($idUser){
$arrGroup = $this->getMembership($idUser);
//$is = array_key_exists(‘administrator’,$arrGroup);
$is = array_search(‘1’, $arrGroup);

     if(isset($arrGroup[‘HRD’]))
     $is=true;

}
return $is;
}[/stextbox]

Save file dan restart HTTPD untuk memastikan perubahan. Setelah itu login sebagai HRD (dengan asumsi, user HRD sudah disetup memiliki akses ke halaman CDR dan call recording – untuk cara setup tidak akan dibahas di sini), dan seluruh CDR dan call recording sudah bisa dilihat dari user tersebut.

Auth Squid3 Dengan User/Password

Untuk Apa?

Jika kita mengakses proxy dengan ip address yang bisa diprediksi/static/dhcp LAN,  setup ACL menjadi cukup mudah, karena kita tinggal memasukkan src address dari blok ip address yang hendak diperbolehkan mengakses proxy. Menjadi masalah jika kita mengakses dari luar jaringan LAN, dan menggunakan ISP yang melakukan provisioning dengan dynamic ip address. Oleh karena itu ACL dengan source ip address akan merepotkan.

Caranya?

Dengan asumsi Squid3 sudah terinstall (bisa dilakukan dengan perintah apt-get install -y squid3 di Ubuntu), edit file /etc/squid3/squid.conf dengan format konfigurasi:

[stextbox id=”grey” shadow=”false” image=”null”]auth_param basic program /usr/lib/squid3/basic_ncsa_auth <lokasi file penyimpan password>
auth_param basic realm <nama realm – bebas>
acl <nama acl> proxy_auth REQUIRED
http_access allow <nama acl>[/stextbox]

Jadi kira-kira setup di server saya adalah sebagai berikut:

[stextbox id=”grey” shadow=”false” image=”null”]auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwords
auth_param basic realm proxy
acl test proxy_auth REQUIRED
http_access allow test[/stextbox]

Lalu buat file password dengan cara sebagai berikut:

htpasswd -c /etc/squid3/passwords godril

Masukkan password baru ketika ditanya password baru, dan konfirmasi sekali lagi. Setelah itu restart Squid:

service squid3 restart

Masukkan konfigurasi ip address dan port proxy ke browser dan browse ke sembarang site. Jika langkah di atas sudah dijalankan dengan benar, maka akan muncul permintaan memasukkan user dan password.

auth

[Elastix] Problem PIN Sets Ditanyakan 2 Kali

Problem ini muncul dalam instalasi Elastix 2.5 dengan Asterisk versi 11.14.1. Jika ditelusuri, maka problem ini berawal dari generate otomatis [macro-pinsets] oleh file /var/www/html/admin/modules/pinsets/functions.inc.php, terutama di baris:

[code language=”bash”]// write out a macro that handles the authenticate
$ext-&gt;add(‘macro-pinsets’, ‘s’, ”, new ext_gotoif(‘${ARG2} = 1′,’cdr,1’));
$ext-&gt;add(‘macro-pinsets’, ‘s’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘Authenticate’,$asterisk_conf[‘astetcdir’].’/pinset_${ARG1}’));
$ext-&gt;add(‘macro-pinsets’, ‘s’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘ResetCDR’));
// authenticate with the CDR option (a)
$ext-&gt;add(‘macro-pinsets’, ‘cdr’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘Authenticate’,$asterisk_conf[‘astetcdir’].’/pinset_${ARG1},a’));
$ext-&gt;add(‘macro-pinsets’, ‘cdr’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘ResetCDR’));
[/code]

Entah kenapa, baris di atas akan menambahkan rule PIN Set dua kali ke dalam extensions_additional.conf. Sehingga yang perlu dilakukan adalah meremark di semua baris tersebut (dengan //). Setelah itu edit file extensions_custom.conf, tambahkan baris berikut (edit dari menu file editor Elastix GUI):

[code language=”bash”][macro-pinsets]
exten => s,1,GotoIf(${ARG2} = 1?cdr,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?Authenticate(/etc/asterisk/pinset_${ARG1}))
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?ResetCDR())

exten => cdr,1,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?Authenticate(/etc/asterisk/pinset_${ARG1},a))
exten => cdr,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?ResetCDR())

[/code]

setelah itu klik Save dan Reload Asterisk. Dan terakhir, aktifkan module PIN Sets di call route (tidak akan dibahas di sini, bisa search di internet untuk langkah-langkahnya). Lakukan test, maka IP PBX hanya akan menanyakan PIN satu kali.

Solusi di atas bukan solusi permanen. Hanya sekedar workaround supaya “nampak” normal. Untuk selanjutnya, Elastix perlu diupdate dengan versi FreePBX atau Asterisk yang sudah memperbaiki bug ini. Sudah beberapa orang yang submit bug tersebut. Tapi sampai dengan penulisan ini, bug tersebut belum hilang. Kita tunggu saja patch dari mereka.

Mematikan Touchpad di Ubuntu

Mungkin cuma saya yang ndak suka bekerja dengan Ubuntu menggunakan touchpad di laptop. Sudah beberapa kali mengubah-ubah seting sensitivitasnya tapi tetep tidak seenak menggunakan touchpad di Windows. Walaupun akhirnya saya menggunakan mouse, kadang masih terganggu juga ketika tidak sengaja telapak tangan saya menyentuh touchpad dan menyebabkan pointer bergerak ke sana kemari. Dan sepertinya touchpad benar-benar harus dimatikan. Caranya?

Masuk ke shell console sebagai root (saya bukan penggemar berat sudo). Lalu jalankan perintah:

# xinput list

output seharusnya tampak seperti ini:

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ PIXART USB OPTICAL MOUSE                    id=10    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                  id=13    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
↳ Power Button                                id=6    [slave  keyboard (3)]
↳ Video Bus                                   id=7    [slave  keyboard (3)]
↳ Video Bus                                   id=8    [slave  keyboard (3)]
↳ Power Button                                id=9    [slave  keyboard (3)]
↳ HP Webcam-101                               id=11    [slave  keyboard (3)]
↳ AT Translated Set 2 keyboard                id=12    [slave  keyboard (3)]
↳ HP WMI hotkeys

Di sini bisa dilihat, Synaptic Touchpad memiliki id=13. Lalu jalankan perintah:

root#  xinput set-prop 13 "Device Enabled" 0

(di baris terakhir adalah angka nol)

Dan sekarang touchpad tidak akan menyebabkan pointer mengganggu pandangan mata dengan meloncat-loncat karena tersentuh telapak tangan.

Tapi cara yang paling brutal dan yang paling cocok dengan saya adalah dengan menjalankan perintah berikut:

root# apt-get remove xserver-xorg-input-synaptics

“Empty configuration — no spans”

Biasanya, kalau kita menginstall Elastix dengan card analog terpasang sejak awal, secara otomatis system akan mendeteksi keberadaan card dan sekaligus menginstall driver yang diperlukan. Tapi ada kalanya (entah kenapa) card analog tidak terdeteksi. Biasanya, ketika kita menjalankan perintah dahdi_genconf -v akan menunjukkan seperti ini:

[root@ippbx ~]# dahdi_genconf -v
Default parameters from /etc/dahdi/genconf_parameters
Empty configuration — no spans
Generating /etc/dahdi/assigned-spans.conf
Empty configuration — no spans
Generating /etc/dahdi/system.conf
Empty configuration — no spans
Generating /etc/asterisk/dahdi-channels.conf
Empty configuration — no spans
Generating /etc/asterisk/extra-channels.conf
Empty configuration — no spans
Generating /etc/asterisk/allogsm-channels.conf

Problem di atas biasanya terjadi karena kita belum memiliki module opvxa1200.ko (untuk card analog) atau opvxg4xx.ko (untuk card gsm). Untuk mengatasi problem tersebut, yang perlu dilakukan adalah sebagai berikut (pada contoh ini, saya mengalami problem loading driver untuk kartu OpenVox A400p 2 FXS & 2 FXO) :

1. Jalankan perintah lspci -v dan pastikan memiliki output seperti:

03:00.0 Communication controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
Subsystem: OpenVox Communication Co. Ltd. OpenVox A400P 4-port analog card
Flags: bus master, medium devsel, latency 32, IRQ 58
I/O ports at d000 [size=256]
Memory at e2100000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 2
Kernel driver in use: wctdm
Kernel modules: wctdm, wcopenpci, hisax

2. Jalankan perintah : dahdi_hardware  yang harusnya memiliki output:

pci:0000:03:00.0 wctdm+ e159:0001 Wildcard TDM400P REV E/F

Jika setelah kata wctdmi memiliki tanda minus (‘”-“) misal seperti:

pci:0000:03:00.0 wctdm- e159:0001 Wildcard TDM400P REV E/F

hal tersebut disebabkan mod wctdm belum diload. Jalankan perintah: modprobe wctdm dan kembali lihat output dahdi_hardware. 

3. Jalankan perintah modprobe opvxa1200 debug=1, lalu generate config dengan perintah: dahdi_genconf -v. Jika berhasil seharusnya akan muncul output seperti :

[root@ippbx ~]# dahdi_cfg -v
DAHDI Tools Version – 2.9.2

DAHDI Version: 2.9.2
Echo Canceller(s):
Configuration
======================
4 channels to configure.

Setting echocan for channel 1 to oslec
Setting echocan for channel 2 to oslec
Setting echocan for channel 3 to oslec
Setting echocan for channel 4 to oslec

Sampai di sini, kita siap melakukan konfigurasi card analog selanjutnya.

VoIP Extension

Beberapa kali saya mengalami diskusi rancu mengenai extensioni VoIP. Dan sepertinya saya perlu membuat sebuah postingan mengenai perbedaan extension di opensource telephony IP PBX, dengan extension di legacy PABX/IP-PABX.

Penyebab utama kerancuan dalam pembahasan extension dikarenakan memang kebanyakan kita berangkat belajar sistem telepon dari Analog PBX, yang membedakan sambungan trunk dan extension dengan jelas. Sedangkan di open source IP PBX, tidak ada pembedaan demikian karena semua channel dianggap sama. Yang membedakan adalah  call context , berfungsi untuk memisah panggilan dari luar dengan panggilan dari dalam network IP PBX. 

Kerancuan juga disumbangkan oleh FreePBX yang menggabungkan pembuatan nomer extension yang sama dengan username. Dan FreePBX digunakan dalam beberapa bundle IP PBX opensource seperti trixbox CE, Elastix, FreePBX distro, AsteriskNOW, dan Briker. Hal ini menyebabkan rancu dalam membedakan endpoint username id dan extension. Hal ini tidak bisa disalahkan karena FreePBX memang dibuat untuk menirukan cara kerja PBX analog/legacy.

Awalnya, extension adalah sebuah perangkat telepon tambahan yang tersambung ke pesawat telepon utama (disebut Main Station) yang tersambung langsung ke PSTN. Yang sering kita temui adalah model sambungan telepon paralel yang memungkinkan kita melakukan panggilan ke PSTN dari ruang yang berbeda di dalam rumah. Ada juga model sambungan telepon seperti ini yang memiliki fasilitas intercom, yang memungkinkan komunikasi antar perangkat. Dalam perkembangannya di dunia bisnis, extension menjadi sebuah perangkat telepon yang tersambung ke PBX, bukan lagi ke main station. Extension yang tersambung ke  board PBX kemudian bisa dihubungi dengan menekan nomer id channel yang disebut sebaga nomer extension (jika ada masukan untuk koreksi keterangan di atas, saya akan sangat berterima kasih).

Extension di opensource telephony IP PBX jauh lebih bersifat fleksibel. Extension di sini tidak mengacu ke sebuah perangat telepon sama sekali atau id di board PBX, melainkan mengacu ke sebuah urutan eksekusi yang mirip seperti sub routine dalam sebuah script atau program. Perangkat telepon  software (softphone) maupun hardware (ip phone) yang tersambung di IP PBX, biasanya disebut sebagai endpoint. Ilustrasi untuk membayangkan cara kerja extension di IP PBX adalah sebagai berikut:

Ketika mendial sebuah nomer extension, misal 1000, maka IP PBX akan menerima/mendengar dial tone tersebut dan mencari baris urutan proses yang berhubungan dengan extension tersebut. Ketika menemukan baris yang diacu sebagai extension 1000, maka IP PBX akan mengeksekusi urutan yang sudah didefinisikan dalam baris tersebut. Eksekusinya bermacam-macam. Yang paling umum adalah menghubungi perangkat yang terasosiasi ke penomoran extension. Perangat tersebut tentu saja harus sudah teregistrasi dengan IP PBX melalui autentikasi user/password, atau autentikasi ip address. Atau bisa saja, extension tersebut kemudian malah mengeksekusi sebuah script/program otomatisasi lain (reboot remote server, check link internet, program assembler yang menggerakan peralatan mekanis, dan lain sebagainya).

Jika extension IP PBX digunakan untuk menghubungi sebuah perangkat, seperti yang disebutkan di atas, bahwa perangkat tersebut harus diketahui oleh IP PBX melalui autentikasi user/password atau berdasarkan autentikasi ip address (jika ip address perangkat tersebut tetap). Bila ada, misal, 5 perangkat teregistrasi ke IP PBX sebagai perangkat A, B, C, D, dan E, maka sebuah extension (misal ext. 1000), bisa diasosiasikan dengan salah satu perangkat tersebut. Jadi extension tidak terikat dengan sebuah perangkat telepon atau terikat dalam fungsi untuk mengontak sebuah perangkat.

Setelah penjelasan sedikit mengenai extension tersebut, semoga bisa sedikit memberikan gambaran konsepnya.

[Ubuntu] Restore linux-image dari Live CD

Kebiasaan bersih-bersih laptop kadang-kadang tidak selalu berakhir bagus. Seperti baru-baru ini. Maksud hati ingin membersihkan semua kernel source dan kernel image versi lama yang sudah menumpuk (karena setiap kali Ubuntu desktop update, kernel image yang lama tidak dihapus), malah ketika booting kernel-image saya yang baru hilang juga. Menu di daftar booting grub juga tidak memunculkan boot ke Ubuntu, dan untungnya laptop menggunakan dua OS.

Untuk mestore kernel image yang terhapus, saya menggunakan Live CD Ubuntu (per tulisan ini, Ubuntu yang saya gunakan adalah Ubuntu Desktop 13.10). Boot ke Live CD, dan buka shell console dan jalankan langkah berikut:

Karena saya menggunakan dual OS (Windows dan Linux), maka saya perlu mengetahui di mana meletakkan filesystem Linux.

# fdisk -l

output:
Disk /dev/sda: 640.1 GB, 640135028736 bytes
255 heads, 63 sectors/track, 77825 cylinders, total 1250263728 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e7ab4

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2          206848   409602047   204697600    7  HPFS/NTFS/exFAT
/dev/sda3       409602048   670098365   130248159    7  HPFS/NTFS/exFAT
/dev/sda4       670099454  1250260991   290080769    f  W95 Ext’d (LBA)
/dev/sda5       819204096  1250260991   215528448    7  HPFS/NTFS/exFAT
/dev/sda6       670099456   802533375    66216960   83  Linux
/dev/sda7       802535424   819202047     8333312   82  Linux swap / Solaris

di atas terlihat lokasi instalasi Linux berada di /dev/sda6. Pastikan koneksi internet sudah tersambung terlebih dahulu, atau setidaknya pastikan CD instalasi Ubuntu sudah siap dimount (karena kita akan melakukan instalasi kernel-image) lalu lakukan berikut:

# umount -a
# mount /dev/sda6 /mnt
# mount –bind /dev /mnt/dev
# mount –bind /sys /mnt/sys
# mount –bind /proc /mnt/proc
# chroot /mnt

keterangan: Pertama unmount semua filesystem yang dijalankan dari Live CD. Lalu mount lokasi disk tempat instalasi Linux kita berada. Setelah itu mount direktori spesial seperti /dev, /sys, dan /proc. Dan perintah chroot akan mengubah root filesystem ke /mnt dan kita bisa menjalankan aktifitas seperti laiknya kita boot dari Linux kita sendiri. Sampai di sini kita tinggal menjalankan perintah:

# apt-get install -y linux-image-generic

Reboot laptop, dan harusnya grub sudah menampilkan kembali menu opsi booting ke Ubuntu.

next level…

Setelah membaca ulang semua postingan-postingan lama, akhirnya saya sadar bahwa banyak sekali salah kaprah yang saya buat sendiri terutama di beberapa catatan pekerjaan saya. Untuk memperbaikinya pun rasanya sudah malas. Selain itu saya juga agak ndak sreg dengan Serendipity. Belum lagi jika ingin mempertahankan postingan-postingan lama, harus mengekspor dari Serendipity ke WP, dan masih harus memiliah-milah mana postingan yang pantas dipertahankan atau tidak.

Jadi?

Otakudang.Org v2.0.

Kali ini harus bisa meluruskan semua postingan yang menyesatkan dan meluruskan banyak salah kaprah sekaligus menghadiahi diri sendiri dengan sesuatu yang baru. Dan tentu saja selain itu ada banyak sekali yang ingin saya bagi selama saya idle dari posting blog.

Semoga bermanfaat.