Arsip Bulan May 2008

Wikipedia Offline Menggunakan Ruby

22 May 2008

Tulisan ini merupakan bagian dari project pengembangan konten lokal yang bermanfaat untuk dimasukan ke dalam distro linux BlankOn.

Wikipedia.org adalah ensiklopedia multibahasa dalam jaringan internet yang disusun agar dapat diisi, dibaca, diawasi dan disunting secara terbuka oleh semua orang. Wikipedia dalam bahasa Indonesia (id.wikipedia.org) saat ini memiliki 68.764 artikel dengan 50.675 pengguna terdaftar. Semua isi teks dilisensikan di bawah Lisensi Dokumentasi Bebas GNU (GDFL). Dengan filosofi “bebas terbuka” dan jumlah artikel yang sedemikian besar, Wikipedia berbahasa Indonesia merupakan ensiklopedia dan sumber pengetahuan yang dapat dimanfaatkan oleh semua orang, terutamanya untuk keperluan edukasi.

Wikipedia Offline, Ruby dan BlankOn

Masalahnya adalah tidak semua penduduk Indonesia memiliki akses internet, jika ada versi offline dari wikipedia ini tentu akan lebih banyak pihak yang dapat menikmati pengetahuan yang terkandung di dalamnya. Distribusi Wikipedia berbahasa lokal menggunakan media CD sudah dipelopori di Jerman dan beberapa negara lain.

Wikipedia menyediakan download dalam banyak bentuk: dump database, halaman HTML static dan offline CD. Kumpulan halaman HTML static wikipedia berbahasa Indonesia berukuran kurang lebih 2GByte, cukup boros ruang penyimpanan sementara versi kompresi 7z nya hanya 95MByte. Sedangkan versi dump database membutuhkan layanan server MySQL, Apache dan Mediawiki. Tersebutlah Stian Haklev, seorang warga negara Norwegia yang sedang bekerja di sebuah LSM di Indonesia menaruh perhatian terhadap kesulitas akses internet di Indonesia dan kebutuhan akan wikipedia offline. Dengan menggunakan bahasa pemrograman Ruby dia mencoba membuat aplikasi yang bisa mengakses koleksi halaman wikipedia berbahasa Indonesia yang masih dalam bentuk terkompresi sehingga hemat ruang. Idenya ini dilontarkan ke milis official Ruby dan id-Ruby dan beberapa anggota milis id-Ruby tertarik dengan ide ini.

Sementara itu BlankOn linux versi 2.0 menjelang masa rilis. Beberapa anggota tim BlankOn mencoba memasukan dua poin di atas ke BlankOn (kalaupun bukan terinstall default minimal merupakan paket tambahan) sehingga bisa menjadi konten lokal yang bermanfaat.

Menginstall Wikipedia Offline (devel progress)

Berikut langkah sementara untuk developer/pemaket, bukan untuk pengguna.

Install paket git (Source Code Management seperti CVS/SVN) untuk mengambil source code zipdoc terbaru dan paket 7zip untuk membuka kompresi 7z hasil download dari wikipedia nanti juga bahasa Ruby dan library kompresi untuk Ruby. Lalu setelah itu install gem trollop dengan menggunakan sistem paket Rubygems:

sudo apt-get install git-core p7zip-full ruby rubygems mongrel libbz2-ruby1.8
sudo gem install trollop

Ambil source code zipdoc terbaru, lalu masuklah ke direktori yang terbentuk:

git clone git://repo.or.cz/zip-doc.git
cd zip-doc

Download data kompresi wikipedia berbahasa Indonesia terbaru dari http://static.wikipedia.org, contohnya:

wget -c http://static.wikipedia.org/downloads/September_2007/id/wikipedia-id-html.7z

Extract hasil download dengan menggunakan aplikasi 7z yang menghasilkan direktori “id”:

7z x wikipedia-id-html.7z

Buat file zdump (kompresi berindeks), lalu jika perlu hapus direktori “id” yang berukuran sekitar 2GByte:

