-->

..:: seize the day ::..

November 20, 2011

[OOT] In Search of Manohara ;-)

Filed under: others

Well, it is very out of topic everyone, you already been warned :-D

During my busy weeks in implementing openSUSE Li-f-e for schools in Yogyakarta Indonesia (see the pictures below), me and one of my colleague use our free time in a Sunday afternoon to visit Borobudur, the biggest Buddhist temple in the world. One of the  World Heritage preserve by Unesco. In Indonesia, kids are study it in history and culture subject in middle schools. I still remember my history teacher told the story in front of the class and I was very amazed at that time. She said that the temple was build by Princess Pramodhawardhani the daughter of King Samaratungga from Syailendra clan who ruled Java Island in 8th - 9th century. She also told that the temple rising in the middle of the lake (when it was built) and form a lotus flower and leave in the center of the lake. Wow …….

Busy weeks:

Education material in Moodle LMS Next victim waiting in staging process, around 5000 PCs with openSUSE Li-f-e 11.4

Special logo in BIOS openSUSE Li-f-e 11.4

This is Sunday afternoon and seems a bit late to go there, around 35-40 km from the place I stay in Yogyakarta. It was light rain and a cloudy afternoon. To go there we must passed the bridge in Kali Putih river (actually "kali" means river in Bahasa Indonesia), after Mount Merapi erruption in October 2010 this location always damage by the massive cold lava and volcanic material from the last erruption. We saw some very big rocks and large volume of sand beside the street. That’s explain why sometime we find a big rock in the middle of flat land, and the cold lava was very huge, maybe there are a plenty of archeological sites around this area still burried beneath the surface because of this happened also in past. Around 4 PM we arrived in Borobudur, park the car, and run to the sites around 1 km to the top. It was light rain and cloudy, not a perfect condition to take some pictures and we will miss the sunset :-( Everyone should wearing "kain/sarung batik" that we can borrow (for free) after entering the main gate. We were a bit late, the temple will close on 5 PM. Huh…..

Some pics:

rock and volcanic material floaded the river Kali Putih volcanic material behind the road around Kali Putih bridge

Everyone should wear kain batik Borobudur                                       

Unesco World Heritage Borobudur

This time I wanted to search Manohara in scuplture/stone relief in level 1. Borobudur consist of 3 level and the first (named Kamadatu) and second level (named Rupadatu) are full of stone relief. Manohara is a Kinnari, half woman and half bird creature while Kinnara is half man and half bird. The stories, where she roles as a heroine, is compiled in the Dvijavadana (from sanskrit word means Glorious Heavenly Acts, wow …..). Manohara married with the Prince Sudhana in that story, the story about how to act heavenly. Because I’m not prepared, belief me I enjoy reading epic, history and cultural literature :-D I’m not just a linux freak, I’m not sure I found Manohara. I took some pictures here and there but I’m not sure that was Manohara :-D My colleague told me that better I took photograph of stewardess because they usually pretty and always fly (like Manohara) he…he…he…

Actually I found this "Manohara" stewardess in my last flight emoticon finally.

Sculpture - Stone relief:

relief 1 relief 2

reilef 3 relief 4

relief 5 Borobudur

In 5 PM, the sites guard ask everyone to leave Borobudur because they will closed. I ask one of the guides how to transfer the rain from the top to the ground below, the drainage of this sites. Borobudur lie in the hill, beneath the rock surface there should be the hill. How to avoid the water not to infiltrate to the hill behind the relief-rock? If the water go directly to the hill inside the rock then Borobudur can collapse. This can be a really challenging task. Restoration team engineer found the solution and make a drainage system beneath the temple floor and transfer the water from the top to the ground outside the temple. Originally the rain water was transferred using gargoyle in the corners but now it is not use anymore because it can damage the temple.

Drainage and top section:

Stupa 1 Stupa 2

Stupa 3 Stupa 4

Drainage under the temple floor gargoyle

These are some of my suggestion if you visit Borobudur:

  1. Early in the morning, so you can see the sunrise. I think it is not possible because the sites open at 8 AM. But maybe you can arrange it for special condition. Well, I don’t know.
  2. Do not visit it between 11 AM - 2 PM becuase it can be very hot. It is located in equator area :-)
  3. Try to be there between 2 PM- 3 PM, so you have time to explore the relief/sculpture in Kamadatu and Rupadatu.
  4. If possible visit it in dry season between May - September, don’t go there in rainy season you can miss the best moment to see the sunset.
  5. Because the sites is closed in 5 PM, you should ask the guides or the guard if you can wait a little longer to take some pictures.
  6. Don’t forget to bring umbrella. It can be very hot or very wet :-)
  7. If you like photography bring your wide-angle lense.
So everyone, when you visit Yogyakarta? I can show you how we implement openSUSE in hundred of schools and as a bonus you can see one of the interesting world heritage :-D

Ini adalah Sebuah Proses …..

Filed under: my opinion

Setelah sekian lama tidak menulis, saya beranikan untuk menulis lagi walau kali ini mungkin tulisan saya terkesan berkeluh kesah :-) Saya memang menghindari menulis di blog ini selama beberapa waktu, terakhir sekitar bulan Maret 2011 saat openSUSE 11.4 dirilis. Sekarang 12.1 sudah rilis ya kemarin. Kudos to all. Ya memang ada beberapa perubahan mendasar seperti systemd, silakan dibaca-baca dulu dari sumber-sumber di internet apa sih systemd itu (just search in google, o iya thanks to Lennart Poettering and Kay Sievers for the breakthrough and brave move!).

