NFS Server Di Mac OSX 10.9

Beberapa hari belakangan ini notebook Thinkpad X220 saya mulai menunjukkan tanda-tanda masalah. Mulai dari temparatur CPU yang mendadak naik melebihi ambang batas, sampai bunyi “ticking” dari harddisk-nya. Notebook ini adalah notebook kantor tapi sudah lama tidak saya gunakan karena saya memilih untuk bekerja dengan MacBook pribadi. Saya manfaatkan saja sebagai mesin tes untuk belajar ini itu, termasuk belajar virtualisasi KVM. Saya memasangkan CentOS Linux 6.5 pada Lenovo Thinkpad X220 ini (saya pilih hostname centosdev01). Saya belum cek lebih jauh apa masalahnya & belum saya bawa juga ke service center. Di dalam centosdev01 ini saya sudah banyak membuat KVM virtual machine untuk keperluan tes. Karena khawatir harddisk-nya mati total, Sabtu kemarin saya memutuskan untuk melakukan full backup terlebih dulu.

Saya pilih untuk menggunakan Clonezilla untuk melakukan disk-to-image backup (backup keseluruhan harddisk). Harddisk yang terpasang pada notebook ini berukuran 320GB. Saya bingung juga memilih lokasi untuk menyimpan hasil backup. Saya punya harddisk eksternal WD MyBook yang cukup besar, ada sekitar 1.8GB  1.8TB ruang sisa. Sayangnya harddisk ini terpasang pada Mac Mini; salah satu partisinya dipakai untuk TimeMachine. Akhirnya saya putuskan untuk mengaktifkan NFS server pada Mac Mini supaya Clonezilla bisa langsung mengirimkan hasil backup ke WD MyBook tadi.

Mac OSX sudah dilengkapi dengan NFS server. Ini tulisan singkat sebagai catatan pribadi tentang cara mengaktifkan servis NFS pada Mac OSX 10.9 Mavericks. Langkah-langkahnya cukup mudah seperti berikut ini :

  1. Pertama saya buat dulu direktori dalam WD MyBook tadi untuk di-share via NFS :
    ttirtawi@macmini:~ $ mkdir /Volumes/MACMINI_DATA/NFS
    
  2. Kemudian saya perlu menambahkan direktori tadi ke dalam berkas /etc/exports seperti berikut ini :
    ttirtawi@macmini:~ $ sudo vi /etc/exports
    /Volumes/MACMINI_DATA/NFS -maproot=root -network 192.168.10.0 -mask 255.255.255.0
    ttirtawi@macmini:~ $ 
    
  3. Setelah itu saya tinggal me-restart servis NFS dengan perintah berikut ini :
    ttirtawi@macmini:~ $ sudo nfsd restart
    
  4. Untuk melihat status NFS & direktorinya yang aktif, saya bisa gunakan perintah berikut ini :
    ttirtawi@macmini:~ $ sudo nfsd status
    nfsd service is enabled
    nfsd is running (pid 41907, 0 threads)
    ttirtawi@macmini:~ $
    ttirtawi@macmini:~ $ showmount -e
    Exports list on localhost:
    /Volumes/MACMINI_DATA/NFS           192.168.10.0
    ttirtawi@macmini:~ $
    

    Pada contoh di atas saya tambahkan opsi untuk kontrol akses NFS client, hanya NFS client dalam jaringan 192.168.10.0/24 yang bisa mengakses direktori tersebut.

  5. Sebelum memulai backup dengan Clonezilla, saya coba dulu akses NFS direktori tadi dari mesin centosdev01 :
    ttirtawi@centosdev01:~$ sudo mount 192.168.10.13:/Volumes/MACMINI_DATA/NFS /testing-nfs-mac/
    ttirtawi@centosdev01:~$ df -h
    Filesystem                               Size  Used Avail Use% Mounted on
    /dev/mapper/vg_centosdev01-lv_root        50G  9.6G   38G  21% /
    tmpfs                                    3.8G  300K  3.8G   1% /dev/shm
    /dev/sda1                                485M   40M  420M   9% /boot
    /dev/mapper/vg_centosdev01-lv_home       227G  182G   34G  85% /home
    192.168.10.13:/Volumes/MACMINI_DATA/NFS  2.8T  1.4T  1.5T  48% /testing-nfs-mac
    ttirtawi@centosdev01:~$
    

    Setelah centosdev01 bisa melakukan mounting NFS direktori tadi saya bisa cek juga status NFS client yang sedang aktif dengan perintah showmount :

    ttirtawi@macmini:~ $ showmount
    Hosts on localhost:
    192.168.10.50
    ttirtawi@macmini:~ $
    