ruby zdump.rb id id.zdump
rm -rf id

Jalankan file mongrel-web untuk menyalakan webserver mini mongrel dan mengakses arsip id.zdump:

ruby mongrel-web.rb id.zdump

Kini wikipedia berbahasa Indonesia sudah bisa diakses di alamat

Menginstall Wikipedia Offline (Final Package)


sudo apt-get install blankon-wikipedia-id


Instalasi Ubuntu Server

12 May 2008

Instalasi Linux Standard

Boot dari CD instalasi Ubuntu. Untuk pembagian partisi :
Swap = 2 x RAM (contoh : untuk RAM 512MB maka Swap = 1024MB)
/ = 5GB (atau sesuaikan dengan keperluan)
/home = Space harddisk untuk data para user

Setting Network dan Tools Standard

Untuk setting network melalui terminal console :
$>sudo gedit /etc/network/interfaces

Contoh setting network :
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.111
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 202.134.2.5 202.134.0.155 203.130.196.5
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.0.111
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 202.134.2.5 202.134.0.155

Sesudah di edit lalu di-save dan ketikan :
$>sudo /etc/init.d/networking restart

Test koneksi dengan cara :
$>ping 192.168.1.11

Ubah dulu default source instalasi aplikasi online kita, dengan maksud supaya instalasi bisa lebih cepat karena menggunakan server-server lokal.
$>sudo gedit /etc/apt/sources.list

Tambahkan baris-baris berikut:
### sources.list.kambing (server di jaringan IIX)
### Repository dengan menggunakan server mirror kambing.ui.edu
### Untuk rilis lain selain feisty silakan ganti semua kata feisty
### dengan misalnya dapper atau edgy dsb
## REPOSITORY UTAMA
deb http://kambing.ui.edu/ubuntu gutsy main restricted universe multiverse
deb-src http://kambing.ui.edu/ubuntu gutsy main restricted universe multiverse
## INI UNTUK MAJOR BUG FIX UPDATES
deb http://kambing.ui.edu/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://kambing.ui.edu/ubuntu gutsy-updates main restricted universe multiverse
## INI UNTUK UBUNTU SECURITY UPDATES
deb http://kambing.ui.edu/ubuntu gutsy-security main restricted universe multiverse
deb-src http://kambing.ui.edu/ubuntu gutsy-security main restricted universe multiverse
## COMPIZ FUSION a.k.a BLINK BLINK
deb http://ppa.dogfood.launchpad.net/amaranth/ubuntu feisty main restricted universe multiverse
deb-src http://ppa.dogfood.launchpad.net/amaranth/ubuntu feisty main restricted universe multiverse

Atau:
### sources.list.foss-id.Depkominfo
### Repository dengan menggunakan server mirror foss-id (server di jaringan TELKOM)
### Untuk rilis lain selain feisty silakan ganti semua kata feisty
### dengan misalnya dapper atau edgy dsb
## REPOSITORI UTAMA
deb http://dl2.foss-id.web.id/ubuntu feisty main restricted universe multiverse
deb-src http://dl2.foss-id.web.id/ubuntu feisty main restricted universe multiverse
## INI UNTUK MAJOR BUG FIX UPDATES
deb http://dl2.foss-id.web.id/ubuntu feisty-updates main restricted universe multiverse
deb-src http://dl2.foss-id.web.id/ubuntu feisty-updates main restricted universe multiverse
## INI UNTUK UBUNTU SECURITY UPDATES
deb http://dl2.foss-id.web.id/ubuntu feisty-security main restricted universe multiverse
deb-src http://dl2.foss-id.web.id/ubuntu feisty-security main restricted universe multiverse
## COMPIZ FUSION a.k.a BLINK BLINK
deb http://ppa.dogfood.launchpad.net/amaranth/ubuntu feisty main restricted universe multiverse
deb-src http://ppa.dogfood.launchpad.net/amaranth/ubuntu feisty main restricted universe multiverse

Sesudah di-save, lalu ketikkan:
$>sudo apt-get update