Back to the laptop eh.. subyek … whatever it is, saya tidak menulis karena saya takut suasana pekerjaan saya mempengaruhi tulisan saya. Iya kali ini pekerjaan saya menguras emosi dan logika saya he..he…he… Sebagai seorang "opensource believer" yang dapat kerjaan untuk menyebarkannya di kalangan pendidikan dasar dan menengah ternyata membuat saya hampir putus asa. Hanya kesadaran bahwa apa yang saya lakukan ini mungkin bisa dinilai Tuhan sebagai amal jariah agar anak-anak dan adik-adik kita menjadi generasi yang lebih baik dari generasi saya yang membuat saya tetap bertahan. Dan mungkin juga karena saya seorang pemimpi that just want to make my dream come true :-)

Saya bolak-balik Jakarta dan tempat kerja saya, about 600 km several times in a month. Seringkali saya menemukan hal-hal yang tidak sesuai dengan hati kecil saya. Dalam satu acara, seorang pendidik mempresentasikan hasil kerjanya yang penuh dengan "right to copy" tanpa memperhatikan aspek legalitas suatu karya. Saya katakan mohon jika mengutip pekerjaan orang lain pelajari dulu lisensinya, proprietary, gpl, Creative Commons Attribution-Share Alike atau apa? Kita sering menyalahkan orang melakukan korupsi atau menghakimi orang yang mencuri, tetapi kita membiasakan diri melakukannya dan memberi contoh kepada anak didik mengenai pencurian hak cipta. What a mess :-( Mengapa berlaku jujur menjadi suatu hal yang sulit dilakukan?

Saya juga agak kecewa ketika membaca adanya pelajaran yang kurikulumnya disusun oleh Kementerian Pendidikan dan menyebutkan penggunaan software proprietary dengan gamblang. Kenapa kita selalu terjebak dengan hal-hal yang membuat hidup ini seperti tidak ada pilihan. Berikanlah kebebasan atas pilihan-pilhan dalam hidup ini, niscaya orang akan bertanggungjawab terhadap pilihan yang mereka lakukan. Ketika tahun 2009 saya ditawari pekerjaan ini sebenarnya pada saat yang sama ada satu tawaran dari sebuah perusahaan high-tech multinasional bermarkas di Eropa pada saya yang kalau dilihat dari sisi finansial berkali lipat besarnya. Saat itu saya menolaknya dengan pertimbangan kapan lagi saya bisa menyumbangkan sesuatu bagi perkembangan opensource sekaligus memberikan sumbangsih bagi kemajuan pendidikan di Indonesia. Tetapi sekarang saya kadang merasa mungkin pilihan saya waktu itu salah, saya agak frustasi dengan kondisi implementasi, kemampuan dan kemauan guru untuk menggunakan opensource, serta yang paling berat adalah kurikulum yang terasa tidak pro opensource. Saya merasa tidak akan berhasil.

Saat ini saya belum menyerah, bulan-bulan ke depan ini akan menjadi bulan-bulan yang sibuk. Kita akan melanjutkan implementasi di lebih dari 200 sekolah, menyempurnakan pusat data dan memperbaiki kondisi koneksi ke pusat data. Semangat harus dikumpulkan, logika dan emosi harus dijaga ketahanannya, hampir setiap hari saya jogging untuik mengimbangi this turbulence condition. Tidak mudah mencapai suatu tujuan, ini adalah sebuah proses.

March 1, 2011

Broadcom STA driver di openSUSE 11.4 (RC2)

Filed under: IT stuff

Bagi pengguna broadcom wireless pada openSUSE anda dapat menggunakan b43, bcm43xx atau ssb driver. Tetapi ada beberapa tipe Broadcom wireless yang hanya bisa berfungsi bila menggunakan STA driver, misalnya type N-PHY (cek dengan lspci pada pc anda). Broadcom STA driver juga dapat digunakan pada seluruh Broadcom wireless. Karena masalah lisensi (ya benar Broadcom sudah bergabung dengan Linux Foundation sebagai Silver member, tetapi STA driver sepertinya belum di GPL khan) openSUSE tidak memaketkan STA driver pada OBS.

Selama ini pengguna openSUSE dapat menggunakan STA driver yang dipaketkan di Packman yaitu broadcom-wl dan broadcom-wl-kmp-"kernel-version". Untuk 11.4 RC2 belum ada yang memaketkan di Packman untuk itu anda dapat membuild sendiri dengan mendownload STA driver dari websitenya Broadcom. Download sesuai arsitektur kernel anda.

Selanjutnya anda membutuhkan paket kernel-devel, kernel-source, make, gcc, dan patch. Patch akan kita gunakan untuk mempatch sta driver karena adanya patch yang harus dimasukkan ke STA driver agar dapat dicompile pada kernel 2.6.37.

Pada kernel 2.6.37 implementasi init_MUTEX diganti oleh sema_init karena itu Broadcom STA driver harus dipatch agar dapat dicompile pada openSUSE 11.4 RC2. Ini adalah workaround sementara bagi anda yang tidak sabar menunggu broadcom-wl dan broadcom-wl-kmp tersedia di Packman. 

Anda dapat mempatch Broadcom STA driver yang anda download dari Broadcom website dengan patch file yang dapat anda download dari patch.file

Bagi anda yang agak malas mem-patch sendiri, anda dapat menggunakan versi yang sudah dipatch pada link STA driver PATCHED (tested on 32 bit kernel openSUSE 11.4 RC2)

Selanjutnya seperti biasa jangan lupa untuk membaca README.txt tentang bagaimana caranya meload STA driver pada instalasi openSUSE anda.

Have a lot of fun

July 28, 2010

openSUSE 11.3, Workaround untuk Broadcom

Filed under: IT stuff

Pada 15 Juli 2010 openSUSE 11.3 telah dirilis. Apa saja highlight dari openSUSE 11.3 dapat dilihat pada Portal 11.3. Selama masa RC dari pengembangan openSUSE 11.3, saya dan Larry Finger (dan openSUSE Core Testing Team yang lain) mengevaluasi sebuah bug yang cukup mengganggu yang berkaitan dengan Broadcom wireless. Bug ini berpengaruh terhadap proses instalasi openSUSE 11.3. Kami mengidentifikasi bahwa bug ini berkaitan dengan penggunaan address hardware baru oleh Broadcom pada beberapa tipe netbook yang baru. Broadcom tipe lama (sebelum Q4 2009) sepertnya tidak terpengaruh.

Bug ini terdapat pada kernel 2.6.34 yang digunakan oleh openSUSE dan telah diperbaiki untuk kernel 2.6.35. Sebenarnya patch untuk 2.6.34 sudah disiapkan tetapi untuk di backport ke kernel 2.6.34 yang digunakan pada openSUSE 11.3 sudah terlambat karena baru selesai saat periode persiapan Goldmaster. Lima hari sebelum dirilis saya sudah mencoba versi Goldmaster rilis build 0702, dan masih menemukan bug yang sama.

Para pengembang kernel driver telah melakukan pekerjaan yang luar biasa dengan membuat modul kernel ssb untuk Broadcom wireless. Broadcom tidak merilis kode sumber driver untuk wireless dan para pengguna wireless Broadcom dapat mendownload proprietary driver pada websitenya. Pengembang kernel driver akhirnya berhasil membuat versi open source dari driver ini dan menyertakannya sebagai modul kernel (modul ssb). Masalahnya adalah Broadcom mengganti hardware address mereka dan akibatnya modul ssb pada kernel mengakses alamat yang salah.

Bagi pengguna Broadcom wireless yang terkena bug ini, akan mengalami simptom instalasi terhenti pada 41% proses (jika menggunakan livecd) atau jika menggunakan DVD instalasi sukses tetapi pada saat booting pertama kali akan terhenti pada saat kernel memanggil modul ssb. Berikut langkah-langkah workaround yang dapat diterapkan agar anda dapat menginstalasi openSUSE 11.3:

  1. Instal menggunakan DVD jangan dari livecd
  2. Pastikan anda memeriksa integritas iso yang anda download. Cek md5
  3. Setelah mem-burn DVD periksalah medianya dan pastikan buildnya 0702
  4. Lakukan instalasi seperti biasa.
  5. Saat booting pertama kali, isikan pada grub line "brokenmodules=ssb" (tanpa tanda petik)
  6. Setelah anda login, buatlah sebuah file blacklist untuk broadcom pada /etc/modprobe.d misalnya dengan nama 50-broadcom-wl-blacklist.conf (tentu saja sebagai root). Selanjutnya isi file tersebut dengan:

blacklist bcm43xx
blacklist ssb
blacklist b43
blacklist ndiswrapper

  • Selanjutnya gunakan ethernet dan downloadlah paket broadcom-wl dan broadcom-wl-kmp-default/pae/desktop (sesuai jenis kernel yang anda gunakan) dari packman (melalui packman atau webpin)
  • Mungkin anda membutuhkan untuk melakukan modprobe (modprobe wl) dan melakukan reboot untuk mengaktifkan wireless anda.

Broadcom-wl adalah driver proprietary untuk broadcom wireless. Driver ini dapat tidak digunakan lagi jika sudah ada update kernel yang menyertakan perbaikan module ssb. Tentu saja jika anda akhirnya memutuskan untuk menggunakan modul ssb, maka anda harus menghapus blacklist ssb dari file yang anda buat pada langkah 6 di atas.

Have a lot of fun

May 28, 2010

Pelatihan Open Source Guru SD dan SMP di Yogyakarta

Filed under: IT stuff, my work

Pada awal bulan Mei 2010 saya dikontak oleh Pak Singgih dari Dinas Pendidikan Provinsi Yogyakarta dan Pak Heru Supriyatno dari Kemkominfo untuk berdiskusi mengenai materi pelatihan open source bagi guru-guru. Pada kesempatan tersebut saya juga berkenalan dengan Pak Ari dan Pak Andi yang merupakan guru SMK yang sudah terbiasa menggunakan open source.

Dinas Pendidikan, Pemuda dan Olah Raga (Dikpora) Provinsi DIY bekerjasama dengan Kementerian Kominkasi dan Informatika merencanakan untuk menerapkan open source bagi proses pembelajaran di sekolah-sekolah. Ini merupakan sebuah langkah awal yang berani dan cukup strategis mengingat selama ini guru-guru dan siswa pada umumnya sudah terbiasa menggunakan perangkat lunak proprietary walaupun mereka kadang-kadang tidak mengetahui aspek legalitasnya.

Sebagai pelaksana kegiatan ini Dikpora DIY mendapat bantuan dari tim pengajar guru-guru SMK yang sudah terbiasa menggunakan open source. Materi pelatihan sendiri ditekankan pada penggunaan Open Office, Firefox dan Thunderbird. Tentu saja dengan pengantar sistem operasi open source. Pelatihan berlangsung di BLPT Yogyakarta dan akan berlangsung untuk 7 angkatan, setiap angkatan akan melakukan pelatihan selama 5 hari. Rencananya pelatihan akan dilakukan untuk guru-guru TIK bagi 590 sekolah SD dan SMP se propinsi DIY.

Pembukaan pelatihan dilakukan pada tanggal 24 Mei 2010 dengan dihadiri oleh pihak Dikpora dan Kemkominfo. Kebetulan saya diminta oleh Pak Heru Supriyatno dari Kementerian Komunikasi dan Informatika untuk memberikan sedikit materi mengenai open source. Maka berangkatlah saya untuk bersilaturahmi dengan guru-guru di DIY.

 

Saya membahas masalah gerakan FOSS dalam garis besar dan "Software Economic". Penekanan dalam "Software Economic" karena saya ingin membahas bagaimana vendor-vendor besar mencoba menjebak kita dalam situasi dimana kita merasa "tidak ada pilihan lain" dalam hidup ini :-P . Saya sama sekali tidak membahas masalah teknis, karena saya yakin Pak Ari, Pak Andi dan rekan-rekan guru SMK lain telah menguasainya.

 

Dalam kesempatan tersebut saya mendapat berbagai kesan mengenai rencana penggunaan open source, mulai dari yang sangat antusias sampai yang terlihat agak pesimis. Tapi semuanya menunjukkan nuansa kebaikan dan keinginan untuk meningkatkan mutu pendidikan. Mudah-mudahan kegiatan ini dapat ditindaklanjuti dengan penerapan dalam kondisi belajar mengajar di sekolah.

Presentasi saya dapat dilihat pada [0] dan [1]

[0] ekonomi perangkat lunak

[1] foss

Have a lot of fun!

March 12, 2010

Asterisk 1.6.1 on openSUSE 11.1 (Part 5)

Filed under: IT stuff, my work

I will explain a bit more deeper about Asterisk configuration in this post, some trick and useful configuration that I found really helpful in configuring asterisk instalation. Asterisk developer really did a good job to make a complete PBX, they give the best tools to us and now it is our job to configure it.

One thing I found really annoying is the echo if we connect asterisk to PSTN line. I use digium TDM 410P and leave the card without tune it will give annoying echo. In my earlier post I explain that by running /usr/sbin/dahdi_genconf dahdi will automatically create /etc/dahdi/system.conf file that already contain information about hardware echo canceller. First thing you should remember if you have the budget is buy a card with hardware echo canceller. It will let the card to manage the echo without give the processor too much task to reduce it. After that you should tune the card. Luckily Digium give the best tools to tune the card named fxotune. To tune your card first shutdown the asterisk service and then run:

# /usr/sbin/fxotune -i 0

I put 0 (zero) because to dial an outside line I set the asterisk configuration to use 0. You should change it to whatever number you use. fxotune will create /etc/fxotune.conf file to put all the configuration it creates to reduce the echo. Pleas read "man fxotune" for more explanation about the tools.

To enable Asterisk to use the card configuration every time we boot the server we need a slight modification of init script. We should call the fxotune before we call Asterisk, you can either modify the init script of Asterisk to call fxotune before it call the Asterisk or you can modify /etc/init.d/after.local (yes, I use openSUSE). I prefer to use after.local. Create /etc/init.d/after.local and fill the lines below:

# ! /bin/sh

/usr/sbin/fxotune -s

sleep 1

/etc/init.d/asterisk161 start

Also you need to remove asterisk service from init script

# insserv -r /etc/init.d/asterisk161

You can boot the server and hear the difference. If everything goes well you can hear no echo :-)

