TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
sudo
Memberi Hak Root ke User dengan sudo Di Linux, sebagai root, Anda bisa memberikan sebagian hak Anda kepada user biasa. Dengan demikian, user biasa tersebut bisa menjalankan perintah yang diizinkan sebagai root. Memudahkan delegasi tugas dan meningkatkan keamanan!
D
i Linux, pengaturan keamanan multiuser berdasarkan adanya pembagian root dan user biasa memang membantu mengurangi banyak gangguan keamanan. Bahwa setiap user disarankan untuk login sebagai user biasa sehingga kalaupun terjadi gangguan keamanan, yang terkena efeknya hanya user tersebut, memang harus diakui lebih unggul dibandingkan dengan Windows XP misalnya, yang mana sebagian besar pengguna login sebagai anggota group Administrators. Hal ini pulalah yang membantu Linux lebih tahan terhadap serangan virus dan gangguan keamanan lain. Namun, sistem seperti ini harus diakui juga memiliki keterbatasan, atau lebih tepatnya, lebih kaku. Di Windows, apabila ingin membakar CD misalnya, setelah menginstal program yang dibutuhkan, user bisa langsung membakar CD tersebut. Begitupun dengan instalasi program. User bahkan bisa melakukan instalasi program tanpa masalah berarti. Tentu saja ini terlepas dari akibat instalasi software sembarangan yang berakibat pada gangguan stabilitas dan keamanan sistem. Bandingkan dengan kondisi di Linux. Untuk menjalankan program cdrecord saja, root harus campur tangan. User biasa mau meminta bantuan root untuk hal demikian. Begitupun juga dengan instalasi program. Hanya root yang bisa. Tugas root menjadi begitu rumit. Semua harus root. Untunglah, semua kekakuan tersebut menjadi tidak berlaku lagi semenjak hadirnya sudo di dunia UNIX/Linux. Dengan adanya sudo, kita bisa mendelegasikan sebagian fungsi administrasi sistem kepada user biasa. Jadi, andaikata kita memiliki 10
50
INFOLINUX 06/2005
user dan dua di antaranya bisa dipercaya menjadi admin untuk tugas tertentu, Anda bisa mendelegasikan tugas instalasi program kepada user pertama, dan tugas lain kepada user kedua misalnya. Anda juga bisa memberikan hak untuk mengakses program cdrecord (dan device CD writer) kepada setiap user biasa.
demikian, diharapkan tidak akan ada user yang ‘lupa logout’ ketika sedang berada dalam sesi sudo. sudo datang dengan file konfigurasi, yaitu file /etc/sudoers yang dapat digunakan untuk mengontrol semua hak yang diberikan.
Kenapa harus sudo? sudo Sebenarnya, apakah sudo dan apa saja fitur yang ditawarkan? Kata sudo berasal dari singkatan superuser do, dan merupakan program yang mengizinkan system administrator (sysadmin) untuk memberikan hak tertentu kepada satu atau lebih user (atau group) untuk menjalankan sebagian (atau semua) perintah sebagai root (ataupun user lain apabila diinginkan). Tentu saja, untuk tetap menjaga keamanan, semua aktivitas ketika user menjadi root akan dilog. sudo bekerja pada basis per perintah. Bahkan, termasuk argumen dan opsi yang diizinkan untuk perintah tersebut. Berikut ini adalah rangkuman fitur-fitur sudo: Kemampuan untuk membatasi perintah apa saja yang boleh dilakukan, per host. sudo akan merekam semua aktivitas dalam file log, sehingga nantinya akan memudahkan audit. sudo mempergunakan sistem tiket untuk izin menjalankan perintah sebagai root. Pada saat user menjalankan sudo dan memasukkan password yang benar, waktu 5 menit (bisa diubah) akan diberikan kepada user tersebut untuk menjadi root. Setiap perintah sebagai root yang dijalankan oleh user akan memperbaharui waktu 5 menit tersebut. Dengan
www.infolinux.web.id
Dengan adanya mekanisme seperti ini, setiap user bisa dibatasi, administrasi sistem bisa didelegasikan, dan kita tidak harus memberikan password root kita kepada rekan kerja hanya karena kita tidak berada di tempat dan hak root dibutuhkan pada saat itu (pernah Anda alami?). Dengan fasilitas logging dan hak akses yang dibuat sedemikian teliti, sebenarnya tidak ada lagi alasan untuk tidak menjalankan sudo di lingkungan komputasi besar yang melibatkan banyak user dan admin. Dengan sudo pula, kita bisa mengimplementasikan group semacam PowerUsers di Windows yang dapat memiliki hak administratif tertentu. Kita bisa membuat group semacam itu di mana semua anggota group tersebut bisa menginstal program, shutdown dan melakukan satu dua hal lain, misalnya.
Konsekuensi menggunakan sudo Ketika kita menggunakan sudo yang telah dikonfigurasi dengan benar, user dapat menjadi root (atau user lain sesuai konfigurasi) dan menjalankan berbagai program dengan memberikan pola perintah seperti berikut ini: $ sudo
[parameter]
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
sudo
Konsekuensi sebenarnya dari menggunakan sudo adalah audit. Mau tidak mau, Anda harus membuat script untuk memudahkan auditing di syslog Anda, misalnya. Ketika user menggunakan sudo, di syslog akan terdapat entri yang mirip-mirip dengan contoh berikut: Feb 9 18:02:50 koljeng sudo: koljeng : TTY=pts/25 ; PWD=/ home/koljeng ; USER=root ; COMMAND=/sbin/yast -i
Password yang dimasukkan ketika menjalan sudo Ketika user menjalankan perintah menggunakan sudo, user akan diminta untuk memasukkan password. Anda memiliki dua pilihan untuk masalah password ini. Yang pertama adalah mengizinkan user untuk memasukkan password dirinya sendiri, dan apabila sukses, maka sudo akan menjalankan perintah yang diinginkan. Cara yang kedua adalah dengan meminta user untuk memasukkan password user yang ingin digunakan (dalam hal ini, karena ingin menjadi root, maka harus memasukkan password root). Yang lebih sering digunakan adalah cara yang pertama, walau Anda bebas untuk menggunakan cara kedua.
Walau demikian, di dunia Linux, sudo adalah salah satu (dan mungkin satu-satunya) yang paling banyak digunakan.
melakukan shutdown kepada setiap user yang menjadi anggota group users: %users -h now
localhost=/sbin/shutdown
Integrasi LDAP Seperti telah disinggung sebelumnya bahwa /etc/sudoers memungkinkan pemberian hak untuk beberapa host secara tersentral, fasilitas ini dari hari ke hari semakin kurang populer karena fungsi tersebut bisa ditangani oleh LDAP, yang sepertinya memang lebih cocok untuk kebutuhan tersebut. Tulisan ini tidak akan membahas penggunaan LDAP.
Beberapa contoh penggunaan Berikut ini, kita akan membahas beberapa contoh penggunaan paket sudo. Yang pertama adalah mengedit file /etc/sudoers. Anda tidak disarankan untuk mengedit langsung file ini. Sebagai gantinya, gunakanlah program visudo yang datang bersama paket sudo. Program ini harus dijalankan oleh root. Contoh: # visudo
Apabila Anda tidak melakukan perubahan, maka setelah keluar, Anda akan menjumpai pesan berikut ini: # visudo visudo: sudoers file unchanged.
Apabila ingin memberikan hak kepada user koljeng dan group users, maka Anda juga bisa menambahkan pada bagian pertama, usernames/group dipisahkan oleh koma, seperti contoh berikut: koljeng,%users ALL=(root) /sbin/ yast -i
Contoh lain yang mungkin berguna adalah memberikan hak kepada user untuk melakukan mount/unmount cdrom seperti contoh berikut: %users ALL=/sbin/mount /cdrom,/ sbin/umount /cdrom
Di dalam file ini, Anda juga bisa memberikan alias untuk perintah, user, dan lain sebagainya. Contoh yang paling baik adalah ketika Anda mengizinkan user tertentu untuk menjalankan beberapa modul YaST, atau memberikan hak untuk menjalankan semua shell. Tentu saja, daripada menuliskan satu per satu perintah YaST lengkap, Anda dapat membuat alias. User juga dapat dituliskan menggunakan alias. Sebagai contoh:
Proyek sejenis Sudo bukanlah satu-satunya program yang digunakan untuk kebutuhan delegasi administrasi sistem seperti ini. Berikut ini adalah beberapa program free lain yang fungsinya mirip dengan sudo: SUS (http://pdg.uow.edu.au/sus). Super (ftp://ftp.ucolick.org/pub/users/will/). runas, bagian dari proyek Titan (http:// www.fish.com/titan). Erni (http://www.brandxdev.net/), turunan dari runas priv (http://www.usenix.org/publications/ library/proceedings/lisa96/full_papers/ bchill/bchill.txt). calife (http://frmug.org/mutt/calife/). osh (http://www.engarde.com/~mcn/osh. html). ssu (http://www.usenix.org/publications/ library/proceedings/lisa98/full_papers/ thorpe/thorpe_html/thorpe.html). su1 (http://www.pcug.org.au/~dbell).
Yang kedua, kita akan memahami format file sudoers. FOrmat file ini tidak sesederhana apa yang terlihat. Apabila membaca dokumentasi sudoers(5), Anda bisa menemukan betapa rumit dan fleksiblenya file ini. Namun, kita akan membuatnya terlihat lebih sederhana. Berikut ini adalah format umum konfigurasi sudoers: usernames/group servername = (usernames command can be run as) command
Dengan demikian, apabila Anda ingin memberikan user koljeng seperti ilustrasi sebelumnya sehingga bisa menjalankan /sbin/yast -i, berikanlah baris seperti ini: koljeng ALL=(root) /sbin/yast -i
Anda dapat menambahkan perintah yang diizinkan dengan dipisahkan oleh tanda koma. Contoh berikut akan memperlihatkan bagaimana memberikan hak untuk
www.infolinux.web.id
Cmnd_Alias
SHELLS = /usr/bin/ sh, /usr/bin/csh, \ /usr/bin/ksh, /usr/ local/bin/tcsh, \ /usr/bin/rsh, /usr/ local/bin/zsh
User_Alias
ADMINS = koljeng, %admin
Untuk lebih jelas tentang alias, Anda selalu bisa merujuk ke halaman manual sudoers. Setelah file sudoers selesai didefinisikan, user segera dapat memanfaatkan sudo sesuai hak yang diberikan. Dengan berakhirnya pembahasan tentang memahami format sudoers ini, berakhir pula artikel ini. Selamat mencoba dan menerapkan sudo! Noprianto ([email protected])
INFOLINUX 06/2005
51
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
Wx dan Perancangan User Interface Bagian 2 dari 2 Artikel Pada bagian 1 yang lalu, kita telah membahas tentang i18n pada Wx. Di edisi lanjutan ini, kita akan membahas pembuatan tip of the day dan penggunaan form MDI.
S
etelah membahas tentang bagaimana menyajikan berbagai bahasa dalam satu program, kita akan melanjutkan dengan bagaimana menyediakan tip of the day pada program Anda, serta bagaimana memanfaatkan form MDI. Sebagian contoh program yang dipergunakan akan merujuk kepada contoh program sebelumnya (yang mungkin telah Anda modifikasi).
Tip of the day Banyak aplikasi ini hadir dengan tip penggunaan yang umum disebut sebagai tip of the day. Bahwa tip ini dibaca atau tidak oleh user, harus diakui bahwa penggunaan tip ini sudah merupakan kelengkapan dari sebuah aplikasi yang memperhatikan kemudahan penggunaan oleh user. Bagi Anda yang memiliki waktu dan ingin melakukannya, tip of the day tentu saja dapat dengan mudah diimplementasikan menggunakan satu form, satu text control dan beberapa button. Dengan menggunakan double linked list, kita dapat mengimplementasikan penampilan tip-tipnya. Namun, apabila Anda mempergunakan Wx, maka pengimplementasian sendiri sudah tidak diperlukan lagi karena tip of the day juga telah disediakan oleh Wx. Luar biasa sekali bukan? Cara penggunaannya juga sangat mudah. Kita akan melengkapi aplikasi helloworld sebelumnya dengan implementasi tip of the day.
Langkah 1: mempersiapkan tip Buatlah sebuah file text dan simpanlah sebagai tips.txt. Di dalam file ini, kita akan menuliskan masing-masing tip secara baris
52
INFOLINUX 06/2005
per baris. Berikut ini adalah contoh tips.txt penulis: ini ini ini ini ini
adalah adalah adalah adalah adalah
tip tip tip tip tip
pertama kedua ketiga keempat kelima
switch (lng) { case 0: locale. Init(wxLANGUAGE_DEFAULT); break; case 1: locale. Init(wxLANGUAGE_INDONESIAN); break; };
Langkah 2: memodifikasi helloword.cpp Setelah file tip kita miliki, kita akan mengubah helloword.cpp untuk mengimplementasikan tip of the day. Penambahan kode akan disajikan dalam huruf tebal. #include #include #include #include
<wx/wx.h> <wx/tipdlg.h> “helloworld.h” “MainFrame.h”
locale.AddCatalog(_ (“helloworld”)); wxMainFrame *frame = new wxMainFrame (_(“Hello World”), wxPoint (50,50), wxSize (200,200), locale); frame -> Show (TRUE); SetTopWindow (frame);
IMPLEMENT_APP (wxHelloWorld) bool wxHelloWorld :: OnInit () { const wxString langs[] = { _(“(System default)”), _(“Bahasa Indonesia”), };
wxTipProvider *tip = wxCreateFileTipProvider (_ (“tips.txt”), 0); bool showStart = wxShowTip (frame, tip); delete tip; return TRUE; };
SetExitOnFrameDelete (FALSE); int lng = wxGetSingleChoiceIndex(_ (“Please choose language:”), _(“Language”), WXSIZEOF(langs), langs); SetExitOnFrameDelete(TRUE);
www.infolinux.web.id
Penjelasan: dengan menambahkan penggunaan header tipdlg.h, kita sudah bisa membuat tip of the day dengan mudah (class wxTipProvider). Dalam penggunaan tip of the day, kita juga dapat mempergunakan internationalization. Namun, hal ini membutuhkan banyak usaha dalam penyajian konten. Dari
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
sisi pemrograman, cara yang digunakan tidak banyak berbeda dengan contoh sebelumnya.
Form MDI Pemilihan penampilan window juga merupakan hal yang penting dalam perancangan user interface. Apabila program kita memiliki kemampuan untuk menampilkan berbagai dokumen sekaligus, kita harus memperhatikan cara penampilannya. Apakah masingmasing dokumen dibuka dalam window terpisah, atau menggunakan pendekatan Multiple Document Interface (MDI). Terkadang, apabila jumlah window yang dibuka terlalu banyak, user bisa saja menganggap suatu program kompleks dan membingungkan. Namun, penggunaan MDI juga terkadang memiliki isu soal mudahnya switching antardokumen (maka, sediakanlah shortcut yang memudahkan. Shortcut default seringkali menyebalkan). Masalah ini bukanlah hal sepele. Pemikiran akan penyajian sistem penampilan dokumen ini juga merupakan salah satu alasan hadirnya tab browsing. Dulu, untuk membuka satu halaman web, kita akan membuka window baru. Namun, karena jumlah window yang dibuka bisa saja menjadi sangat banyak, maka desktop akan terlihat sangat tidak rapi. Terutama apabila Anda melakukan browsing sambil bekerja. Switch antaraplikasi juga akan menjadi susah. Dengan adanya tab browsing, maka desktop akan terlihat lebih rapi. Ketika Anda memutuskan akan mempergunakan MDI, perhatikan juga konten yang akan ditampilkan. Apabila konten terlalu berat, usahakan untuk tidak mempergunakan MDI. Bisa-bisa, aplikasi tidak mampu. Ketika diseparasi dalam aplikasi terpisah (bukan sekadar group proses), maka risiko crash karena tidak mampu akan lebih kecil. Menggunakan wx, form MDI dapat diterapkan dengan cepat. Contoh aplikasi kita kali ini adalah aplikasi sederhana satu form, dengan sebuah menu, sebuah text control dan sebuah status bar. Ketika user memilih untuk membuat window baru dengan mengakses menu yang bersesuaian, maka window baru akan ditampilkan. Pada saat window baru dibuat, sebuah menu baru khusus untuk penanganan child win-
dow akan ditambahkan. Pengguna selanjutnya dapat pula mengubah title window baru ataupun menutup window baru tersebut. Program ini masih belum lengkap dan hanya menunjukkan kemampuan wx untuk bekerja dengan MDI. Aplikasi kita, sebut saja hello world MDI, akan terdiri dari file-file sebagai berikut ini: helloword.cpp sebagai tubuh class dari aplikasi. helloword.h sebagai deklarasi class dari aplikasi. MainFrame.cpp sebagai tubuh class frame utama. MainFrame.h sebagai deklarasi class frame utama. ChildFrame.cpp sebagai tubuh class window anak. ChildFrame.h sebagai deklarasi class window anak. makefile.unx sebagai makefile.
class wxHelloWorld : public wxApp { public: virtual bool OnInit (); protected: wxLocale locale; };
DECLARE_APP (wxHelloWorld) #endif // HelloWorld_H
Berikut ini adalah isi dari helloword. cpp: #include <wx/wx.h> #include “helloworld.h” #include “MainFrame.h”
Berikut ini adalah isi dari helloword.h: #ifndef HelloWorld_H #define HelloWorld_H
IMPLEMENT_APP (wxHelloWorld) bool wxHelloWorld :: OnInit ()
www.infolinux.web.id
INFOLINUX 06/2005
53
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
Contoh tip of the day pada GIMP.
{ wxMainFrame * frame = new wxMainFrame ( _(“Hello World MDI”), wxPoint (50,50), wxSize (200,200), locale); frame -> Show (TRUE); SetTopWindow (frame);
Contoh MDI pada Firefox.
(wxCommandEvent &event); void OnNew (wxCommandEvent &event); wxLocale &locale; protected: DECLARE_EVENT_TABLE (); private: wxMenuBar *menubar; wxMenu *FileMenu; wxMenu *ChildMenu;
wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size, wxLocale &l): wxMDIParentFrame ( (wxWindow *) NULL, -1, title, pos, size), locale (l) { CreateStatusBar (2); SetStatusText (_(“Hello World MDI”));
return TRUE; }; };
menubar = new wxMenuBar;
Berikut ini adalah isi dari MainFrame.h: #ifndef MainFrame_H #define MainFrame_H
#endif// MainFrame_H
Berikut ini adalah isi dari MainFrame. cpp:
enum { MENU_ABOUT = 100, MENU_NEW_WIN, MENU_QUIT,
#include #include #include #include
<wx/wx.h> <wx/mdi.h> “MainFrame.h” “ChildFrame.h”
}; class wxMainFrame : public wxMDIParentFrame { public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size, wxLocale &locale); void OnQuit (wxCommandEvent &event); void OnAbout
54
INFOLINUX 06/2005
BEGIN_EVENT_TABLE (wxMainFrame, wxMDIParentFrame) EVT_MENU (MENU_QUIT, wxMainFrame::OnQuit) EVT_MENU (MENU_ABOUT, wxMainFrame::OnAbout) EVT_MENU (MENU_NEW_WIN, wxMainFrame::OnNew) END_EVENT_TABLE () wxMainFrame *frame = (wxMainFrame *) NULL;
www.infolinux.web.id
FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, _(“&About”), _(“Show about info...”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ NEW_WIN, _(“&New”), _(“New window”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ QUIT, _(“&Quit”), _(“Quit from application...”)); menubar -> Append (FileMenu, _(“&File”));
SetMenuBar (menubar);
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Wx
Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_NEW_WIN, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnNew); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnAbout);
{ public: wxChildFrame (wxMDIParentFrame *parent, const wxString &title, const wxPoint &pos, const wxSize &size, const long s tyle, wxLocale &locale); void OnQuit (wxCommandEvent &event); void OnChangeTitle (wxCommandEvent &event); wxLocale &locale;
frame = this; };
protected: DECLARE_EVENT_TABLE ();
void wxMainFrame :: OnQuit (wxCommandEvent &event) { Close (TRUE); }; void wxMainFrame :: OnAbout (wxCommandEvent &event) { wxMessageBox (_(“Hello World MDI Example v0.1”), _(“About Hello World MDI”), wxOK | wxICON_INFORMATION, this); }; void wxMainFrame :: OnNew (wxCommandEvent &event) { wxChildFrame *child = new wxChildFrame( frame , _(“untitled”),wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_ STY LE, locale); };
private: wxTextCtrl *textctrl; wxMenuBar *menubar; wxMenu *FileMenu; wxMenu *ChildMenu; }; #endif// ChildFrame_H
Berikut ini adalah isi dari ChildFrame. cpp: #include #include #include #include
<wx/wx.h> <wx/mdi.h> “ChildFrame.h” “MainFrame.h”
BEGIN_EVENT_TABLE (wxChildFrame, wxMDIChildFrame) EVT_MENU (CHILD_QUIT, wxChildFrame :: OnQuit) EVT_MENU (CHILD_CHANGE_ TITLE, wxChildFrame :: OnChangeTitle) END_EVENT_TABLE ()
Berikut ini adalah isi dari ChildFrame.h: #ifndef ChildFrame_H #define ChildFrame_H enum { CHILD_QUIT = 200, CHILD_CHANGE_TITLE, }; class wxChildFrame : public wxMDIChildFrame
wxChildFrame :: wxChildFrame (wxMDIParentFrame *parent, const wxString &title, const wxPoint &pos, const wxSize &size, cons t long style, wxLocale &l): wxMDIChildFrame ( parent, -1, title, pos, size, style), locale (l) { CreateStatusBar (2);
www.infolinux.web.id
INFOLINUX 06/2005
55
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
SetStatusText (_(“Hello World MDI”)); textctrl = new wxTextCtrl (this, -1, wxString (_ (“Halo”)), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); menubar = new wxMenuBar; FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, _(“&About”), _(“Show about info...”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ NEW_WIN, _(“&New”), _(“New window”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ QUIT, _(“&Quit”), _(“Quit from application...”)); ChildMenu = new wxMenu; ChildMenu -> Append (CHILD_ QUIT, _(“&Close”), _(“Close child”)); ChildMenu -> Append (CHILD_CHANGE_TITLE, _(“C&hange title”), _(“Change title...”)); menubar -> Append (FileMenu, _(“&File”)); menubar -> Append (ChildMenu, _(“&Child”)); SetMenuBar (menubar); Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_NEW_WIN, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnNew); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnAbout); Connect (CHILD_QUIT,
56
INFOLINUX 06/2005
wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxChildFrame :: OnQuit); Connect (CHILD_CHANGE_ TITLE, wxEVT_COMMAND_ MENU_SELECTED, (wxObjectEventFunction) &wxChildFrame :: OnChangeTitle); }; void wxChildFrame :: OnQuit (wxCommandEvent &event) { Close(TRUE); }; void wxChildFrame :: OnChangeTitle (wxCommandEvent &event) { static wxString s_title = _ (“untitled”); wxString title = wxGetTextFromUser(_(“Enter new title”), _(“Change title”), s_title, GetParent()>GetParent()); if ( !title ) return; s_title = title; SetTitle(s_title); };
Berikut ini adalah isi dari makefile.unx: CXX = $(shell wx-config --cxx) PROGRAM = helloworld OBJECTS = helloworld.o MainFrame.o ChildFrame.o
clean: rm -f *.o $(PROGRAM)
Penjelasan: Class wxMainFrame kini diturunkan dari class wxMDIParentFrame, sementara class wxChildFrame diturunkan dari class wxMDIChildFrame. Hal ini telah disediakan oleh Wx. Class wxChildFrame memiliki atribut FileMenu dan ChildMenu bertipe wxMenu. Pada saat child window dibuat (constructor), kita membuat ulang menu bar. Dalam pembuatan ulang tersebut, kita juga membuat menu ChildMenu. Dengan adanya proses berat di constructor wxChildFrame, maka pembuatan window baru dari class wxMainFrame akan terlihat sangat sederhana. Bagus untuk information hiding. Perhatikan konstanta yang digunakan untuk menu, dalam masing-masing header, enumerasi kini dimulai dari bilangan tertentu. Hal ini untuk mencegah tumpang tindih hasil enumerasi. Sampai saat ini, program ini masih memiliki kekurangan. Yang pertama adalah menu Quit yang hanya berfungsi untuk menutup child window. Harusnya, diimplementasikan untuk menutup aplikasi. Yang kedua, ketika kita klik pada tombol close title bar, aplikasi segera menutup walaupun masih ada child window yang terbuka. Yang seharusnya adalah mengonfirmasikan kepada user bahwa masih ada window yang terbuka. Yang ketiga, kita sebenarnya tidak mendaftar anakanak window kita dengan benar. Pada aplikasi sesungguhnya, semua anak harus terdaftar dengan baik.
# implementation .SUFFIXES:
.o .cpp
.cpp.o : $(CXX) -c `wx-config -cxxflags` -o $@ $< all:
$(PROGRAM)
$(PROGRAM): $(OBJECTS) $(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`
www.infolinux.web.id
Demikianlah pembahasan kita tentang perancangan user interface menggunakan Wx. Tentu saja, artikel ini hanya membahas sedikit sekali dari aspek perancangan user interface dalam pembuatan aplikasi. Namun, mulai sekarang dan seterusnya, rasa-rasanya kita perlu banyak memperhatikan masalah user interface agar program yang kita hasilnya juga dapat dinikmati oleh banyak pihak. Canggih dan aman juga harus mudah dan enak digunakan. Ini penting sekali. Noprianto ([email protected])
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
SMS Gateway
Memonitor Koneksi Server dengan SMS Gateway Bila Anda seorang admin atau pengelola server, tentunya ingin selalu memonitor koneksi server. Misalnya, apakah dalam keadaan terhubung ke Internet atau tidak. Dengan SMS gateway, Anda dapat menerima laporan status koneksi itu melalui SMS.
M
onitoring server menjadi penting, misalnya bila tiba-tiba anda akan melakukan back-up data tiap akhir bulan dan koneksi Internet Anda putus. Metode yang akan penulis terangkan tidak hanya terbatas untuk yang terkoneksi ke Internet, tetapi juga untuk jaringan LAN. Dalam hal ini yang terpenting adalah: 1. SMS gateway (Kannel). 2. Library browser perl (Perl-libwww). 3. Bash shell scripting. 4. Crontab. Prinsip untuk memonitor server ini adalah sebagai berikut: Server akan mengirimkan perintah ping ke suatu server, kemudian dari hasil respon tersebut dapat dianalisis bahwa server tersebut masih tersambung dengan Internet atau tidak. Pengetesan dan analisis dilakukan dengan bash script. Untuk melakukan pengecekan tiap waktu menggunakan task scheduler (crontab) yang telah dibahas pada InfoLINUX edisi Juli 2004.
Instalasi SMS gateway kannel Mengapa kannel? Karena kannel adalah SMS gateway yang free dan kompatibel dengan ponsel phase 2+ dan juga GSM modem.
Pertama, buat direktori gateway untuk menampung hasil download: root]# mkdir gateway
2. Buatlah bash script kannel.sh dengan perintah cat atau teks editor kesukaan Anda. Script ini untuk men-download paket dari server CVS. root]# cat > kannel.sh #!/bin/sh cvs -d:pserver:anonymous@cvs. kannel.org:/home/cvs login cvs -d:pserver:anonymous@cvs. kannel.org:/home/cvs co gateway [Ctrl] [D] root]#
Catatan: Tekan Ctrl-D itu untuk mengakiran pengetikan dan menyimpan menjadi file kannel.sh. 3. Ubah mode atau atribut file kannel.sh agar dapat dieksekusi dengan memberi +x. root]# chmod +x kannel.sh
4. Mulai download dengan menjalankan program kannel.sh. Asumsinya, konfigurasi server sudah terhubung ke jaringan dan dapat mengakses server CVS di Internet. root]# ./kannel.sh
Cara instalasi: 1. Cari tempat download source atau paket. Penginstalan menggunakan source (versi CVS). Versi CVS adalah versi yang terbaru. Versi CVS dan versi yang stabil dapat di-download dari www.kannel.org.
58
INFOLINUX 06/2005
rimkan SMS. Jadi penggunaan kannel tidak dioptimalkan untuk selain itu.
Tunggu sampai selesai download. Hasil download ada di direktori gateway yang telah Anda buat di komputer yang akan menjadi gateway. Karena kannel dalam hal ini hanya digunakan sebagai monitoring server, Kannel hanya untuk mengi-
www.infolinux.web.id
5. Masuk direktori gateway tersebut, lalu jalankan konfigurasi dan instalasi. root]# cd gateway gateway]# ./configure –enablestart-stop-daemon gateway]# touch .depend gateway]# make depend gateway]# make gateway]# make install
6. Buat file-file konfigurasi. Dalam contoh ini penulis menggunakan nama file sms. conf, modems.conf, smsbox.conf, dan sendsms.conf. Simpan file-file tersebut pada direktori /etc/kannel/. Contoh file sms.conf: group = core admin-port = 13000 smsbox-port = 13001 admin-password = bar status-password = foo #admin-deny-ip = “” #admin-allow-ip = “” log-file = “/var/log/kannel/ bearerbox.log” log-level = 0 access-log = “/var/log/ kannel/bearerbox_access.log” store-file = “/var/log/ kannel/kannel.store” box-allow-ip = “127.0.0.1;192.168.*.*” box-deny-ip = “*.*.*.*” # SMSC CONNECTIONS group = smsc smsc = at
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
SMS Gateway
smsc-id = GSMModem modemtype = iTegno #modemtype = ME45 #modemtype = ericsson_t68 #modemtype = siemens_c60 device = /dev/ttyUSB0 #device = /dev/ttyS0 speed = 115200 #speed = 96000 sim-buffering = true my-number = +62817777777 validityperiod = 168 # MODEM include = “modems.conf” # SMSBOX SETUP include = “smsbox.conf” # SEND-SMS USERS include = “sendsms.conf”
Contoh file modem.conf: group = modems id = iTegno detect-string = “WAVECOM” detect-string2 = “MODEM” speed = 115200 need-sleep = true sendline-sleep = 10 message-storage = “SM” #enable-mms = true #no-pin = true #no-smsc = true group = modems id = ME45 need-sleep = false sendline-sleep = 1000 message-storage = “MT” #enable-mms = true group = modems id = ericsson_t68 name = “Ericsson T68” detect-string = “T68” init-string = “ATQ0E1V1” keepalive-cmd = “AT+CBC;+CSQ” broken = true #message-storage= “ME” #no-smsc = true #if you want direct message indication instead of sim buffering
#init-string = “AT+CNMI=3,3” group = modems id = siemens_c60 name = “Siemens C60” init-string = “AT+CSMS=1+CNMI =1,2,0,0,1” enable-hwhs = “AT\Q3” need-sleep = true
Contoh file smsbox.conf: group = smsbox bearerbox-host = localhost smsbox-id = SMSbox sendsms-port = 13013 #global-sender = 13013 #sendsms-chars = “0123456789 +-” log-file = “/var/log/kannel/ smsbox.log” log-level = 2 access-log = “/var/log/ kannel/smsbox_access.log”
Contoh file sendsms.conf: group = sendsms-user username = tester password = foobar name = SMSThrower concatenation = true max-messages = 99 user-deny-ip = “*.*.*.*” user-allow-ip = “127.0.0.1;192.168.*.*” #faked-sender = “+62817309405”
7. Buat direktori /var/log/kannel untuk menyimpan log dari sms gateway. Dalam contoh ini penulis memberikan contoh konfigurasi untuk ponsel Sonny Ericsson T68/T68i, Siemens C60, Siemens ME45, dan modem GSM Itegno. Perhatikan sms.conf, bagian SMSC CONNECTIONS, yang menunjukkan penulis menggunakan modem GSM iTegno.
start --exec smsbox sms. conf &
Install modul atau paket perl-libwww Modul ini membantu kita untuk berinteraksi dengan suatu website melalui konsol. Dalam hal ini diasumsikan Perl sudah terinstall. Penulis menggunakan distro Mandrake 10 Powerpack yang sudah menyertakan modul ini. Cara mengetes apakah sudah terinstal, yaitu: root]# GET -e ‘www.google.com’ Cache-Control: private Connection: close Date: Mon, 28 Jun 2004 18:22:11 GMT Server: GWS/2.1 Content-Length: 2017 Content-Type: text/html Content-Type: text/html; charset=ISO-8859-1 Client-Date: Mon, 28 Jun 2004 18:22:39 GMT Client-Peer: 216.239.57.99:80 Client-Response-Num: 1 <....dipotong....>
Script di atas menunjukkan perl-libwww sudah terinstal. Bila belum terinstal dan distro Linux yang Anda gunakan belum menyertakan dalam CD-nya, maka Anda dapat download paket perl-libwww dari Internet. Berikut ini perintah menginstal paket RPM untuk Mandrake: root]# rpm -ivh perl-libwwwperl-5.76-3mdk.noarch.rpm
Kemudian test dengan user tester dan pass foobar. # GET -e ‘http://
root]# mkdir /var/log/kannel
8. Jalankan program daemon. root]# cd /usr/local/sbin sbin]#./start-stop-daemon -start --exec bearerbox sms. conf & sbin]#./start-stop-daemon --
www.infolinux.web.id
Komputer SMS gateway dan modem gsm iTegno.
INFOLINUX 06/2005
59
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
SMS Gateway
localhost:13013/cgi-bin/sendsms? user=tester&pass=foobar&from=so mebody&to=%2b6281999&text=hello %20world’
Perintah di atas akan mengirim SMS ke nomor 6281999, dengan pesan “hello world”. Jika nomor HP tersebut menerima SMS, berarti konfiguasi Kannel dan perllibwww berhasil.
Membuat program analisis Untuk menentukan koneksi Internet kita terputus atau tidak, kita akan membuat Bash script pod.sh . Penulis menggunakan methode ping. File ini agak panjang, sehingga agar mudah gunakan teks editor, misalnya vi. Untuk menyimpan pengetikan dengan vi, tekan ESC:wq. root]# cd /usr/local/sbin/ sbin]# vi pod.sh #!/bin/sh echo ‘tunggu sebentar....’ hasil=$(ping -c 1 $1|head -n 2|tail -n 1) hasil=${hasil:0:2} if [ “$hasil” != “64” ] then idup=$(cat urip.txt) if [ “$idup” = 1 ] then echo 0 > urip.txt echo ‘servernya nggak konek’ jam=$(date +”%H:%M:%S”) echo $jam #GET -e “http:// localhost:13013/cgi-bin/sendsms ?user=tester&pass=foobar&from=so mebody&to=%2b62817309405&text=Se rvernya%20nggak%20konek%20boz%20 pada%20$jam” else echo ‘Servernya tetep nggak konek boz’ fi else idup=$(cat urip.txt) if [ “$idup” = 0 ] then echo 1 > urip.txt echo ‘horeeee hidup lagi’ #GET -e ‘http:// localhost:13013/cgi-bin/sendsms? user=tester&pass=foobar&from=som
60
INFOLINUX 06/2005
ebody&to=%2b62817309405&text=Ser vernya%20konek%20lagi%20boz’ else echo ‘servernya tetep ok’ fi fi
Ubah menjadi file yang dapat dieksekusi: sbin]# chmod +x pod.sh sbin]# touch urip.txt
Untuk melakukan test pada skrip ini tuliskan perintah berikut: #/usr/local/sbin/pod.sh 10.2.6.228 tunggu sebentar.... servernya tetep ok
Host 10.2.6.228 di atas merupakan contoh dari penulis. Kondisi awal dari komputer yang dimonitor adalah hidup, yaitu dengan nilai 1 pada berkas /usr/local/ sbin/urip.txt. Skrip pod.sh akan mengirim SMS ke no 6281999 apabila terjadi perubahan status keadaan komputer yang dimonitoring. Skrip tersebut akan melakukan ping terhadap komputer 10.2.6.228, apabila komputer dalam keadaan hidup maka akan membalas perintah ping dan tidak mengubah status, sehingga tidak mengirimkan SMS. Potongan skrip tentang ping di atas adalah: hasil=$(ping -c 1 $1|head -n 2|tail -n 1)
Perintah ping dengan 1 paket data dan hasilnya diambil pada perintah baris kedua: hasil=${hasil:0:2}
Skrip di atas berarti mengambil huruf ke-0 sebanyak 2 untuk dianalisis. Apabila komputer tetap hidup jawabannya adalah: 64 bytes from 10.2.6.228: icmp_ seq=1 ttl=64 time=0.140 ms
Skrip di atas mengambil sebanyak 2 dari huruf ke-0 yaitu 64 ini berarti komputer tersebut hidup. Sedangkan bila komputer tersebut mati, hasilnya adalah: From 10.2.6.5 icmp_seq=1 Destination Host Unreachable
Skrip di atas mengambil sebanyak 2 huruf
www.infolinux.web.id
mulai huruf ke-0 yaitu Fr. Perubahan status akan ditulis dalam berkas bernama urip.txt pada direktori /usr/local/sbin/. Apabila terjadi perubahan status, maka secara otomatis melakukan pengiriman ke no 6281999. Jika perubahan dari status 0 (terputus) ke status 1 (terhubung) akan mengirimkan pesan “Servernya konek lagi boz”. Sedangkan bila perubahan dari status 1 (terhubung) ke status 0 (terputus) akan mengirimkan pesan “Servernya nggak konek boz pada $jam”. $jam di sini sesuai dengan jam komputer SMS gateway.
Mengatur jadwal pengecekan dengan crontab Untuk menjalankan skrip ini bisa sebagai user biasa (bukan root). $ crontab -e
Tekan tombol [i] atau [insert], kemudian isi sebagai berikut: 5 * * * /usr/local/sbin/pod.sh 10.2.6.228 >/dev/null
Simpan dengan menekan ESC:wq. Artinya tiap 5 menit akan mengecek koneksi ke alamat ip 10.2.6.228, dan mengirim hasilnya ke SMS, tanpa memberikan laporan ke e-mail account crontab Anda. Anda bisa mengubah alamat IP dan mengubah delay waktu tersebut. Sebelum Anda meninggalkan server gateway, pastikan bahwa program daemon crond sudah diatur menyala pada saat booting. Sebagian besar distro Linux memiliki direktori /etc/rcX.d/ untuk mengatur program (service) apa saja yang dijalankan saat booting. X adalah nomor init, yang nilainya antara 0 hingga 6. Nomor init untuk booting dicantumkan dalam file /etc/inittab pada baris id:X:initdefault:. Jadi, jika X adalah 3, lihat direktori /etc/rc3.d/ dan pastikan huruf paling depan file xyzcrond adalah S, misalnya S60crond. Jika masih K60crond, rename dengan perintah mv K60crond S60crond. Setelah crontab terpasang, maka setiap 5 menit komputer gerbang SMS akan memonitor komputer yang beralamat 10.2.6.228. Skrip pod.sh di atas bisa dikembangkan dengan metode yang lebih akurat misalnya dengan mengamati port dengan nmap. Selamat berkreasi! Ryan Fabella ([email protected])
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
checkinstall
checkinstall: Memanajemen Software di Sistem dengan Mudah Kita kadang perlu mengompilasi dan menginstalasi software dari source. Lalu timbul masalah bila kita ingin menghapus software tersebut dari sistem kita, yaitu bagaimana cara menghapusnya. Ingin tahu jawabannya? Baca terus artikel ini.
D
alam penggunaan sistem Linux sehari-hari, terkadang kita dihadapkan pada masalah manajemen software yang kita kompilasi dan instalasi dari source. Jika software tersebut menyediakan rule “uninstall” dalam file Makefile-nya maka beruntunglah kita, karena kita dapat meng-uninstall program software tersebut dengan menggunakan perintah make uninstall. Namun, agar dapat menggunakan perintah tersebut kita harus memiliki direktori tempat kita mengompilasi software tersebut. Dalam sistem saya, setelah berhasil menginstalasi sebuah software dari tarballnya, saya selalu menghapus direktori tempat pembuatan software tersebut, demi penghematan ruang harddisk. Celakalah saya bila demikian, karena sulit menggunakan make uninstall. Untunglah masalah ini ternyata tidak hanya dialami oleh saya seorang. Dan beruntungnya lagi telah ada solusi untuk masalah ini, yaitu software checkinstall yang dikembangkan oleh Felipe Eduardo Sanchez Diaz Duran (izto at asic-linux.com. mx). Hebatnya lagi checkinstall mendukung paket software RPM, DEB, dan TGZ milik Slackware. Tanpa berpanjang lebar lagi, mari kita mulai menggunakan checkinstall dengan terlebih dulu menginstalasinya.
Instalasi checkinstall Software checkinstall dapat diperoleh di http://asic-linux.com.mx/~izto/checkinstall/.
Versi terakhir saat artikel ini ditulis adalah 1.6.0beta4. (Saat Anda membaca artikel ini kemungkinan besar versi 1.6.0 telah tersedia). Setelah berhasil men-download-nya, ikutilah panduan berikut ini untuk menginstalasi checkinstall: Mengekstraksi tarball checkinstall. $ tar xvzpf checkinstall1.6.0beta4.tgz
Pindah ke direktori checkinstall. $ cd checkinstall-1.6.0beta4/
Kompilasi checkinstall. $ make
Berikut ini adalah prosesnya: make -C installwatch0.7.0beta4 make[1]: Entering directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ ./create-localdecls Checking truncate argument type... off_t Checking libc version... libc.so.6 Checking glibc subversion... Treated as glibc >= 2.1 (finger crossed) gcc -Wall -c -D_GNU_SOURCE -DPIC -fPIC -D_REENTRANT -DVERSION=\”0.7.0beta3\” installwatch.c
www.infolinux.web.id
ld -shared -o installwatch.so installwatch.o -ldl -lc make[1]: Leaving directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’
Instalasi checkinstall. Bila tidak ada kesalahan dalam proses kompilasi, kita dapat menginstalasi checkinstall dengan cara : $ su # make install
Proses instalasinya adalah sebagai berikut: make -C installwatch0.7.0beta4 make[1]: Entering directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ ./create-localdecls Checking truncate argument type... off_t Checking libc version... libc.so.6 Checking glibc subversion... Treated as glibc >= 2.1 (finger crossed) gcc -Wall -c -D_GNU_SOURCE -DPIC -fPIC -D_REENTRANT -DVERSION=\”0.7.0beta3\” installwatch.c ld -shared -o installwatch.so installwatch.o -ldl -lc
INFOLINUX 06/2005
61
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
checkinstall
make[1]: Leaving directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ tedi@suse:~/checkinstall1.6.0beta4> su Password: suse:/home/tedi/checkinstall1.6.0beta4 # make install make -C installwatch0.7.0beta4 make[1]: Entering directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ make[1]: Nothing to be done for `all’. make[1]: Leaving directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ cp checkinstall makepak /usr/ local/sbin make -C installwatch0.7.0beta4 install make[1]: Entering directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ if [ -r /usr/local/lib/ installwatch.so ]; then rm -f /usr/local/lib/installwatch. so;cp installwatch.so / usr/local/lib; else cp installwatch.so /usr/local/ lib;fi sed -e “s|#PREFIX#|/usr/ local|” < installwatch > / usr/local/bin/installwatch chmod 755 /usr/local/bin/ installwatch make[1]: Leaving directory `/home/tedi/checkinstall1.6.0beta4/installwatch0.7.0beta4’ mkdir -p /usr/local/lib/ checkinstall/locale mkdir -p /usr/local/lib/ checkinstall/locale/es/LC_ MESSAGES cp locale/checkinstall-es.mo /usr/local/lib/checkinstall/ locale/es/LC_MESSAGES/
62
INFOLINUX 06/2005
checkinstall.mo cp checkinstallrc-dist /usr/ local/lib/checkinstall if ! [ -f /usr/local/lib/ checkinstall/checkinstallrc ]; then cp /usr/local/lib/ checkinstall/checkinstallrcdist /usr/local/lib/ checkinstall/checkinstallrc; else echo; echo -e “\n======= ============================\ n\nAn existing checkinstallrc file has been found.\nThe one from this distribution can be found at:\n\n\t/usr/local/lib/ checkinstall/checkinstallrcdist\n\n===================== ===============\n\n”;echo ;fi ============================= An existing checkinstallrc file has been found. The one from this distribution can be found at: /usr/local/lib/ checkinstall/checkinstallrcdist =============================
Ya, Anda mungkin akan memprotes, mengapa kita masih menggunakan make install? Karena checkinstall belum terinstalasi di sistem kita. Selanjutnya kita akan menjalankan checkinstall untuk menginstalasi checkinstall: Jalankan checkinstall. # ./checkinstall checkinstall 1.6.0beta4, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL.
Please choose the packaging method you want to use. Slackware [S], RPM [R] or Debian [D]? R
www.infolinux.web.id
***************************** **** RPM package creation selected *** ***************************** This package will be built according to these values: 1 - Summary: [ CheckInstall installations tracker, version 1.6.0beta4 ] 2 - Name: [ checkinstall ] 3 - Version: [ 1.6.0beta4 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ Applications/ System ] 7 - Architecture: [ i386 ] 8 - Source location: [ checkinstall-1.6.0beta4 ] 9 - Alternate source location: [ ] 10 - Provides: [ checkinstall ] 11 - Requires: [ ] Enter a number to change any of them or press ENTER to continue: Installing with make install... ==== Installation results ==== make -C installwatch0.7.0beta4 ... Copying files to the temporary directory...OK Striping ELF binaries and libraries...OK Compressing man pages...OK Building file list...OK Building RPM package...OK NOTE: The package will not be installed Erasing temporary files...OK Writing backup package...OK Deleting temp dir...OK ***************************** Done. The new package has been saved to
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
checkinstall
/usr/src/packages/RPMS/i386/ checkinstall-1.6.0beta41.i386.rpm You can install it in your system anytime using: rpm -i checkinstall1.6.0beta4-1.i386.rpm *****************************
Instalasi checkinstall versi RPM. # rpm -ivh /usr/src/packages/ RPMS/i386/checkinstall1.6.0beta4-1.i386.rpm Preparing... ######## ###################### [100%] 1:checkinstall ######## ###################### [100%]
Telah terinstalasi? Mari kita coba lihat apakah checkinstall telah terinstalasi, di sini kita akan menggunakan program rpm: $ rpm -qi checkinstall
Keluaran dari perintah ini dapat dilihat pada pada box 1.
Yes, checkinstall telah berhasil terinstalasi di sistem kita. Selanjutnya kita akan menggunakan checkinstall untuk menginstalasi software xine-lib. Anda dapat saja menggunakan software lainnya.
Membuat RPM dengan checkinstall Berikut ini adalah langkah-langkah yang kita lakukan untuk membuat RPM xine-lib dengan menggunakan checkinstall: Download software xine-lib dari Website Xine (http://www.xinehq.de). Ektraksi tarball xine-lib. tar xvzpf xine-lib-1.0.tar.gz
Konfigurasi xine-lib. cd xine-lib-1.0 ./configure --prefix=/usr
Opsi -prefix akan membuat xine-lib diinstalasi pada direktori /usr. Tunggulah beberapa saat sementara proses konfigurasi berjalan. Setelah proses konfigurasi selesai, kita lanjutkan dengan mengompilasi xine-lib. Berikut ini adalah hasil konfigurasi xinelib di sistem saya:
Box 1. Hasil keluaran perintah: $ rpm -qi checkinstall.
Selanjutnya bila checkinstall telah terinstalasi dengan benar, maka akan muncul informasi sebagai berikut: Name : checkinstall Relocations: (not relocatable) Version : 1.6.0beta4 Vendor: (none) Release : 1 Build Date: Fri 07 Jan 2005 09:55:47 PM WIT Install date: Fri 07 Jan 2005 09:56:12 PM WIT Build Host: (none) Group : Applications/System Source RPM: checkinstall1.6.0beta4-1.src.rpm Size : 263973 License: GPL Signature : (none) Packager : checkinstall-1.6.0beta4 Summary : CheckInstall installations tracker, version 1.6.0beta4 Description : CheckInstall installations tracker, version 1.6.0beta4 CheckInstall keeps track of all the files created or modified by your installation script (“make install” “make install_modules”, “setup”, etc), builds a standard binary package and installs it in your system giving you the ability to uninstall it with your distribution’s standard package management utilities. Distribution: (none)
www.infolinux.web.id
... * post effect plugins: * planar video effects: - invert - expand - eq - eq2 - boxblur - denoise3d - unsharp - tvtime * SFX: - goom - oscope - fftscope - mosaico * video driver plugins: - XShm (X11 shared memory) - Xv (XVideo *static*) - fb (Linux framebuffer device) - dxr3 (Hollywood+ and Creative dxr3, mpeg video only) - vidix (X11 and framebuffer support) * audio driver plugins: - oss (Open Sound System)
Kompilasi xine-lib. make
Jika dalam proses kompilasi ini tidak ada kesalahan, pada akhir proses akan tampak tampilan sebagai berikut: Making all in include make[3]: Entering directory `/home/tedi/xine-lib-1.0/ win32/include’ make[3]: Nothing to be done for `all’. make[3]: Leaving directory `/ home/tedi/xine-lib-1.0/win32/ include’ make[3]: Entering directory `/home/tedi/xine-lib-1.0/ win32’ make[3]: Nothing to be done for `all-am’. make[3]: Leaving directory `/ home/tedi/xine-lib-1.0/win32’ make[2]: Leaving directory `/ home/tedi/xine-lib-1.0/win32’ make[2]: Entering directory `/home/tedi/xine-lib-1.0’ make[2]: Leaving directory `/home/tedi/xine-lib-1.0’
INFOLINUX 06/2005
63
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
checkinstall
Enter a number to change any of them or press ENTER to continue:
Kita ingin mengubah “Summary”-nya karena kurang deskriptif: Enter a number to change any of them or press ENTER to continue: 1 Enter new summary: >> a free multimedia engine This package will be built according to these values: 1 -
Website checkinstall.
make[1]: Leaving directory `/home/tedi/xine-lib-1.0
(Opsional) Melakukan tes terhadap hasil kompilasi. make check
Instalasi menggunakan checkinstall. $ su Password: # /usr/local/sbin/checkinstall
Berikut ini adalah prosesnya: checkinstall 1.6.0beta4, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL.
The package documentation directory ./doc-pak does not exist. Should I create a default set of package docs? [y]: y Preparing package documentation...OK Please choose the packaging method you want to use. Slackware [S], RPM [R] or
64
INFOLINUX 06/2005
Debian [D]? R Please write a description for the package. End your description with an empty line or EOF. >> xine-lib >> ***************************** **** RPM package creation selected *** ***************************** This package will be built according to these values: 1 2 3 4 5 6
-
Summary: [ xine-lib ] Name: [ xine-lib ] Version: [ 1.0 ] Release: [ 1 ] License: [ GPL ] Group: [ Applications/ System ] 7 - Architecture: [ i386 ] 8 - Source location: [ xinelib-1.0 ] 9 - Alternate source location: [ ] 10 - Provides: [ xine-lib ] 11 - Requires: [ ]
www.infolinux.web.id
Summary: [ a free multimedia engine ] 2 - Name: [ xine-lib ] 3 - Version: [ 1.0 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ Applications/ System ] 7 - Architecture: [ i386 ] 8 - Source location: [ xinelib-1.0 ] 9 - Alternate source location: [ ] 10 - Provides: [ xine-lib ] 11 - Requires: [ ] Enter a number to change any of them or press ENTER to continue:
Tampaknya tidak ada permasalahan lagi, kita lanjutkan dengan menekan tombol ENTER untuk membuat paket RPM. Jika tidak ada masalah, di akhir proses akan tampak sebagai berikut: ... NOTE: The package will not be installed Erasing temporary files...OK Deleting doc-pak directory... OK Writing backup package...OK Deleting temp dir...OK
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
checkinstall
Mengustomisasi checkinstall ***************************** Done. The new package has been saved to /usr/src/packages/RPMS/i386/ xine-lib-1.0-1.i386.rpm You can install it in your system anytime using: rpm -i xine-lib-1.01.i386.rpm
Untuk mengustomisasi checkinstall dapat dilakukan dengan mengubah beberapa variabel yang disediakan di dalam file konfigurasi checkinstall: /usr/local/lib/checkinstall/ checkinstallrc
Penutup Menentukan jenis paket default Bila kita tidak ingin ditanya tentang jenis paket yang ingin dibuat setiap kali menggunakan checkinstall, ubahlah variabel INSTYPE menjadi: INSTYPE=”R”
*****************************
Menentukan arsitektur mesin default Dari informasi di atas, paket xine-lib1.0-1.i386.rpm terdapat di dalam direktori / usr/src/packages/RPMS/i386/. Dalam sistem Anda mungkin akan sedikit berbeda. Untuk menginstalasi paket tersebut, dapat dilakukan dengan : rpm -i xine-lib-1.0-1.i386.rpm
Bagaimana? Mudah, bukan?
babkan paket RPM yang dihasilkan ditaruh dalam direktori /usr/src/packages/RPMS/ athlon/. Jika ingin mengustomisasi lebih jauh, silakan melihat dokumentasi yang disertakan dalam software checkinstall.
Untuk menentukan arsitektur mesin secara default, misalnya jika mesin Anda adalah AMD Athlon 64bit, maka rasanya tidak pantas bila menset mesin ke “i386”. Oleh karena itu, ubahlah variabel ARCHITECTURE menjadi: ARCHITECTURE=”athlon”
Perubahan arsitektur mesin ini menye-
www.infolinux.web.id
Pekerjaan manajemen software yang kita kompilasi dan instalasi dari source terkadang membuat kita pusing tujuh keliling. Karena bila tidak dikelola dengan baik, akan membuat sistem kita menjadi berantakan. Untunglah telah ada program bantu untuk mengelola software yang dikompilasi dan diinstalasi dari source, yaitu checkinstall. Dengan checkinstall, kita dapat membuatkan paket dari software tersebut, dan dengan menggunakan program paket manajer yang telah disediakan oleh distro kita, kita dapat memanipulasi paket software tersebut. Dengan demikian pengelolaan software yang dikompilasi dan diinstalasi dari source menjadi lebih mudah. Tedi Heriyanto ([email protected])
INFOLINUX 06/2005
65
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
unison
Sinkronisasi File dengan unison Sinkronisasi adalah kegiatan yang mungkin sering Anda lakukan apabila Anda sering bekerja mobile, atau bekerja pada beberapa tempat. Di Linux, terdapat tool sinkronisasi yang hebat dan mudah untuk digunakan: unison. Di artikel kali ini, kita akan membahas unison dan contoh-contoh penggunaannya.
M
r. X adalah seorang pembunuh bayaran yang sangat laris. Kebetulan, beliau termasuk pembunuh bayaran yang cukup banyak menggunakan TI. Begini cara kerjanya. Ketika ada tawaran, Mr. X akan mengamati calon korbannya, lengkap dengan informasi kebiasaan calon korban, foto, dan hal-hal yang berhubungan dengan calon korban tersebut. Mr. X sering bekerja mobile dan mencatat semua informasi ke dalam notebook yang beliau miliki. Notebook beliau terinstall dengan sistem operasi MS Windows XP. Sampai di kantor rahasianya, Mr. X selalu meng-copy-kan kembali semua informasi yang berhasil dikumpulkan dalam satu hari ke server kantor rahasianya tersebut. Mr. X tidak harus selalu keluar kantor dalam mengamati calon korbannya. Terkadang, informasi datang begitu saja dari pihak yang memberi kerja. Terkadang, Mr. X juga membuat perubahan langsung ke server kantor rahasianya. Setiap hari seperti ini. Sampai suatu hari. Mr. X telah membuat perubahan kecil yang cukup detail dan penting dalam arsip calon korban ketika bekerja di kantor. Ketika berada di luar kantor untuk mengamati lagi calon korbannya, Mr. X kehilangan perubahan yang dibuat di server kantornya, karena tidak dikopikan ke dalam notebook. Perubahan tersebut sebenarnya cukup penting. Apa boleh buat, Mr. X pun melupakan sejenak dan mengumpulkan informasi lain. Setibanya di kantor, Mr. X seperti biasa, mengopikan hasil kerjaan di notebooknya kembali ke server kantornya. Sayangnya, perubahan yang dibuat di server telah hi-
66
INFOLINUX 06/2005
lang tertimpa oleh data yang baru di-copy dari notebook. Mr. X sangat kesal. Suatu, hari, Mr. X membeli buku Windows dan mempelajari tentang adanya fasilitas Briefcase yang dapat digunakan untuk kegiatan sinkronisasi file yang sering sekali beliau lakukan. Setelah dicoba-coba, Mr. X kemudian dapat memanfaatkan fasilitas ini dan sejak itu, tidak ada lagi informasi yang tidak tersinkron. Mr. X pun kembali bekerja dengan rapi, siap memburu calon korbannya. Dengan adanya briefcase di Windows, sinkronisasi file dapat dilakukan dan Windows akan menampilkan konfirmasi ketika sinkronisasi dilakukan. Mr. X dapat memilih untuk meng-copy-kan perubahan ke server, dari server, menghapus yang tidak tersimpan di server, dan lain sebagainya. Seiring dengan selesainya masalah sinkronisasi file Mr. X, cerita tentang Mr. X pun selesai. Apakah Anda pernah mengalami apa yang dialami oleh Mr. X ketika melakukan sinkronisasi file? Kita bisa saja lupa dan mengikuti kegiatan rutin untuk selalu mengopikan file ke komputer server, padahal kita mungkin telah membuat perubahan di komputer server tersebut. Urusan sepele seperti sinkronisasi file bisa menyebabkan kita kehilangan data apabila tidak ditangani dengan baik. Terlepas dari tepat atau tidaknya penggunaan briefcase di Windows, harus kita akui bahwa fasilitas yang satu ini sangat berguna. User interfacenya juga sangat menarik. Sayangnya, fasilitas briefcase ini tidak terdapat di Linux. Kita perlu mempergunakan program lain untuk mendapatkan fasilitas serupa. Walau, sebenarnya, apabila
www.infolinux.web.id
Anda menggunakan KDE misalnya, Anda bisa memanfaatkan KFS untuk sinkronisasi file. Atau, dengan sedikit kompromi, Anda bisa memanfaatkan rsync.
Unison Apabila Anda tidak menggunakan KDE atau rsync terasa kurang cocok bagi Anda, maka Anda bisa mencoba tool yang satu ini: unison. Namanya jelas tidak mencerminkan fungsinya. Tapi, fiturnya luar biasa dalam menangani masalah sinkronisasi file. User interface-nya juga bisa seramah Windows. Selain itu, unison juga dapat bekerja di Windows, Linux dan beberapa unix lainnya. Di Artikel kali ini, kita akan membahas tentang unison, fitur dan berbagai contoh penggunaan. unison adalah tool untuk menangani masalah sinkronisasi file di platform UNIX dan Windows. unison mengizinkan dua entiti yang akan disinkronisasi satu sama lain tersimpan di host yang berbeda, atau di host yang sama, untuk dapat tersinkronisasi satu sama lainnya. Harus diakui, unison meminjam cukup banyak konsep dan fitur dari berbagai aplikasi lain seperti CVS, CODA distributed filesystem, RSYNC, dan lain sebagainya. Tentang RSYNC, developer Unison bahkan membaca thesis Andrew Tridgel (samba, rsync, kini di OSDL) tentang rsync dalam mengimplementasikan tool ini. unison juga merupakan program yang berjalan di modus user (user mode), sehingga dapat dijalankan oleh siapa saja dan tidak ada hubungan dengan sistem operasi. Salah satu fasilitas yang cukup membuat tenang hati adalah kemampuan unison
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
unison
yang tinggi dalam menangani perubahan dan konflik. unison akan sangat berhatihati dalam menangani proses sinkronisasi, termasuk terhadap kegagalan koneksi atau sumber daya listrik.
Konsep dasar unison Untuk memahami unison lebih dalam sebelum mencoba, kita akan membahas tentang konsep dasar dari aplikasi ini. Pertama, kita mengenal istilah replica di unison. Replica di sini adalah entiti yang akan disinkronisasi dengan entiti lain. Replica mengandung informasi protokol komunikasi, host, user, dan path. Untuk protokol komunikasi, unison bisa bekerja dengan file lokal, socket, ssh, atau rsh. Kedua, Kita mengenal unison server dan client. Ketiga, masalah update. Unison akan mencatat informasi setiap path yang sukses disinkronisasi, sehingga apabila terjadi perubahan, unison dapat dengan cepat memberikan anjuran aksi yang akan dilakukan. Untuk masalah konflik dan resolusi konflik, unison akan memberikan anjuran, namun user bebas menentukan aksi yang ingin dilakukan. Keempat, dukungan profile. Apabila memiliki banyak replica yang harus disinkronisasi, Anda bisa membuatnya dalam beberapa profile terpisah. Dengan demikian, Anda tidak harus selalu menyebutkan nama replice yang mungkin akan panjang dan susah diingat. Anda cukup menyebutkan nama profile-nya saja.
Anda bisa membangun sendiri unison dari source code. Untuk kompilasi tanpa melibatkan GUI, proses kompilasi dapat dilakukan dengan sangat mudah. Untuk mendapatkan fasilitas GUI, pastikan Anda memiliki header yang dibutuhkan dalam proses kompilasi seperti header gtk.
Contoh-contoh penggunaan Kita akan membahas beberapa contoh penggunaan yang umum. Kita akan membahas terlebih dahulu contoh penggunaan dalam modus teks, dan setelah itu, kita akan melanjutkan ke penggunaan unison di modus grafik. Pembuatan dan bagaimana bekerja dengan profile juga akan disertakan dalam contoh. Lokal ke lokal Pertama-tama, kita akan bekerja dari lokal ke lokal, dan melakukan sinkronisasi antar dua direktori. Sediakan dua direktori dengan nama a dan b, di mana a memiliki isi sebagai berikut:
a/e a/f a/dir1/ a/dir1/a a/dir1/b
Sementara, direktori b masih kosong. Untuk menyinkronisasi a dan b, berikanlah perintah berikut ini: $ unison a b -ui text Contacting server... Looking for changes dir1 Reconciling changes a new new new new new new new
b file file file file dir file file
----> ----> ----> ----> ----> ----> ---->
a b c d dir1 e f
[f] [f] [f] [f] [f] [f] [f]
> > > > > > >
Proceed with propagating updates? [] y Propagating updates
a a/a a/b a/c a/d
User interface unison Unison datang dengan kemampuan untuk bekerja pada user interface berbasis teks ataupun user interface berbasis GUI. Umumnya, untuk GUI, widget set GTK+ yang akan digunakan. User interface berbasis teks umumnya digunakan untuk bekerja sama dengan shell script, untuk otomatisasi sinkronisasi dua replica yang besar dan tidak membutuhkan campur tangan user.
Instalasi Instalasi unison dapat dengan mudah digunakan. Carilah terlebih dahulu paket untuk distro Anda. Apabila tidak terdapat juga,
Tampilan awal unison.
www.infolinux.web.id
INFOLINUX 06/2005
67
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
unison
UNISON started propagating changes at 15:35:27 on 09 Feb 2005 [BGN] Copying a from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying b from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying c from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying d from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying dir1 from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying e from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying f from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b dir1/a dir1/b [END] Copying a [END] Copying b [END] Copying c [END] Copying d [END] Copying e [END] Copying f [END] Copying dir1 UNISON finished propagating changes at 15:35:27 on 09 Feb 2005
Saving synchronizer state Synchronization complete
68
INFOLINUX 06/2005
Pada saat memeriksa perubahan di antara kedua tree, unison akan memberikan kita pilihan untuk aksi yang akan dilakukan. Anda bisa memilih untuk menekan <, atau >, atau / sesuai dengan arah perubahan yang Anda lakukan. Arah > berarti dari a ke b, dalam contoh kita. Arah < berarti dari b ke a, dalam contoh kita. Sementara, / berarti tidak melakukan apa-apa. Dalam contoh tersebut, apabila Anda memberikan aksi <, maka isi dari direktori a akan menjadi kosong, sama seperti b. Sementara, apabila Anda hanya ingin mengambil file a dan b dari a, maka untuk c,d,e,f dan dir1, Anda harus menekan tombol /. Contoh: $ unison a b -ui text Contacting server... Looking for changes dir1 Reconciling changes a new new new new new new new
[END] Copying a [END] Copying b UNISON finished propagating changes at 15:40:51 on 09 Feb 2005
Saving synchronizer state Synchronization complete
Dengan contoh tersebut, maka hanya file a dan b yang di-copy-kan ke direktori b. Kita akan melanjutkan. File b/a akan diubah dan kita ingin, file a/a dan file b/a berada dalam kondisi tersinkronisasi. Setelah mengubah file b/a, berikanlah perintah seperti ini: $ unison a b -ui text Contacting server... Looking for changes dir1 Reconciling changes
b file file file file dir file file
----> ----> <=?=> <=?=> <=?=> <=?=> <=?=>
a b c d dir1 e f
[f] [f] [f] [f] [f] [f] [f]
> > / / / / /
a new new new new new
b <---- changed a file <=?=> c file <=?=> d dir <=?=> dir1 file <=?=> e file <=?=> f
[f] [f] [f] [f] [f] [f]
< / / / / /
Proceed with propagating updates? [] y Propagating updates
Proceed with propagating updates? [] y Propagating updates
UNISON started propagating changes at 15:40:51 on 09 Feb 2005 [BGN] Copying a from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [BGN] Copying b from /home/koljeng/Documents/ unison/sampaj/a to /home/koljeng/Documents/ unison/sampaj/b [CONFLICT] Skipping c [CONFLICT] Skipping d [CONFLICT] Skipping dir1 [CONFLICT] Skipping e [CONFLICT] Skipping f
UNISON started propagating changes at 15:43:23 on 09 Feb 2005 [BGN] Updating file a from /home/koljeng/Documents/ unison/sampaj/b to /home/koljeng/Documents/ unison/sampaj/a [CONFLICT] Skipping c [CONFLICT] Skipping d [CONFLICT] Skipping dir1 [CONFLICT] Skipping e [CONFLICT] Skipping f [END] Updating file a UNISON finished propagating changes at 15:43:23 on 09 Feb 2005
www.infolinux.web.id
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
unison
Saving synchronizer state Synchronization complete
Pada contoh tersebut, tertulis bahwa file b/a telah berubah dan disarankan untuk mengubah ke arah kiri, di mana b akan menjadi sumber. Apabila Anda tidak menginginkan a/b disamakan isinya dengan b/a, maka Anda bisa mengubah arah menjadi > sehingga a/a yang akan menjadi sumber. Apabila kedua replica yang tersinkron ingin disinkronisasi lagi, maka unison akan menampilkan bahwa tidak ada yang perlu disinkronisasi seperti contoh berikut: $ unison a b -ui text Contacting server... Looking for changes dir1 dir1 Reconciling changes Nothing to do: replicas have not been changed since last sync. Layar utama unison.
Bagi Anda yang bekerja dengan script, tentunya akan lebih mudah kalau Anda menerima saran yang diberikan oleh unison. Untuk itu, Anda bisa memberikan opsi auto ketika menjalankan unison. Lokal ke remote/remote ke lokal. Setelah kita bekerja dari lokal ke lokal, maka kita akan masuk ke dunia yang lebih nyata, dengan bekerja antar-host. Pada prinsipnya, cara kerjanya sama saja. Anda hanya perlu mengubah protokol pada replica yang diinginkan. Dalam contoh ini, kita akan mempergunakan ssh untuk bekerja antar-host. Ada beberapa langkah yang harus dilakukan. Pertama, pastikan host tertentu bisa menjalankan unison. Berikan perintah berikut ini untuk memastikan remote host bisa menjalankan unison (tentunya pada host tersebut harus telah terinstal unison, akan lebih baik lagi apabila menjalankan versi yang sama). $ ssh 192.168.0.51 unison version Password: unison version 2.9.1
Kedua, pastikan koneksi dapat terjadi. Berikan opsi -testserver seperti contoh berikut ini:
$ unison -testserver a ssh:// [email protected]/a -ui text Contacting server... Password: p = a; bn = a
Ketiga, Anda bisa segera bekerja karena koneksi kedua pihak telah terjalin. Contoh: $ unison a ssh:// [email protected]/Documents/ unison/sampaj/b -ui text Contacting server... Password: Looking for changes dir1 Waiting for changes from server Reconciling changes local
new new new new new
koljeng ====> deleted a ====> deleted b file ----> c file ----> d dir ----> dir1 file ----> e file ----> f
Proceed with propagating
www.infolinux.web.id
[f] [f] [f] [f] [f] [f] [f]
> > > > > > >
updates? [] y Propagating updates
UNISON started propagating changes at 15:59:52 on 09 Feb 2005 [BGN] Copying a from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying b from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying c from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying d from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying dir1 from /home/koljeng/Documents/
INFOLINUX 06/2005
69
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
unison
unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying e from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b [BGN] Copying f from /home/koljeng/Documents/ unison/sampaj/a to //koljeng//home/koljeng/ Documents/unison/sampaj/b dir1/a dir1/b [END] Copying a [END] Copying b [END] Copying c [END] Copying d [END] Copying e [END] Copying f [END] Copying dir1 UNISON finished propagating changes at 15:59:53 on 09 Feb 2005
Saving synchronizer state Synchronization complete
bila Anda banyak melakukan sinkronisasi dengan pasangan replica yang berbeda, dengan alamat replica yang panjang, akan lebih baik apabila Anda membuat profile untuk pasangan replica yang diinginkan. Sebagai contoh, kita akan membuat profile pasangan replica local a b dengan nama local_ab. Berikut ini adalah langkah-langkah dalam membuat profile local_ab. Pertama, Masuklah ke direktori .unison di home directory Anda. Setelah itu, buatlah file dengan nama local_ab.prf dengan isi file sebagai berikut: root = /home/koljeng/Documents/ unison/sampaj/a root = /home/koljeng/Documents/ unison/sampaj/b path = a path = b
Kedua, Anda bisa segera menggunakan profile local_ab tersebut dengan perintah berikut: $ unison local_ab -ui text Contacting server... Looking for changes Reconciling changes
Dalam contoh tersebut, kita bisa melihat bahwa proses peng-copy-an ditandai dengan (local dan koljeng, yang merupakan nama server remote), serta pada proses persiapan pengopian, kita melihat bahwa nama file di-copy-kan dari local ke remote. Dalam contoh kali ini, kita memberikan url ssh://[email protected]/Documents/ unison/sampaj/b sebagai replica kedua. Perhatikan notasi path yang digunakan yaitu notasi / setelah nama server. Kita harus memandang bahwa notasi / adalah bagian dari server. Dengan demikian, direktori setelah itu, Documents/unison/sampaj/b adalah relatif terhadap home directory user koljeng di host tersebut. Bagaimana kalau kita ingin bekerja dengan path absolut? Berikan saja dua url seperti ini: ssh:// [email protected]//path/absolut/ke/direktori/yang/diinginkan. Kita akan menggunakan dua tanda /.
a
Bekerja dengan profile. Seperti telah disebutkan sebelumnya, apa-
Saving synchronizer state Synchronization complete
70
INFOLINUX 06/2005
b <---- changed
a
[f] <
Proceed with propagating updates? [] y Propagating updates
UNISON started propagating changes at 16:25:02 on 09 Feb 2005 [BGN] Updating file a from /home/koljeng/Documents/ unison/sampaj/b to /home/koljeng/Documents/ unison/sampaj/a [END] Updating file a UNISON finished propagating changes at 16:25:02 on 09 Feb 2005
www.infolinux.web.id
Bekerja dengan GUI. Sejak contoh pertama, kita selalu menggunakan opsi -ui text. Opsi -ui digunakan untuk menentukan user interface yang akan digunakan. Secara otomatis, unison akan memeriksa apakah ui grafik tersedia ketika Anda berada pada X. Dengan demikian, ketika berada di X dan menjalankan unison tanpa opsi -ui, maka yang akan dijalankan adalah unison pada modus GUI. Bekerja dengan GUI membuat kita tidak perlu mengingat berbagai perintah. Bahkan, Anda bisa langsung membuat profile dengan sangat mudah, tanpa harus repotrepot mengedit file profile sendiri. Pada saat dijalankan, unison akan menampilkan profile yang tersedia. Anda bisa memilih untuk menjalankan profile yang diinginkan. Anda bisa memilih profile default, dan diikuti oleh tombol OK. Setelah itu, Anda akan diminta untuk memasukkan direktori lokal. Masukkan direktori lokal dan tekanlah tombol Continue. Setelah itu, dialog kedua akan ditampilkan. Anda bisa memasukkan replica kedua. Setelah semuanya selesai, kliklah tombol Continue. Secara otomatis, sinkronisasi akan dilakukan, dan unison akan menampilkan konfirmasi aksi sinkronisasi untuk Anda. Untuk membuat profile, kliklah tombol New profile pada dialog pertama unison. Anda akan diminta untuk memasukkan nama profile. Masukkan nama yang diinginkan, dan kliklah tombol OK. Setelah itu, Anda akan diminta untuk memasukkan pasangan replica. Setelah itu, Anda pun selesai. Pada saat konfirmasi sinkronisasi dilakukan, Anda masih tetap dapat memilih untuk ke arah kiri, kanan, atau tidak melakukan perubahan. Jauh lebih mudah dibandingkan dengan text user interface. Hanya, script tidak akan dapat memanfaatkan fasilitas GUI ini. Sampai di sinilah perkenalan kita dengan unison. Apa yang kita bahas kali ini hanya sedikit bagian dari fasilitas yang disediakan unison. Unison adalah file synchronization tool yang sangat luar biasa, kaya fitur, namun tetap sangat mudah digunakan. Selamat mencoba, dan pastikan Anda tidak mengalami apa dialami oleh Mr. X, yaitu kehilangan isi file yang penting. Noprianto ([email protected])
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
w3mir
WWW Mirroring dengan w3mir Anda mungkin menemukan website yang menarik dan tidak selalu bisa online untuk membaca isinya. Bagi Anda yang ingin membuat mirror atau local copy untuk dapat dibaca lokal, Anda bisa mempergunakan w3mir. W3mir adalah mirroring tool yang powerful, namun mudah digunakan.
T
erkadang, kita menemukan informasi yang begitu menarik di www, namun tidak tersedia link untuk men-download kumpulan informasi tersebut. Lebih parah lagi apabila kumpulan informasi tersebut tersebar dalam puluhan file, dimana akan menyulitkan apabila harus disimpan satu per satu. Kalaupun ingin menyimpannya, kita mungkin kehilangan link yang menghubungkan file-file yang kita download tersebut. Dalam kondisi demikian, beberapa pihak akan memilih cara untuk men-download keseluruhan kumpulan informasi tersebut agar dapat dibaca lokal dengan bantuan www mirroring tool. Di dunia open source, kita mengenal begitu banyak program seperti ini. Salah satu dari tool tersebut yang cukup menarik untuk digunakan adalah w3mir, sebuah www mirroring tool yang cukup kaya fitur. W3mir dapat men-download keseluruhan direktori ataupun sekadar file-file tertentu. Selain itu, ketika men-download, w3mir juga akan memperbaiki URL agar sesuai dengan kondisi local copy Anda sehingga local browsing tetap dapat dilakukan. W3mir mendukung HTML4, CSS (partial support), Java, ActiveX dan file-file PDF, di luar fiturfitur lainnya. Di artikel kali ini, kita akan membahas cara-cara mirroring beserta tip menggunakan w3mir. W3mir dibangun dengan Perl sehingga ANda akan membutuhkan Perl terinstal disistem Anda (hampir semua distro umum sudah melakukannya). Selain itu, beberapa modul perl harus diinstal agar w3mir dapat bekerja. Anda bisa mendapatkan perl-URI, perl-libwww-perl, perl-HTML-parser di
72
INFOLINUX 06/2005
CPAN atau di CDROM distro Anda. Pustaka-pustaka tersebut cukup umum. Installah dengan tool packaging distro Anda untuk lebih mudahnya. Setelah semua kebutuhan w3mir terpenuhi, Anda bisa men-download tool ini di website-nya, http://langfeldt. net/w3mir/. Untuk menggunakan, Anda bisa mempergunakan file konfigurasi atau tidak sama sekali. Apabila tidak mempergunakan file konfigurasi, Anda akan selalu memberikan opsi tertentu ketika menjalankan program ini. Untuk mudahnya, kita tidak akan mempergunakan file konfigurasi dalam artikel ini. Apabila diinginkan, Anda bisa meng-copy-kan contoh file konfigurasi yang datang bersama paket ini ke home directory Anda dengan nama .w3mir. Contoh konfigurasi tersebut sudah self-documented. Untuk melihat opsi yang tersedia, seperti biasa, berikan opsi -h pada saat menjalankan w3mir. Penerapan opsi-opsi tersebut akan kita bahas sama-sama dalam bagian contoh. Untuk mencoba w3mir, alangkah baiknya apabila Anda terhubung ke jaringan lokal yang menyediakan file sharing dari www, atau Anda dapat membangun web server sederhana untuk mencoba.
Contoh-contoh penggunaan Menampilkan daftar file yang akan di-
download, tanpa men-download terlebih dahulu. Kadang-kadang, kita ingin mengetahui filefile apa saja yang akan di-download dalam proses mirroring. Beberapa pengguna yang paranoia umumnya akan melakukan hal ini. Berikan opsi -f untuk menampilkan
www.infolinux.web.id
daftar file seperti contoh berikut: $ w3mir -f http://192.168.0.1/ pub/ w3mir: http://192.168.0.1/ robots.txt w3mir: index.html, got and forgot it. w3mir: That’s all (2073+463 bytes of it).
Untuk lebih baik lagi dalam menampilkan URL, Anda dapat mengombinasikannya dengan opsi -l, seperti contoh berikut: $ w3mir -l -f http://192.168.0.1/pub/ w3mir: http://192.168.0.1/ robots.txt w3mir: index.html, got and forgot it. ... w3mir: That’s all (2073+463 bytes of it).
Sebagai catatan, Anda harus menuliskan opsi -l dan -f secara terpisah. w3mir tidak mengenali -l dan -f sebagai -lf atau -fl. Catatan berikutnya adalah, walaupun tidak ada file yang akan di-download ketika Anda membuat list seperti ini, file untuk kebutuhan internal w3mir, yaitu .redirs dan .referers akan dibuat. Anda bisa mengabaikan file ini. Selain untuk kebutuhan audit keamanan, daftar file ini sebenarnya cukup berguna. Asumsikan Anda tidak memiliki koneksi Internet, namun rekan Anda selalu bersedia untuk men-download URL pesanan Anda. Hanya, beliau tidak mau re-
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL w3mir
pot-repot mencari URL apa yang Anda inginkan di search engine. Beliau meminta list URL agar dapat dilewatkan ke script untuk men-download file-file yang bersangkutan. Dalam hal ini, Anda bisa mempergunakan w3mir untuk menghasilkan list (terutama kalau Anda ingin men-download informasi dari beberapa website sekaligus, dengan filter file tertentu).
lihat progress download yang kita lakukan. Sekadar untuk memastikan semuanya bekerja dengan baik, misalnya. Anda bisa memberikan opsi -c kepada w3mir dalam menampilkan progress peng-copy-an file. Sayangnya, opsi ini tidak terlalu bisa diandalkan. Terkadang opsi ini bekerja, terkadang tidak bekerja. Jadi, hanya gunakan kalau benar-benar perlu.
Men-download file tunggal. Untuk men-download file tunggal dengan w3mir, Anda tidak perlu memberikan opsi apapun. Cukup sebutkan saja URLnya, seperti contoh berikut:
Men-download direktori secara rekursif. Inilah yang umumnya kita inginkan. Untuk mendapatkan fasilitas ini, di mana w3mir akan mengambil semua file dalam direktori yang kita minta, berikan saja opsi -r, dan secara otomatis sebuah local copy akan tersedia di harddisk Anda. Contoh:
$ w3mir http://192.168.0.1/pub/ OS/SUSE91/INSTALL/INDEX.gz w3mir: http://192.168.0.1/ robots.txt w3mir: INDEX.gz: 34162 bytes w3mir: That’s all (35205+549 bytes of it).
Menampilkan progress. Untuk file besar, terkadang kita ingin me-
$ w3mir -r http://192.168.0.1/ pub/Apps/Office/Kamus/ KamusLain1/ w3mir: http://192.168.0.1/ robots.txt w3mir: index.html: 812 bytes ... ...
www.infolinux.web.id
w3mir: ?C=N: 812 bytes w3mir: That’s all (2159676+2439 bytes of it).
Setelah selesai download, perhatikanlah direktori aktif Anda. File yang ada di dalam direktori di server secara otomatis akan tersimpan. Mirror keseluruhan site. Untuk melakukan mirror keseluruhan situs, cukup berikan saja opsi -r pada direktori tertinggi dari site yang ingin Anda mirror. Hanya, Anda perlu sedikit cermat dalam melakukan hal seperti ini. Pertama, Anda mungkin perlu membatasi kedalaman rekursi ketika w3mir men-download. Secara default, w3mir akan terus mengikuti link apabila Anda memberikan opsi -r. Hal ini bisa menjadi bermasalah ketika website bersangkutan memasang perangkap. Anda bisa mempergunakan file konfigurasi dengan direktif Ignore. Sebagai contoh: Ignore: /*/*/*/*/*/*/
INFOLINUX 06/2005
73
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
w3mir
Direktif ini akan membatasi sampai kedalaman 4 level (3 garis miring pertama untuk internal w3mir apabila url yang diberikan telah memiliki 3 garis miring pertama seperti http://192.168.0.1/). Menampilkan isi file. Bagaimana kalau Anda ingin sekadar menampilkan isi dari suatu file namun tidak ingin menyimpan filenya ke harddisk Anda? Ini mirip dengan perintah cat. Caranya, berikan saja opsi -s (diikuti oleh nama file lengkap) pada command line. Isi dari file yang Anda tampilkan tersebut akan tampil pada stdout. Dengan pemahaman tersebut, Anda bisa menyimpan isi file yang ditampilkan tersebut ke file dengan nama lain. Cukup arahkan stdout Anda ke file lain seperti contoh berikut: $ w3mir -s http://192.168.0.1/ pub/ > a.html w3mir: http://192.168.0.1/ robots.txt w3mir: index.htmlw3mir: That’s all (2073+463 bytes of it).
Apabila Anda buka file a.html tersebut, maka isinya akan sama dengan apa yang seharusnya Anda lihat ketika mengarahkan browser ke alamat yang kita berikan kepada w3mir. Berpura-pura sebagai agent lain. Setiap http agent yang kita miliki, entah web browser, downloader, dan lain sebagainya umumnya mengatur nama agent sesuai dengan nama programnya. Ketika kita menggunakan w3mir, nama agent yang dikirim ke web server adalah w3mir/version-releasedate. Ketika kita ingin men-download webite yang hanya menerima agent tertentu misalnya, kita perlu berpura-pura sebagai agent yang diizinkan. Caranya adalah dengan memberikan opsi -agent dan menyebutkan nama agent. Kita tentu bisa menuliskan apa yang kita inginkan. Sebagai contoh: $ w3mir -agent ‘Mozilla/8.1 (compatible; MSIE7.0; WIndows 2005)’ -f http://192.168.0.1/ pub/
Menampilkan URL yang tersimpan dalam
dokumen. W3mir dapat pula mengetahui URL apa
74
INFOLINUX 06/2005
saja yang terdapat suatu dokumen. Anda mungkin ingin menampilkannya. Untuk itu, berikan opsi -l (L kecil) seperti contoh berikut ini: $ w3mir -l http://192.168.0.1/ pub/Intermezzo/Interview/Fosdem\ 2002\ -\ report.htm w3mir: http://192.168.0.1/ robots.txt http://www.freehackers.org/ ... ... ... w3mir: That’s all (24460+561 bytes of it).
Memproses file secara batch. Secara default, ketika men-download sebuah file, w3mir akan mencari URL di dalam file tersebut untuk proses download berikutnya. Dan, ini tidak hanya berlaku untuk file HTML, namun juga file PDF. Tentunya, proses seperti ini akan memakan waktu dan terkadang tidak selalu diinginkan. Apa yang Anda inginkan barangkali hanyalah mendownload sebuah file dan tidak peduli dengan URL yang terdapat di dalamnya. Untuk kebutuhan seperti ini, Anda bisa memberikan opsi -B ketika men-download. Harap diperhatikan bahwa opsi ini seharusnya tidak dikombinasikan dengan opsi -r yang akan menyebabkan w3mir mendownload secara rekursif. Apabila Anda melakukannya, apa yang Anda download tidak akan benar-benar dapat digunakan sebagai mirror karena tidak ada URL yang dimanipulasi. Menangani javascript. Bagaimana kalau HTML yang ingin didownload berisikan javascript? W3mir akan berusaha untuk tidak mengganggu script tersebut. Namun, w3mir tidak akan dapat benar-benar bekerja dengan javascript (dalam artian menjalankan javascript). Dengan demikian, hasil download mungkin tidak akan persis sama dengan yang tersimpan di server. Menangani CSS. W3mir dapat bekerja dengan CSS, namun tidak mendukung sepenuhnya. Artinya, style yang didefinisikan dalam halaman HTML akan di-download apa adanya. Begitupun
www.infolinux.web.id
dengan file CSS eksternal. Yang tidak akan dilakukan oleh w3mir adalah menganalisis dan men-download apa yang terdapat dalam CSS (apabila ada). Menangani PDF. W3mir, seperti sempat disebutkan sebelumnya, dapat pula bekerja dengan file PDF. W3mir dapat meng-extract URL yang tersimpan di dalam file PDF dan dapat mendownload URL tersebut apabila diinginkan. Hanya, W3mir tidak dapat mengubah URL di dalam file PDF tersebut agar sesuai dengan kondisi mirror. Hal ini cukup repot untuk dilakukan dan bukan merupakan fungsi utama program. Menangani CGI. W3mir tidak akan bisa men-download script CGI apa adanya karena script CGI tersebut akan dikerjakan dan hasilnyalah yang akan didapat oleh web server untuk dikirimkan ke client. Jadi, apa yang bisa Anda dapatkan hanyalah hasil pemrosesannya saja. Menggunakan W3Mir dengan protokol HTTP tidak akan membuat kita bisa mendapatkan semua file di web server. Bekerja dengan proxy server. Untuk bekerja dengan proxy server, Anda dapat mempergunakan opsi -P ketika menjalankan w3mir. Berikut adalah contohnya: $ w3mir -P proxy_server:8080 http://www.site.com/
Untuk proxy yang mewajibkan username dan password, Anda dapat menspesifikasikan username dan password tersebut di dalam file konfigurasi. Berikut ini adalah direktif yang digunakan dan contohnya: HTTP-Proxy-user: proxy-username HTTP-Proxy-passwd: proxypassword
Di Internet, terutama soal TI, kita bisa mendapatkan begitu banyak hal. Apabila kita tidak memiliki koneksi 24/7, kita tentu bisa mempergunakan program semacam w3mir dalam mengambil informasi (terutama secara berkala di kala koneksi sedang cepat). Hanya, masalah legal juga harus diperhatikan. Demikianlah pembahasan kita tentang w3mir. Selamat mencoba! Noprianto ([email protected])
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
NFS
Berbagi File Lewat NFS Anda tidak harus selalu berbagi file dalam protokol SMB. Apabila lingkungan kerja Anda adalah UNIX, maka Anda selalu bisa mempergunakan NFS dalam berbagi file. Bahkan, dengan beberapa pengaturan, Anda pun dapat mempergunakan NFS file sharing di lingkungan kerja Windows.
A
pabila Anda bekerja dalam satu komputer, maka berbagi file tidak akan menjadi isu penting. Namun, di lingkungan jaringan kecil sampai di lingkungan kerja besar, berbagi file adalah hal yang penting. Terlepas dari kerugiankerugiannya, berbagi file juga memiliki banyak keuntungan. Salah satunya adalah user kemudian dapat bekerja di workstation manapun selama diatur untuk dapat mengakses file server. Selain itu, back-up juga senantiasa akan lebih mudah untuk dilakukan. Kita mengenal beberapa cara berbagi file. Dua protokol yang sangat populer adalah protokol SMB dan NFS. Keduanya merupakan protokol yang matang dan terus dikembangkan. SMB populer dikarenakan digunakan pada Windows (dengan lebih dari 90% market share) dan beberapa sistem operasi lain, sementara NFS populer karena digunakan pada dunia UNIX. Namun, kedua protokol tersebut sudah bukan milik Windows lagi atau UNIX lagi. Implementasi SMB melalui proyek SAMBA di Linux sudah cukup matang, dan di akhir tulisan, kita juga akan membahas sedikit tentang NFS di Windows. Di artikel kali ini, kita akan membahas langkah-langkah cepat untuk mengatur file sharing menggunakan NFS. Distro yang dipergunakan adalah SUSE 9.1, walaupun tidak akan banyak perbedaan dengan distro lain. Bagi pengguna yang telah terbiasa menginstal program di Linux, melakukan konfigurasi sederhana dan dapat melakukan mounting partisi, maka konfigurasi NFS dapat dilakukan dengan sangat cepat. Tutorial ini juga hanya akan memanfaatkan satu komputer, sehingga komputer tersebut berfungsi sebagai server dan client NFS.
76
INFOLINUX 06/2005
Instalasi paket Instalasi paket NFS tidaklah rumit, bahkan bagi Anda yang melakukan kompilasi dari source. Paket NFS bukanlah paket dengan banyak dependency yang menyebalkan. Namun, sebelum kita melakukan instalasi, ada baiknya apabila kita memperhatikan tipe server NFS yang akan kita instal. Kita mengenal dua implementasi server NFS di Linux: Kernel space NFS server dan User space NFS server. Sesuai namanya, yang pertama akan berjalan dengan peran kernel dan memiliki sejumlah kelebihan seperti kecepatan yang lebih tinggi dan prioritas yang lebih tinggi. Yang kedua adalah aplikasi user space dan juga memiliki kelebihan seperti tidak akan mencampuri kerja kernel. Umumnya, kernel space NFS server lebih populer. Namun, User space NFS server juga tak kalah banyak digunakan. Walau sebenarnya, apapun yang Anda pilih, tidak akan banyak mempengaruhi konfigurasi untuk berbagi filesistem. Di distro SUSE, paket untuk Kernel space NFS adalah nfs-utils, sementara paket untuk User space NFS adalah nfs-server. Memang agak sedikit membingungkan. Keduanya saling konflik, dengan demikian, Anda harus memilih salah satunya. Bagi Anda yang menggunakan distro lain, carilah NFS di dalam CD/DVD distro Anda. NFS telah dipaketkan ke dalam hampir semua distro Linux. Bagi Anda yang ingin melakukan kompilasi dari source (kurang disarankan), Anda bisa men-download kernel space NFS di http://nfs.sourceforge. net. User space NFS server bisa di-download di ftp://linux.mathematik.tu-darmstadt.de/pub/linux/people/okir. Dalam tulisan ini, penulis akan mempergunakan User space NFS. Dengan demikian, paket yang akan penulis instal
www.infolinux.web.id
adalah nfs-server. Berikut ini adalah perintah untuk instalasi nfs-server: # yast -i nfs-server
Setelah instalasi selesai, Anda pun siap untuk mengonfigurasi filesistem yang akan Anda share.
Konfigurasi Pada dasarnya, untuk berbagi filesistem dengan NFS, file yang perlu Anda edit hanyalah /etc/exports. Di SUSE, file ini telah terinstal dengan sendirinya apabila Anda telah menginstal paket netcfg (yang umumnya akan terinstall otomatis). FIle-file lain seperti /etc/hosts.allow dan /etc/hosts.deny dapat Anda edit untuk meningkatkan keamanan dengan proteksi host. Setiap entri di /etc/exports menspesifikasikan volume yang akan dishare dan bagaimana kita melakukan sharing. Format setiap entri di /etc/exports cukuplah sederhana dengan sintak berikut ini: <mesin1>[(opsi1,opsi2 ,...,opsin)] [mesin2(opsi1,opsi2 ,...,opsin) ...]
Sebagai contoh, andaikata kita ingin membagi /opt kepada host 192.168.0.51 dalam modus read-only, maka berikut ini adalah entri pada /etc/exports: /opt 192.168.0.51(ro)
Anda bisa mempergunakan penanda network/netmask (sebagai contoh: 192.1 68.0.0/255.255.255.0) ataupun * (sebagai contoh *.infolinux.co.id) untuk membagi volume secara lebih fleksibel untuk jaringan besar. Setiap opsi, seperti pada rumus umum sebelumnya, dipisahkan dengan tanda koma. Berikut ini adalah beberapa opsi yang
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
NFS
mungkin akan sering digunakan: rw, melakukan sharing secara readwrite. Kita akan membahas isu ini secara tersendiri, setelah ini. sync, berbagi secara sinkronous. Pada NFS 2 (saat ini digunakan versi 3 dan 4), ini berarti request tidak akan selesai sampai semua data telah ditulis ke disk. Sementara, NFS 3 melengkapi informasi request dengan status data sehingga client dapat melakukan aksi untuk menulis/mengabaikan perubahan sesuai status. Saat ini, sync adalah opsi default. async, berbagi secara asinkronous. Lawan dari sync. Aman digunakan untuk NFS SWAP (swapfile melalui NFS) dan file-file read-only (seperti file-file yang disimpan di CDROM). root_squash. Apabila user root dari client mengakses volume yang dishare dengan opsi ini, maka oleh server akan dibelokkan menjadi user nobody sehingga user root dari client tidak menjadi user root pada volume yang di-share tersebut. Opsi ini adalah opsi default. Anda bisa men-disable opsi ini dengan opsi no_root_squash. Apabila Anda ingin menerapkan root_squash pada semua user, maka gunakanlah opsi all_squash. Dengan demikian, Anda segera bisa menentukan volume filesystem mana saja yang akan dishare di file /etc/exports ini. Setelah selesai mengonfigurasi, Anda bisa segera menjalankan NFS server sehingga client dapat segera mengakses volume yang Anda share. Pada distro SUSE, berikan perintah berikut ini untuk menjalankan NFS Server: # rcnfsserver start
Situs NFS.
Mengakses dari client Client kini dapat mengakses volume yang Anda share dengan beberapa cara. Yang pertama adalah dengan melakukan mounting di command line mempergunakan program mount dengan rumus umum seperti berikut: # mount -t nfs <server>: <mount_point>
Sebagai contoh, apabila server adalah 192.168.0.51 dan volume yang di-share adalah /opt dan kita ingin melakukan mounting ke /mnt, maka berikut ini adalah perintah sebenarnya: # mount -t nfs 192.168.0.51:/opt /mnt/
Dalam melakukan mounting, perhatikan tanda titik dua yang memisahkan nama host dan volume yang dishare. Cara kedua yang bisa dilakukan adalah dengan menyebutkan volume yang ingin kita mount di /etc/fstab. Dengan demikian, kita bisa menikmati volume yang akan termount otomatis begitu proses booting selesai dilakukan, atau sekadar dapat melakukan proses mounting dengan hanya menyebutkan mount point-nya saja. Berikut ini adalah entri dalam /etc/fstab untuk server, volume dan mount point pada cara sebelumnya: 192.168.0.51:/opt /mnt defaults
nfs
User ID mapping Salah satu guna dari NFS adalah menyediakan sebuah server yang berisikan semua home direktori user, yang bisa diakses dari manapun dalam suatu jaringan, oleh user dengan hak akses baca/tulis. Ini adalah prinsip yang digunakan pada jaringan diskless seperti LTSP. Ketika user di suatu client mengakses volume yang di-share oleh NFS server, maka id user tersebut akan dikirimkan ke NFS server. Apabila id user sama persis dengan id user di server dan tidak ada opsi all_squash yang diberikan, maka user tersebut dapat mengakses semua file yang dimiliki sesuai dengan haknya, seolah-olah user tersebut mengakses secara lokal. Masalahnya, kondisi ini tidak selalu tercapai. Menggunakan /etc/passwd se-
www.infolinux.web.id
bagai database password yang tidak memiliki fitur untuk replikasi, akan sangat report untuk selalu menyinkronisasi database password antar-host. Bagi Anda yang menghadapi kondisi seperti ini, NFS menyediakan beberapa cara untuk melakukan mapping user id dan group id secara dinamis: file statis, NIS, dan mempergunakan program ugidd yang datang bersama paket nfs-server. Opsi terakhir ini merupakan opsi yang paling tidak aman karena siapa saja bisa melakukan query ke client untuk mendapatkan username yang valid. Apabila Anda harus menggunakan cara ini, maka Anda bisa mempergunakan opsi map_daemon, dan rujuklah ke dokumentasi /etc/ exports untuk keterangan lebih lanjut.
Lingkungan Windows NFS adalah teknologi yang lazim digunakan di dunia UNIX. Namun, teknologi ini tidak hanya bisa dinikmati oleh pengguna UNIX. Pengguna Windows pun dapat bertindak sebagai NFS server atau NFS client berkat program Microsoft SFU yang disediakan oleh Microsoft. Program tersebut dapat didownload di http://www.microsoft.com/windows/sfu/. Dengan memanfaatkan NFS di Windows, kita, dalam banyak hal bisa memanfaatkan Windows seperti halnya server UNIX. Hanya, sebelum Anda memutuskan untuk mengubah protokol file sharing di lingkungan kerja Anda, hitung-hitunglah dulu apakah menggunakan NFS untuk jaringan Windows tepat atau tidak. Sebagai contoh, apabila terdapat 10 komputer dengan komposisi 8 UNIX dan 2 Windows dilayani oleh 2 server UNIX, maka pilihan menggunakan NFS mungkin baik apabila akan ada kecenderungan untuk bermigrasi ke UNIX secara bertahap. Namun, apabila kecenderungan OS client adalah Windows, maka menggunakan NFS hanya menambah kerjaan saja. Protokol SMB akan lebih cocok diterapkan. NFS adalah teknologi yang sangat berguna. Banyak pihak telah merasakan manfaatnya. Apabila Anda menggunakan LTSP misalnya, maka NFS berperan sangat besar. Di lingkungan-lingkungan kerja berbasis UNIX, NFS adalah kebutuhan sehari-hari. Selamat mencoba! Noprianto ([email protected])
INFOLINUX 06/2005
77