Di tulisan ini saya tidak menuliskan secara detail langkah backup dengan Clonezilla (mungkin kapan-kapan bisa saya tulis juga di blog ini). Singkatnya saya siapkan USB bootable Clonezilla, lalu boot Lenovo X220 tadi dengan USB tersebut sebagai boot disk-nya. Clonezilla punya user interface yang cukup mudah diikuti, meskipun user interface-nya masih berbasis teks. Ada satu langkah untuk menentukan lokasi backup. Saya pilih untuk masuk ke shell terlebih dulu untuk menyambungkan Clonezilla dengan NFS server-nya Mac. Saya harus menggunakan /home/partimag sebagai mountpoint-nya. Proses backup via jaringan ini cukup lama, saya tidak tahu tepatnya berapa kecepatan transfer data ke NFS server tadi. Ini screenshot saat proses backup mulai berjalan :

CloneZilla With NFS

Setelah selesai saya lihat hasilnya di Mac :

ttirtawi@macmini:NFS $ ll
total 16
lrwxrwxrwx   1 ttirtawi  staff    38B Jun 28 16:45 partimag -> //lib/live/mount/medium//home/partimag
drwxr-xr-x  70 ttirtawi  staff   2.3K Jun 28 22:05 2014-06-28-09-img
ttirtawi@macmini:NFS $ du -sh
 86G    .
ttirtawi@macmini:NFS $ 

Menurut saya Clonezilla cukup hebat melakukan kompresi data,

ttirtawi@centosdev01:~$ df -h
Filesystem                          Size  Used Avail Use% Mounted on
/dev/mapper/vg_centosdev01-lv_root   50G  9.6G   38G  21% /
tmpfs                               3.8G   76K  3.8G   1% /dev/shm
/dev/sda1                           485M   40M  420M   9% /boot
/dev/mapper/vg_centosdev01-lv_home  227G  182G   34G  85% /home
ttirtawi@centosdev01:~$ 

Lihat saja dari sekitar 192GB kapasitas harddisk yang terpakai, hasil backup cuma berukuran separuh dari total penggunaan data.

Sekilas Tentang IP Forwarding

Test Fowarding RHEL6

Beberapa hari lalu salah seorang rekan bertanya via Whatsapp. Dia punya masalah dengan Linux servernya. Katanya servernya punya 2 IP (berbeda jaringan) & ada broadcast request yang datang dari network 1 ke network 2. Padahal menurut rekan saya, kedua IP tersebut harusnya terisolasi satu sama lain. Karena kami berkomunikasi via Whatsapp, saya kurang paham betul apa sebenarnya yang jadi masalah. Rekan saya minta pendapat apa saja yang perlu dicek. Dengan informasi yang terbatas itu saya cuma bisa menduga 2 hal, isu pada IP Forwarding atau Firewall.

Karena pertanyaan itu saya jadi berpikir lagi tentang IP Forwarding. Meskipun saya tahu cara mengaktifkan IP Forwarding di mesin Linux, tapi sampai sekarang saya belum pernah berhenti sejenak untuk memikirkan konsepnya seperti apa. Konsep IP Forwarding yang saya tahu secara sederhana kira-kira seperti ini :

  • Misalkan sebuah server punya 2 NIC (network interface card), NIC#1 terhubung ke network A & NIC#2 terhubung ke B.
  • Bila ada paket IP yang datang melalui NIC#1 menuju network B. Ada 2 kemungkinan yang terjadi :
    • Tanpa IP Forwarding, server tidak akan meneruskan paket itu keluar ke network B. Meskipun dia punya akses ke network B. Ilustrasinya seperti gambar berikut ini :
      Tanpa IP Forwarding
    • Dengan IP Forwarding, server akan meneruskan paket IP melalui NIC#2 itu menuju network B. Jadi gampangnya, akan ada serah terima paket dari NIC#1ke NIC#2 karena server tahu hanya NIC#2 yang tahu caranya mengantar paket ke tujuan. Ilustrasinya seperti gambar berikut ini :
      Dengan IP Forwarding

Konsep sederhana di atas belum melibatkan kemungkinan adanya Firewall yang aktif dalam server tersebut. Mungkin saja meskipun IP Forwarding sudah aktif, paket tetap tidak bisa dikirimkan ke network B karena terbentur oleh Firewall.