Now let’s take a look back to our extension.conf that I already give in the part 3.

[recordings]

exten => 500,1,Answer

exten => 500,2,Playback(en/silakanrekamgreeting)

exten => 500,3,Record(en/mymessage:gsm)

exten => 500,4,Playback(en/pesananda)

exten => 500,5,Playback(en/mymessage)

exten => 500,6,Playback(en/tekan1)

exten => 500,7,WaitExten(3)

exten => t,1,Playback(en/maafmohonulangi)

exten => t,2,Goto(500,5)

exten => i,1,Playback(en/pesanandasalah)

exten => i,2,Goto(500,5)

exten => 1,1,System(/bin/mv /var/lib/asterisk/sounds/en/mymessage.gsm /var/lib/asterisk/sounds/en/autoattendant.gsm)

exten => 1,2,Playback(en/terimakasih)

exten => 1,3,Playback(en/tekan3)

exten => 2,1,Goto(500,1)

exten => 3,1,Goto(500,1)

exten => 4,1,Hangup

include => internal-sip

This is the context about recording that we put it in extensions.conf and also in sip.conf, that’s why I put "include => internal-sip" in the bottom of the context. We create the special extension 500 to record the greeting for our system. We will put the record as greeting, when someone from outside call our lines, then Asterisk will play this greeting. I will explain it to you don’t worry :-) . Those lines means:

  1. If dial 500 then answer.
  2. Play the sound file /var/lib/asterisk/sounds/en/silakanrekamgreeting.gsm. You can record a custom sound file which contain something like "Please record your greeting after the beep", save it as gsm format and call it from here.
  3. Record your message (say the greeting you want to record) and put it as /var/lib/asterisk/sounds/en/mymessage.gsm
  4. Play the file /var/lib/asterisk/sounds/en/pesananda.gsm. You can record a custom sound file which contain something like "Your greeting is", save it as gsm format and call it from here.
  5. Play your record greeting that just you record in step 3.
  6. Play the sound file /var/lib/asterisk/sounds/en/tekan1.gsm. You can record a custom sound file which contain something like "Please press 1 to save your message", save it as gsm format and call it from here.
  7. Wait 3 second for pressing 1
  8. t,1 means that if 3 seconds already time-out then play the sound file /var/lib/asterisk/sounds/en/maafmohoulangi.gsm. You can record a custom sound file which contain something like "Please re-record your message", save it as gsm format and call it from here.
  9. t,2 go to point 6 above and repeat the steps.
  10. i,1 means if you press another number in step 7 (you don’t record the message) then play the sound file /var/lib/asterisk/sounds/en/pesanandasalah.gsm. You can record a custom sound file which contain something like "Sorry I didn’t get that", save it as gsm format and call it from here.
  11. i,2 go to point 6 above and repeat the steps.
  12. 1,1 if you press 1 in step 7 then asterisk will move /bin/mv /var/lib/asterisk/sounds/en/mymessage.gsm to /var/lib/asterisk/sounds/en/autoattendant.gsm
  13. 1,2 means play the sound file /var/lib/asterisk/sounds/en/terimakasih.gsm. You can record a custom sound file which contain something like "thankyou", save it as gsm format and call it from here.
  14. 1,3 means play the sound file /var/lib/asterisk/sounds/en/tekan3.gsm. You can record a custom sound file which contain something like "press 3 to record another message", save it as gsm format and call it from here.
  15. include => internal-sip, means that asterisk will see also [recording] context in [internal-sip] context, usually we manage [internal-sip] in sip.conf.

