09.16.06
Tutorial RPM
Untuk menginstall program pada distro yang berbasis Rpm anda membutuhkan file yang berekstensi *.rpm (untuk menginstall program pada distro yang menggunakan dpkg dibutuhkan file berekstensi *.deb) misal anda ingin menginstall file powermanga-0.80-1.fc5.i386.rpm. maka perintah yang harus anda ketikkan adalah “rpm -ivh powermanga-0.80-1.fc5.i386.rpm”. pada user root. Untuk melihat semua software yang telah terinstall pada komputer anda gunakan perintah “rpm -qa”. Jika anda ingin mengetahui apakah suatu software tertentu telah terinstall atau tidak gunakan perintah “rpm -qa | grep <nama program>”, misal untuk mengetahui apakah software powermanga telah terinstall dengan benar maka gunakan “rpm -qa | grep powermanga”. Untuk menghapus program gunakan perintah “rpm -e <nama program>”, jika ingin menghapus powermanga maka perintahnya menjadi “rpm -e powermanga”.
Selanjutnya dengan rpm anda juga bisa mengetahui program apa saja pada yang dependencynya(software yang dibutuhkan oleh software yang lain) kurang. Hal ini terjadi jika saat anda menginstall program anda menggunakan opsi “–nodeps” yang mengakibatkan rpm tidak akan mengecek dependency dari software yang akan diinstall. Untuk mengatasi ini gunakan perintah “rpm -Va –nofiles”. Perintah ini akan mencetak ke layar software yang dependencynya kurang dan software software apa saja yang ia butuhkan.
Kadang kadang seorang pengguna Linux terutama seorang programmer/developer saat menginstall distro tertentu, memilih untuk menginstall semua library(pustaka) yang disediakan. Padahal tidak semua library ini dibutuhkan, untuk mengetahui library mana saja yang tidak dibutuhkan saya punya programnya. Prinsipnya sederhana, cuman mengecek setiap program yang ada pada database Rpm lalu akan mengecek apakah software ini butuh library atau tidak.
download kode dumplibraray.c , untuk menggunakannya kompile terlebih dahulu dengan perintah
[fuad@fuad cpp]$ gcc dumplibrary.c -lrpm -o dumplibrary.exe
perintah di atas akan mengasilkan file “dumplibaray.exe”, untuk menjalankanyya ketikkan
[fuad@fuad cpp]$ ./dumplibrary.exe
Kepastian yang bernama mati
“Jangan takut mati karena pasti terjadi, tapi takutlah akan kehidupan sesudah kematian”
09.09.06
RPM API Pada Java Dengan JNI
Pada Tutorial ini saya akan membahas bagaimana membuat program Java yang mencetak ke konsole dependency dari suatu paket RPM yang telah terinstall sebelumnya.
Catatan:
Tutorial ini dibuat dan dicoba pada sistem operasi linux, dengan Java terinstall pada /usr/java/jdk1.5.0_06/ dan direktori kerja pada /home/fuad/java/JNI
Langkah 1:
Ketiklah kode di bawah ini dan simpan pada file dengan nama RpmProject.java:
public class RpmProject {
public native static Object[] getDependencies();
static{
System.loadLibrary(“RpmProject”);
}
public static void main(String[] args) {
Object [] str=RpmProject.getDependencies();
for(int i=0; i<str.length; i++)
System.out.println(str[i]);
}
}
metode getDescriptionAndDependencies() adalah metode yang akan diimplementasikan dengan cara native dengan menggunakan C/C++. Untuk memberitahu ini pada kompiler maka kita memberinya keyword native.
static{
System.loadLibrary(“RpmProject”);
}
kode di atas digunakan untuk memuat(menload) library yang bernama(“libRpmProject”, perhatikan library yang dimuat adalah libRpmProject.so/.dll bukan RpmProject.so/.dll) Library yang dimuat adalah library yang berisi implementasi dari method native, dalam tutorial ini adalah method getDescriptionAndDependencies().
Langkah 2:
Kompile kelas di atas
[fuad@fuad JNI]$ javac RpmProject.java
Selanjutnya buat file header kelas di atas dengan
[fuad@fuad JNI]$ gjnih RpmProject, jika menggunakan java GNU atau
[fuad@fuad JNI]$ javah RpmProject, jika menggunakan Java Sun.
Hal yang perlu diperhatikan di sini adalah yang menjadi parameter adalah class pada java(tidak berekstensi) bukan kode sumber(*.java).
langkah di atas akan menghasilkan header “RpmProject.h”.
Langkah 3:
Buka file “RpmProject.h” tambahkan variabel pada kedua parameter, dengan nama terserah anda.
file awal “RpmProject.h” :
/* DO NOT EDIT THIS FILE – it is machine generated */
#include <jni.h>
/* Header for class RpmProject */
#ifndef _Included_RpmProject
#define _Included_RpmProject
#ifdef __cplusplus
extern “C” {
#endif
/*
* Class: RpmProject
* Method: getDescriptionAndDependencies
* Signature: ()[Ljava/lang/Object;
*/
JNIEXPORT jobjectArray JNICALL Java_RpmProject_getDependencies
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
file "RpmProject.h" setelah diedit:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class RpmProject */
#ifndef _Included_RpmProject
#define _Included_RpmProject
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: RpmProject
* Method: getDescriptionAndDependencies
* Signature: ()[Ljava/lang/Object;
*/
JNIEXPORT jobjectArray JNICALL Java_RpmProject_getDependencies
(JNIEnv *env, jclass cl);
#ifdef __cplusplus
}
#endif
#endif
Langkah 4:
Buat implementasi dari file header di atas dengan nama RpmProject.c#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <rpm/rpmlib.h>
#include <rpm/rpmts.h>
#include <rpm/rpmdb.h>
#include <rpm/rpmds.h>
#include "RpmProject.h"
JNIEXPORT jobjectArray JNICALL Java_RpmProject_getDependencies (JNIEnv *env, jclass cl){
rpmdb * pdb;
rpmReadConfigFiles(NULL,NULL);
printf("Config files read \n");
int dbStatus = rpmdbOpen("", &pdb, O_RDONLY, 0644);
if (dbStatus) {
// error opening
printf("Error on opening RPM Database: (%d) %s\n", rpmErrorCode(), rpmErrorString());
} else {
printf("RPM Database opened!\n");
}
rpmdbMatchIterator mi = rpmdbInitIterator(pdb, RPMDBI_PACKAGES, NULL, 0);
rpmdbSetIteratorRE(mi,RPMTAG_NAME, RPMMIRE_DEFAULT, "gstreamer");
printf("Iterator initialized!\n");
Header header;
int i;
jobjectArray array;
while (header = rpmdbNextIterator(mi)) {
rpmds Rpmds=rpmdsNew(header, RPMTAG_REQUIRENAME , (RPMSENSE_EQUAL|RPMSENSE_LESS));
jstring kal=(*env)->FindClass(env,"java/lang/String");
array = (*env)->NewObjectArray(env,rpmdsCount(Rpmds),kal,NULL);
for(i=0; i<rpmdsCount(Rpmds); i++){
rpmdsNext(Rpmds);
(*env)->SetObjectArrayElement(env, array, i, (*env)->NewStringUTF(env,rpmdsN(Rpmds)));
}
rpmdsFree(Rpmds);
}
rpmdbFreeIterator(mi);
printf("Iterator Finished!\n");
rpmdbClose(pdb);
printf("RPM Database closed!\n");
return array;
}
Penjelasan
rpmReadConfigFiles(NULL,NULL);, berfungsi membaca konfigurasi dari database rpm yang ada pada sebuah sistem/komputer. kode ini wajib adanya.
int dbStatus = rpmdbOpen("", &pdb, O_RDONLY, 0644); berfungsi membuka database RPM
rpmdbMatchIterator mi = rpmdbInitIterator(pdb, RPMDBI_PACKAGES, NULL, 0); berfungsi mengambil semua paket/software yang ada pada database.
rpmdbSetIteratorRE(mi,RPMTAG_NAME, RPMMIRE_DEFAULT, "gstreamer"); berfungsi memfilter/menyaring paket yang telah dimuat tadi berdasarkan nama paket(RPMTAG_NAME). Nama paket yang digunakan di sini adalah "gstreamer".
jobjectArray array; adalah variabel khsusus pada JNI. untuk komunikasi antara Java dengan C/C++ digunakan suatu variabel khusus (http://java.sun.com/developer/onlineTraining/Programming/JDCBook/index.html). Karena pada metode getDependencies pada kelas Java tadi meminta mengembalikan nilai yag bertipe array objek, maka nilai yang dikembalikan pada fungsi ini harus variabel JNI yang bertipe jobjectArray.
rpmds Rpmds=rpmdsNew(header, RPMTAG_REQUIRENAME , (RPMSENSE_EQUAL|RPMSENSE_LESS));
Kode di atas mengambil semua dependency dari sebuah paker berdasarkan nilai headernya
jstring kal=(*env)->FindClass(env,"java/lang/String");
Memanggil kelas pada java yang akan digunakan pada pengembalian nilai nanti.
array = (*env)->NewObjectArray(env,rpmdsCount(Rpmds),kal,NULL);
Membuat array objek baru yang berisi string(sesuai tipe variabel "kal") dengan panjang sebanyak rpmdsCount(Rpmds)
for(i=0; i<rpmdsCount(Rpmds); i++){
rpmdsNext(Rpmds);
(*env)->SetObjectArrayElement(env, array, i, (*env)->NewStringUTF(env,rpmdsN(Rpmds)));
}
Untuk setiap dependency yang dimuat akan dimasukkan ke dalam variabel array pada indeks i.
Langkah 5:
Kompile file di atas
[fuad@fuad JNI]$ gcc -c -fPIC -I/usr/java/jdk1.5.0_06/include/ -I/usr/java/jdk1.5.0_06/include/linux/ RpmProject.c
hasil dari kompilasi di atas adalah file RpmProject.o
Selanjutnya buat library libRpmProject.so dengan cara
[fuad@fuad JNI]$ gcc -shared -o libRpmProject.so RpmProject.o -lrpm -lrpmdb
hasil dari kompilasi di atas adalah file libRpmProject.so
Langkah 6:
Setelah kelima langkah di atas berhasil maka kelas java “RpmProject” sudah bisa dijalankan
[fuad@fuad JNI]$ java RpmProject
jika saat menjalankan anda mendapatkan error:
Exception in thread “main” java.lang.UnsatisfiedLinkError: no RpmProject in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)
at RpmProject.<clinit>(RpmProject.java:10)
maka anda harus terlebih dahulu mengeset variabel LD_LIBRARY_PATH yang menunjuk file libRpmProject.so.
[fuad@fuad JNI]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/fuad/java/JNI/
H+7 KKN
Hari seninku diisi dengan pencarian ide tugas akhir, niat awalnya mau kuliah tapi berhubung kesehatan badan kurang mendukung terpaksa seharian di kamar depan komputer, bosan juga tapi asyik.
Hari selasa, ada wawancara dengan calon pemandu Aai(Asistensi Agama Islam) dilanjutkan dengan kunjungan ke pameran buku islami. Dari hasil kunjungan berhasil kubawa pulang tiga buku yang sudah lama kucari(Alhamdulillah) dan satu pengetahuan baru, bahwa ternyata rata rata tafsir Qur’an yang dijual di Indonesia dijual satu paket(Juz 1 sampai Juz 30) dengan harga mendekati Satu Juta Rupiah. Kalau harganya kayak gitu mana bisa dibeli sama kalangan bawah.
Di hari yang sama aku membaca salah satu artikel di internet yang membahas tentang persekongkolan Barat, Israel dan Kalangan Syiah(golongan dalam islam) untuk membuat negara persia raya di Timur tengah. Dalam artikel itu disebutkan juga bahwa perang antara Hizbullah(milisi Syiah) dengan Israel adalah perang sandiwara dan negara yang selama ini dipublikasi oleh media bertentangan dengan AS seperti Iran dan Suriah. Sebenarnya bersekongkol dengan AS dalam masalah ini. Betul betul membingungkan, apa ini yang betul betul terjadi atau ini hanya politik adu domba Amerika untuk memecah belah kaum muslimin.
(” Ya ALLAH tampakkanlah bagi saya hal hal yang baik di mata saya menjadi baik dan berilah kekuatan untuk mengikutinya dan tampakkanlah hal hal yang buruk di mata saya menjadi buruk dan berilah kekuatan pada hamba mu ini untuk menghindarinya”)
Hari Rabu ikut rapat persiapan Ramadhan di masjid dekat kos-kosan ku. Aku ambil bagian jadi seksi ibadah, tugasnya sederhana saja mempersiapkan shalat lima waktu, shalat tarawih, dan tadarusan Al Quran setiap hari selama sebulan penuh. Lumayan investasi akhirat. Ya Ramadhan penghulu dari segala bulan beberapa minggu lagi mampir, manfaatkan betul betul peluang emas ini untuk meningkatkan kualitas ketakwaan kita agar di akhirat kelak kita menjadi orang orang yang beruntung. Sejenak mari kita renungkan betapa kita harus bersyukur karena bertemu kembali bulan Ramadhan yang penuh ampunan.
Hari kamis, Jumat nemu fenomena aneh, dari beberapa blog teman Kkn ku yang kubaca rata rata curhat kalo mereka mengalami Cinlok(Cinta lokasi) , Ha…ha…ha…
Hari Sabtu, nulis Tutorial Penggunaan RPM API di JAVA menggunakan JNI.
09.02.06
Selamat Tinggal KKN
Akhirnya Kkn tematik yang saya jalani berakhir juga, dua bulan berlalu terasa sangat cepat. Alhamdulillah semua program kerja yang kami rencanakan berjalan dengan cukup baik, walaupun masih banyak kekurangan di sana sini. Untuk program kerja sub unit ku pembuatan data centre Alhamdulillah tidak molor seperti yang diperkirakan di awal, Aku baru tau ternyata project leader data centre ini awalnya juga tidak yakin kalau proyek ini bakal selesai dia ngomong pas penarikan Kkn kemarin, ku kira cuma aku yang tidak yakin. Ternyata positif thinking itu betul betul berguna, yang pasti jangan berprasangka negatif.
” Hai orang yang beriman, jauhilah prasangka karena sesungguhnya sebagian dari sangkaan sangkaan itu adalah dosa ” (QS. al Hujurat:12)
Tim KKN BID 2006
Tim Developer
Sahal : Visioner, Punya kemampuan melihat peluang sekecil apapun. Kalau di dunia sepak bola Big Boss developer ini seperti Andrea Pirlo di ACMilan atau Deco di Barcelona, Walaupun kadang kadang punya perbedaan dengan saya(ni orang penggemar Gnome(Window Manager di Linux) aku penggemar KDE, Dia .NET maniak, saya Java maniak). Tapi perbedaan di antara kita memberi warna di kehidupan sehingga dunia tetap berputar mengiringi zaman. Lihat saja di sekitar kita alam berpadu berjuta ragam, saling berkait menyatu diri atas sunnah Ilahi.
Wim : Penanggung jawab dokumentasi data centre, penulis handal, Bersemangat di manapun berada, Selalu berprasangka baik, Pandai bergaul (ini kayaknya bakat alam), dan teman diskusi yang asyik.
Toni : Programmer modul jalan, super baik, Gitaris dan Atlet yang serba bisa, mirip Gus Dur soalnya kadang kadang bikin komentar yang bikin heboh.
Azis : Programmer modul sekolah, baik banget(boncengin aku dua bulan penuh, man), Selalu ingin tahu, kadang agak pemalu tapi kadang juga bisa jadi gila.
Agro : Programmer modul organisasi, Guru dari segala guru, Master dari segala master, Gro makasih ilmunya.
Dimaz : Programmer modul pasar, Ketua angkatan ilkom 2003, Punya jiwa pemimpin, religius, Peduli pada kepentingan orang.
Sukma : Programmer modul organisasi, orangnya humoris suka sekali ketawa, dijuluki miss developer, pokoknya kalo dekat dia dijamin bakal ketawa melulu.
Tri : Programmer modul industri dan rumah, Tri dan saya punya situs wajib yang sama(infopalestina.com, hari gini ga peduli sama palestina !), Saleh, Rendah hati, Ayo semangat Tri, istiqamah di Jalannya yang lurus.
Joshua : Programmer modul penduduk. Orangnya susah ditebak, aku kira dulunya si Joshua ini gak bisa melucu, tapi ternyata .Story teller yang baik, walaupun dari luar agak seram tapi dia sebenarnya hatinya baik.
Jo tetap semangat, wikipedia mania.
Arifin: Database dan System Administrator server lapis. cool, pendiam, baik, Anggota developer yang paling senang nongkrong di posko.
Tim Maintenace
Syafiq : Boss Maintenance, dijuluki kompeni soalnya ada keturunan luar negeri, katanya sih orangya lucu, punya integritas tinggi.
Iriano : Walaupun anak ilkom juga tapi aku jarang liat ni orang, Jago Hardware dan jaringan komputer, baik, suka nolongin orang.
Ridho : Master web, waktu awal awal dia bantuin aku ngatasi masalah opera yang bandel, baik, Langit terbuka luas, kenapa tidak dengan pikiranmu, dan jangan lupa hati juga harus terbuka dan bersih. Sering sering ngunjungu blog ku ya, biar hitsnya nambah.
Arnanto : Aku kenalnya pertama kali di SIC, “mas ngopi flash disk mas”, oo iya sama sering ketemu di warung lotek dekat kos2an ku, yang pasti orangnya baik dan humoris.
Wib : Teman sekelasku, jagoan teka teki, tebak tebakan dan sejenisnya. Lucu tapi bisa juga serius.
Aufa : Modista, Keren, pesanku buat Aufa, Temukan pusat orbit dan garis edarmu niscaya hidupmu akan lebih indah dan bernilai(kalau mau referensi liat di buku ESQ Ary Ginanjar Agustian).
Andy : Cool, pendiam, katanya mirip Ariel, Sebenarnya dah sering liat tapi baru sekarang akarabnya.
Bayu : Jiwa pemimpinnya keliatan sekali, Kadang kadang ketemu di angkringan dekat kosan ku, Blogger(kapan kapan tukaran link ya, biar blog kita ratingnya nambah di Google ).
Arif : Ustadz kita, aku liat liat dia punya bakat nulis, tulisan di blognya menyentuh, Aktivis islam, rif istiqamahlah pada tali agamanya yang lurus.
Iim : Selama aku satu tim sama dia, selalu jadi sekertaris, memang bakat alam mungkin ya. baik, saleh, pendiriannya kuat, Istiqamah, Sudah menemukan pusat orbit dan garis edar hidupnya.
Laksmi : Dengan iim bagai pinang di belah dua, Jagoan flash, Jagoan bahasa inggris, saleh, Laks kalo aku punya salah dimaafkan ya ! .
Tim Sosialisasi Migrasi
Devi: Bos S/M, Penanggung jawab data penduduk
Juwita : Walaupun satu prodi, tapi aku akrab dengan juwita baru pas kkn ini, Aku liat juwita itu ulet pantang menyerah, pas entry data kemarin dia yang datanya paling banyak tapi dia asyik asyik aja.
Hanna : Sama Hanna setali tiga uang dengan juwita, akrabnya baru di kkn ini.
Hakim : Kormanit kita, Jiwa kepemimpinnya keliatan sekali, punya kharisma, pemimpin yang patut diteladani terutama disiplinnya
Agung : Alias Bowo, anak statistika tapi anehnya jarang ketemu walaupun satu Jurusan.
Indra : Anak Fisipol, Sepupu Tri, Salah satu korban kampanye Igo Agro.
Mbak Nyunyu: Kormahur, tapi aku hura huranya jarang ikut, teman mbak Nita, princess frog( baru dengar yang ada kan pangeran kodok)
Tya : Makasih komputernya ya, dipinjamin dua bulan. sorry ndak pernah dibersihin. Kapan kapan coba pakai Linux asyik, nggak mbajak lagi.
Mutiara : Penggemar buku, tiada hari kkn tanpa baca, selama kkn habisin buku berapa?
Widya : Pemenang kompetisi entry data kkn, dikit dikit bisa bahasa makassar(asyik juga klo ngobrol sama dia serasa pulang ke rumah)
Mbak Nita: Partnernya Si Jay, Penanggung jawab entry data pasar, suka nolongin orang, supel, salah satu dari sedikit wanita penggemar bola. Yang paling kuingat dia suka suplay makanan buat developer(sering sering aja) kayaknya juga koki handal dan yang khas gaya jaket diikat di pinggang.
Insyaallah ukhuwah di antara kita tidak akan pernah terputus.
” Siapa yang mau agar umurnya panjang dan rizkinya luas, hendaklah ia menghubungkan silaturahmi”
(HR. Bukhari)