Saya jadi penasaran melakukan tes untuk makin menyakinkan diri sendiri soal IP Forwarding & Firewall tadi. Saya segera buka VirtualBox & membuat 2 buah VM (virtual machine), masing-masing menggunakan RedHat Linux 6.

VirtualBox Setup

Strukturnya saya buat mengikuti diagram pada gambar pertama tadi. Berikut detailnya :

Continue reading

Konversi KVM Image Ke VirtualBox

Tulisan ini masih berkait dengan tulisan sebelumnya tentang virtualisasi dengan KVM Linux. Saat membuat virtual machine dengan KVM, aplikasi qemu-kvm akan membuat sebuah virtual harddisk dengan format *.img. Virtual harddisk ini dapat dipasangkan juga pada VirtualBox. Dengan begitu OS yang sudah dipasang di KVM, bisa dijalankan juga di virtual machine-nya VirtualBox.

Untuk dapat menggunakan virtual harddisk ini kita perlu mengkonversi dulu menjadi format *.vdi. Berikut ini adalah contoh proses konversi menggunakan perintah VBoxManage bawaan VirtualBox :

ttirtawi@macmini:~ $ VBoxManage convertfromraw -format VDI centos65-template.img  centos65-template.vdi
Converting from raw image file="centos65-template.img" to file="centos65-template.vdi"...
Creating dynamic image with size 8589934592 bytes (8192MB)...
ttirtawi@macmini:~ $

Di contoh tadi, virtual disk dari KVM berukuran 8GB sementara hasil konversinya cuma berukuran 836MB. Ini karena saat membuat virtual machine KVM, saya memilih opsi “Allocate entire disk now”, artinya KVM melakukan reservasi terlebih dahulu sebesar 8GB. Sementara VirtualBox membuat VDI yang sesuai jumlah data yang sudah dipakai. Meskipun pada akhirnya VirtualBox VM akan mengenali virtual harddisk tersebut sebagai harddisk berukuran 8GB.

ttirtawi@macmini:~ $ ls -thlr centos65-template.*
-rw-------  1 ttirtawi  staff   836M May 31 21:51 centos65-template.vdi
-rw-------  1 ttirtawi  staff   8.0G May 31 17:25 centos65-template.img
ttirtawi@macmini:~ $ 

Sekilas Tentang MacPorts

MacPorts adalah sistem manajemen paket aplikasi-aplikasi open source untuk Mac OSX. Dalam konteks MacPort, aplikasi dapat disamakan penyebutannya dengan istilah port. Di Linux saya biasa menyebut aplikasi (software) sebagai paket (package). Awalnya saya bingung memahami apa bedanya port dengan sistem manajemen paketnya Linux. Misalnya di RedHat Linux saya gunakan perintah rpm -qa untuk menampilkan semua package yang terpasang :

ttirtawi@centosdev01:~$ rpm -qa | grep vim
vim-common-7.2.411-1.8.el6.x86_64
vim-enhanced-7.2.411-1.8.el6.x86_64
vim-minimal-7.2.411-1.8.el6.x86_64
ttirtawi@centosdev01:~$ 

atau di Ubuntu/Debian saya gunakan dpkg -l.

ttirtawi@gbt733:~$ dpkg -l |  grep vim
ii  vim                                  2:7.3.547-4ubuntu1.1                      i386         Vi IMproved - enhanced vi editor
ii  vim-common                           2:7.3.547-4ubuntu1.1                      i386         Vi IMproved - Common files
ii  vim-runtime                          2:7.3.547-4ubuntu1.1                      all          Vi IMproved - Runtime files
ii  vim-tiny                             2:7.3.547-4ubuntu1.1                      i386         Vi IMproved - enhanced vi editor - compact version
ttirtawi@gbt733:~$ 

Bandingkan dengan perintah port bawaan MacPorts seperti contoh berikut ini :

ttirtawi@macmini:~ $ port installed | grep vim
  vim @7.4.258_0+huge (active)
ttirtawi@macmini:~ $ 

MacPorts menggunakan prinsip yang mirip dengan Ports yang dimiliki oleh FreeBSD. Kebingungan tadi memicu saya belajar lagi tentang FreeBSD Port. Setelah mencoba mempelajari FreeBSD Ports, saya makin bingung. Hmm mungkin lebih tepatnya saya menjadi tertarik memahami sistem kerja Port di FreeBSD. Di lingkungan OS FreeBSD ada perbedaan antara “port” & “package”. Definisi package adalah pre-compiled binary (aplikasi yang sudah “jadi” , sudah di-compile, tinggal pakai). Sementara port adalah kumpulan berkas Portfile, Makefile (atau berkas cmake) & patch yang digunakan untuk menghasilkan sebuah aplikasi melalui proses kompilasi source code. Kode sumber (source code) aplikasinya sendiri bisa saja diambil dari tempat lain. Misalnya aplikasi editor vim, source code-nya sendiri diambil dari website-nya vim. Ini bisa dilihat dari isi berkas Portfile-nya :