Now ti’s time to configure /etc/asterisk/sip.conf. This file manage the sip for ip phone and other peripheral in our setup. I use several desk ip-phone, wireless ip-phone (Polycom Kirk DECT) and also GSM gateway (Zed, Musitel etc), all of it running well. My sip.conf looks something like:

[general]

port = 5060

bindaddr = 10.7.1.120

disallow=all

allow=all

allow=ulaw

allow=gsm

context=internal-sip

;——————–xxxxx site —————————

;Polycom IP330

[8001]

type=friend

host=dynamic

dtmfmode=rfc2833

language=en

context=internal-sip

nat=no

canreinvite=no

username=TELEPH01

userid=8001

callerid=TELEPH01 <8001>

mailbox=8001

allow=all

qualify=yes

[8002]

type=friend

host=dynamic

dtmfmode=rfc2833

language=en

context=internal-sip

nat=no

username=TELEPH02

userid=8002

callerid=TELEPH02 <8002>

mailbox=8002

allow=all

qualify=yes

[8006]

type=friend

host=dynamic

dtmfmode=rfc2833

language=en

;context=internal-sip

context=recordings

nat=no

canreinvite=no

username=TELEPH06

userid=8006

callerid=DPTELEPH06 <8006>

mailbox=8006

allow=all

