<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7835980568609830954</id><updated>2012-02-16T14:23:23.715+07:00</updated><category term='Broadband at home'/><category term='Unix'/><category term='OpenSolaris'/><category term='wordpress verify'/><category term='Web Server'/><category term='Interconnect'/><category term='Internet'/><category term='google webmaster'/><category term='Ruby'/><category term='Telco Billing'/><category term='jumpstart'/><category term='DSL'/><category term='Nginx'/><category term='CDMA 450'/><category term='Linux stuff'/><category term='aTutor'/><category term='Tips'/><category term='solaris'/><category term='Interkoneksi'/><category term='Telekomunikasi'/><category term='3G'/><category term='OS'/><title type='text'>/Me on Integrated World</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-2043928800268409467</id><published>2010-08-14T23:23:00.003+07:00</published><updated>2010-08-14T23:27:30.797+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><title type='text'>Bye bye OpenSolaris ?</title><content type='html'>So, I heard that OpenSolaris will be dead a.k.a discontinued.&lt;br /&gt;Me my self, currently has no reason to use OpenSolaris. Why ? Simple question, what cant a Solaris box do compared to OpenSolaris ? currently Solaris also stil free, gcc stil runs on it, (sunfreeware.com ?). Need to install Oracle ? Oracle onlys supports Solaris distribution - not OpenSolaris. Need SUN's good old JDK ? use Solaris :) Not to mention that OpenSolaris distro's loves x86 too much instead Sparc ( well, almost all of my machines in my test lab were sparc :D ). Nexenta for example, the one that I -was- believe to be the ice breaker in Solaris world with their apt-get style, seems love x86 too much. Not too mention the stupidness of OpenSolaris AI installer for Sparc, which need an x86 OpenSolaris to be installed first, plus its additional macro thingy to be configured during wanboot. Why would I need that in Solaris ? Why cant I just plug the disc and do boot - install to my sparc machine ? &lt;br /&gt;&lt;br /&gt;So now, there are only 2 options for my sparc machines, use Solaris, or Linux :D. Debian can run on Sparc platform. Just install sparc-utils, and we'll get the similar administration CLI just as we did on Sparc Solaris. &lt;br /&gt;&lt;br /&gt;But too bad, Debian's apt package for solaris mostly compiled for 32 bit platform. If we need to boost the performace for our apps, we should re-compile it. No big deal, gcc is available :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-2043928800268409467?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/2043928800268409467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=2043928800268409467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2043928800268409467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2043928800268409467'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2010/08/bye-bye-opensolaris.html' title='Bye bye OpenSolaris ?'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-8360732812936525288</id><published>2010-08-11T05:23:00.006+07:00</published><updated>2010-08-11T05:31:47.675+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jumpstart'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><title type='text'>Solaris Jumpstart on Linux</title><content type='html'>&lt;b&gt;&lt;u&gt;Intro :&lt;/u&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;- Linux, Debian based (mine: Lenny), hostname : pegasus, act as the Solaris jumpstart server.&lt;br /&gt;- Solaris, Solaris 10, hostname: solclient, will be the machine to be installed.&lt;br /&gt;- IP addresses range 192.168.10.x (class C), make sure you use standard network class IP, this is where the standard broadcast address (192.168.10.255) comes into play during arp broadcast.&lt;br /&gt;- solclient will broadcast arp request, replied by pegasus's rarpd, and then and IP address will be assigned.  solclient will then download the minimum kernel using tftp. The kernel file name will be the ip address of the solclient. For example, if the assigned IP is 192.168.10.5, and then the kernel name will be C0A80A05. Another way is to use this command:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;elinpra@pegasus &gt; printf "%02X%02X%02X%02X\n" 192 168 10 5&lt;br /&gt;C0A80A05&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This file should be stored inside the root directory of tftp. Check the tftp setting on &lt;b&gt;/etc/inetd.conf&lt;/b&gt;. Here is mine:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;elinpra@pegasus &gt; cat /etc/inetd.conf&lt;br /&gt;tftp            dgram   udp4    wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp/&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Then, the file C0A80A05 should be put in&lt;b&gt; /srv/tftp&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Steps :&lt;br /&gt;&lt;br /&gt;1. Install bootparamd, rarpd, tftpd and nfs-kernel-server in Linux server (pegasus)&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; apt-get install bootparamd rarpd tftpd nfs-kernel-server&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;2. Run iptables -F, make sure no firewall in Linux server&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; iptables -F&lt;/span&gt;&lt;br /&gt;3. Check the mac address of the solaris client.&lt;br /&gt;Try boot from {ok}, see the mac address during booting (if the system is currently up, go to init 0 mode) :&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ok boot net&lt;br /&gt;&lt;br /&gt;Resetting ...&lt;br /&gt;LOM event: +56d+21h39m43s host reset&lt;br /&gt;&lt;br /&gt;þ&lt;br /&gt;Sun Fire V120 (UltraSPARC-IIe 648MHz), No Keyboard&lt;br /&gt;OpenBoot 4.0, 1024 MB memory installed, Serial #61911409.&lt;br /&gt;Ethernet address 0:3:ba:b0:b1:71, Host ID: 83b0b171.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Back to lom&gt; or sc&gt; using 'break' command.&lt;br /&gt;&lt;br /&gt;4. Set &lt;b&gt;/etc/ethers&lt;/b&gt; and &lt;b&gt;/etc/hosts&lt;/b&gt; in Linux server with the mac address and hostname of the solaris client.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;elinpra@pegasus &gt; echo "0:3:ba:b0:b1:71 solclient" &gt;&gt; /etc/ethers&lt;br /&gt;elinpra@pegasus &gt; echo "192.168.10.5 solclient" &gt;&gt; /etc/hosts&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;5. Start the rarpd if has not started yet.( I’m using debian based linux here )&lt;br /&gt;root@pegasus &gt; /etc/init.d/rarpd start&lt;br /&gt;&lt;br /&gt;6. If you're installing using Solaris iso file, mount the iso file to a directory using the following command, otherwise if using Solaris CD/DVD, directly go to step 8:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; mkdir -p /mnt/sol10&lt;br /&gt;root@pegasus &gt; mount -o loop solaris_iso_file.iso /mnt/sol10&lt;br /&gt;root@pegasus &gt; cd /mnt/sol10&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;7. If you have the Solaris 10 CD, insert it on pegasus, do the following steps :&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; cd /mnt/cdrom/&lt;/span&gt;&lt;/span&gt; (to your solaris cdrom directory)&lt;br /&gt;&lt;br /&gt;8. Find the suitable kernel for your machine type. Mine is SunFire v120, so it will be sun4u type. If your hardware is T5220, T2000 etc then you need sun4v kernel.&lt;br /&gt;Locate the kernel on directory Solaris_10/Tools/Boot/platform/sun4u/inetboot for sun4u, or Solaris_10/Tools/Boot/platform/sun4v/inetboot for sun4v.&lt;br /&gt;Copy it to &lt;b&gt;/srv/tftp&lt;/b&gt; and make symbolic link to that file into C0A80A05.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; cp inetboot /srv/tftp&lt;br /&gt;root@pegasus &gt; ln -s /srv/tftp/inetboot /srv/tftp/C0A80A05&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;9. Start tftpd daemon in pegasus :&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; /etc/init.d/openbsd-inetd restart&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;10. start nfs service in pegasus :&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; /etc/init.d/nfs-kernel-server start&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;11. Prepare nfs mount so that solclient later on can download the entire installation package using nfs mount. Set the mount root into where the cdrom or iso files are mounted. Make sure that the nfs mount root from solclient is /sol10.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; exportfs \*:/mnt/cdrom -o fsid=0,ro,no_root_squash,crossmnt,no_subtree_check,sync  &lt;&lt;- for CD/DVD or root@pegasus &gt; exportfs \*:/mnt -o fsid=0,ro,no_root_squash,crossmnt,no_subtree_check,sync&lt;/span&gt;&lt;/span&gt;  &lt;&lt;&gt;Check if the nfs shares can be mounted correctly. &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; mount -t nfs4 pegasus:/sol10 /tmp/somewhere&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Verify in your mount list :&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; df -kh&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Go to /tmp/somewhere, and make sure there’s a directory called sol10/, if not, then the nfs root stil wrong.&lt;br /&gt;&lt;br /&gt;13. Configure bootparams in &lt;b&gt;/etc/bootparams&lt;/b&gt;, fill in this entry:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;solclient    root=pegasus:/sol10/Solaris_10/Tools/Boot install=pegasus:/sol10/ boottype=:in&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;14. You might want to see what's happen in your pegasus using tcpdump:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;root@pegasus &gt; tcpdump -i eth0&lt;br /&gt;tcpdump: verbose output suppressed, use -v or -vv for full protocol decode&lt;br /&gt;listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes&lt;br /&gt;10:35:16.385289 arp who-has osol1 (Broadcast) tell osol1&lt;br /&gt;10:35:16.786701 IP pegasus &gt; OSPF-ALL.MCAST.NET: OSPFv2, Hello, length: 44&lt;br /&gt;10:35:17.904404 IP solclient.syslog &gt; 255.255.255.255.sunrpc: [|syslog]&lt;br /&gt;10:35:18.666258 IP osol2.58847 &gt; resolver.ao.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:18.692884 IP resolver.ao.ericsson.se.domain &gt; osol2.58847: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:18.693883 IP osol2.58848 &gt; resolver.sw.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:18.944002 IP resolver.sw.ericsson.se.domain &gt; osol2.58848: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:18.945066 IP osol2.58849 &gt; resolver.am.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:19.349904 IP resolver.am.ericsson.se.domain &gt; osol2.58849: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:19.350799 IP osol2.58850 &gt; resolver.ao.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:19.391665 IP resolver.ao.ericsson.se.domain &gt; osol2.58850: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:19.426161 IP osol2.58851 &gt; resolver.sw.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:19.713817 IP resolver.sw.ericsson.se.domain &gt; osol2.58851: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:19.714855 IP osol2.58852 &gt; resolver.am.ericsson.se.domain: 57879+ TXT? _nfsv4idmapdomain. (35)&lt;br /&gt;10:35:20.057720 IP solclient.syslog &gt; 255.255.255.255.sunrpc: [|syslog]&lt;br /&gt;10:35:20.125082 IP resolver.am.ericsson.se.domain &gt; osol2.58852: 57879 ServFail 0/0/0 (35)&lt;br /&gt;10:35:21.870552 IP solclient.syslog &gt; 255.255.255.255.sunrpc: [|syslog]&lt;br /&gt;...&lt;br /&gt;10:45:43.677010 IP solclient.afpovertcp &gt; pegasus.nfs: . ack 39685605 win 47784 &lt;/span&gt;&lt;nop,nop,timestamp 4473030="" 559162559=""&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;10:45:43.677183 IP solclient.afpovertcp &gt; pegasus.nfs: . ack 39688501 win 44888 &lt;/span&gt;&lt;nop,nop,timestamp 4473030="" 559162559=""&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;10:45:43.677350 IP solclient.afpovertcp &gt; pegasus.nfs: . ack 39691397 win 41992 &lt;/span&gt;&lt;nop,nop,timestamp 4473030="" 559162559=""&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;15. Boot your solclient from ok prompt:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ok boot net -v - install&lt;br /&gt;Boot device: /pci@1f,0/pci@1,1/network@c,1  File and args: -v - install&lt;br /&gt;3a000 Using RARP/BOOTPARAMS...&lt;br /&gt;Internet address is: 192.168.10.5&lt;br /&gt;Bootparam response received&lt;br /&gt;hostname: solclient&lt;br /&gt;domainname: (none)&lt;br /&gt;Found 192.168.10.1 @ 8:0:20:eb:52:e0&lt;br /&gt;root server: jumpstart (192.168.10.1)&lt;br /&gt;root directory: /sol10/Solaris_10/Tools/Boot&lt;br /&gt;module /platform/sun4u/kernel/sparcv9/unix: text at [0x1000000, 0x10a096d] data&lt;br /&gt;module /platform/sun4u/kernel/sparcv9/genunix: text at [0x10a0970, 0x12615bf] da&lt;br /&gt;module /platform/SUNW,UltraAX-i2/kernel/misc/sparcv9/platmod: text at [0x12615c0&lt;br /&gt;module /platform/sun4u/kernel/cpu/sparcv9/SUNW,UltraSPARC-IIe: text at [0x126184&lt;br /&gt;SunOS Release 5.10 Version Generic_139555-08 64-bit&lt;br /&gt;Copyright 1983-2009 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;Use is subject to license terms.&lt;br /&gt;Ethernet address = 0:3:ba:b0:b1:71&lt;br /&gt;Using default device instance data&lt;br /&gt;mem = 1048576K (0x40000000)&lt;br /&gt;avail mem = 845930496&lt;br /&gt;root nexus = Sun Fire V120 (UltraSPARC-IIe 648MHz)&lt;br /&gt;pseudo0 at root&lt;br /&gt;pseudo0 is /pseudo&lt;br /&gt;scsi_vhci0 at root&lt;br /&gt;scsi_vhci0 is /scsi_vhci&lt;br /&gt;ramdisk0 at root&lt;br /&gt;ramdisk0 is /ramdisk-root&lt;br /&gt;root on /ramdisk-root:a fstype ufs&lt;br /&gt;pcipsy0 at root: UPA 0x1f 0x0&lt;br /&gt;pcipsy0 is /pci@1f,0&lt;br /&gt;PCI-device: pci@1,1, simba0&lt;br /&gt;simba0 is /pci@1f,0/pci@1,1&lt;br /&gt;PCI-device: isa@7, ebus1&lt;br /&gt;ebus1 is /pci@1f,0/pci@1,1/isa@7&lt;br /&gt;pseudo-device: dld0&lt;br /&gt;dld0 is /pseudo/dld@0&lt;br /&gt;SUNW,eri0 : Local Ethernet address = 0:3:ba:b0:b1:71PCI-device: network@c,1, eri&lt;br /&gt;eri0 is /pci@1f,0/pci@1,1/network@c,1&lt;br /&gt;SUNW,eri1 : Local Ethernet address = 0:3:ba:b0:b1:72SUNW,eri1 : Using local MAC&lt;br /&gt;eri1 is /pci@1f,0/pci@1,1/network@5,1&lt;br /&gt;su0 at ebus1: offset 0,3f8&lt;br /&gt;su0 is /pci@1f,0/pci@1,1/isa@7/serial@0,3f8&lt;br /&gt;PCI-device: usb@c,3, ohci0&lt;br /&gt;ohci0 is /pci@1f,0/pci@1,1/usb@c,3&lt;br /&gt;PCI-device: usb@5,3, ohci1&lt;br /&gt;ohci1 is /pci@1f,0/pci@1,1/usb@5,3&lt;br /&gt;cpu0: UltraSPARC-IIe (portid 0 impl 0x13 ver 0x33 clock 648 MHz)&lt;br /&gt;iscsi0 at root&lt;br /&gt;iscsi0 is /iscsi&lt;br /&gt;SUNW,eri0 : 100 Mbps full duplex link up&lt;br /&gt;pseudo-device: zfs0&lt;br /&gt;zfs0 is /pseudo/zfs@0&lt;br /&gt;Configuring devices.&lt;br /&gt;pseudo-device: devinfo0&lt;br /&gt;devinfo0 is /pseudo/devinfo@0&lt;br /&gt;PCI-device: pci@1, simba1&lt;br /&gt;simba1 is /pci@1f,0/pci@1&lt;br /&gt;pseudo-device: pseudo1&lt;br /&gt;pseudo1 is /pseudo/zconsnex@1&lt;br /&gt;PCI-device: ebus@c, ebus0&lt;br /&gt;ebus0 is /pci@1f,0/pci@1,1/ebus@c&lt;br /&gt;PCI-device: pmu@3, pmubus0&lt;br /&gt;/pci@1f,0/pci@1/scsi@8 (glm0):&lt;br /&gt;       glm0 supports power management.&lt;br /&gt;/pci@1f,0/pci@1/scsi@8 (glm0):&lt;br /&gt;       Rev. 7 Symbios 53c896 found.&lt;br /&gt;PCI-device: scsi@8, glm0&lt;br /&gt;glm0 is /pci@1f,0/pci@1/scsi@8&lt;br /&gt;/pci@1f,0/pci@1/scsi@8,1 (glm1):&lt;br /&gt;       glm1 supports power management.&lt;br /&gt;/pci@1f,0/pci@1/scsi@8,1 (glm1):&lt;br /&gt;       Rev. 7 Symbios 53c896 found.&lt;br /&gt;PCI-device: scsi@8,1, glm1&lt;br /&gt;glm1 is /pci@1f,0/pci@1/scsi@8,1&lt;br /&gt;power0 at ebus1: offset 0,800&lt;br /&gt;power0 is /pci@1f,0/pci@1,1/isa@7/power@0,800&lt;br /&gt;su1 at ebus1: offset 0,2e8&lt;br /&gt;su1 is /pci@1f,0/pci@1,1/isa@7/serial@0,2e8&lt;br /&gt;pseudo-device: fssnap0&lt;br /&gt;fssnap0 is /pseudo/fssnap@0&lt;br /&gt;pseudo-device: ramdisk1024&lt;br /&gt;ramdisk1024 is /pseudo/ramdisk@1024&lt;br /&gt;pseudo-device: winlock0&lt;br /&gt;winlock0 is /pseudo/winlock@0&lt;br /&gt;pseudo-device: llc10&lt;br /&gt;llc10 is /pseudo/llc1@0&lt;br /&gt;pseudo-device: lofi0&lt;br /&gt;lofi0 is /pseudo/lofi@0&lt;br /&gt;sd3 at glm0: target 0 lun 0&lt;br /&gt;sd3 is /pci@1f,0/pci@1/scsi@8/sd@0,0&lt;br /&gt;pseudo-device: fcp0&lt;br /&gt;fcp0 is /pseudo/fcp@0&lt;br /&gt;pseudo-device: fcsm0&lt;br /&gt;fcsm0 is /pseudo/fcsm@0&lt;br /&gt;pseudo-device: trapstat0&lt;br /&gt;trapstat0 is /pseudo/trapstat@0&lt;br /&gt;pseudo-device: pool0&lt;br /&gt;pool0 is /pseudo/pool@0&lt;br /&gt;pseudo-device: mem_cache0&lt;br /&gt;mem_cache0 is /pseudo/mem_cache@0&lt;br /&gt;pseudo-device: fcode0&lt;br /&gt;fcode0 is /pseudo/fcode@0&lt;br /&gt;sd0 at glm0: target 1 lun 0&lt;br /&gt;sd0 is /pci@1f,0/pci@1/scsi@8/sd@1,0&lt;br /&gt;Using RPC Bootparams for network configuration information.&lt;br /&gt;Attempting to configure interface eri1...&lt;br /&gt;Skipped interface eri1&lt;br /&gt;Attempting to configure interface eri0...&lt;br /&gt;Configured interface eri0&lt;br /&gt;Reading ZFS config: done.&lt;br /&gt;Setting up Java. Please wait...&lt;br /&gt;Serial console, reverting to text install&lt;br /&gt;Beginning system identification...&lt;br /&gt;Searching for configuration file(s)...&lt;br /&gt;Search complete.&lt;br /&gt;Discovering additional network configuration...&lt;br /&gt;&lt;br /&gt;Select a Language&lt;br /&gt;&lt;br /&gt;  0. English&lt;br /&gt;  1. French&lt;br /&gt;  2. German&lt;br /&gt;  3. Italian&lt;br /&gt;  4. Japanese&lt;br /&gt;  5. Korean&lt;br /&gt;  6. Simplified Chinese&lt;br /&gt;  7. Spanish&lt;br /&gt;  8. Swedish&lt;br /&gt;  9. Traditional Chinese&lt;br /&gt;&lt;br /&gt;Please make a choice (0 - 9), or press h or ? for help:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/nop,nop,timestamp&gt;&lt;/nop,nop,timestamp&gt;&lt;/nop,nop,timestamp&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-8360732812936525288?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/8360732812936525288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=8360732812936525288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/8360732812936525288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/8360732812936525288'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2010/08/solaris-jumpstart-on-linux.html' title='Solaris Jumpstart on Linux'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-7512144593076104319</id><published>2010-04-06T05:35:00.008+07:00</published><updated>2010-04-27T09:00:20.690+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Nginx'/><title type='text'>Playing around with low end VPS box</title><content type='html'>&lt;div style="text-align: justify; font-family: georgia;"&gt;Last week I just bought a VPS account for playing around with. It feels so great having our own shell account with root login so that we can do anything inside. I bought it from &lt;a href="http://www.pasarhosting.com"&gt;here&lt;/a&gt;. First of all, I bought the minimalist one, with 64mb memory, with no burstable ram :D, using Centos. I simply cant do anything, their Centos installation itself took around 20-30mb ram. I also not well enough playing with Yum. This is not great, so I upgraded the account to 128mb ram. At the same time I noticed that besides Centos, the hosting provider also provide Debian Lenny as the OS....why dont you said that from the beginning ??? :D Now, I'm running Lenny with 128mb ram. The VM specs itself it's not that bad, considering it's powered with 2 cpu @3Ghz, 128mb ram with no swap ( this guy &lt;a href="https://www.vpsmart.com/clients/knowledgebase.php?action=displayarticle&amp;amp;id=4"&gt;here&lt;/a&gt; shares a great script to create a fake swap, but I dont need it any longer ;) read the rest of the entry to know why... ), and with 10Gb disk, more than enough storage for minimalist like me :)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;So, first thing first, chop all the unnecessary program, replace it with the program with smaller 'cost'. Just do ps -ef and there I found apache2 and Sendmail sitting around and eating my memory. Just do :&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:georgia;"&gt;# apt-get remove --purge sendmail apache2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;And dont forget to kill them, and remove them from startup script.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;# kill -9 pid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;# update-rc.d -f remove apache2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;# update-rc.d -f remove sendmail&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Ok, that left me around 5 mb used memory. Not bad :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Next thing is to replace the default shell, since bash shell become greedy enough to eat my memory. I replaced it with pdksh since after googling around, this pdksh shell saves ~1mb for every shell session...good enough. So I install it :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;# apt-get install pdksh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Dont remove the bash shell yet, since it has a lot of dependencies. Leave it there, but dont use it :) How do we do that ? Just edit your own default shell to become pdksh in /etc/passwd :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;# vi /etc/passwd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Change the line using /bin/bash, into /bin/pdksh, and voillaa, next login session will be using pdksh.&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;Not enought with just # prompt ? It's time to decorate your shell with some fancy prompts, just edit the .profile located inside the user's home directory ( just do ls -la to see it, since it's a hidden file ). Add the following line :&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:georgia;"&gt;HOSTNAME=`hostname`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;PS1=`print "\027\033[1;32m$USER@$HOSTNAME $PWD &gt; \027\033[0m"`&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;And then do logout and login again, now you have a green fancy prompt sitting around in your shell prompts.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Next thing we can chop with, is the rsyslogd daemon and the sshd daemon. I got a great reference &lt;a href="http://www.lowendbox.com/blog/yes-you-can-run-18-static-sites-on-a-64mb-link-1-vps/"&gt;here&lt;/a&gt;. We will replace the rsyslogd daemon with syslog-ng, and replace the open-ssh server with dropbear.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# apt-get install syslog-ng &amp;amp;&amp;amp; dpkg --purge rsyslog&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;And then the dropbear.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# touch /etc/ssh/sshd_not_to_be_run&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# apt-get install dropbear&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;And edit the /etc/default/dropbear to set &lt;/span&gt;&lt;code  style="font-family:georgia;"&gt;&lt;span style="font-family:georgia;"&gt;NO_START=0. To make sure of what we have change, just reboot the server.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;And after fresh reboot, here's what I have in my VPS :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;root@ath.cx /root &gt; ps -ef&lt;br /&gt;UID PID PPID C STIME TTY TIME CMD&lt;br /&gt;root 1 0 0 Apr05 ? 00:00:00 init [2]&lt;br /&gt;root 340 1 0 Apr05 ? 00:00:00 /usr/sbin/syslog-ng -p /var/run/&lt;br /&gt;root 348 1 0 Apr05 ? 00:00:00 /usr/sbin/dropbear -d /etc/dropb&lt;br /&gt;root 367 1 0 Apr05 ? 00:00:00 /usr/sbin/xinetd -pidfile /var/r&lt;br /&gt;root 382 1 0 Apr05 ? 00:00:00 /usr/sbin/cron&lt;br /&gt;root 8864 348 0 02:24 ? 00:00:00 /usr/sbin/dropbear -d /etc/dropb&lt;br /&gt;onty 8865 8864 0 02:24 pts/1 00:00:00 -pdksh&lt;br /&gt;root 9192 8865 0 02:51 pts/1 00:00:00 -pdksh&lt;br /&gt;root 9226 1 0 03:01 ? 00:00:00 nginx: master process /usr/sbin/&lt;br /&gt;www-data 9227 9226 0 03:01 ? 00:00:00 nginx: worker process&lt;br /&gt;root 9229 9192 0 03:01 pts/1 00:00:00 ps -ef&lt;br /&gt;&lt;br /&gt;root@ath.cx /root &gt; free -m&lt;br /&gt;total used free shared buffers cached&lt;br /&gt;Mem: 128 6 121 0 0 0&lt;br /&gt;-/+ buffers/cache: 6 121&lt;br /&gt;Swap: 0 0 0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Yep, I end up with just 6 mb ram for OS, dropbear, and nginx, and 121 ram free for my other apps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-7512144593076104319?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/7512144593076104319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=7512144593076104319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7512144593076104319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7512144593076104319'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2010/04/playing-around-with-low-end-vps-box.html' title='Playing around with low end VPS box'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-7226269487204597635</id><published>2009-12-27T05:37:00.009+07:00</published><updated>2009-12-27T06:12:00.896+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wordpress verify'/><category scheme='http://www.blogger.com/atom/ns#' term='google webmaster'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Verifying your wordpress.com blog on google webmaster central</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;Google webmaster is one of google's great application for every webmaster's to dig more on their on websites. Especially if the webmaster wanted to know how google bot sees their website. There we can see what does most people on our websites query for. Also, we can see which other websites that provide links to our website. Want to see it more clearly ? just open webmaster.google.com and type in your gmail's account to log in.&lt;br /&gt;&lt;br /&gt;In google webmaster, first you need to register your own site, and then verifies that the site belongs to you. Google provides 2 mechanism for verifying your site. The first method asked the webmaster to add a new html page with some random name provided by google. We must upload it into our site directory and then ask google to verify it. The second method is to add meta tag in your website. If you're using free blog from wordpress, using wordpress.com domain, you will not be able to do the first verification method. Your best bet is to use the second one, which will be explained below.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 150px;" src="http://1.bp.blogspot.com/_02IFrF9Xz98/SzaUBp9a_8I/AAAAAAAADQM/ip9c_cwducc/s320/gwm.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5419681957751226306" /&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;br /&gt;After you add new site to google webmaster, it then brings you to a verification screen. Here, you choose Meta-tag for verification method. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;Copy paste the meta-tag provided by google, and then go to your admin page of your wordpress.com blog. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;In your admin dashboard for wordpress.com, go to menu Tools located on left bottom of your page. There should be a page written Webmaster tools Verification on center pane. Paste your Meta-tag there, and dont forget to Save changes.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_02IFrF9Xz98/SzaWJ9fR_DI/AAAAAAAADQU/T3Kuu2Fj_QI/s1600-h/gwm2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_02IFrF9Xz98/SzaWJ9fR_DI/AAAAAAAADQU/T3Kuu2Fj_QI/s320/gwm2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5419684299455724594" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;Back to your google webmaster page, click Verify. After 10-15 minutes, check back to see if it's already verified.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;Simple isn't ? First time I try this tools, I spent several hour to find the best verification methods in my wordpress.com, and suddenly when I click the Tools link in my admin dashboard, I found the one I looking for, google webmaster verification, and there it is :) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;My other blog is at http://theprasojos.wordpress.com , how about you ?  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-7226269487204597635?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/7226269487204597635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=7226269487204597635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7226269487204597635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7226269487204597635'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2009/12/verifying-your-wordpresscom-blog-on.html' title='Verifying your wordpress.com blog on google webmaster central'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_02IFrF9Xz98/SzaUBp9a_8I/AAAAAAAADQM/ip9c_cwducc/s72-c/gwm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-5178624698573252905</id><published>2009-05-18T15:42:00.008+07:00</published><updated>2009-05-18T16:01:31.807+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><title type='text'>Quick guide on UNIX task scheduling  with at and batch command</title><content type='html'>&lt;div style="text-align: justify;"&gt;While task scheduling in UNIX commonly uses Crontab facilities, UNIX based system (actually, Windows provide it too, at.exe) also provide at command. Both related to the same area, task scheduling. While Crontab aims to schedule a recurring command (every minutes, every month, every week, etc), at command aims to schedule a task that run once, with specific time arguments. Here’s one example of how we can schedule a task with at command:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;$ at now + 1 hour &lt;&gt;&amp;amp;1 &gt; outfile | mailx mygroup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;commands will be executed using /bin/tcsh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job 1242637613.s at Mon May 18 16:06:53 2009&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;As we can see from the example above, we want to schedule a task to be executed 1 hour from now, and the task to be executed is diff file1 file2 2&gt;&amp;amp;1 &gt; outfile | mailx mygroup. The at command then returns the job id, which we will able to list all the queueing at command using atq or at –l below:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ atq&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Rank Execution Date Owner Job Queue Job Name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1st May 18, 2009 17:06 minsat 1242637774.a a stdin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ at -l&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1242637774.a Mon May 18 16:18:45 2009&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;From above we can see that there are only 1 jobs queuing at queue named ‘a’ (this is special queue name for at, and it is used to distinguish between the job executed by at and batch command). We can also see that the execution time will be May 18, 2009 17:06.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And to cancel the scheduled at command, we use atrm or at –r command as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ atrm 1242637774.a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1242637774.a: removed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ at -r 1242637774.a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1242637774.a: removed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;There are lots of other parameter we can use for describing the time parameter and how to execute the at command which is I found it quite ‘human readable’. Here’s some list of other possible parameter we can use:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;1. Direct time&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at 01.30 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at 0815am Jan 24&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at 5 pm FRIday&lt;/span&gt;&lt;br /&gt;2. Now keyword&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at now + 1 minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at now + 1 hours&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at now "+ 1day"&lt;/span&gt;&lt;br /&gt;3. Tomorrow keyword&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at 0830 tomorrow&lt;/span&gt;&lt;br /&gt;4. Noon keyword&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at noon tomorrow&lt;/span&gt;&lt;br /&gt;5. Midnight keyword&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at midnight tomorrow&lt;/span&gt;&lt;br /&gt;6. Week keyword&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at 2pm next week&lt;/span&gt;&lt;br /&gt;7. Piped with other command&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ echo "mail -s 'REMINDER: Task Scheduler samples' lintang.jp@gmail.com" | at '5/18/2009 10:00AM'&lt;/span&gt;&lt;br /&gt;8. Putting the job inside a file&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at –f runScript.sh now + 1 hour&lt;/span&gt;&lt;br /&gt;9. Sending an email after the job is completed&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at –m –f runScript.sh now + 1 hour&lt;/span&gt;&lt;br /&gt;10. Using another shell instead of the user’s default shell for execution&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at –c –f runScript.sh now + 1 week // C Shell&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at –k –f runScript.sh now + 1 week // Korn Shell&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$ at –s –f runScript.sh now + 1 week // Bourne Shell&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Several behaviors and conditions that must be known when running at command as follows:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt; 1. All environment variables, current working directory, file creation mask, and system resource limits during at utility execution will be retained and used when the at job is executed. So it’s different with Crontab where we have to set our environment variables manually to be called inside our script execution.&lt;br /&gt;2. The default shell environment to be used during execution is the user’s default shell, listed in &lt;span style="font-family:courier new;"&gt;/etc/passwd.&lt;/span&gt;&lt;br /&gt;3. Any users that is allowed or forbidden to use at command are listed in the following file :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;     &lt;span style="font-family:courier new;"&gt;1. /usr/lib/cron/at.deny // denied user&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        2. /usr/lib/cron/at.allow // allowed user&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;If the file does not exist, for example: at.allow file does not exist, means that all users are allowed to use at command.&lt;br /&gt;&lt;br /&gt;While batch command is similar with &lt;span style="font-family:courier new;"&gt;at -q b -m now&lt;/span&gt; commands. Meaning that the batch command will use different queue with at (special queue named ‘b’), and by default it will send a report via email. It will also execute right away. If the queue is full, then the command will have to wait to be executed one by one.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Resource : 1. Unix at man pages, with some slang modifications :p&lt;br /&gt;&lt;br /&gt;Fiuh, alhamdulillah, that was hard to wrote :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-5178624698573252905?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/5178624698573252905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=5178624698573252905' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/5178624698573252905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/5178624698573252905'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2009/05/quick-guide-on-unix-task-scheduling.html' title='Quick guide on UNIX task scheduling  with at and batch command'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-1218208340794709090</id><published>2009-01-13T09:27:00.002+07:00</published><updated>2009-01-13T10:52:35.643+07:00</updated><title type='text'>Telco Billing #2, Interconnect that matters...</title><content type='html'>Ok, sekarang penentuan tarif interkoneksi.&lt;br /&gt;Sejak tahun 2007, Indonesia menganut sistem Cost Based Interconnection (kalau di dunia lebih dikenal dengan Bottom Up-Long Run Incremental Cost, dan saat ini konsultan nya buat negara kita yaitu Ovum, yang merekomendasikan sistem Cost Based ini di Indonesia ). Ilustrasi di paragraf ketiga akan mencoba menjelaskan dengan bahasa manusial normal, tentang bagaimana sistem ini bekerja. Intinya adalah, semua variable yang berpengaruh dalam pembuatan sebuah panggilan, akan diperhitungkan di dalamnya. Seperti kita ketahui, ketika kita membuat suatu panggilan suara ( baca: nelpon ), di dalamnya kita melibatkan BTS, BSC, MSC, dan IN dari operator. Dan begitu juga ketika panggilan kita disampaikan ke nomer tujuan, komponen yang terlibat kurang lebih sama. Nah, semua komponen tersebut memiliki biaya produksi, termasuk diperhitungkan juga biaya penyusutannya. Hasilnya adalah tariff interkoneksi, lokal, SLJJ, dan Internasional, per menit, untuk durasi yang lebih dari 5 detik. Artinya, call yang melibatkan interkoneksi kurang dari 5 detik, tidak akan di charge. Kenapa 5 detik ? karena nilai ini dianggap sebagai waktu maksimum yang dibutuhkan agar perangkat-perangkat interkoneksi antar operator dapat berbicara satu sama lain. Kalau bisa kurang dari itu ya bagus, kalau tidak, kemungkinan besar anda akan dapat drop call.&lt;br /&gt;&lt;br /&gt;Lalu apa untungnya memakai sistem Cost Based ini ? Syahdan pada jaman dahulu kala, terdapat duopoli sektor telekomunikasi di Indonesia, yep, Telkom dan Indosat. Seluruh traffik interkoneksi antar operator, haruslah transit melalui kedua operator ini, baik lokal, SLJJ, maupun internasional. Karena cuma dua operator ini, maka yang menentukan harga ya terserah yang jualan, ya tho ? Sampai akhirnya pada tahun 2006, muncullah peraturan menkominfo tentang pemberlakuan sistem interkoneksi yang baru. Peraturan ini memungkinkan operator untuk membuat interkoneksinya sendiri, atau tetap transit lewat dua operator tadi. Efeknya ? biaya interkoneksi jadi bisa bersaing ( baca: turun ). Kok bisa ? ya karena kalau ada dua operator membuat interkoneksi satu sama lain, dan ternyata cost nya lebih murah daripada transit ke dua operator duopolist diatas, ya kenapa tidak ? Sebaliknya, operator duopolist tentu akan pikir-pikir lagi kalau memasang tariff, kalau interkoneksi direct lebih murah, maka dagangan mereka nggak ada lagi yang beli dong, ya kan ? Imbas turunnya tariff interkoneksi ini juga sampai ke pelanggan seperti kita. Karena tariff interkoneksi turun, akibatnya tariff retail juga turun deh. Seperti judul diatas, kalau tidak ada interkoneksi, kita akan kuper, apalagi kalau kita operator baru.&lt;br /&gt;&lt;br /&gt;Seperti uraian diatas, di dalam billing interkoneksi, juga dikenal istilah sambungan lokal, dan sambungan jarak jauh (SLJJ) seperti di billing retail. Bedanya, kalau di billing retail, penentuan lokal dan SLJJ didasarkan pada POC pemanggil dan penerima. Kalau POC nya sama, maka dihitung tariff lokal, dan kalau berbeda maka dihitung tariff SLJJ. Misal, kalau kita telpon dari Bandung yang POC nya 022 (Ingat, POC kira-kira sama dengan kode area, well...more or less) ke Bandung juga, maka tariffnya adalah lokal. Kalau dari Bandung ke Jakarta ( 021 ) maka tariffnya adalah interlokal (SLJJ), karena POC nya berbeda.&lt;br /&gt;Nah, kalau di billing interkoneksi, penentuan lokal dan SLJJ agak sedikit berbeda. Di billing interkoneksi, yang berpengaruh adalah POI operator caller, dan POC operator yang dituju. Sebuah call diperhitungkan lokal, jika POI nya sama dengan POC tujuan. Misal, operator X dan Y membuat titik interkoneksi ( POI ) di Surabaya. Lalu ada pelanggan operator X dari Mojokerto misalnya, menelpon saudaranya yang berlangganan operator Y di Surabaya. Maka biaya interkoneksinya akan menjadi lokal. Kenapa ? karena POI operator X dan Y berada di Surabaya, dan operator tujuan ( operator Y ) adalah di Surabaya, POI = POC tujuan. Sedangkan si pengguna operator X di Mojokerto tadi, terkena charge tariff retail SLJJ, karena POC pemanggil != POC tujuan. Disinilah perbedaan mendasar antara billing retail dan billing interkoneksi.&lt;br /&gt;Billing Retail ( billing yang dikenakan pada pelanggan ) :&lt;br /&gt;1. Lokal, jika POC A = POC B&lt;br /&gt;2. SLJJ, jika POC A != POC B&lt;br /&gt;Billing interkoneksi ( billing antar operator ) :&lt;br /&gt;1. Lokal, jika POI A = POC B&lt;br /&gt;2. SLJJ, jika POI A != POC B&lt;br /&gt;&lt;br /&gt;Lalu bagaimana dengan tariff interkoneksi untuk internasional call ( SLI ) ? Seperti yang kita ketahui, kini ada 3 operator yang memiliki lisensi untuk SLI ini, Telkom, Indosat, dan BTel. Artinya, mau tidak mau, operator yang ada haruslah memiliki perjanjian transit dengan salah satu dari 3 operator ini. Dari sini, tariffnya adalah tariff per-negara. Dan biasanya, operator-operator yang lain tinggal membundling tariff SLI dari operator pemilik lisensi SLI ini, ke dalam tariff retail mereka, dan sistemnya adalah komisi. Biaya interkoneksi dibayarkan penuh, namun untuk tiap panggilan yang melewati sistem interkoneksi operator pemilik lisensi SLI tadi, operator pemanggil akan mendapatkan komisi, yang besarnya tentu saja tergantung dari volume traffik yang dilewatkan. Begitu juga dengan panggilan masuk dari luar negeri. Trafficnya juga hanya bisa melalui 3 operator SLI tadi, dan tariffnya tergantung perjanjian antara operator SLI dengan operator penerima panggilan yang sebenarnya.&lt;br /&gt;&lt;br /&gt;Kira-kira demikianlah proses interkoneksi. Mungkin di lain kesempatan akan dibahas tentang billing retail. Any comments ? please wrote it down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-1218208340794709090?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/1218208340794709090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=1218208340794709090' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1218208340794709090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1218208340794709090'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2009/01/telco-billing-2-interconnect-that.html' title='Telco Billing #2, Interconnect that matters...'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-3530468653896728256</id><published>2009-01-11T06:26:00.003+07:00</published><updated>2009-01-11T07:44:13.801+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interconnect'/><category scheme='http://www.blogger.com/atom/ns#' term='Telekomunikasi'/><category scheme='http://www.blogger.com/atom/ns#' term='Telco Billing'/><category scheme='http://www.blogger.com/atom/ns#' term='Interkoneksi'/><title type='text'>Telco Billing #1, Interconnect that matters...</title><content type='html'>Seperti disebutkan dalam judul diatas, bidang interkoneksi adalah bidang yang sangat berpengaruh dalam kelangsungan operasional sebuah operator, terutama buat operator non incumbent. Bagaimana tidak, bagi operator baru, tidak ada interkoneksi berarti tidak terhubung ke jaringan lain, pelanggan tidak akan bisa bertelpon/ber-sms ke operator lain ( terutama jika operator itu incumbent ), dan ini vital sekali. Peraturan Menkominfo tentang interkoneksi ini bisa di unduh &lt;a href="http://www.blogger.com/mod=" view="4&amp;amp;id=" mn="DWR0100&amp;amp;file="&gt;disini&lt;/a&gt; .&lt;br /&gt;Dalam bidang interkoneksi dikenal istilah-istilah berikut :&lt;br /&gt;1. POC (Point of Charge)&lt;br /&gt;Kalau jaman PSTN(telpon rumah kabel) hanya ada cuma Telkom saja seperti dulu, POC ini kita kenal dengan istilah kode area. Katakanlah Mojokerto, maka kode area nya 0321, Surabaya, 031, dst. Seiring dengan waktu, muncullah telepon seluler, yang untuk menentukan POC nya sebenarnya lebih sulit, karena sifatnya yang mobile dan dapat berpindah-pindah, akibatnya POC untuk telepon seluler ini tidak menyerap 100% dari POC milik PSTN dan FWA(telepon cdma yang non seluler, seperti flexi, esia, hepi). POC ini adalah basis yang digunakan untuk menentukan dimana lokasi penelpon dan penerima telpon.&lt;br /&gt;2. POI (Point of Interconnection)&lt;br /&gt;Adalah titik dimana alur traffic mengarah masuk atau keluar, dari network lokal milik operator yang bersangkutan, menuju ke network milik operator lain. Kita akan lebih mudah memahami ini dengan contoh kasus, yang akan diulas lebih lanjut di bawah. Yang jelas, semakin banyak kita memiliki POI dengan operator lain (dan yang ter-utilisasi dengan optimal tentunya ) maka cost interkoneksi ini akan jauh lebih bisa ditekan.&lt;br /&gt;3. Originasi&lt;br /&gt;Adalah titik dimana alur traffic berasal.&lt;br /&gt;4. Transit&lt;br /&gt;Adalah titik dimana alur traffic disalurkan melalui network operator lain, untuk kemudian bisa sampai ke tujuan. Bayangkan ini seperti ketika kita memaketkan barang lewat tiki. Tiki adalah titik transit pertama kita, untuk kemudian bisa sampai ke tujuan.&lt;br /&gt;5. Terminasi&lt;br /&gt;Adalah titik dimana alur traffic berakhir di tujuan.&lt;br /&gt;Ke-lima komponen ini berpengaruh penting dalam penentuan tarif biaya interkoneksi, yang pada ujungnya juga akan mempengaruhi tarif retail akhir yang akan ditawarkan ke pelanggan. Itulah kenapa ketika pemerintah memutuskan untuk menurunkan tarif interkoneksi antar operator, tarif retail juga diharapkan akan ikut turun.&lt;br /&gt;Kita akan bahas ini dengan mengambil contoh langsung kasusnya, sebuah perusahaan telekomunikasi selular X.&lt;br /&gt;Ketika pertama kali didirikan, operator X sudah harus menetapkan basis daerah awal dimana saja mereka akan beroperasi. Dari sinilah kemudian operator tersebut menyusun POC mana saja yang akan mereka miliki. Dan dari sini pulalah mereka akan membuat pemetaan prefix nomor mereka. Sebagai contoh, untuk daerah Jakarta, operator X akan membuat prefix 08XX170YYYY. 4 digit pertama (08XX) dikenal sebagai NDC, National Destination Code. Ini prefix yang menandakan blok nomor seluler tertentu milik operator tertentu.&lt;br /&gt;Setelah memiliki POC, maka operator X harus juga membuka layanan interkoneksi dengan operator lain. Karena di Indonesia terdapat 12 operator, maka interkoneksi ini harus dibuat ke seluruh operator-operator tersebut. Pembuatan infrastruktur interkoneksi menuju operator-operator lain ini juga bukan dengan biaya yang kecil, apalagi jika alur traffic menuju operator-operator tersebut masih sangat kecil, karena tentu operator X juga membutuhkan biaya untuk balik modal kan ;).&lt;br /&gt;Dari sini, muncullah operator Y yang bertindak sebagai operator transit. Artinya, operator X tidak perlu membangun jaringan interkoneksi ke seluruh operator yang ada, yang diperlukan hanya 1 buah infrastruktur interkoneksi, menuju operator Y sebagai operator transit, yang nantinya akan menyalurkan alur traffic menuju operator tujuan yang sebenarnya. Dari sini kita sudah mendapatkan gambaran, bagaimana kira-kira maksud dari originasi, terminasi, dan transit.&lt;br /&gt;&lt;br /&gt;Lalu, kapan sebuah operator perlu membangun jaringan interkoneksinya sendiri ? Dari data statistik operator X tiap bulan, tentu operator X bisa melihat kemana tujuan paling banyak alur traffic dari pelanggannya. Dan begitu juga darimana pelanggannya paling banyak menerima panggilan. Jika cost transit ini diperkirakan sudah akan lebih mahal daripada membangun infrastruktur interkoneksi langsung dengan operator tujuan, maka sudah saatnya infrastruktur interkoneksi langsung ini dibangun.&lt;br /&gt;&lt;br /&gt;Oh ya, dari tadi ini kita masih membicarakan panggilan suara (voice) yah, kalau untuk SMS, infrastruktur interkoneksi harus dibuat satu-persatu menuju operator tujuan, karena SMS ke operator lain tidak bisa disampaikan melalui jaringan transit.&lt;br /&gt;&lt;br /&gt;Lalu bagaimana dengan penentuan tarif interkoneksi ? Tunggu di bagian #2 yah...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-3530468653896728256?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/3530468653896728256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=3530468653896728256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/3530468653896728256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/3530468653896728256'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2009/01/telco-billing-1-interconnect-that.html' title='Telco Billing #1, Interconnect that matters...'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-1963372139950720618</id><published>2008-12-22T19:54:00.003+07:00</published><updated>2008-12-22T21:00:36.552+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aTutor'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Nginx'/><title type='text'>Bye bye apache, welcome Nginx</title><content type='html'>Bagi saya, php tetap memiliki kenangan yang indah dalam mengisi hari-hari pemrograman saya terdahulu. Programming language yang fleksibel, dan nggak pake ribet. Justru kesulitan ditemui ketika deploy di server. Kebanyakan server yang tersedia sudah diinstall default dengan bundle apache, beserta modul-modul yang sudah di tentukan sebelumnya. Kalau pake keluarga Redhat, iya kalau kebetulan dapet rpm yang pas versinya, kalo nggak ? Cara paling enak memang tetap dengan compile dari source, karena kita bisa bongkar pasang modul yang kita inginkan, tambahkan semaunya, kurangi sesukanya. Jaman dulu(nggak dulu banget sih, 2004), saya hanya kenal Apache dan IIS buat jadi webserver untuk skrip php saya. Belakangan ini, muncul sebuah webserver yang tidak terlalu terkenal, tapi sepertinya ampuh. Kenapa ampuh ? Coba anda pergi ke netcraft.com, dan coba anda scan situs wordpress.com dan detik.com, apa webserver mereka ? Mereka pakai Nginx (baca:engine X). Ini dua situs besar loh, dan saya sangat yakin, tiap hari banyak diantara kita yang berinteraksi dengan kedua situs ini, ya tho ? Nggak mungkin dong mereka pake webserver yang kurang 'terkenal' kalo nggak karena mereka merasakan keampuhan dibaliknya, tul ndak ? Coba buka aja deh langsung di &lt;a href="http://nginx.net/"&gt;situsnya&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, karena saya bukan pembuat Nginx, sejarahnya tidak akan saya beberkan disini. Berikut sebagai pengingat saja buat saya (syukur kalau berguna buat anda juga) untuk ngebangun server PHP siap pakai dengan Nginx dan lighttpd.&lt;br /&gt;Berikut Linux saya, ubuntu 7.10 :&lt;br /&gt;lintang@cygnus:~$ uname -a&lt;br /&gt;Linux cygnus 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux&lt;br /&gt;Disini kebetulan waktu nginstall, saya pake apt-get saja untuk nginx nya, baru php dan lighttpdnya yang compile dari source. Selain nginx, kita juga harus install dependenciesnya, terutama pcre dan zlib, serta openssl kalau anda ingin.&lt;br /&gt;root@cygnus:~# apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev nginx&lt;br /&gt;Tunggu sejenak, bikin kopi dulu juga boleh. Atau kalau anda ingin waktu anda efisien, mari kita donlot dulu PHP dan Lighttpd nya :D&lt;br /&gt;Saya ambil PHP versi 5.2.6, dan Lighttpd versi 1.4.19. Dari mana ? please deh, silakan googling, mudah didapat kok kedua-duanya.&lt;br /&gt;Ok, kita mulai dengan PHP dulu, silakan ekstrak, compile, dan install. Berikut opsi yang saya gunakan untuk PHP saya.&lt;br /&gt;lintang@cygnus:~$ ./configure --prefix=/usr/local/php-5.2.6 --with-mysql --enable-fastcgi --with-sockets --with-zlib&lt;br /&gt;Ini berarti, kita akan instal PHP kita nanti di direktori /usr/local/php-5.2.6, mengikut-sertakan library koneksi php untuk mysql, membuat PHP yang berfungsi sebagai interpreter CGI ( nantinya skrip PHP bisa dijalankan dari shell, mirip /bin/bash atau /usr/bin/perl), lalu PHP tersebut dapat memiliki/membuka socket tersendiri (nantinya PHP akan berjalan sebagai process yang terpisah dari webserver, tidak seperti model Apache dimana PHP berjalan sebagai modul di dalamnya), lalu yang terakhir, mengikut sertakan library php untuk support kompresi dengan tipe Gzip.&lt;br /&gt;Tunggu sejenak, setelah sukses, silakan lakukan langkah dibawah seperti biasa :&lt;br /&gt;lintang@cygnus:~$ make&lt;br /&gt;lintang@cygnus:~$ sudo make install&lt;br /&gt;Nah, coba cek di direktori /usr/local/php-5.2.6/bin, seharusnya ada file executable bernama php-cgi. File inilah yang akan berjalan sebagai interpreter PHP anda dari shell.&lt;br /&gt;Menurut beberapa sumber dari internet, sebenarnya php-cgi ini saja cukup untuk dipanggil dari Nginx nantinya untuk menjalankan PHP, namun akan lebih baik apabila kita mengambil spawner dari project Lighttpd. Spawner ini akan mengeksekusi php-cgi kita. Berikut langkah-langkahnya, seperti biasa, silakan ekstrak Lig&lt;br /&gt;lintang@cygnus:~$ ./configure --prefix=/opt/lighttpd-1.4.19 --enable-static --disable-shared&lt;br /&gt;Kira-kira maksudnya, kita akan menconfigure Lighttpd sebagai library static yang dependenciesnya mutlak terhadap file-file .so tertentu. Opsi static ini membuat program yang kita compile akan jauh lebih cepat, karena versi dependencies di dalamnya seperti di hardcode. Berkebalikan dengan ketika kita compile dengan modus dinamis, hasilnya program akan lebih lambat, namun dependencies terhadap versi library tertentu bisa dihindari. Kalau kita ingin membuat server yang cepat, siapa peduli dengan dinamisasi, bukan begitu ? :p&lt;br /&gt;Lalu seperti biasa, kita jalankan make, tapi kali ini tanpa make install.&lt;br /&gt;lintang@cygnus:~$ make&lt;br /&gt;Seharusnya nanti, di direktori src/ akan ada file bernama spawn-fcgi. Kopikan file tersebut ke directory /usr/bin sebagai berikut :&lt;br /&gt;lintang@cygnus:~$ sudo cp spawn-fcgi /usr/bin/&lt;br /&gt;Lalu anda buat skrip .sh sederhana sebagai berikut :&lt;br /&gt;lintang@cygnus:/usr/local/php-5.2.6$ cat &gt; /usr/bin/php-fastcgi &lt;&lt; EOF&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;/usr/bin/spawn-fcgi -a 127.0.0.1 -p 8999 -f /usr/local/php-5.2.6/bin/php-cgi&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;Ini adalah skrip untuk menjalankan PHP sebagai proses CGI yang terpisah dari webserver anda nantinya. PHP akan membuka socket di port 8999, dan akan binding di interface lo(127.0.0.1) anda, sehingga hanya bisa diakses dari mesin anda sendiri.&lt;br /&gt;Ok, langkah terakhir tinggal setup nginx.conf anda, punya saya ada di sini /etc/nginx/nginx.conf.&lt;br /&gt;Berikut isi file konfigurasi Nginx saya :&lt;br /&gt;user &lt;span style="font-weight: bold;"&gt;www-data&lt;/span&gt;;&lt;br /&gt;worker_processes  &lt;span style="font-weight: bold;"&gt;4&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;error_log  /var/log/nginx/error.log;&lt;br /&gt;pid        /var/run/nginx.pid;&lt;br /&gt;&lt;br /&gt;events {&lt;br /&gt;    worker_connections  1024;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;http {&lt;br /&gt;    include       /etc/nginx/mime.types;&lt;br /&gt;    default_type  application/octet-stream;&lt;br /&gt;&lt;br /&gt;    access_log  /var/log/nginx/access.log;&lt;br /&gt;&lt;br /&gt;    sendfile        on;&lt;br /&gt;    #tcp_nopush     on;&lt;br /&gt;&lt;br /&gt;    #keepalive_timeout  0;&lt;br /&gt;    keepalive_timeout  65;&lt;br /&gt;    tcp_nodelay        on;&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt; gzip  on&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;  include /etc/nginx/sites-enabled/*;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;Perhatikan baris yang di bold, bahwa Nginx saya berjalan atas nama user www-data, sehingga user ini mutlak harus ada sebelumnya, sepertinya kalau di Ubuntu, user ini dibuatkan otomatis ketika kita install Nginx yah, saya lupa sih :D.&lt;br /&gt;Baris selanjutnya, worker_processes, saya isi 4. User yang mengakses webserver saya disini kurang dari 100 orang, dan selama ini, 4 worker sudah cukup sih.&lt;br /&gt;Lalu selanjutnya, gzip on, ini modul gzip compress yang kita aktifkan setelah sebelumnya kita install zlib. Dan yang terakhir, kita akan meng-include kan semua file konfigurasi di direktori /etc/nginx/sites-enabled. Berikut contoh file konfigurasi saya di direktori tersebut :&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Filename : atutor.conf&lt;/span&gt;&lt;br /&gt;server {&lt;br /&gt;        listen   80;&lt;br /&gt;        server_name  atutor;&lt;br /&gt;&lt;br /&gt;        access_log  /var/log/nginx/atutor.access.log;&lt;br /&gt;&lt;br /&gt;        location / {&lt;br /&gt;                root   /var/www/nginx-default;&lt;br /&gt;                index  index.html index.htm index.php;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #error_page  404  /404.html;&lt;br /&gt;&lt;br /&gt;        # redirect server error pages to the static page /50x.html&lt;br /&gt;        #&lt;br /&gt;        error_page   500 502 503 504  /50x.html;&lt;br /&gt;        location = /50x.html {&lt;br /&gt;                root   /var/www/nginx-default/ATutor;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        # proxy the PHP scripts to Apache listening on 127.0.0.1:80&lt;br /&gt;        #&lt;br /&gt;        #location ~ \.php$ {&lt;br /&gt;                #proxy_pass   http://127.0.0.1;&lt;br /&gt;        #}&lt;br /&gt;&lt;br /&gt;        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000&lt;br /&gt;        #&lt;br /&gt;        location ~ \.php$ {&lt;br /&gt;                fastcgi_pass   127.0.0.1:8999;&lt;br /&gt;                fastcgi_index  index.php;&lt;br /&gt;                fastcgi_param  SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;&lt;br /&gt;                include /etc/nginx/fastcgi_params;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Konfigurasi ini mengatakan bahwa, saya memiliki sebuah aplikasi (kebetulan aTutor), yang saya letakkan di /var/www/nginx-default, dan untuk semua URL yang berakhiran .php, maka saya akan lemparkan requestnya ke CGI interpreter PHP yang berjalan di port 8999 seperti konfigurasi PHP diatas.&lt;br /&gt;&lt;br /&gt;And that's it, kita bisa mengetes konfigurasi nginx kita dengan perintah :&lt;br /&gt;lintang@cygnus:~$ sudo nginx -t&lt;br /&gt;Lalu untuk menjalankan nginx bisa dengan perintah sbb :&lt;br /&gt;lintang@cygnus:~$ sudo nginx&lt;br /&gt;Kalau kita ada perubahan konfigurasi nginx, setelah selesai mengedit file konfigurasi, untuk merestart nginx bisa dengan perintah sbb :&lt;br /&gt;lintang@cygnus:~$ sudo killall -HUP nginx&lt;br /&gt;&lt;br /&gt;Udah deh, silakan arahkan browser anda di port 80, aplikasi anda siap melayani user :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-1963372139950720618?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/1963372139950720618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=1963372139950720618' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1963372139950720618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1963372139950720618'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2008/12/bye-bye-apache-welcome-nginx.html' title='Bye bye apache, welcome Nginx'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-2761097051455679846</id><published>2008-12-21T14:43:00.006+07:00</published><updated>2008-12-21T16:05:33.821+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telco Billing'/><category scheme='http://www.blogger.com/atom/ns#' term='CDMA 450'/><category scheme='http://www.blogger.com/atom/ns#' term='3G'/><title type='text'>Teknologi CDMA 450</title><content type='html'>Minggu siang, iseng-iseng menyalakan speedy dan browsing. Saya menemukan banyak artikel tentang CDMA 450, yang pas banget dengan bidang tempat kerja saya sekarang.&lt;br /&gt;Jadi ceritanya begono, pada jama dahulu kala, tersebutlah sebuah teknologi analog bernama NMT, Nordic Mobile Telephone. Teknologi NMT ini kira-kira sekelas dengan teknologi AMPS yang ada sebelum jaman GSM dulu.Orientasinya voice only, lalu muncullah teknologi GSM, yang perbedaan 'paling terlihat' nya dengan AMPS adalah kemampuannya untuk mengirim SMS, dan satu hal lagi yang waktu itu masih nice to have-tapi sangat berpengaruh saat ini, apa itu ? yak, anda benar, GPRS. Namanya juga industri yang berbasis teknologi, maka dunia telekomunikasi dan para pelaku-pelaku di dalamnya juga harus berbenah menghadapi evolusi teknologi yg semakin berkembang. Para pelaku di dunia telekomunikasi tadi juga semakin merasa, bahwa mereka memerlukan sebuah standarisasi dari varian teknologi yang banyak berkembang. Muncullah organisasi-2 seperti GSMA (GSM Association-&gt;3GPP), dan CDG(CDMA Development Group-&gt;3GPP2).  Lalu, CDMA 450 ini posisinya dimana ? Sabar sabar...&lt;br /&gt;Seperti namanya, CDMA 450 ini termasuk teknologi yang beraliran CDMA, dan teknologi di dalamnya masuk ke dalam spesifikasi yang dibuat oleh CDG. Seperti kita ketahui, selain di frekwensi 450Mhz, CDMA juga ada yg beroperasi di 800Mhz dan 1900Mhz. Frekwensi 450Mhz ini dibuat sebagai transitional path untuk para operator telekomunikasi yang berbasis teknologi NMT.&lt;br /&gt;Gambar yang menarik saya temukan di situs CDG (http://www.cdg.org/technology/3g/cdma450.asp) berikut ini :&lt;br /&gt;&lt;img style="width: 353px; height: 229px;" src="http://www.cdg.org/technology/3g/images/cdma_450_v04.jpg" alt="Spektrum 450Mhz diantara spektrum lainnya" /&gt;&lt;br /&gt;Kalau dilihat dari gambar diatas, frekwensi 450Mhz berada di paling luar, yang berarti jangkauan dari sebuat BTS dengan frekwensi 450Mhz lebih luas dari yang lain. Artinya, untuk mencakup daerah yang dengan luas yang sama, jumlah BTS yang dibutuhkan akan lebih sedikit dengan frekwensi ini. Teknologi CDMA dengan frekwensi 450Mhz ini banyak terdapat di negara2 skandinavia(rusia, checz), dan beberapa negara asia, seperti laos, kamboja, vietnam, dan tentu saja Indonesia. Dan seharusnya ini adalah jawaban untuk menyediakan sarana telekomunikasi di banyak desa-desa pedalaman di Indonesia.&lt;br /&gt;Tantangan berikutnya adalah implementasi. Para pebisnis telekomunikasi tentu selalu saja kembali ke pertanyaan mendasar, apakah marketnya ada kalau teknologi ini diimplementasikan di desa-desa pedalaman ? Pemerintah sih inginnya desa-desa tertinggal juga maju, tapi tetap saja, investasi kan butuh balik modal ? Apa penduduk desa-desa pedalaman itu mampu dan butuh teknologi ini ? Don't get me wrong, tetapi banyak desa-desa pedalaman di Indonesia sebenarnya justru adalah kantung-kantung konsumen strategis dan potensional. Kenapa ? Kalau anda berasal dari desa (baca:wong nDeso), berapa banyak teman-teman masa kecil anda yang merantau keluar kota ? atau keluar negeri bahkan ? Banyaknya perantau berarti banyak pula yang ingin berkomunikasi dengan keluarga di desa, bukan begitu ?Atau sebuah pertanyaan simple, berapa jumlah minimum ternak sapi atau kambing yang dimiliki penduduk di desa ? :D belum lagi pertanyaan jumlah hektar sawah yang mereka punya ? So, pertanyaan diatas sudah terjawab dengan sendirinya.&lt;br /&gt;&lt;br /&gt;Lalu ada pertanyaan lain, "..jadi, teknologi ini hanya cocok untuk operator yang ingin bermain di pedesaan kah" ? Well, kalau itu sih masalah ekspansi pasar yah. Dengan makin berkembangnya handset yang beredar di pasaran saat ini, bukan tidak mungkin sebentar lagi akan keluar handset triple band, 450-800-dan 1900Mhz di pasaran. Selama ini kita baru mengenal handset yang support 2 band saja, 800 dan 1900Mhz. Dengan fleksibilitas ini, sebenarnya kalau operator ingin punya dual license, tinggal beli ke pemerintah kan ( atau not so simple yah ? sorry :D ) ? Atau jalan paling cepat yaaa, kerjasama roaming dengan operator CDMA yang sudah memiliki teknologi ini. Aneh ya denger kata CDMA Roaming ? kalau pake GSM kan sudah biasa bagi yang sering jalan2 keluar negeri, dengan istilah international roaming.  Intinya handset harus support frekwensinya dulu. Dan yang saya tau, handset untuk frekwensi 450Mhz ini memang terbatas, merknya mungkin hanya Huawei, Quallcom, atau Ubiquam. Pasar baru lagi nih buat produsen handset, he he.&lt;br /&gt;&lt;br /&gt;Pada akhirnya, konsumen kan sebenarnya tidak peduli dengan teknologi yang akan dipakai, mau itu CDMA, mau itu 3G, WiMax, pada frekwensi berapapun, jika itu bisa memenuhi kebutuhan mereka, ya why not. Biarlah para vendor yang berperang di tataran teknologi ini, kita tinggal daftar, nikmati layanannya, dan jangan lupa, bayar tagihannya :p Bagi yang butuh akses internet cepat, sudah ada HSDPA untuk para pengguna GSM 3G dan EvDO dengan berbagai versi revisinya buat para pengguna CDMA. O ya, untuk teknologi CDMA 450 ini, karena teknologi basisnya CDMA, dan hanya frekwensinya saja yang 'tidak umum', EvDO ini juga bisa jadi termasuk layanan yang ditawarkan. Dan kalau secara teori range frekwensinya bisa mencapai 50Km2, maka seharusnya teknologi EvDO yang berjalan di atas frekwensi ini akan sama-sama menjanjikannya dengan teknologi WiMax, hanya saja mungkin untuk bandwidth speed nya, WiMax masih akan lebih unggul. Tapi balik-balik lagi, kalau sudah cukup dengan 3.1Mbps (EvDO Rev.A) untuk sekedar buka web, chatting, voip dan video streaming, buat apa terlalu serakah ? :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-2761097051455679846?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/2761097051455679846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=2761097051455679846' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2761097051455679846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2761097051455679846'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2008/12/teknologi-cdma-450.html' title='Teknologi CDMA 450'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-7298473001238062867</id><published>2008-12-18T22:42:00.004+07:00</published><updated>2008-12-21T16:07:21.926+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Broadband at home'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='3G'/><title type='text'>Speedy Vs Matrix Broadband 3.5G</title><content type='html'>Uhm, ok let's get this straight, here's my opinion for those written titles above. We will compare only the 'unlimited' versions of them. I'm currently using the Speedy personal with 1Gb quota, and 1024 Kbps bandwidth (but it's free from 8pm to 8am - next morning, so I consider this unlimited too). And for the backup, I'm using Matrix Broadband 3.5G with Isat Eco package.It's unlimited quota, the bandwidht was around 256 Kbps, but if your usage reaches 2Gb, they will limit your bandwidth until up to 64 Kbps. Both costs me around Rp 100rb per month.&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;Speedy&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;After upgrading their speed to 1024 Kbps (well yes, actually the speed was never reach 1024Kbps~128KBps), but still - in terms of  'unlimited', speedy still the best. Imagine after a day full of hardwork, you're going home, arrived at home on 6.30pm, playing with your son/daughter, and finally after they sleep, you open up your laptop and start browsing without having any worries that your quota this month will reached. Speedy gave me 1Gb quota every month, and yet no matter how crazy I download something from the internet, as long as I do that from 8pm to 8am, it's free.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But still, speedy has some flaws. Usually during 8pm to 10pm, the connection can not be stable enough. Sometime I have to reconnect-force my DSL connection. Well, it's annoying if you're in the middle of downloading something or connecting to your office via VPN. For now, my Free Download Manager can handle this, but sure this is something to be fixed by the Speedy team. Can't wait until they launch the IPTV services, wonder what would it be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;Matrix Broadband 3.5G&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I got this package for free, those Customer Service offered it to me via phone, and I took it. It's stable enough ( if you're not that mobile ), my VPN connection hold very stable on this. But the limited bandwidth speed is also annoying. Being used to with 1024 Kbps with speedy and then switch to Isat Eco with only 256Kbps sometimes make me sick. nd the worst thing is that if you fall into GPRS mode, you'll better choose TelkomNet instan for this. It's back to where your position is, and how strong the signal from your place. In my place here, I have 2-3 bars of signal, and yet the bandwidth speed I considered to be 'slow', not fast enough, although your modem shows that it supports until 7.2 Mbps...well, it's only on your dream :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having both of this services in parallel, I decided that both must be used optimally, and if I can, I have to earn something back from it. Still trying to look at how internet marketing works, combined with how to use google adSense in our websites. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Any clue/wisdom words for me ? Please fill in your comment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-7298473001238062867?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/7298473001238062867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=7298473001238062867' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7298473001238062867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/7298473001238062867'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2008/12/speedy-vs-matrix-broadband-35g.html' title='Speedy Vs Matrix Broadband 3.5G'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-4380858741452129896</id><published>2008-06-20T22:36:00.004+07:00</published><updated>2008-06-20T23:17:29.117+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telco Billing'/><title type='text'>Popular telco billing terms #1</title><content type='html'>I wrote this post in case if someone got interested on Telco Billing but they dont familiar with it's basic common glosarry in a telco billing environment. These cheat words will come in handy when you're in the middle of an interview :D for a billing position. At least it came to me during one of my interview :D&lt;br /&gt;&lt;br /&gt;1. What is Rating ?&lt;br /&gt;Rating is a process to determine a cost for every event. This process involves the account system and the product catalog. Product catalog is a place where we store all product we sell (well, on this case, this will be all service we sell), including it's tariff. Imagine an online bookstore where they have a catalog containing what books they sell, and how much the price.&lt;br /&gt;&lt;br /&gt;2. What is Charging ?&lt;br /&gt;Is a logical place where the Rating process takes place. Charging means deducting or adding your balance. When you use a data service from your cellular to download a song, they will do a rating process for that event, and they will charge you a cost, deducting from your balance.&lt;br /&gt;Talking about balance deducting, current IN/charging system usually have more than 1 pre-configured account that can be owned by a subscriber. Let's say main account, and dedicated account. Imagine this as a wallet, where you can store different types of money there. There are parts of money from your wallet used only to pay your SMS charge, and the other one is only to pay your Voice charge.&lt;br /&gt;&lt;br /&gt;3. What is Re-rating ?&lt;br /&gt;Re-rating means recount your cost for post-rated events. This usually done for discount. Imagine a package, that offers you free 10 minutes call after your 100th minutes call duration. This means that after your call duration reaches 100 minutes, then another 10 minutes call will be free of charge.&lt;br /&gt;&lt;br /&gt;4. What is Billing process?&lt;br /&gt;Ok, so billing means producing your invoices. Usually this is used for postpaid subscriber where they're charged in offline mode. Offline mode means not realtime, batch, bulk, you name it. This paradigm has became a key words for those Billing vendor offers a Convergence Billing solution. We will get this on next section. So how about prepaid subscriber, do they get billing invoice too ? well, no, at least not if it's not a convergence billing. Usually for prepaid subscriber, they only get bill invoices when they're doing top up for their balance. And also, the billing usually includes taxes. These taxes can be included during rating process, or only when the bill invoice produced.&lt;br /&gt;&lt;br /&gt;5. What is Convergence Billing?&lt;br /&gt;There are so many definition for this. Convergence billing is a billing system designed for all service events, including their own characteristics, and at the end, it produces a convergence bill for all of your services. Today's GSM world has offered lots of services. 10 years before, we can never imagine how a cellular phone can bring us a very fast data services, video call, ring back tone, music downloads, etc. Those services has their own characteristics, and therefore, there's a need for a flexible billing system that can handle this. Current IN/Charging system only provide a simple way to charge a service. It might require a software upgrade everytime you sell a new service. And not to mention today's trend, the hybrid customer, where a postpaid customer can do top up for their account using prepaid vouchers. Convergence billing tries to answer this by giving at least few things below :&lt;br /&gt;a. One bill, for all types of services offered by the operators.&lt;br /&gt;b. An online and realtime system, without having to wait for new billing cycle arrived to know your bill.&lt;br /&gt;c. Easy to configure new service type, with it's own way-to-bill. This impacts on time to market for a new product.&lt;br /&gt;d. Lot more.&lt;br /&gt;&lt;br /&gt;This glosarry is as far as I can understand or remember. Feel free to comment if you dont agree with my definition. I will be more than happy to get your input.&lt;br /&gt;&lt;br /&gt;Then, have a nice interview :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-4380858741452129896?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/4380858741452129896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=4380858741452129896' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4380858741452129896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4380858741452129896'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2008/06/popular-telco-billing-terms-1.html' title='Popular telco billing terms #1'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-614544105561051066</id><published>2008-03-27T22:46:00.004+07:00</published><updated>2008-06-20T23:19:21.815+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telco Billing'/><title type='text'>Welcome to billing world....</title><content type='html'>Every event counts....&lt;br /&gt;Outthinking. Outdoing....&lt;br /&gt;&lt;br /&gt;Familiar with those words ? Well yes you're right. Those are the slogans for 2 billing company in telco industries.&lt;br /&gt;&lt;br /&gt;Yes, it's been 3 weeks since I quit from my previos job in J University(some of you must have been familiar with this abbreviation) as one of Development team member. Currently I work for one of telecommunication company, CDMA450 based, in Indonesia (easy guess, there's just only 1 company using this technology in Indonesia). I join here as Interconnect Billing Specialist.&lt;br /&gt;&lt;br /&gt;It's been almost 3 years since I decided to move on to my next career path. Hard decision I guess. Well, of course there's a reason and hope. Also, there's a prayer and faith why I decided to resign. It's the billing world that makes me fall in love with telco.&lt;br /&gt;&lt;br /&gt;I remember my first chance in billing world was in 2006, when I sent my CV, apply to a company as a Billing staff, got accepted, but the situation was a little bit difficult that day, my wife will gave birth soon, and I thought that this wasnt the right time to move, so I stayed.&lt;br /&gt;&lt;br /&gt;My second chance in billing world, came during a project in Indosat. Also, got recommended by one of my campus senior. Again, the time seems didnt fit. I got weblogic training to Hong Kong at the same month, it's a hard choice, but at least I still got my loyalty. It was the first time I got trained abroad, never miss those moment, I was more than happy that day, so I decided to stay.&lt;br /&gt;&lt;br /&gt;My third chance, here in my current company. I thought this is the right time to move. I doubt those chances would come back again for the fourth time. I always thought that joining telco industries right at it's heart was a very strategic decision for my next career path. Some colleagues told me that life will felt so stuck and slowly if I took this chance, well I heard them and I really appreciate them, but still... life is a path full of choice, right ? :)&lt;br /&gt;&lt;br /&gt;My current job title here is Interconnect Billing and Retail Tariff management. Basically, billing solution can be divided into two major parts, Retail and Interconnect. Retail billing is the part where it deals with direct customers for their current balance, charging, and so on. It;s more like daily operational task. While Interconnect Billing relates to another operator. We deal with any kind of event that involved other licensed operator (OLO). While Retail Billing's usually done daily, Interconnect's cycle is only once in a month. Dispute solving, Volume Compare, Tariff Management, is our monthly tasks. We work together with the Retail Billing team, we share the CDR data, but we work in a different way.&lt;br /&gt;&lt;br /&gt;Ok, that's it. Time to go to bed, tomorrow, there's still CDR waiting to be rated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-614544105561051066?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/614544105561051066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=614544105561051066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/614544105561051066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/614544105561051066'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2008/03/welcome-to-billing-world.html' title='Welcome to billing world....'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-4763135689202635345</id><published>2007-12-01T10:50:00.000+07:00</published><updated>2007-12-01T11:20:13.750+07:00</updated><title type='text'>Glassfish for Tomcat and WebMethods</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;These recent days I've been played around with Glassfish in my project. I have to build connectivity between our existing Card Management for Telco company product, created with pure jsp (yes, jsp treated as PHP, spaghetti or whatever you name it) to integrate with SAP. Our client provides WebMethods Integration server 6.5 as our only and only way to interact with the SAP. OK then, I grabbed some code from my previous project with Tomcat and WebMethods 6.1 and try to reuse them in this project. Well, it works. But this code only deals with connectivity. Tomcat contacts WebMethods, and that's it. All transaction maintained by WebMethods, no need to think about rollback, commit, or anything, we apply that on WebMethods's flow services. So simple and cool !. But this current project is different. Installed WebMethods dont have any license of JDBC Adapter, it only has SAP Adapter. So in order to save to database or whatever to our Card Management system, we have to build our own connectivity method. Previously we thought about creating Stored Procedure inside our database that later can be invoked by WebMethods's JDBC Adapter, but the client doesnt want to buy the license. Hmm....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Besides just store to database, our Card Management product also have to provide interfaces so that later on, it could synchronize any document with SAP. So SAP will hit our services if..let's say some PO created in SAP.  In here, I &lt;u&gt;need to provide them with webservices&lt;/u&gt; to access all of our Card Management API in proper way.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;On other side, our Card Management also must be able to synchronize any action triggered from our side. Ok, I can use my previous code just to call the WebMethods's service, but I can not predict how long will it take. WebMethods will continue our request to SAP, and then SAP done some process inside, and after that it will returns a value to us. Based on those values, we must done an action, and after we finished done those action in our side, we must push the result back to SAP, send our document number also. I cant imagine how long the users will be wait for these sequence action. They will bury us :D&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;I see that we can divide this process by synchronous and asynchronous action. There's some action that we need to retrieve the results back from SAP immediately, such as get price. I can't do anything for this action. Saving the price list in our Card Management will blow our mandays. And other process where the users dont care whether they get the result in real time or not. They can check back later to see what happen to their process. So, in here, I &lt;u&gt;need a messaging service&lt;/u&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;So, two needs, webservice and messaging. I was thought that I will install a several products for this. Spring webservice framework to make my life easier when creating webservices (their POJO style's are really cool and simple) and ActiveMQ to provide the messaging broker. All can be integrated within our tomcat instance. But,later I also have own more concern. I must not change too many configuration on currently running tomcat instance, since it runs stable right now. And also, user portal and backend integrations are 2 different thing. The users must not feel any &lt;em&gt;&lt;u&gt;'world wide wait'&lt;/u&gt;&lt;/em&gt; thing when the backend process works hard to full fill their request. So here I decided to install one more instance of application servers for integration needs. And after some browsing, I decide to install Glassfish V2.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Why glassfish ? well, let's say, first I impressed with it's admin console. JBoss guys should really pay attention on this admin console. And secondly, I fall in love with it's support of WebServices. Glassfish support WebServices monitoring. Here I can monitor who called my webservices, on what time, what data sent, and what data returned. This is very useful when reconcile any lost datas. And the third part is, this Glassfish thing has a great messaging supports based on Sun's IMQ. I also browsed the net for this feature, and many guys out there recommends it. Last but not least, Glassfish V2 is JEE 5 compliance app.server (if not the RI itself). Creating WebServices, session EJB's and MDB's are easier with Annotations. Say good bye to deployment descriptor.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;Ok, that's my review, maybe I'll write more about this later.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-4763135689202635345?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/4763135689202635345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=4763135689202635345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4763135689202635345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4763135689202635345'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/12/glassfish-for-tomcat-and-webmethods.html' title='Glassfish for Tomcat and WebMethods'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-1968057927820251713</id><published>2007-11-13T21:17:00.000+07:00</published><updated>2007-11-13T21:53:54.849+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><title type='text'>Ruby Install on DSL Linux</title><content type='html'>Went home earlier than before today, after a day full of meeting with client. I missed my linux. Got a bling about ruby. This stuff sounds cool. Lot's of java programmer migrating to this language, let's give it a shot. I started my adventure by googling with some 'beginner standars' keyword regarding ruby : "howto install ruby", and I got these links :&lt;br /&gt;- http://www.ruby-lang.org/id&lt;br /&gt;- http://hivelogic.com/narrative/articles/ruby_rails_lighttpd_mysql_tiger?status=301&lt;br /&gt;Great, I boot up my DSL linux under qemu, and start downloading the necessary package. I tried to install using DSL's extension facilities (MyDSL-ruby.dsl) but, I don't know if it's work. So I decided to download the source, and compile it, just like the good old days :)&lt;br /&gt;First, I downloaded ruby &lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz"&gt;here&lt;/a&gt;. And then as usual, run 3 commands :&lt;br /&gt;dsl@1[ruby-1.8.6]$ ./configure --prefix=/opt/ruby-1.8.6&lt;br /&gt;dsl@1[ruby-1.8.6]$ make&lt;br /&gt;dsl@1[ruby-1.8.6]$ sudo make install&lt;br /&gt;And, I got my ruby installed in /opt/ruby-1.8.6. Dont forget to add the path reference to ruby's bin/ directory installation as follows (mine at /opt/ruby-1.8.6/bin) :&lt;br /&gt;export PATH=/opt/ruby-1.8.6/bin:$PATH &lt;br /&gt;To make my life easier, I put that line in /etc/profile, and run : source /etc/profile. Check whether it points to the right path, type : irb, it should shows you some prompt like this : &lt;br /&gt;dsl@0[Installer]$ irb&lt;br /&gt;irb(main):001:0&gt;&lt;br /&gt;&lt;br /&gt;Ok, I continued my journey by getting a tools called RubyGems. This RubyGems is a handy command-line tool for managing the installation of Ruby packages, like Rails ('quoted from &lt;a href="http://hivelogic.com/narrative/articles/ruby_rails_lighttpd_mysql_tiger?status=301"&gt;here&lt;/a&gt; ').&lt;br /&gt;I downloaded it from &lt;a href="http://rubyforge.org/frs/?group_id=126"&gt;here&lt;/a&gt;.&lt;br /&gt;After that, I unpack it, and went inside the exploded directory and type : ruby setup.rb&lt;br /&gt;This will start the installation process of RubyGems.&lt;br /&gt;&lt;br /&gt;OK, next I installed Rails, what is it ?. &lt;br /&gt;Quoted from http://rubyonrails.org/, ruby itself is a programming language, and Rails is the framework, just like Struts in Java. Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern.&lt;br /&gt;&lt;br /&gt;After RubyGems installed, it's all easy to install Rails, I just have to type :&lt;br /&gt;sudo gem install rails --include-dependencies&lt;br /&gt;And RubyGems will download all the needs.&lt;br /&gt;&lt;br /&gt;While RubyGems downloading my Rails installation, I went to next step and install PCRE and Lighttpd. PCRE is a Ruby regex extensions stands for Perl Compatible Regular Expression. I downloaded it from &lt;a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.gz"&gt;here&lt;/a&gt;. While Lighttpd is a webserver that became the default one when we choose Rails. I downloaded Lighttpd from &lt;a href="http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2"&gt;here&lt;/a&gt;.&lt;br /&gt;First, PCRE. I run : ./configure, make, and make install. I done the same command with Lighttpd, only that I gave different prefix on each ./configure like this :&lt;br /&gt;PCRE : ./configure --prefix=/opt/pcre-7.4&lt;br /&gt;Lighttpd : ./configure --prefix=/opt/Lighttpd-1.4.18&lt;br /&gt;And the rest make and make install commands were same.&lt;br /&gt;&lt;br /&gt;Ok, I should be ready for rock and roll with ruby on rails.&lt;br /&gt;I'll write my next experiments later. Now, it's time to get rest, we'll have a great patch deployment tomorrow :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-1968057927820251713?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/1968057927820251713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=1968057927820251713' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1968057927820251713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/1968057927820251713'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/11/ruby-install-on-dsl-linux.html' title='Ruby Install on DSL Linux'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-6369864826329145848</id><published>2007-06-03T17:07:00.000+07:00</published><updated>2007-06-03T17:13:21.238+07:00</updated><title type='text'>Apache Httpd and Tomcat integration using mod_jk, part 2</title><content type='html'>This posting splitted because somehow blogspot just cut it. I don't know why but when I previewed the posting, blogspot just cut the postings, so I splitted it into 2 parts.&lt;br /&gt;&lt;br /&gt;Ok, now we create workers.properties file.&lt;br /&gt;onty@phoenix:/opt/httpd-2.2.4$ vi conf/workers.properties&lt;br /&gt;------------------------------------------------------------------------------------&lt;br /&gt;worker.list=router,jkstatus&lt;br /&gt;# Define a worker using ajp13&lt;br /&gt;worker.worker1.port=8009&lt;br /&gt;worker.worker1.host=localhost&lt;br /&gt;worker.worker1.type=ajp13&lt;br /&gt;worker.worker1.lbfactor=1&lt;br /&gt;# Define prefered failover node for worker1&lt;br /&gt;worker.worker1.redirect=worker2&lt;br /&gt;# Define another worker using ajp13&lt;br /&gt;worker.worker2.port=8009&lt;br /&gt;worker.worker2.host=localhost&lt;br /&gt;worker.worker2.type=ajp13&lt;br /&gt;worker.worker2.lbfactor=1&lt;br /&gt;&lt;br /&gt;# Define the LB worker&lt;br /&gt;worker.router.type=lb&lt;br /&gt;worker.router.balance_workers=worker1,worker2&lt;br /&gt;# Define the status worker&lt;br /&gt;worker.jkstatus.type=status&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------&lt;br /&gt;This file defines all our workers. Our 'router' worker will be a load balancer worker for other workers, including worker1 and worker2.&lt;br /&gt;&lt;br /&gt;Now, we install (unzip, exactly) our apache. We use apache-5.2.23. We will modify the directory structure little bit, as shown like this.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_02IFrF9Xz98/RmKTVamjjKI/AAAAAAAABkI/CptR2eLPrpA/s1600-h/opt-structure.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_02IFrF9Xz98/RmKTVamjjKI/AAAAAAAABkI/CptR2eLPrpA/s320/opt-structure.png" alt="" id="BLOGGER_PHOTO_ID_5071778126500170914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Give attention to tomcat1 and tomcat2 directory, and also directories inside it.We will use 2 instance of tomcat1 and tomcat2 as worker 'worker1' and 'worker2'. We also need to configure each server.xml in tomcat1 and tomcat2 so that they're not using the same port.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tomcat1 :&lt;/span&gt;&lt;br /&gt;Server port="8005" shutdown="SHUTDOWN"&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;Connector port="8009"&lt;br /&gt;               enableLookups="false" redirectPort="8443" protocol="AJP/1.3"&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;    &lt;!-- DISABLE THIS ENTRY --&gt;&lt;br /&gt;Connector port="8080" maxHttpHeaderSize="8192"&lt;br /&gt;               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;br /&gt;               enableLookups="false" redirectPort="8443" acceptCount="100"&lt;br /&gt;               connectionTimeout="20000" disableUploadTimeout="true"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tomcat2 :&lt;/span&gt;&lt;br /&gt;Server port="9005" shutdown="SHUTDOWN"&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;Connector port="9009"&lt;br /&gt;               enableLookups="false" redirectPort="8443" protocol="AJP/1.3"&lt;br /&gt;..&lt;br /&gt;..&lt;br /&gt;    &lt;!-- DISABLED --&gt;&lt;br /&gt;Connector port="8080" maxHttpHeaderSize="8192"&lt;br /&gt;               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;br /&gt;               enableLookups="false" redirectPort="8443" acceptCount="100"&lt;br /&gt;               connectionTimeout="20000" disableUploadTimeout="true"&lt;br /&gt;&lt;br /&gt;One more thing, we need to create startup and shutdown file for each tomcat instance. We call it start1.sh, start2.sh, stop1.sh, stop2.sh&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;start1.sh&lt;/span&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat1&lt;br /&gt;export JAVA_HOME=/opt/jdk1.6.0&lt;br /&gt;./startup.sh&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;start2.sh&lt;/span&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat2&lt;br /&gt;export JAVA_HOME=/opt/jdk1.6.0&lt;br /&gt;./startup.sh&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stop1.sh&lt;/span&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat1&lt;br /&gt;export JAVA_HOME=/opt/jdk1.6.0&lt;br /&gt;./shutdown.sh&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stop2.sh&lt;/span&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat2&lt;br /&gt;export JAVA_HOME=/opt/jdk1.6.0&lt;br /&gt;./shutdown.sh&lt;br /&gt;&lt;br /&gt;Basically, these file just aimed to setup environment variable named CATALINA_BASE to point which tomcat instance we want to start/stop.&lt;br /&gt;&lt;br /&gt;Now, lets try our installation. Start both tomcat instance, and also start your httpd server. Point out the browser to http://localhost/tomcat-docs/ and see if the request handled correctly. Httpd will redirect the request so that can be served by tomcat. Also point the browser to http://localhost/jkmanager/. This context path shows us the Load Balancing status for our tomcat instance.&lt;br /&gt;&lt;br /&gt;Feel free to drop any comments about this posting.&lt;br /&gt;Thanks, good luck trying !&lt;br /&gt;&lt;br /&gt;&lt;server port="8005" shutdown="SHUTDOWN"&gt;&lt;/server&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-6369864826329145848?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/6369864826329145848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=6369864826329145848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/6369864826329145848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/6369864826329145848'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/06/apache-httpd-and-tomcat-integration_1721.html' title='Apache Httpd and Tomcat integration using mod_jk, part 2'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_02IFrF9Xz98/RmKTVamjjKI/AAAAAAAABkI/CptR2eLPrpA/s72-c/opt-structure.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-6874292871025293652</id><published>2007-06-03T15:58:00.000+07:00</published><updated>2007-06-03T17:06:47.380+07:00</updated><title type='text'>Apache Httpd and Tomcat integration using mod_jk, part 1</title><content type='html'>&lt;span style="font-size:180%;"&gt;&lt;span style="font-family:arial;"&gt;I&lt;/span&gt;&lt;/span&gt;n my other blog, I've wrote about howto use mod_jk2 to integrate httpd and tomcat. The article can be accesed &lt;a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load"&gt;here&lt;/a&gt; and &lt;a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load1"&gt;here&lt;/a&gt;.&lt;br /&gt;Now, since mod_jk2 has not supported again by apache-tomcat-connector developers, so in this article I will use mod_jk. I'm using :&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;httpd-2.2.4, can be downloaded &lt;a href="http://apache.the.net.id/httpd/httpd-2.2.4.tar.gz"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;tomcat-5.2.23, can be downloaded &lt;a href="http://apache.the.net.id/tomcat/tomcat-5/v5.5.23/bin/apache-tomcat-5.5.23.tar.gz"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;tomcat-connector, can be downloaded &lt;a href="http://apache.the.net.id/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.21/mod_jk-1.2.21-apache-2.2.x-linux-i686.so"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I prefer apache.the.net.id since this is the nearest mirror from Indonesia. O ya, Im using Kubuntu Feisty Fawn in my laptop.&lt;br /&gt;First, we install the httpd-2.2.4 first. Unzip it, place it at some directory you like. In my environment, my user has full access to /opt directory, so I'm using it.&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoe&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;nix:/opt$ gunzip httpd-2.2.4.tar.gz&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/opt$ tar -xvf httpd-2.2.4.tar &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/opt$ mv httpd-2.2.4 httpd-2.2.4-src &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/opt$ cd httpd-2.2.4-src &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; Configure, put the result in /opt/httpd-2.2.4, enable shared object, enable cgi support. Enabling shared object makes us able to load dynamic shared object library. We're using mod_jk's shared object, so we need to enable  apache to support dynamic shared object library. This also usefull if you want to enable your apache httpd server to serve PHP also. Same like this, you would also compile PHP as shared object, and then load it dynamically to apache httpd using LoadModule syntax in your httpd.conf .&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/op&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;t/httpd-2.2.4-src$ ./configure --prefix=/opt/httpd-2.2.4 --enable-so --enable-cgi &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/opt/httpd-2.2.4-src$ make &lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;onty@phoenix:/opt/httpd-2.2.4-src$ make install &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now, try to start it using root :&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;onty@phoenix:/opt/httpd-2.2.4-src$ cd /opt/httpd-2.2.4 &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;onty@phoenix:/opt/httpd-2.2.4$ su - &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;root@phoenix:/opt/httpd-2.2.4# bin/apachectl start &lt;/span&gt;&lt;br /&gt;If everything ok, you should be able to point your browser to http://localhost now, and see if you can read any "It works" there.&lt;br /&gt;OK, now we continue to install the tomcat connector. Apache has provided us with the binary version of the connector. As mentioned in before, we should now already download it. I'm using mod_jk-1.2.21-apache-2.2.x-linux-i686.so. What we need to do is just load this shared object so that can be used by apache, that simple  ? yes :D&lt;br /&gt;Edit your httpd.conf, add this line :&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;Include conf/extra/mod_jk.conf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This is new style from apache that makes us easier to maintain our configuration file in modular basis.&lt;br /&gt;Now create a new file in conf/extra/ name it mod_jk.conf.&lt;br /&gt;---------------------------------------------  mod_jk.conf  -----------------------------------&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;JkWorkersFile /opt/httpd-2.2.4/conf/workers.properties&lt;br /&gt;&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;JkShmFile       /var/log/httpd/mod_jk.shm&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;JkLogFile       /opt/httpd-2.2.4/logs/mod_jk.log&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;JkLogLevel      info&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;JkLogStampFormat        "[%a %b %d %H:%M:%S %Y]"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;JkMount /tomcat-docs/* router&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;location jkmanager=""&gt;&lt;/location&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;        JkMount jkstatus&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;        Order deny,allow&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;        Deny&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt; from all&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="font-family:courier new;"&gt;        Allow from 127.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;-------------------------------------------------------&lt;br /&gt;From the configuration file, we can see that :&lt;br /&gt;We will place the log file in /opt/httpd-2.2.4/logs/mod_jk.log.&lt;br /&gt;We will configure the connectors with a file named workers.properties located in /opt/httpd-2.2.4/conf .&lt;br /&gt;We will have shared file that will be used by apache and tomcat, located in &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;/var/log/httpd/mod_jk.shm&lt;/span&gt;&lt;/span&gt;. If the directory /var/log/httpd doesnt exist yet, we should create it first using root user.&lt;br /&gt;The logger level will be INFO.&lt;br /&gt;We will map /tomcat-docs/ request in httpd to be handled by tomcat, so make sure that this webapp exist in tomcat. By default if you download tomcat, this webapp is already exist. Later you can change it to your own webapp. And this request will be handled by a worker named 'router'.&lt;br /&gt;Last one is for jkmanager monitoring tools. There will be new context path named /jkmanager/ that will show us status for our jk_module. This context path only allowed to be accessed from 127.0.0.1 (localhost).&lt;br /&gt;&lt;br /&gt;Ok, now we need to create workers.properties in conf/ directory. See part 2 of this post.&lt;br /&gt;&lt;br /&gt;&lt;server port="8005" shutdown="SHUTDOWN"&gt;&lt;/server&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-6874292871025293652?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/6874292871025293652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=6874292871025293652' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/6874292871025293652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/6874292871025293652'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/06/apache-httpd-and-tomcat-integration.html' title='Apache Httpd and Tomcat integration using mod_jk, part 1'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-4470400663377282129</id><published>2007-06-01T14:37:00.000+07:00</published><updated>2007-06-01T14:55:10.397+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux stuff'/><title type='text'>Tora(Toolkit for Oracle) Installation</title><content type='html'>Yesterday I managed to install my laptop with Tora. I'm using Kubuntu Feisty Fawn.For you who doesnt have any idea what kind of animal Tora is, let me give you some hint. If you used to use Toad in M$-Windows to do your oracle database-related jobs, well, you can say that Tora has similar usage.It can runs on Linux, make your life simpler, and easier, he he. Hey, it's your laptop that should work for you, not you're the one that has to work for your laptop, right ?&lt;br /&gt;Ok, here's the step I saved from my installation adventure :&lt;br /&gt;&lt;br /&gt;1. get Oracle instant client&lt;br /&gt;You can get it here :&lt;br /&gt;http://download.oracle.com/otn/linux/instantclient/instantclient-basic-linux32-10.2.0.3-20061115.zip&lt;br /&gt;http://download.oracle.com/otn/linux/instantclient/instantclient-sdk-linux32-10.2.0.3-20061115.zip&lt;br /&gt;&lt;br /&gt;2. Unzip it at some directory, e.g : /opt/instantclient_10_2&lt;br /&gt;&lt;br /&gt;3. Add the directory to /etc/ld.so.conf, dont forget run /sbin/ldconfig.&lt;br /&gt;Here's the sample from my laptop :&lt;br /&gt;------------------&lt;br /&gt;onty@phoenix:~$ cat /etc/ld.so.conf&lt;br /&gt;/lib&lt;br /&gt;/usr/lib&lt;br /&gt;/usr/lib/firefox/plugins&lt;br /&gt;/opt/instantclient_10_2&lt;br /&gt;------------------&lt;br /&gt;&lt;br /&gt;4. Install libqscintilla.&lt;br /&gt;Thank God, I'm using Kubuntu,and having great internet connection in my office. So just simply run apt-get.&lt;br /&gt;root@phoenix:/opt# apt-get install libqscintilla6 libqscintilla-dev&lt;br /&gt;&lt;br /&gt;5. Download and Unzip tora&lt;br /&gt;You can get it &lt;a href="http://sourceforge.net/projects/tora"&gt;here&lt;/a&gt;. I'm using version 1.3.21.&lt;br /&gt;&lt;br /&gt;6. compile start&lt;br /&gt;oracle@phoenix:/opt/tora-1.3.21$ ./configure --with-qt-dir=/usr/lib/qt3 --with-oracle-libraries=/opt/instantclient_10_2 --with-oracle-includes=/opt/instantclient_10_2/sdk/include --with-oci-version=10G --with-instant-client&lt;br /&gt;oracle@phoenix:/opt/tora-1.3.21$ make&lt;br /&gt;oracle@phoenix:/opt/tora-1.3.21$ make install&lt;br /&gt;&lt;br /&gt;7. In the midde of make, I'm getting error says that toThreadStartWrapper has not been declared. I googled around to find the solution, and found out that I have to edit a file named tothread.cpp around line 157 like below.&lt;br /&gt;&lt;br /&gt;#define THREAD_ASSERT(x) if((x)!=0) { \&lt;br /&gt;throw (qApp-&gt;translate("toThread","Thread function \"%1\" failed.").arg(QString::fromLatin1( #x ))); }&lt;br /&gt;&lt;br /&gt;/* new added start */&lt;br /&gt;void *toThreadStartWrapper(void *t);&lt;br /&gt;/* new added end */&lt;br /&gt;&lt;br /&gt;void toThread::initAttr()&lt;br /&gt;&lt;br /&gt;After that, I continued with make, and make install.&lt;br /&gt;&lt;br /&gt;And finally, run ./tora and you can see ORACLE option in your connection. That connection refers to wherever you put our TNSNAMES.ORA in your ORACLE_HOME.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, that's for today's tip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-4470400663377282129?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/4470400663377282129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=4470400663377282129' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4470400663377282129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/4470400663377282129'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/06/toratoolkit-for-oracle-installation.html' title='Tora(Toolkit for Oracle) Installation'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7835980568609830954.post-2624331814008903381</id><published>2007-05-29T22:53:00.000+07:00</published><updated>2007-06-01T14:04:10.654+07:00</updated><title type='text'>Testing my new Blog</title><content type='html'>This is just write test for the first time using blogspot.com, this is the second blog I have. My first one is in http://www.jroller.com/page/JPrasojo . I just want to try out google's owned blog space. Let's see how good it woks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7835980568609830954-2624331814008903381?l=jprasojo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jprasojo.blogspot.com/feeds/2624331814008903381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7835980568609830954&amp;postID=2624331814008903381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2624331814008903381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7835980568609830954/posts/default/2624331814008903381'/><link rel='alternate' type='text/html' href='http://jprasojo.blogspot.com/2007/05/testing-my-new-blog.html' title='Testing my new Blog'/><author><name>JPrasojo</name><uri>http://www.blogger.com/profile/13179695770379171022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_02IFrF9Xz98/SUr3z2nhnoI/AAAAAAAACw8/RjSIbnqZ5q4/S220/MeVsGuitars.jpg'/></author><thr:total>0</thr:total></entry></feed>