ttirtawi@macmini:MacPorts $ more /Users/ttirtawi/MacPorts/var/macports/sources/rsync.macports.org/release/tarballs/ports/editors/vim/Portfile 
# $Id: Portfile 119295 2014-04-22 15:35:47Z raimue@macports.org $

PortSystem          1.0

name                vim
set vim_version     7.4
set vim_patchlevel  258
version             ${vim_version}.${vim_patchlevel}
categories          editors
platforms           darwin freebsd
license             Vim GPL-2+
maintainers         raimue
description         Vi \"workalike\" with many additional features
long_description \
    Vim is an advanced text editor that seeks to provide the power of the   \
    de-facto Unix editor 'Vi', with a more complete feature set.

homepage            http://www.vim.org/

master_sites        http://ftp.vim.org/pub/vim/unix/
patch_sites         http://ftp.vim.org/pub/vim/patches/${vim_version}
distname            vim-${vim_version}
use_bzip2           yes
dist_subdir         vim/${vim_version}
worksrcdir          vim[strsed ${vim_version} {g/\.//}]
extract.only        vim-${vim_version}${extract.suffix}
...
...
...
ttirtawi@macmini:MacPorts $ 

Ketika saya memasang port/aplikasi tertentu, MacPorts akan mengunduh source code aplikasi tersebut., menambahkan patch yang diperlukan, melakukan kompilasi kode, memasang aplikasi hasilnya (executable binaries), serta memasang beserta aplikasi dependensinya. Karena ada proses kompilasi, memasang port terasa jauh lebih lama daripada memasang package di Linux. Sejauh ini kesimpulan saya baik port maupun package dapat diartikan sebagai aplikasi. Bedanya port memerlukan proses kompilasi sendiri. Ada lagi bedanya, kita bisa punya beberapa versi port aplikasi tertentu. Meskipun hanya 1 yang bisa aktif. Di Linux setahu hanya 1 versi package yang bisa dipasang. Bila ingin menggunakan versi lain, saya harus lakukan upgrade atau membuang dulu paket yang sudah ada.

Ok balik lagi ke MacPorts. MacPorts memerlukan aplikasi XCode & XCode Command Line Tools, keduanya tersedia di Mac App Store. Kita bisa memasang MacPorts menggunakan Mac instaler (*.pkg) atau memasangnya secara manual (melakukan kompilasi source code-nya).

Instalasi MacPorts Dengan pkg installer

Ini adalah catatan saya memasang MacPorts pada OSX Mavericks (10.9.2) secara manual. Saya lebih memilih cara ini karena lebih leluasa menentukan beberapa detail proses instalasi. Pertama saya perlu mengambil source code MacPorts dari websitenya MacPorts.

ttirtawi@macmini:~ $ curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.2.1.tar.bz2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  830k  100  830k    0     0   122k      0  0:00:06  0:00:06 --:--:--  189k
ttirtawi@macmini:~ $ 
ttirtawi@macmini:~ $ tar jxf MacPorts-2.2.1.tar.bz2 
ttirtawi@macmini:~ $ cd MacPorts-2.2.1
ttirtawi@macmini:MacPorts-2.2.1 $ 

Setelah diekstrak saya bisa mulai memasang MacPorts dengan 3 langkah kompilasi berikut ini :

ttirtawi@macmini:MacPorts-2.2.1 $ ./configure  --prefix=/Users/ttirtawi/MacPorts/   --with-no-root-privileges
ttirtawi@macmini:MacPorts-2.2.1 $ make
ttirtawi@macmini:MacPorts-2.2.1 $ make install

MacPort secara default akan terpasang pada /opt/local. Saya memilih untuk menyimpan aplikasi MacPorts di home, caranya dengan menggunakan opsi --prefix= saat menjalankan berkas configure. Saya memilih untuk memasang MacPorts tanpa hak akses root dengan menggunakan opsi --with-no-root-privileges. Tanpa opsi --with-no-root-privileges semua perintah MacPorts akan dimiliki oleh root seperti contoh berikut ini :

ttirtawi@macmini:MacPorts-2.2.1 $ ls -trl /Users/ttirtawi/MacPorts/bin/
total 448
-r-xr-xr-x  1 root  admin    2574 May 22 18:03 portmirror
-r-xr-xr-x  1 root  admin   10095 May 22 18:03 portindex
lrwxr-xr-x  1 root  admin       4 May 22 18:03 portf -> port
-r-xr-xr-x  1 root  admin  167464 May 22 18:03 port
-r-xr-xr-x  1 root  admin   37412 May 22 18:03 daemondo
ttirtawi@macmini:MacPorts-2.2.1 $ 

Ini artinya saya perlu menggunakan sudo tiap kali menjalankan perintah port. Dengan opsi --with-no-root-privileges, saya tidak perlu lagi menggunakan sudo :

ttirtawi@macmini:~ $ ls -tlr /Users/ttirtawi/MacPorts/bin/
total 448
-r-xr-xr-x  1 ttirtawi  staff    2574 May 22 18:06 portmirror
-r-xr-xr-x  1 ttirtawi  staff   10095 May 22 18:06 portindex
lrwxr-xr-x  1 ttirtawi  staff       4 May 22 18:06 portf -> port
-r-xr-xr-x  1 ttirtawi  staff  167464 May 22 18:06 port
-r-xr-xr-x  1 ttirtawi  staff   37412 May 22 18:06 daemondo
ttirtawi@macmini:~ $ 

Setelah MacPorts sukses terpasang, saya perlu memperbaharui daftar aplikasi (port tree) dengan menggunakan perintah di bawah ini :

ttirtawi@macmini:MacPorts-2.2.1 $ port -v selfupdate
--->  Updating MacPorts base sources using rsync
receiving file list ... done
base.tar

sent 58 bytes  received 1218655 bytes  162495.07 bytes/sec
total size is 4925440  speedup is 4.04
receiving file list ... done
base.tar.rmd160

sent 58 bytes  received 635 bytes  277.20 bytes/sec
total size is 512  speedup is 0.74
MacPorts base version 2.2.1 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
Synchronizing local ports tree from rsync://rsync.macports.org/release/tarballs/ports.tar
receiving file list ... done
ports.tar

sent 58 bytes  received 12289008 bytes  630208.51 bytes/sec
total size is 60989440  speedup is 4.96
receiving file list ... done
ports.tar.rmd160

sent 58 bytes  received 636 bytes  277.60 bytes/sec
total size is 512  speedup is 0.74
receiving file list ... done
PortIndex

sent 58 bytes  received 1490546 bytes  175365.18 bytes/sec
total size is 10589055  speedup is 7.10
receiving file list ... done
PortIndex.rmd160

sent 58 bytes  received 636 bytes  277.60 bytes/sec
total size is 512  speedup is 0.74
--->  MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run
  port upgrade outdated
ttirtawi@macmini:MacPorts-2.2.1 $ 

Untuk melihat aplikasi yang terpasang melalui MacPorts saya bisa gunakan perintah berikut ini :

ttirtawi@macmini:MacPorts-2.2.1 $ port installed
No ports are installed.
ttirtawi@macmini:MacPorts-2.2.1 $ 

Tentu tidak ada hasilnya karena saya baru saja memasang MacPorts.

Sebagai contoh saya akan memasang aplikasi Wireshark, saya bisa melakukannya dengan menggunakan perintah berikut ini (saya tidak menampilkan semua log instalasi) :

ttirtawi@macmini:MacPorts-2.2.1 $ port install wireshark

--->  Computing dependencies for wireshark
--->  Dependencies to be installed: adns glib2 gettext expat libiconv gperf ncurses libffi perl5 perl5.16 gdbm xz zlib gnutls autoconf m4 automake gmp libidn libtasn1 libtool nettle p11-kit curl-ca-bundle desktop-file-utils pkgconfig popt libxslt libxml2 gtk2 atk gobject-introspection cairo fontconfig freetype bzip2 libpng libpixman xorg-libXext xorg-libX11 xorg-bigreqsproto xorg-inputproto xorg-kbproto xorg-libXau xorg-xproto xorg-libXdmcp xorg-libxcb python27 db46 db_select libedit openssl python_select sqlite3 xorg-libpthread-stubs xorg-xcb-proto xorg-util-macros xorg-xcmiscproto xorg-xextproto xorg-xf86bigfontproto xorg-xtrans xorg-xcb-util xrender xorg-renderproto gdk-pixbuf2 jasper jpeg tiff gtk-doc docbook-xml docbook-xml-4.1.2 docbook-xml-4.2 xmlcatmgr docbook-xml-4.3 docbook-xml-4.4 docbook-xml-4.5 docbook-xml-5.0 docbook-xsl fop itstool gawk readline py27-libxml2 openjade opensp hicolor-icon-theme pango Xft2 harfbuzz graphite2 cmake shared-mime-info intltool gnome-common p5.16-getopt-long p5.16-pathtools p5.16-scalar-list-utils p5.16-xml-parser xorg-libXcomposite xorg-compositeproto xorg-libXfixes xorg-fixesproto xorg-libXcursor xorg-libXdamage xorg-damageproto xorg-libXi xorg-libXinerama xorg-xineramaproto xorg-libXrandr xorg-randrproto kerberos5 libcomerr libgcrypt libgpg-error libgeoip libpcap libsmi lua portaudio
--->  Fetching distfiles for adns
--->  Attempting to fetch adns-1.4.tar.gz from http://jog.id.distfiles.macports.org/macports/mpdistfiles/adns
--->  Verifying checksums for adns
--->  Extracting adns
--->  Applying patches to adns
...
...
...
...
--->  Fetching distfiles for wireshark
--->  Verifying checksums for wireshark
--->  Extracting wireshark
--->  Applying patches to wireshark
--->  Configuring wireshark
--->  Building wireshark
--->  Staging wireshark into destroot
--->  Installing wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
--->  Activating wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
--->  Cleaning wireshark
--->  Updating database of binaries: 100.0%
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.
ttirtawi@macmini:MacPorts-2.2.1 $ 

Setelah wireshark sukses terpasang, saya bisa melihat wireshark sudah ada dalam daftar port tadi :

ttirtawi@macmini:MacPorts-2.2.1 $ port installed | grep wireshark
  wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11 (active)
ttirtawi@macmini:MacPorts-2.2.1 $ 

Saya juga bisa melihat informasi lengkap tentang wireshark (berikut dependensinya) dengan menggunakan perintah berikut ini :

ttirtawi@macmini:~ $ port info wireshark
wireshark @1.10.7 (net)
Variants:             [+]adns, [+]geoip, [+]gnutls, [+]ipv6, [+]libgcrypt, [+]libsmi, [+]lua, [+]rtp, [+]ssl, universal, [+]x11

Description:          A network analyzer that lets you capture and interactively browse Ethernet frames. Packet data can be read from a file, or live from a
                      local network interface.
Homepage:             http://wireshark.org/

Build Dependencies:   pkgconfig
Library Dependencies: glib2, libpcap, kerberos5, zlib, adns, gnutls, libgcrypt, lua, libsmi, libgeoip, portaudio, openssl, gtk2
Conflicts with:       wireshark-devel
Platforms:            darwin
License:              GPL-2 GPL-3
Maintainers:          opendarwin.org@darkart.com
ttirtawi@macmini:~ $ 

Informasi tentang dependensi aplikasi juga bisa dilihat dengan perintah berikut ini :

ttirtawi@macmini:~ $ port deps wireshark
Full Name: wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
Build Dependencies:   pkgconfig
Library Dependencies: glib2, libpcap, kerberos5, zlib, adns, gnutls, libgcrypt, lua, libsmi, libgeoip, portaudio, openssl, gtk2
ttirtawi@macmini:~ $ 

Untuk melihat berkas binary hasil port wireshark , saya bisa gunakan perintah berikut ini :

ttirtawi@macmini:~ $ port content wireshark
Port wireshark contains:
  /Users/ttirtawi/MacPorts/bin/capinfos
  /Users/ttirtawi/MacPorts/bin/dftest
  /Users/ttirtawi/MacPorts/bin/dumpcap
  /Users/ttirtawi/MacPorts/bin/editcap
  /Users/ttirtawi/MacPorts/bin/mergecap
  /Users/ttirtawi/MacPorts/bin/randpkt
  /Users/ttirtawi/MacPorts/bin/rawshark
  /Users/ttirtawi/MacPorts/bin/reordercap
  /Users/ttirtawi/MacPorts/bin/text2pcap
  /Users/ttirtawi/MacPorts/bin/tshark
  /Users/ttirtawi/MacPorts/bin/wireshark
  ....
  ....
  ....
  /Users/ttirtawi/MacPorts/share/wireshark/smi_modules
  /Users/ttirtawi/MacPorts/share/wireshark/text2pcap.html
  /Users/ttirtawi/MacPorts/share/wireshark/tpncp/tpncp.dat
  /Users/ttirtawi/MacPorts/share/wireshark/tshark.html
  /Users/ttirtawi/MacPorts/share/wireshark/wimaxasncp/dictionary.dtd
  /Users/ttirtawi/MacPorts/share/wireshark/wimaxasncp/dictionary.xml
  /Users/ttirtawi/MacPorts/share/wireshark/wireshark-filter.html
  /Users/ttirtawi/MacPorts/share/wireshark/wireshark.html
  /Users/ttirtawi/MacPorts/share/wireshark/ws.css
ttirtawi@macmini:~ $ 

Perintah di atas mirip dengan perintah “rpm -ql wireshark” di RedHat Linux atau perintah “dpkg -L wireshark” di Debian Linux.

Karena saya meletakkan MacPort di lokasi tersendiri (bukan di /opt/local), maka saya perlu memodifikasi .bash_profile seperti ini :

ttirtawi@macmini:~ $ cat .bash_profile 
export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8
export PATH="${PATH}:/Users/ttirtawi/MacPorts/bin:$PATH"
[[ -s ~/.bashrc ]] && source ~/.bashrc
ttirtawi@macmini:~ $ 

Ini supaya saya bisa mengakses aplikasi langsung tanpa perlu mengetikkan full path. Tanpa modifikasi $PATH saya akan mendapati error seperti ini :

ttirtawi@macmini:~ $ wireshark
-bash: wireshark: command not found
ttirtawi@macmini:~ $ 

Tanpa modifikasi $PATH saya akan direpotkan karena tiap kali memanggil aplikasi tersebut saya harus menggunakan full path-nya seperti ini :

ttirtawi@macmini:~ $ /Users/ttirtawi/MacPorts/bin/wireshark -v
wireshark 1.10.7 (Git Rev Unknown from unknown)

Copyright 1998-2014 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with GTK+ 2.24.23, with Cairo 1.12.16, with Pango 1.36.3, with
GLib 2.40.0, with libpcap, with libz 1.2.8, without POSIX capabilities, without
libnl, with SMI 0.4.8, without c-ares, with ADNS, with Lua 5.2, without Python,
with GnuTLS 3.1.22, with Gcrypt 1.5.3, with MIT Kerberos, with GeoIP, with
PortAudio V19-devel (built May 21 2014 12:11:57), with AirPcap.

Running on Mac OS X 10.9.3, build 13D65 (Darwin 13.2.0), with locale
en_US.UTF-8, with libpcap version 1.5.3, with libz 1.2.8, GnuTLS 3.1.22, Gcrypt
1.5.3, without AirPcap.
       Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz

Built using clang 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40).
ttirtawi@macmini:~ $ 

Sekadar tambahan, Wireshark untuk Mac OSX bisa dipasang via MacPorts seperti contoh tadi atau lewat versi pre-compiled yang tersedia di websitenya Wireshark.

Virtualisasi Dengan KVM Linux

Sekilas Tentang Virtualisasi

Saya sudah cukup lama menggunakan Virtualbox untuk melakukan virtualisasi OS. Virtualisasi gampangnya dapat diartikan menjalankan suatu OS di dalam OS. Dengan virtualisasi kita bisa punya beberapa komputer virtual (virtual machine=VM) sekaligus. Misalnya di Mac saya bisa memasang OS Windows 7 dalam sebuah VM. Saya juga bisa punya beberapa VM berisi Linux, dan aneka macam OS lainnya. Dulu sebelum kenal Virtualbox, bila saya menggunakan sebuah notebook pasti saya pasang 2 OS di dalamnya. Saya perlu menentukan akan boot ke OS Linux atau Windows. Sistem dual boot seperti itu memang lebih powerful karena OS langsung berinteraksi dengan hardware komputer. Akan tetapi memasang beberapa OS dalam satu komputer seperti itu sangat tidak praktis.

Dalam dunia virtulisasi komputer (physical computer) disebut sebagai host sementara semua virtual machine akan disebut sebagai guest. Virtualbox membantu saya untuk melakukan beberapa hal seperti misalnya :

  • mengakses aplikasi yang hanya tersedia di Windows tanpa harus punya komputer/laptop dengan OS Windows.
  • mencoba varian distro Linux baru tanpa perlu melakukan instal ulang atau dual boot.
  • bereksperimen dengan Linux server, Solaris server, dsb.
  • melakukan eksperimen networking (routing, load balancing, firewall) dengan beberapa VM sekaligus.

Bayangkan bila saya tidak punya VM, berapa banyak komputer (komputer dalam arti fisik sebenarnya) yang harus saya miliki untuk melakukan eksperimen-eksperimen tadi. Dengan menggunakan VM, saya jadi bisa melakukan testing yang memerlukan beberapa komputer sekaligus. Selama komputer saya punya kapasitas memori dan kapasitas harddisk yang cukup, saya bisa membuat banyak VM & menjalankannya sekaligus.

Ada beberapa macam aplikasi virtualisasi seperti misalnya :

  • Virtualbox
  • VMware
  • KVM
  • Xen Hypervisor
  • Oracle VM
  • Proxmox

Aplikasi-aplikasi tersebut biasanya dikenal sebagai hypervisor. Hypervisor menurut Wikipedia didefinisikan sebagai berikut :

A hypervisor or virtual machine monitor (VMM) is a piece of computer software, firmware or hardware that creates and runs virtual machines.

Teknologi virtualisasi sendiri dapat digolongkan menjadi 3 macam :

  • Full Virtualization, yang termasuk dalam kategori ini adalah Virtualbox, KVM. Full Virtualization maksudnya adalah komputer host akan melakukan emulasi perangkat keras (hardware) yang digunakan oleh guest. Guest tidak tahu kalau mesin yang digunakannya adalah virtual machine. Full virtualization ini adalah tipe virtualisasi yang paling fleksibel. Kita tidak perlu menggunakan OS dengan kernel khusus. Kita bisa langsung menginstal sistem operasi layaknya kita menginstal OS pada komputer fisik. Kelemahan full virtualization adalah guest tidak bisa mendapat kecepatan akses penuh saat mengakses hardware (misalnya menulis/membaca data dari dalam harddisk atau bertukar data lewat network interface). Lambatnya akses Input/Output ini akibat dari emulasi hardware yang dilakukan oleh host.
  • Paravirtualization (PV), yang termasuk dalam kategori ini contohnya adalah Xen Hypervisor. PV mengatasi kendala yang dimiliki oleh full virtualisation. OS yang dipasang pada VM adalah versi termodifikasi dari sistem operasi (operating system/OS) aslinya. Misalnya, RedHat Linux menyediakan kernel-xen untuk PV guest. Guest VM sadar kalau mesin yang dipakainya adalah virtual machine. Sistem ini memiliki throughtput yang jauh lebih baik daripada full virtualization & boleh dibilang yang paling baik di antara 3 tipe virtualisasi. Sayangnya kita terikat pada pemilihan OS. Guest hanya bisa menggunakan OS yang memang sudah disiapkan untuk berjalan di atas paravirtualized VM.
  • Para-virtualized driver : sistem ini adalah kombinasi dari kedua sistem sebelumnya. OS yang dipasang pada guest adalah OS biasa (native OS). Hanya saja ada tambahan driver khusus yang perlu dipasang di komputer guest. Meskipun Virtualbox termasuk dalam kategori Full virtualization, Virtualbox bisa termasuk juga dalam kategori ini. Virtualbox menyediakan “Virtualbox Guest Addition”. Virtualbox Guest Addition menyediakan driver-driver khusus untuk perangkat seperti network interface, video card, dsb. Sistem ini menawarkan fleksibilitas dalam pemilihan OS sekaligus menawarkan performa I/O yang lebih baik daripada full virtualization.

Menginstal KVM

Tulisan ini akan jadi catatan pribadi saya tentang langkah-langkah menginstal KVM pada CentOS Linux 6.5. KVM adalah teknologi virtualisasi yang terintegrasi dengan kernel Linux. KVM pertama kali diintegrasikan ke dalam kernel linux sejak versi kernel 2.6.20.

Dalam percobaan ini saya menggunakan notebook Fujitsu S6140 dengan spesifikasi seperti berikut ini :

  • CPU Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz
  • 3GB RAM
  • Harddisk 160GB
  • CentOS 6.5 (@base packages)

Untuk bisa menggunakan KVM, komputer host harus memiliki CPU dengan fitur “hardware virtualization extension”. Pada CPU Intel fitur ini dikenal dengan nama vmx (Intel VT Extention). Sementara pada CPU AMD, fitur tadi dikenal dengan nama “svm” (AMD-V Extention).

Notebook Fujitsu yang saya gunakan sudah dilengkapi dengan vmx. Untuk memastikan saya bisa menggunakan perintah berikut ini :

root@centosdev02:~# egrep "svm|vmx" /proc/cpuinfo
flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm ida dts tpr_shadow vnmi flexpriority
flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm ida dts tpr_shadow vnmi flexpriority
root@centosdev02:~# 

Berikut ini adalah langkah-langkah yang perlu dilakukan untuk menyiapkan KVM :

Continue reading