qualify=yes

; KIRK DECT 3040 at site

[8020]

type=friend

host=dynamic

dtmfmode=rfc2833

language=en

context=internal-sip

nat=no

username=TELEPH20

userid=8020

callerid=TELEPH20 <8020>

mailbox=8020

allow=all

qualify=yes

;Zed GSM GATEWAY

[8031]

type=peer

insecure=very

disallow=all

allow=ulaw

allow=alaw

allow=gsm

context=internal-sip

host=10.7.1.31

username=GS8

permit=10.7.1.31/255.255.255.255

qualify=yes

canreinvite=no

call-limit=4

dtmfmode=rfc2833

nat=no

[8032]

type=peer

insecure=very

disallow=all

allow=ulaw

allow=alaw

allow=gsm

context=internal-sip

host=10.7.1.32

username=GS8

permit=10.7.1.32/255.255.255.255

qualify=yes

canreinvite=no

call-limit=4

dtmfmode=rfc2833

nat=no

[8001] and [8006] are the desk ip-phone, [8020] is wireless ip-phone, and [8031] and [8032] are Zed gsm gateway. Please pay attention to [8001] and [8006] almost all the configuration are same, except one line.context. For 8001 context=internal-sip but 8006 context=recording. This line tell us that for recording / greeting purpose we will use the phone with extension 8006. So we can only dial 500 and do the recording in that phone as we set it in /etc/asterisk/extension.conf. You cannot dial 500 and do recording in the phone with the sip configuration doesn’t include the line context=recording. I hope you get it :-)

For gsm gateway, I set it up just like the other as internal-sip. But there are a lot of gsm gateways out there and every brand has their own configuration so please read the manual of your gsm gateway and set it up properly. You can use it in front of digium as fxo/fxs or you can also set it up as sip extension depend on you gsm gateway type.

Let’s move to chan_dahdi.conf that I already attached several post earlier. Let me remind part of the file:

[channels]

language=en

context=internal-fxo

signalling=fxs_ks

rxwink=300

cidstart=polarity

answeronpolarityswitch=no

hanguponpolarityswitch=no

pulsedial=no

cidsignalling=dtmf

busydetect=yes

busycount=6

……

echocanceller=mg2,1-12

channel => 1-12

there is line with "context=internal-fxo". Basically it means that all the channels 1 through 12 are in the context of internal-fxo. By doing this all the lines will follow the setup we already done in extensions.conf under context [internal-fxo], please take a look extensions.conf in earlier part. You got it, don’t you :-) ?

