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).
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.