Setelah itu install

mc

, yaitu tools serbaguna untuk editor, filemanager, ftp client dll.
$>sudo apt-get install mc

Untuk instalasi berbagai macam tools compiler dan library teknis penting
$>sudo apt-get install build-essential

Utiliti untuk kompress atau unkompress file :
$>sudo apt-get install unrar unzip

Untuk pengganti hyperterminal di linux, siapa tahu perlu mengeset modem atau router :
$>sudo apt-get install minicom

Server/Layanan

SSH Server

Instalasi ssh server, uagar server kita bisa diakses secara remote dari komputer lain:
$>sudo apt-get install ssh

LAMP

Jika kita bicara tentang web server, di dunia opensource dan linux umumnya banyak digunakan platform LAMP (Linux, Apache, MySQL dan PHP). Pada LAMP, web server Apache dilengkapi interpreter server side scripting PHP dan database server MySQL, menjadi suatu platform pengembangan dan deployment web yang banyak digunakan oleh developer web.

Instalasi web server Apache dan PHP5:
$>sudo apt-get install apache2 php5 php5-gd php-pear

Instalasi database server MySQL:
$> sudo apt-get install mysql-server phpmyadmin

Jika dirasa perlu nyalakan modul-modul apache:
$> sudo a2enmod rewrite
$> sudo /etc/init.d/apache2 restart

C.3. Ruby dan Ruby on Rails
Ruby adalah bahasa pemrograman berorientasi obyek dan Ruby on Rails adalah framework pengembangan web yang menggunakan bahasa Ruby. Karena kemudahan dan banyak kelebihannya Ruby on Rails kini makin populer di dunia web development.

Instalasi kelengkapan standar Ruby:
$> sudo apt-get install ruby-full rubygems libruby libruby-extras ruby1.8-dev libmysql-ruby rails

Mengupdate Rubygem:
$> sudo gem update
$> sudo gem update --system

FTP Server

Untuk memungkinkan user mengaupload file ke server kita dapat menginstal FTP server:
$> sudo apt-get install vsftpd

Pastikan beberapa konfigurasi di bawah ini:
anonymous_enable=NO
local_enable=YES
write_enable=YES

Setelah mengedit file konfigurasi, restart FTP server:
$> sudo gedit /etc/vsftpd.conf
$> sudo /etc/init.d/vsftpd start

Remote Desktop Server

Terkadang server kita perlu diakses juga GUI-nya dari jauh menggunakan remote desktop untuk keperluan tertentu (menjalankan Wireshark di server misalnya). Disini kita akan menggunakan x11vnc server yang memiliki beberapa kelebihan dibanding fitur remote desktop bawaan Ubuntu.

Menginstall x11vnc dan membuat script pemanggil:
$> sudo apt-get install x11vnc vnc-common
$> vncpasswd ~/.vnc/passwd
$> sudo gedit /usr/local/bin/sharex11vnc

Isi filenya adalah:
#!/bin/sh
x11vnc -nap -bg -many -rfbauth ~/.vnc/passwd -desktop "VNC ${USER}@${HOSTNAME}"|grep -Eo "[0-9]{4}">~/.vnc/port.txt

Ubah script tersebut agar executable:
$> sudo chmod 755 /usr/local/bin/sharex11vnc

Dan jangan lupa tambahkan ke session startup GNOME/KDE/Xfce agar dijalankan setiap kali login ke x window (via System > Preference > Sessions atau Applications > Settings > Autostarted Application).

Untuk mengakses remote desktop bisa digunakan vncviewer dari komputer client kita:
$> vncviewer 192.168.1.111

Gateway / Internet Connection Sharing

Jika server kita tehubung ke internet (baik melalui dial-up ataupun leased line), kita bisa membagi akses internet tersebut dengan komputer lain yang terhubung ke jaringan. Dengan demikian server kita berfungsi sebagai gateway.