Let me finish this asterisk session, 5 part seem not enough but I’m afraid this will make my blog so bore :-) . So final notes is about iax.conf. If you have several locations with asterisk server in every location you can connect the server and make conversation like you dial an extension. First of all you should setup a VPN between the site. I presume you already now how to set it up, there are a lot of howto in internet. Then you should configure the iax.conf. I already give the example in previous post, let me explain. Take attention in this part:

[general]

bindport=4569

bindaddr=10.8.1.120

…………………..

 

register => ncpabxsv:0000@10.1.1.120:4569

register => dppabxsv:0000@10.7.1.120:4569

register => ygpabxsv:0000@10.8.1.120:4569

 

This server address is 10.8.1.120 and the port 4569 use for the iax. We should register all the server including this server in the 3 lines at the bottom.

Also we should make the setup for every server like below:

 

[ncpabxsv]

type=friend

auth=md5

secret=0000

context=local

host=dynamic

defaultip=10.1.1.120

qualify=yes

requirecalltoken=no

 

[dppabxsv]

type=friend

auth=md5

secret=0000

context=local

host=dynamic

defaultip=10.7.1.120

qualify=yes

requirecalltoken=no

 

[ygpabxsv]

type=friend

auth=md5

secret=0000

context=local

host=dynamic

defaultip=10.8.1.120

qualify=yes

requirecalltoken=no

 

In all site with the asterisk server we should configure iax.conf so every server can be registered with each other. By doing this you can call other site with extension. Now take a look again our extensions.conf in this section:

 

[internal-sip]

exten => _1.,1,Dial(IAX2/ygpabxsv:0000@10.1.1.120/${EXTEN:1}@local)

exten => _1.,2,Hangup()

 

exten => _2.,1,Dial(IAX2/ygpabxsv:0000@10.7.1.120/${EXTEN:1}@local)

exten => _2.,2,Hangup()

 

Above lines means:

  1. _1. –> if you start a call with "pressing 1 then follow by extension then you connect to asterisk server in ip address 10.1.1.120". 10.1.1.120/${EXTEN:1} means the asterisk server in ip 10.1.1.120 will stripe the first digit.
  2. _2. –> if you start a call with "pressing 2 then follow by extension then you connect to asterisk server in ip address 10.7.1.120". 10.7.1.120/${EXTEN:1} means the asterisk server in ip 10.7.1.120 will stripe the first digit.

I think I already explain everything that you should know about how to setup and configure an asterisk server, make a conference room, setting up extension, and even connecting between two or more asterisk server using iax. Now it is your turn :-) You can experiment with my setting until you get used to it and try another configuration that match with what you want.

Don’t forget to have a lot of fun.

February 21, 2010

Heartbeat dan Drbd

Filed under: IT stuff, my work

Dalam sebuah implementasi saya harus mengganti implementasi vrrpd (virtual router redundancy protocol) dengan heartbeat+drbd disebabkan adanya penambahan database dalam server yang digunakan. Service awal pada mesin ini hanyalah web server statis, named dan dhcpd yang relatif statis dan file-filenya saya sinkronisasi dengan rsync. Tetapi dengan adanya penambahan database (mysql) dibutuhkan sebuah mekanisme dimana data yang disimpan dalam satu mesin primary dapat secara langsung ditulis juga ke mesin backup. Untuk hal yang terakhir ini vrrpd saja tidak mencukupi karenanya saya harus mengganti vrrpd dengan heartbeat (baca hartbit, bukan hertbet :-) )sedangkan untuk menjamin mekanisme clusternya saya menggunakan drbd.

Implementasi heartbeat saja sangatlah mudah. Cukup mendownload, mengkompilasi dan mengkonfigurasi tiga buah file /etc/ha.d/ha.cf, /etc/ha.d/authkeys dan /etc/ha.d/haresources. Untuk drbd bisa download tarball dan jangan lupa untuk membaca dokumentasinya, karena drbd harus dikompilasi dengan kernel source secara baik, kalau tidak anda dapat menemui kesulitan dalam mem-probe modul drbd. Pada server ini saya menggunakan openSUSE 11.1 sehingga hidup jadi lebih mudah, tinggal gunakan 1-click install untuk heartbeat, drbd kernel module dan drbd user space, atau bisa juga dengan mengaktifkan repositori http://download.opensuse.org/repositories/server:/ha-clustering/

Konfigurasi Heartbeat

  1. Pastikan anda menggunakan dua buah server untuk high availability cluster. Kalau hanya punya satu ya tidak perlu heartbeat dan drbd :-) . Untuk penggunaan lebih dari 2 buah server sebaiknya menggunakan pacemaker dan openAIS karena dapat melakukan N-to-N atau N+1 cluster sampai jumlah yang teorithically tidak terbatas. Tetapi saya tidak akan menjelaskan pacemaker dan openAIS di sini.
  2. Pada setiap server menggunakan dua buah ethernet card, atau bisa juga 1 ethernet card dan koneksi langsung antar kedua server dengan menggunakan null-modem cable.
  3. Satu buah ethernet terhubung ke jaringan dan satu buah lagi sebaiknya dihubungkan antar server langsung menggunakan cross cable (tidak harus tetapi disarankan)
  4. Pastikan ethernet bekerja dengan baik. logical design ha-cluster
  5. Pada gambar di atas eth0 real ip diset secara permanen dengan ifup, sedangkan virtual ip akan diset melalui file /etc/ha.d/haresources. Silakan ganti ip address sesuai dengan yang anda gunakan.
  6. Konfigur file /etc/ha.d/ha.cf, /etc/ha.d/haresources, /etc/ha.d/authkeys. File-file ini harus sama di kedua server.

Contoh file ha.cf

keepalive 2
warntime 5
deadtime 15
initdead 90
udpport 694
auto_failback on
bcast eth0
node server1 server2

bcast eth0, maksudnya adalah ethernet yang akan digunakan oleh client untuk mengakses server. node, diikuti dengan nama server primary dan server secondary sesuai dengan hasil "uname -n"

Contoh file authkeys

Jika kedua server terhubung dengan kabel null-modem atau kabel cross anda dapat mengabaikan enkripsi dan mengisi file authkeys dengan misalnya:

auth 2
2 crc

Tetapi jika anda menggunakan jaringan, misalnya letak kedua server terpisah secara geografis maka penggunaan enkripsi sangat dianjurkan dengan format

auth num
num algorithm secret


Untuk membuatnya dapat gunakan script dibawah

# ( echo -ne "auth 1\n1 sha1 "; dd if=/dev/urandom bs=512 count=1 | openssl md5 )  > /etc/ha.d/authkeys

Selanjutnya jangan lupa set agar authkeys hanya bisa dibaca dan ditulis oleh root # chmod 0600 /etc/ha.d/authkeys

Contoh file /etc/ha.d/haresources

Konfigurasi haresources tanpa drbd / sebelum drbd diaktifkan misalnya

    server1 IPaddr::10.8.2.100/24/eth0 named dhcpd apache2

Arti dari baris tersebut adalah:

  • server1 –> nama server primary sesuai "uname -n" 
  • IPaddr::10.8.2.100/24/eth0 –> ipaddress virtual yang digunakan di eth0
  • named dhcpd apache2 –> nama services yang redundan

Anda dapat menset service heartbeat agar jalan di run level saat booting, misalnya dengan perintah "chkconfig heartbeat on" atau pada openSUSE dengan "insserv /etc/init.d/heartbeat". Saya sendiri di openSUSE lebih menyukai untuk menjalankannya melalui file /etc/init.d/after.local misalnya vim /etc/init.d/after.local:

#! /bin/sh
sleep 2
rcheartbeat start

Jangan lupa untuk mengcopy semua file konfigurasi yang anda buat di server1 ke server2 (gunakan scp or whatever) ha.cf, haresources, authkeys dan after.local (kalau anda pakai). Heartbeat sebenarnya menyediakan fasilitas mencopy konfigurasi dari node primary ke node cluster lainnya dengan ha_propagate. Coba cari filenya di /usr/share/heartbeat/ha_propagate atau di /usr/lib/heartbeat/ha_propagate. Saya sendiri lebih prefer menggunakan scp :-)

Dari server1 coba "ifconfig" maka kalau semuanya ok akan muncul eth0:0 dengan ip 10.8.2.100. Dari client coba ping dan ssh ip tersebut, kalau masuk ke 10.8.2.4 maka heartbeat sudah bekerja sempurna. Selanjutnya matikan service heartbeat di server1, cek dengan ifconfig bahwa eth0:0 sudah tidak ada. Masuk ke server2 dan cek dengan ifconfig, harusnya sekarang eth0:0 dengan ip 10.8.2.100 sudah diambil alih oleh server2. Untuk mengembalikan ke server1 maka aktifkan service heartbeat di server1. Kalau ini semua ok berarti service heartbeat sudah berjalan dengan sempurna. Anda dapat juga mentest dengan mematikan eth0 pada server1, dan yakinkan bahwa ip virtual eth0:0 juga diambil alih oleh server2.

 

Konfigurasi drbd