Kita akan menggunakan 2 LAN/ethernet card. Ethernet pertama (eth0, 192.168.1.111) terkoneksi ke jaringan LAN melalui switch, ethernet kedua (eth1, 192.168.0.111) mengakses langsung ke sumber leased line akses (pada contoh ini adalah router ber-IP 192.168.0.254). Seluruh komputer yang ada di LAN nantinya harus mengarahkan gateway mereka ke eth0 (192.168.1.111) dan card eth0 tersebut mengarahkan gatewaynya ke eth1. Disini server harus disetting untuk bisa melakukan NAT (Network Address Translation) yang meneruskan request dari LAN ke IP publik atau sebaliknya. Untuk itu perlu diaktifkan IP forwarding dan beberapa baris perintah IPTABLES dengan membuat script sederhana:
$> sudo gedit /etc/init.d/gateway

Filenya berisi:
#! /bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -j MASQUERADE -t nat -s 192.168.1.0/24 -o eth1

Ubah menjadi executable dan dijalankan setiap komputer dinyalakan:
$> sudo chmod +x /etc/init.d/gateway
$> sudo sudo update-rc.d gateway defaults

Proxy Server (SQUID)

Dengan menggunakan SQUID, server kita bisa dijadikan proxy yang berfungsi sebagai:
1.Men-cache halaman web yang telah diakses sehingga aksesnya akan lebih cepat pada kali berikutnya
2.Memfilter alamat web mana saja yang boleh/tidak boleh diakses
3.Memfilter IP/user mana saja yang boleh mengakses internet

Instal Squid dan ubah file konfigurasi sesuai kebutuhan:
$> sudo apt-get install squid
$> sudo gedit /etc/squid/squid.conf

Isi konfigurasi:
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
cache_mem 6 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
dns_nameservers 202.134.0.155 202.134.2.5 203.130.196.5
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl jerbee src 192.168.1.2-192.168.1.32/255.255.255.255
acl blacklist url_regex -i "/etc/squid/blacklist.txt"
acl user12kbps src 192.168.1.0/255.255.255.0
acl workinghour time MTWHFA 09:00-23:50
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny blacklist
http_access allow localhost
http_access allow jerbee
http_access deny all
icp_access allow all
visible_hostname proxy-bdg.telkomspeedy.net.id
delay_pools 1
delay_class 1 3
delay_access 1 allow user12kbps
delay_access 1 deny all
delay_parameters 1 32000/32000 -1/-1 20000/32000
always_direct allow all

Untuk isi file blacklist.txt berisi alamat situs atau keyword yang akan kita blok:
$> sudo gedit /etc/squid/blacklist.txt

Contoh isi blacklist.txt:
.friendster.com
.playboy.com

Lalu tambahkan aturan iptables/firewall agar proxy bersifat transparan:
$> sudo gedit /etc/init.d/gateway

Kini isinya menjadi:
#! /bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -j MASQUERADE -t nat -s 192.168.1.0/24 -o eth1
iptables -t nat -p tcp -A PREROUTING -s 192.168.1.0/24 -d 0/0 --dport 80 -j REDIRECT --to-port 3128

Kita bisa membuat dua macam file konfigurasi (squidjamkerja.conf dan squidsantai.conf), dimana pada squidjamkerja.conf kita membatasi hak akses terhadap situs dan keyword tertentu. Kita akan konfigurasikan crontab agar squid menggunakan squidjamkerja.conf yang ketat sejak jam 9 pagi dan berubah ke squidsantai.conf selewat jam 16.00:
$> sudo /etc/crontab

Tambahkan kedua baris berikut untuk merubah konfigurasi Squid setiap jam 9.00 dan 16.00
00 9 * * * root cp /etc/squid/squidjamkerja.conf /etc/squid/squid.conf | /etc/init.d/squid restart
00 16 * * * root cp /etc/squid/squidsantai.conf /etc/squid/squid.conf | /etc/init.d/squid restart

Jangan lupa restart service cron:
sudo /etc/init.d/cron restart

Samba Server

Untuk sharing dan akses jaringan windows di linux :
$>sudo apt-get install samba smbfs