Drbd merupakan singkatan dari Distributed Replicated Block Device. Drbd akan me-mirror seluruh block device yang telah didefinisikan dan bekerja sebaga raid-1 over network. Konfigurasi drbd cukup mudah walaupun tidak semudah heartbeat :-P Anda butuh kesabaran. Beberapa hal yang perlu diperhatikan. User space dan kernel space harus dengan versi yang sama. Ada kejadian dimana seseorang mendownload tarball dan kemudian mengupdate instalasi drbd. Waktu menjalankan configure dia tidak mendefinisikan kernel directory, akibatnya user space drbd (misalnya drbdadm) meningkat versinya tetapi modul drbd.ko tidak terupdate. Akibatnya mesin bisa hang :-( Setidaknya dalam mengkonfigure jalankan ./configure –prefix=/usr –localstatedir=/var –sysconfdir=/etc –with-km

Selanjutnya jalankan:

  • # cd drbd
  • # make clean
  • # make KDIR=/path/to/kernel/source

Untuk pengguna openSUSE tidak perlu melakukan langkah-langkah ini cukup install menggunakan 1-click install seperti yang sudah saya sebutkan di awal tulisan.

Hal lain yang sering salah dilakukan waktu mengkonfigurasi drbd adalah membuat filesystem saat merepartisi disk untuk drbd device. Hal ini harus dihindari sampai modul drbd kita panggil untuk pertama kali. Berikut adalah langkah-langkahnya:

siapkan pastisi untuk /dev/drbd yang akan digunakan untuk saling bereplikasi dan biarkan partisi tanpa filesystem. Ukuran partisi akan menentukan berapa lama keduanya bersinkronisasi, makin besar ukuran partisi maka makin lama sinkronisasi mencapai kondisi Consistent. Selain itu bisa juga disiapkan satu partisi tambahan untuk metadata walaupun tidak mandatory. Ukuran partisi di kedua server haruslah sama.

Edit file /etc/drbd.conf menjadi:

# You can find an example in  /usr/share/doc/drbd…/drbd.conf.example

#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";

global{
usage-count yes;
}
common{
 protocol C;
}
resource r0{
 net{
  after-sb-0pri discard-younger-primary;
  after-sb-1pri discard-secondary;
  after-sb-2pri disconnect;
 }
on server1{
 device /dev/drbd0;
 disk /dev/cciss/c0d0p6;
 address 10.8.2.4:7788;
 meta-disk internal;
}
on server2{
 device /dev/drbd0;
 disk /dev/cciss/c0d0p6;
 address 10.8.2.5:7788;
 meta-disk internal;
}
}

Pada server1 & server2 jalankan perintah:

  • # modprobe drbd
  • # drbdadm up all
  • # cat /proc/drbd

akan muincul tampilan dikedua server seperti:

server1:~ # cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: a1b440e8b3011a1318d8bff1bb7edc763ef995b0 build by lmb@hermes, 2009-02-20 13:35:59
 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r—
    ns:45542488 nr:0 dw:0 dr:45542488 al:0 bm:2779 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

server2:~ # cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: a1b440e8b3011a1318d8bff1bb7edc763ef995b0 build by lmb@hermes, 2009-02-20 13:35:59
 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r—
    ns:45542488 nr:0 dw:0 dr:45542488 al:0 bm:2779 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

Selanjutnya buatlah metadata untuk drbd di setiap server

  • server1:~ # drbdadm create-md r0
  • server1:~ # rcdrbd start
  • server2:~ # drbdadm create-md r0
  • server2:~ # rcdrbd start

Kita akan menjadikan server1 sebagai primary node, karena iotu pada server1 jalankan:

  • server1:~ # drbdadm  primary all
  • server1:~ # drbdadm connect all

Jika ada masalah, kemungkinan besar adalah karena sudah ada file system. Untuk menghapus file sistem tanpa mengubah partisi dapat menjalankan perintah

dd if=/dev/zero bs=512 count=512 of=/dev/your_partition

Bisa juga ditemukan atau adanya kesalahan saat menginisiasi drbd yang berakibat kedua disk sudah berada dalam kondisi Primary/Secondary Inconsistent/Inconsistent. Pada saat awal harusnya semua dalam kondisi Secondary/Secondary. Jika menemui masalah ini jalankan:

server1:~ # drbdadm — –overwrite-data-of-peer primary all

Selanjutnya jalankan pada server 1

          server1:~# drbdsetup /dev/drbd0 primary –overwrite-data-of-peer

Sekarang inisial sinkronisasi akan mulai berjalan.

server1:~ # cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: a1b440e8b3011a1318d8bff1bb7edc763ef995b0 build by lmb@hermes, 2009-02-20 13:35:59
 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r—
    ns:36350976 nr:0 dw:0 dr:36351244 al:0 bm:2218 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:68502008
        [=====>…………..] sync’ed: 34.7% (66896/102392)M
        finish: 53:31:01 speed: 348 (320) K/sec

Prosesnya cukup memakan waktu dan bergantung dari ukuran disk yang digunakan sebagai device drbd. Bersabarlah dan menunggu sampai prosesnya selesai. Saya selalu menunggu sinkronisasi sampai selesai 100% untuk yang pertama kali sebelum melakukan apapun (walaupun tidak harus). Jika sudah selesai maka hasilnya akan seperti:

server1:~ # cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: a1b440e8b3011a1318d8bff1bb7edc763ef995b0 build by lmb@hermes, 2009-02-20 13:35:59
 0: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r—
    ns:45542488 nr:0 dw:0 dr:45542488 al:0 bm:2779 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

server2:~ # cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: a1b440e8b3011a1318d8bff1bb7edc763ef995b0 build by lmb@hermes, 2009-02-20 13:35:59
 0: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r—
    ns:0 nr:44887544 dw:44887544 dr:0 al:0 bm:2740 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0  

Selanjutnya pada server1 kita akan membuat file system. Cukup dilakukan di server1, karena server2 akan mengikuti:

  • server1:~ # drbdadm primary all
  • server1:~ # mkfs.ext3 /dev/drbd0

sekarang kita siapkan directory untuk mysql di server1

mkdir /data-mysql

mount -t ext3 /dev/drbd0 /data-mysql

mv /var/lib/mysql /data-mysql

ln -s /data-mysql/mysql /var/lib/mysql

umount /data-mysql

di server2:

 mv /var/lib/mysql /tmp

 ln -s /data-mysql/mysql /var/lib/mysql

Edit file /etc/ha.d/haresources di server1 dan server2 menjadi

server1 IPaddr::10.8.2.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data-mysql::ext3 named dhcpd apache2 mysql

Selanjutnya tinggal memanggil drbd dan heartbeat di runlevel 3 dan 5 setiap kali server di boot. Saya sendiri di openSUSE mmenggunakan /etc/init.d/after.local untuk memanggil drbd dan heartbeat. Ini hanya untuk memastikan bahwa drbd dan heartbeat dipanggil terakhir kali setelah semua service yang lain berjalan. Cukup buat file /etc/init.d/after.local dan isikan misalnya:

#!/bin/sh

sleep 1
rcdrbd start
sleep 2
rcheartbeat start

Sekarang kita tinggal mengujinya. Apakah service-service yang didefinisikan di /etc/ha.d/haresources akan berpindah ke server2 jika server1 dimatikan. Tahu kan cara menguinya? Kira-kira sama dengan cara menguji heartbeat di atas.

Have a lot of fun