JPrasojo's bloghttp://onty.maclab.org/2018-03-25T00:00:00+00:00DNS Setup for Theprasojos in Ubuntu@Pine642018-03-25T00:00:00+00:002018-03-25T00:00:00+00:00Lintang JPtag:onty.maclab.org,2018-03-25:/2018/03/25/dns-setup-for-theprasojos-in-ubuntupine64/<p>Long time I have not write on this blog, mostly because I can't remember how to configure the pelican in my mac (yeah, this blog uses pelican generator for html content, bye bye Wordpress, I guess you are no longer impress everyone by now). And luckily this blog's content is …</p><p>Long time I have not write on this blog, mostly because I can't remember how to configure the pelican in my mac (yeah, this blog uses pelican generator for html content, bye bye Wordpress, I guess you are no longer impress everyone by now). And luckily this blog's content is stored in github, making me easier to pull the content back. After some googling with keyword = 'pelican', I manage to get the set up back up and running.</p>
<p>Now, the problem is my ego :p, with hi-speed broadband, unlimited, and IPv6 allocation, sometime I felt so ashamed if I don't have my own server kingdom. Paying AWS just for playing around is just too much. At home I have my Pine64, several Raspberry Pi, all of them lying around without any use, so that's why I decided to host my own DNS, mail server, and of course, this blog. Problem with the blog is that, since I put it under IPv6 range, then the web client should also have IPv6. Well ok, I don't have lots of requirements for the webserver since I use pure HTML. So I put the mirror on other place as well, no big deal, as long as they can server HTML, fine for me. Hence you can read this blog from http://onty.maclab.org too. This post will not cover the concept on how DNS works, but this is rather just me, sharing how my server is configured, that's all.</p>
<p>Now, since my Pine64 has 2GB RAM, 64bit ARM CPU, 4 Core, and plenty of micro SD card space, I decided to use it as my Primary NS, Mail Server, and Web Server :D. My other old Raspberry Pi 1B is the Secondary NS. This old Raspberry 1B also hosts other functions, which is my radio streaming client, and it also runs Docker (yeah, Docker, you got it right) running tvheadend-server to receive digital TV (DVB-T2) broadcast here in Dublin. Pretty much stuff crammed into and old board, I don't care, and so far it serves its purpose very well :p. I can share this later, stay tuned.</p>
<p>So, yeah, I am using ubuntu in my Pine64. Here's the uname -a result just to give a slight hint on what I use:</p>
<div class="highlight"><pre><span></span>root@pegasus:~# uname -a
Linux pegasus 3.10.105-0-pine64-longsleep #3 SMP PREEMPT Sat Mar 11 16:05:53 CET 2017 aarch64 aarch64 aarch64 GNU/Linux
</pre></div>
<p>And the CPU info :</p>
<div class="highlight"><pre><span></span>root@pegasus:~# cat /proc/cpuinfo
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
processor : 1
processor : 2
processor : 3
Features : fp asimd aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: AArch64
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
Hardware : sun50iw1p1
</pre></div>
<p>And the Memory info :</p>
<div class="highlight"><pre><span></span>root@pegasus:~# cat /proc/meminfo
MemTotal: 2036424 kB
MemFree: 985348 kB
Buffers: 116548 kB
Cached: 628944 kB
</pre></div>
<p>For the nameserver software, I used the famous Bind9. No particular reason why I used Bind9 instead of others like PowerDNS or djbdns. Kenny G once said it's just for <em>sentimental</em> reason :)</p>
<p>So, I started by installing bind9 by using the most obvious command in Ubuntu.</p>
<div class="highlight"><pre><span></span>root@pegasus:~# apt-get install bind9 bind9-utils
</pre></div>
<p>Then the configuration festival begins. The main configuration file is stored at <em>/etc/named.conf</em> with the pointers to other configuration file. The idea here is to split the configuration file based on it's purpose so that if I wanted to add more zones , I will just have to touch particular part of the configuration without touching anything else. Better safe than sorry, right? So this below is the only content of my <em>/etc/named.conf</em> file.</p>
<div class="highlight"><pre><span></span>include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
</pre></div>
<p>The first file referred to from the main <em>named.conf</em> is <em>named.conf.options</em>. This file contains the options to be configured for the running Bind9 daemon. It tells the Bind9 daemon on which interface it should listen to, where to store the bind9 cache, and where to forward any DNS query that belongs to outside our zone (here I used google's 8.8.8.8 and 8.8.4.4). It also defines the other name server in our network we would like to use as the secondary name server (on this case it's 192.168.9.50).</p>
<div class="highlight"><pre><span></span>options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
allow-query { any; };
allow-transfer { 192.168.9.50; localhost; };
also-notify { 192.168.9.50; };
recursion no;
notify yes;
};
</pre></div>
<p>The <em>allow-transfer</em> option controls which server that we allowed to do the full zone transfer to. And the <em>also-notify</em> option controls which server (which is the secondary name server) that the primary server should <em>Notify</em> when there are some changes in this primary name server. The secondary nameserver then will check the serial number of the record from the primary name server and then request for the incremental changes of the zone record to be added/removed on it's record, making the two name server always sync each other.</p>
<p>The next file is <em>/etc/named.conf.local</em>. This is where the zone is configured. So, I hijacked one of the domains in afraid.org called blogs.or.id and add 1 level domain above it (theprasojos), making it theprasojos.com.</p>
<div class="highlight"><pre><span></span>zone "theprasojos.com" IN {
type master;
file "/var/lib/bind/db.theprasojos.com";
};
zone "0.8.2.1.1.2.a.6.4.8.0.8.4.9.a.2.ip6.arpa" IN {
type master;
file "/var/lib/bind/db.0.8.2.1.1.2.a.6.4.8.0.8.4.9.a.2.ip6.arpa";
};
</pre></div>
<p>In the future, if more zones are to be added, then this is the only configuration file that needs to be touched.</p>
<p>The last file referred by named.conf is named.conf.default-zones. This file contains the zones that was by default configured by Bind9, so normally we don't need to touch anything on this file. These configurations listed in this file comes by default with the installation of Bind9 itself.</p>
<div class="highlight"><pre><span></span>zone "." {
type hint;
file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
</pre></div>
<p>Now, back to our zone, theprasojos.com. As pointed by the second file <em>named.conf.local</em>, this is the configuration file list for our zone. Here's the content of <em>/var/lib/bind/db.theprasojos.com</em>. I put a random content there just to protect my network :)</p>
<div class="highlight"><pre><span></span>root@pegasus:/etc/bind# cat /var/lib/bind/db.theprasojos.com
$TTL 1H
@ IN SOA @ lintang.jp.icloud.com. (
21 ; serial
1H ; refresh
1H ; retry
3D ; expire
2H ) ; minimum
@ IN NS ns1.theprasojos.com.
@ IN NS ns2.theprasojos.com.
6 IN AAAA 2a94:8084:6a21:1280:36c3:d2ff:fee4:cdf2
ns1 IN AAAA 2a94:8084:6a21:1280:36c3:d2ff:fee4:cdf2
ns2 IN AAAA 2a94:8084:6a21:1280:4ba:dd0:f892:fa91
nightwing IN AAAA 2a94:8084:6a21:1280:ba27:ebff:fe40:c2e
@ IN MX 10 mail
mail IN AAAA 2a94:8084:6a21:1280:36c3:d2ff:fee4:cdf2
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPdw2AmI8Ybbj5jNpbuqEcMW0VJoh+VU1fIO6b0+Yp5HPuat/DP4YakTdnSn0alzW0OpaFYdgj4ztTg/2NGzIqjHmDrrHUaw+Z6PsZaTT8UvG+R1icT5A8xH57xgU9yCaZdZQ4ZTs2IcFjajHvdzHNqYRFdlHf+c9aZpUC7B0+yQIDAQAB" )
@ IN TXT "v=spf1 mx -all"
@ IN TXT "PTR test"
</pre></div>
<p>Now, it happens that my ISP only grants a bunch of world-routable IPv6 to me, so this explains why I only have IPv6 content in it. There you can see I have several record with type = AAAA which points to IPv6 address. I also put several TXT record for my mail server which will be covered later on.</p>
<p>And finally below is the reverse zone record that I have. Again, since I only have IPv6 allocation, the content looks weird, but hey, it worked perfectly :)</p>
<div class="highlight"><pre><span></span>root@pegasus:/etc/bind# cat /var/lib/bind/db.0.8.2.1.1.2.a.6.4.8.0.8.4.9.a.2.ip6.arpa
$TTL 1H
@ IN SOA @ lintang.jp.icloud.com. (
21 ; serial
1H ; refresh
1H ; retry
3D ; expire
2H ) ; minimum
@ IN NS ns1.theprasojos.com.
@ IN NS ns2.theprasojos.com.
2.f.d.c.4.e.e.f.f.f.2.d.3.c.6.3 IN PTR ns1.theprasojos.com.
2.f.d.c.4.e.e.f.f.f.2.d.3.c.6.3 IN PTR mail.theprasojos.com.
1.9.a.f.2.9.8.f.0.d.d.0.a.b.4.0 IN PTR ns2.theprasojos.com.
e.2.c.0.0.4.e.f.f.f.b.e.7.2.a.b IN PTR nightwing.theprasojos.com.
</pre></div>
<p>Btw, you might ask how did I construct those PTR record and the PTR zone file name ? I used the following tools provided <a href="http://rdns6.com/zone">here</a> . It gives a good hint on how to construct the PTR record for IPv6 address.</p>
<p>Now it's time to test it. The DNS propagation will take some time. I used the tool <a href="https://dnsmap.io">here</a> instead of those provided by Google. This is just to make sure that my zone is handled well only by Google's NS, but also other name server as well.</p>
<p>We can also test it from console. See below result :</p>
<div class="highlight"><pre><span></span>$ dig -t ns +noall +answer theprasojos.com <span class="m">8</span>.8.8.8
theprasojos.com. <span class="m">3424</span> IN NS ns2.theprasojos.com.
theprasojos.com. <span class="m">3424</span> IN NS ns1.theprasojos.com.
</pre></div>
<p>And for the aaaa record :</p>
<div class="highlight"><pre><span></span>$ dig -t aaaa +noall +answer www.theprasojos.com <span class="m">8</span>.8.4.4
www.theprasojos.com. <span class="m">3518</span> IN AAAA 2a94:8084:6a21:1280:36c3:d2ff:fee4:cdf2
</pre></div>
<p>And so on, so forth :)</p>
<p>Finally, last step is to make Bind9 running everytime the server starts. Since I use systemd, then the following file is required (/lib/systemd/system/bind9.service):</p>
<div class="highlight"><pre><span></span><span class="k">[Unit]</span>
<span class="na">Description</span><span class="o">=</span><span class="s">BIND Domain Name Server</span>
<span class="na">Documentation</span><span class="o">=</span><span class="s">man:named(8)</span>
<span class="na">After</span><span class="o">=</span><span class="s">network.target</span>
<span class="k">[Service]</span>
<span class="na">EnvironmentFile</span><span class="o">=</span><span class="s">/etc/default/bind9</span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/sbin/named -f $OPTIONS</span>
<span class="na">ExecReload</span><span class="o">=</span><span class="s">/usr/sbin/rndc reload</span>
<span class="na">ExecStop</span><span class="o">=</span><span class="s">/usr/sbin/rndc stop</span>
<span class="k">[Install]</span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
</pre></div>
<p>And then the symbolic link :</p>
<div class="highlight"><pre><span></span>/etc/systemd/system/multi-user.target.wants/bind9.service -> /lib/systemd/system/bind9.service
</pre></div>
<p>That's it. Thanks for reading.</p>The power of lsof command2018-03-21T00:00:00+00:002018-03-21T00:00:00+00:00Lintang JPtag:onty.maclab.org,2018-03-21:/2018/03/21/the-power-of-lsof-command/<p>After few years using Linux and dealt with <em>lsof</em>, so far I only used it to check the file and dependancy library. It's very helpful to during the troubleshooting when a running binary crashed unexpectedly after some library upgrade in the server. At least that was according to my yearly …</p><p>After few years using Linux and dealt with <em>lsof</em>, so far I only used it to check the file and dependancy library. It's very helpful to during the troubleshooting when a running binary crashed unexpectedly after some library upgrade in the server. At least that was according to my yearly experience dealing with Linux/Unix in Telco environment. Below is the example of the lsof output command against a named process in my Pine64. It shows the list of files and library opened by named process.</p>
<div class="highlight"><pre><span></span>COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
named 23423 bind cwd DIR 179,2 4096 24142 /var/cache/bind
named 23423 bind rtd DIR 179,2 4096 2 /
named 23423 bind txt REG 179,2 571200 15849 /usr/sbin/named
named 23423 bind mem REG 179,2 4391541 25637 /usr/share/GeoIP/GeoIPv6.dat
named 23423 bind mem REG 179,2 1160739 25639 /usr/share/GeoIP/GeoIP.dat
named 23423 bind mem REG 179,2 84824 26359 /usr/lib/aarch64-linux-gnu/openssl-1.0.0/engines/libgost.so
named 23423 bind mem REG 179,2 39272 52247 /lib/aarch64-linux-gnu/libnss_files-2.23.so
named 23423 bind mem REG 179,2 39312 52255 /lib/aarch64-linux-gnu/libnss_nis-2.23.so
named 23423 bind mem REG 179,2 76632 52263 /lib/aarch64-linux-gnu/libnsl-2.23.so
named 23423 bind mem REG 179,2 31408 52259 /lib/aarch64-linux-gnu/libnss_compat-2.23.so
named 23423 bind mem REG 179,2 70664 587 /lib/aarch64-linux-gnu/libgcc_s.so.1
named 23423 bind mem REG 179,2 1554312 35082 /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.21
named 23423 bind mem REG 179,2 25913104 36301 /usr/lib/aarch64-linux-gnu/libicudata.so.55.1
named 23423 bind mem REG 179,2 76456 52252 /lib/aarch64-linux-gnu/libresolv-2.23.so
named 23423 bind mem REG 179,2 14176 10038 /lib/aarch64-linux-gnu/libkeyutils.so.1.5
named 23423 bind mem REG 179,2 39440 4764 /usr/lib/aarch64-linux-gnu/libkrb5support.so.0.1
named 23423 bind mem REG 179,2 14496 595 /lib/aarch64-linux-gnu/libcom_err.so.2.1
named 23423 bind mem REG 179,2 170320 4773 /usr/lib/aarch64-linux-gnu/libk5crypto.so.3.1
named 23423 bind mem REG 179,2 643136 52250 /lib/aarch64-linux-gnu/libm-2.23.so
named 23423 bind mem REG 179,2 116816 483 /lib/aarch64-linux-gnu/liblzma.so.5.0.0
named 23423 bind mem REG 179,2 92400 1064 /lib/aarch64-linux-gnu/libz.so.1.2.8
named 23423 bind mem REG 179,2 1611832 36295 /usr/lib/aarch64-linux-gnu/libicuuc.so.55.1
named 23423 bind mem REG 179,2 757296 4753 /usr/lib/aarch64-linux-gnu/libkrb5.so.3.3
named 23423 bind mem REG 179,2 252040 4744 /usr/lib/aarch64-linux-gnu/libgssapi_krb5.so.2.2
named 23423 bind mem REG 179,2 1265992 52262 /lib/aarch64-linux-gnu/libc-2.23.so
named 23423 bind mem REG 179,2 1575720 26244 /usr/lib/aarch64-linux-gnu/libxml2.so.2.9.3
named 23423 bind mem REG 179,2 219544 22863 /usr/lib/aarch64-linux-gnu/libGeoIP.so.1.6.9
named 23423 bind mem REG 179,2 139560 52257 /lib/aarch64-linux-gnu/libpthread-2.23.so
named 23423 bind mem REG 179,2 22944 613 /lib/aarch64-linux-gnu/libcap.so.2.24
named 23423 bind mem REG 179,2 10400 52264 /lib/aarch64-linux-gnu/libdl-2.23.so
named 23423 bind mem REG 179,2 405376 15866 /usr/lib/aarch64-linux-gnu/libisc.so.160.0.0
named 23423 bind mem REG 179,2 34880 15871 /usr/lib/aarch64-linux-gnu/libisccc.so.140.0.4
named 23423 bind mem REG 179,2 147048 15878 /usr/lib/aarch64-linux-gnu/libisccfg.so.140.3.0
named 23423 bind mem REG 179,2 51040 10408 /usr/lib/aarch64-linux-gnu/libbind9.so.140.0.10
named 23423 bind mem REG 179,2 1639096 26368 /lib/aarch64-linux-gnu/libcrypto.so.1.0.0
named 23423 bind mem REG 179,2 1757560 6890 /usr/lib/aarch64-linux-gnu/libdns.so.162.1.3
named 23423 bind mem REG 179,2 67536 15906 /usr/lib/aarch64-linux-gnu/liblwres.so.141.0.3
named 23423 bind mem REG 179,2 125776 52261 /lib/aarch64-linux-gnu/ld-2.23.so
</pre></div>
<p>Now, lsof binary exist not only in Linux, but it also exist in OSx and FreeBSD. Well, if you don't have it, then you should probably install it first. OSx user can install this using brew, and FreeBSD user can install this with pkg. Here's the sample of the output from my Mac.</p>
<div class="highlight"><pre><span></span>$ sudo lsof -p <span class="m">133</span>
Password:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
aslmanage <span class="m">133</span> root cwd DIR <span class="m">1</span>,5 <span class="m">448</span> <span class="m">4335236222</span> /private/var/log/DiagnosticMessages
aslmanage <span class="m">133</span> root txt REG <span class="m">1</span>,5 <span class="m">65216</span> <span class="m">4335245721</span> /usr/sbin/aslmanager
aslmanage <span class="m">133</span> root txt REG <span class="m">1</span>,5 <span class="m">837248</span> <span class="m">4338232972</span> /usr/lib/dyld
aslmanage <span class="m">133</span> root txt REG <span class="m">1</span>,5 <span class="m">1156890624</span> <span class="m">4338816345</span> /private/var/db/dyld/dyld_shared_cache_x86_64h
aslmanage <span class="m">133</span> root 0r CHR <span class="m">3</span>,2 0t0 <span class="m">313</span> /dev/null
aslmanage <span class="m">133</span> root 1u CHR <span class="m">3</span>,2 0t0 <span class="m">313</span> /dev/null
aslmanage <span class="m">133</span> root 2u CHR <span class="m">3</span>,2 0t0 <span class="m">313</span> /dev/null
</pre></div>
<p>Now, the other side of <em>lsof</em> that I just <em>came to know</em> is it's -i option. It shows the list of opened socket by each process <strong>and</strong> most importantly it's destination. See below output from my Mac:</p>
<div class="highlight"><pre><span></span>$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
loginwind <span class="m">119</span> onty 8u IPv4 0xe46a6ed4502cbdf7 0t0 UDP *:*
UserEvent <span class="m">320</span> onty 4u IPv4 0xe46a6ed4502cc0a7 0t0 UDP *:*
SystemUIS <span class="m">327</span> onty 10u IPv4 0xe46a6ed4502cc357 0t0 UDP *:*
SystemUIS <span class="m">327</span> onty 11u IPv4 0xe46a6ed4502cbb47 0t0 UDP *:*
SystemUIS <span class="m">327</span> onty 12u IPv4 0xe46a6ed4502cb897 0t0 UDP *:50074
SystemUIS <span class="m">327</span> onty 13u IPv4 0xe46a6ed4502cb5e7 0t0 UDP *:*
SystemUIS <span class="m">327</span> onty 20u IPv4 0xe46a6ed4502cde37 0t0 UDP *:*
cloudd <span class="m">343</span> onty 150u IPv4 0xe46a6ed45872612f 0t0 TCP <span class="m">10</span>.9.0.162:54525->17.248.147.114:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
sharingd <span class="m">354</span> onty 4u IPv4 0xe46a6ed450cf4e17 0t0 UDP *:*
sharingd <span class="m">354</span> onty 5u IPv4 0xe46a6ed450cf48b7 0t0 UDP *:*
sharingd <span class="m">354</span> onty 9u IPv4 0xe46a6ed44c2aa317 0t0 UDP *:*
sharingd <span class="m">354</span> onty 10u IPv4 0xe46a6ed44c2aab27 0t0 UDP *:*
sharingd <span class="m">354</span> onty 11u IPv4 0xe46a6ed44c2ac8b7 0t0 UDP *:*
WiFiProxy <span class="m">377</span> onty 5u IPv4 0xe46a6ed44ffd9e17 0t0 UDP *:*
identitys <span class="m">378</span> onty 19u IPv4 0xe46a6ed44ffdae37 0t0 UDP *:*
rapportd <span class="m">402</span> onty 3u IPv4 0xe46a6ed45828d12f 0t0 TCP *:53729 <span class="o">(</span>LISTEN<span class="o">)</span>
rapportd <span class="m">402</span> onty 4u IPv6 0xe46a6ed4590dc347 0t0 TCP *:53729 <span class="o">(</span>LISTEN<span class="o">)</span>
rapportd <span class="m">402</span> onty 7u IPv4 0xe46a6ed44d23b6af 0t0 TCP <span class="m">10</span>.1.10.139:53729->10.1.10.136:49804 <span class="o">(</span>ESTABLISHED<span class="o">)</span>
rapportd <span class="m">402</span> onty 8u IPv4 0xe46a6ed4586f8877 0t0 UDP *:xserveraid
assistant <span class="m">409</span> onty 4u IPv4 0xe46a6ed4502cc8b7 0t0 UDP *:*
WiFiAgent <span class="m">412</span> onty 5u IPv4 0xe46a6ed44ffd7877 0t0 UDP *:*
SpotifyWe <span class="m">433</span> onty 5u IPv4 0xe46a6ed4523a912f 0t0 TCP localhost:4380 <span class="o">(</span>LISTEN<span class="o">)</span>
Tunnelbli <span class="m">452</span> onty 18u IPv4 0xe46a6ed451b41a8f 0t0 TCP localhost:52236->localhost:menandmice-dns <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 6u IPv4 0xe46a6ed4517cb12f 0t0 TCP <span class="m">10</span>.9.0.162:54344->lb-192-30-253-124-iad.github.com:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 7u IPv4 0xe46a6ed4587286af 0t0 TCP <span class="m">10</span>.9.0.162:52598->39.4a.37a9.ip4.static.sl-reverse.com:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 9u IPv4 0xe46a6ed45b9b7a8f 0t0 TCP <span class="m">10</span>.9.0.162:54249->waw02s16-in-f14.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 10u IPv4 0xe46a6ed451b436af 0t0 TCP <span class="m">10</span>.9.0.162:54450->waw02s17-in-f14.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 11u IPv4 0xe46a6ed4587286af 0t0 TCP <span class="m">10</span>.9.0.162:52598->39.4a.37a9.ip4.static.sl-reverse.com:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 12u IPv4 0xe46a6ed451b4112f 0t0 TCP <span class="m">10</span>.9.0.162:54479->waw02s08-in-f2.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 13u IPv4 0xe46a6ed45b7486af 0t0 TCP <span class="m">10</span>.9.0.162:54456->waw02s13-in-f2.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 15u IPv4 0xe46a6ed45828e3ef 0t0 TCP <span class="m">10</span>.9.0.162:54482->waw02s08-in-f4.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 16u IPv4 0xe46a6ed45b6d16af 0t0 TCP <span class="m">10</span>.9.0.162:54483->waw02s08-in-f195.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
com.apple <span class="m">2553</span> onty 17u IPv4 0xe46a6ed45c418d4f 0t0 TCP <span class="m">10</span>.9.0.162:54455->waw02s08-in-f193.1e100.net:https <span class="o">(</span>ESTABLISHED<span class="o">)</span>
</pre></div>
<p>I was just surprised since I always think that this is only possible in Linux using the netstat -natp command. See the output below from my Linux box:</p>
<div class="highlight"><pre><span></span>COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 498 netkernel 3u IPv4 6825296 0t0 TCP 192.168.0.136:42692->99.subnet125-161-136.speedy.telkom.net.id:22222 (SYN_SENT)
nginx 537 www-data 6u IPv6 20570 0t0 TCP *:http (LISTEN)
nginx 537 www-data 7u IPv4 20571 0t0 TCP *:http (LISTEN)
nginx 537 www-data 8u IPv4 20572 0t0 TCP *:https (LISTEN)
nginx 537 www-data 9u IPv6 20573 0t0 TCP *:https (LISTEN)
nginx 538 www-data 6u IPv6 20570 0t0 TCP *:http (LISTEN)
nginx 538 www-data 7u IPv4 20571 0t0 TCP *:http (LISTEN)
nginx 538 www-data 8u IPv4 20572 0t0 TCP *:https (LISTEN)
nginx 538 www-data 9u IPv6 20573 0t0 TCP *:https (LISTEN)
nginx 539 www-data 6u IPv6 20570 0t0 TCP *:http (LISTEN)
nginx 539 www-data 7u IPv4 20571 0t0 TCP *:http (LISTEN)
nginx 539 www-data 8u IPv4 20572 0t0 TCP *:https (LISTEN)
nginx 539 www-data 9u IPv6 20573 0t0 TCP *:https (LISTEN)
nginx 540 www-data 6u IPv6 20570 0t0 TCP *:http (LISTEN)
nginx 540 www-data 7u IPv4 20571 0t0 TCP *:http (LISTEN)
nginx 540 www-data 8u IPv4 20572 0t0 TCP *:https (LISTEN)
nginx 540 www-data 9u IPv6 20573 0t0 TCP *:https (LISTEN)
ssh 661 root 3u IPv4 6825330 0t0 TCP 192.168.0.136:42693->99.subnet125-161-136.speedy.telkom.net.id:22222 (SYN_SENT)
avahi-dae 770 avahi 12u IPv4 12986 0t0 UDP *:mdns
avahi-dae 770 avahi 13u IPv6 12987 0t0 UDP *:mdns
avahi-dae 770 avahi 14u IPv4 12988 0t0 UDP *:42676
avahi-dae 770 avahi 15u IPv6 12989 0t0 UDP *:35529
/usr/sbin 941 root 5u IPv6 16795 0t0 TCP localhost:spamd (LISTEN)
dhclient 1070 root 7u IPv4 16832 0t0 UDP *:bootpc
spamd\x20 1242 root 5u IPv6 16795 0t0 TCP localhost:spamd (LISTEN)
spamd\x20 1243 root 5u IPv6 16795 0t0 TCP localhost:spamd (LISTEN)
dhclient 1282 root 7u IPv4 16774 0t0 UDP *:bootpc
sshd 1384 root 3u IPv4 21922 0t0 TCP *:ssh (LISTEN)
sshd 1384 root 4u IPv6 21924 0t0 TCP *:ssh (LISTEN)
nginx 1427 root 6u IPv6 20570 0t0 TCP *:http (LISTEN)
nginx 1427 root 7u IPv4 20571 0t0 TCP *:http (LISTEN)
nginx 1427 root 8u IPv4 20572 0t0 TCP *:https (LISTEN)
nginx 1427 root 9u IPv6 20573 0t0 TCP *:https (LISTEN)
opendkim 1512 opendkim 4u IPv6 21083 0t0 TCP localhost:12301 (LISTEN)
master 1654 root 12u IPv4 23731 0t0 TCP *:smtp (LISTEN)
master 1654 root 13u IPv6 23732 0t0 TCP *:smtp (LISTEN)
</pre></div>
<p>This netstat -antp command only available in Linux, and not in OSx or FreeBSD, hence I searched for the command with similar output. Good thing that now I found one :)</p>Apa itu Online Charging System(OCS) Part 22015-12-22T18:43:00+00:002015-12-22T18:43:00+00:00Lintang JPtag:onty.maclab.org,2015-12-22:/2015/12/22/apa-itu-online-charging-systemocs-part-2/<p>Reference:
<em> http://www.3g4g.co.uk/Tutorial/ZG/zg_camel.html
</em> http://blog.3g4g.co.uk/2007/12/camel-and-ims.html</p><p>Reference:
<em> http://www.3g4g.co.uk/Tutorial/ZG/zg_camel.html
</em> http://blog.3g4g.co.uk/2007/12/camel-and-ims.html</p>Apa itu Online Charging System(OCS) Part 12014-11-23T18:34:00+00:002014-11-23T18:34:00+00:00Lintang JPtag:onty.maclab.org,2014-11-23:/2014/11/23/apa-itu-online-charging-systemocs-part-1/<p>Assalamu'alaikum,</p>
<p>Cihuy, gaya dikit, sekarang ngeblog pake vim :D. Setelah sukses migrasi 2 blog lama ke github, sekarang pertama kalinya nulis lagi pake vim :D
Udah lama pengen nulis tentang seri telekomunikasi, setelah melepaskan diri dari dunia J2EE application server sejak 6 (hampir 7 tahun yang lalu) karena insyaf :D …</p><p>Assalamu'alaikum,</p>
<p>Cihuy, gaya dikit, sekarang ngeblog pake vim :D. Setelah sukses migrasi 2 blog lama ke github, sekarang pertama kalinya nulis lagi pake vim :D
Udah lama pengen nulis tentang seri telekomunikasi, setelah melepaskan diri dari dunia J2EE application server sejak 6 (hampir 7 tahun yang lalu) karena insyaf :D
Ternyata di tempat yang sekarang, pengetahuan java itu masih dibutuhkan sedikit-sedikit kok, apalagi konsep pemrograman. Java tetep dipake, tapi karena sourcenya nggak dipublish sama team Design Unit, jadi ya, cara mudah nge-trace problem tentu dengan decompile .class nya :D, karena ternyata nggak di obfuscate juga :D. Knowledge programming dan dasar-dasarnya juga alhamdulillah masih terpakai, walaupun seringnya sekarang debug script, bukan bikin script, he he. Unix/Linux juga kepake banget, database knowledge juga (jadi siapa tuh yang bilang kuliah ngga ada gunanya ? :D ). Ya kalo anda memutuskan jalan hidup yang keras untuk jadi engineer ya resikonya begini lah. Lho Bill Gates apa bukan engineer juga ? Dia drop out kuliah lho ? Kalo anda mikir gitu ya silakan, saya ndak maksa. Nanti kalau ada sukses karena terinspirasi tulisan ini, kasih tau saya ya :D.</p>
<p>Yakk, balik ke topik (enak juga ngetik di vim ternyata ya), lancar jaya. Jadii, di tulisan saya yang lain di topik Telco, dulu saya pernah menulis bahwa Billing adalah jantungnya telekomunikasi. Ini masih benar, karena Billing tetap sumber pemrosesan pemasukan perusahaan Telekomunikasi. Tapi ada satu yang kurang disitu, anda tau ? Yak, betul. Kebanyakan billing tidak melakukan prosesnya secara realtime. Bukan berarti kuno, karena Billing punya fungsi dan keunggulannya sendiri. Nanti kita bahas ya bagaimana Online Charging System dan Billing System bisa co-exist satu sama lain.</p>
<p>Lalu bagaimana dengan Online Charging System ? ya tentu saja sesuai namanya, 'Online', berarti harus On terus, dan realtime. Online Charging System (kita singkat OCS aja ya) dalam hal ini secara simplenya bertugas melakukan fungsi Rating secara online dan realtime. Berikut kira-kira list lengkap fungsi dari OCS :</p>
<p><strong>0. Subscriber database</strong></p>
<p><strong>1. Realtime rating</strong>
Masih ingat apa itu rating ? Yak, di artikel yang duluuu banget tentang Billing ( cari sendiri ya, belum tau caranya refer link di halaman yg sama pake markdown :p) yaitu proses untuk menentukan cost dari sebuah event. Nah, karena realtime, maka semua parameter yang dibutuhkan untuk menentukan cost tsb ya harus tersedia saat itu juga..nah, ini bedanya sama Billing, dan ini salah satu yang bikin mereka bisa co-exist :). </p>
<p>Contohnya untuk menentukan cost dari sebuah voice call antar operator pada jam tertentu misalnya. Berikut parameter realtime yang harus ada dan akan dibutuhkan kira-kira seberti berikut :</p>
<div class="highlight"><pre><span></span>- Calling Number ( sering disebut A#, A party, etc )
- Called Number ( sering disebut B#, B party, etc), buat nentuin tujuan nelponnya kemana. Kalo sesama operator biasanya gratis atau lebih murah daripada nelpon ke beda operator kan ? Trus kalo yang sering nelpon ke nomer premium, pasti tarifnya beda juga kan ? :)
- Location Information, kalo di spek 3GPP disebut locationNumber, berupa angka tertentu yang menunjukkan lokasi A# saat melakukan panggilan. Biasanya dipakai untuk menggabungkan beberapa cell-id menjadi satu. Kenapa harus digabungin ? ya bayangin aja, operator gede BTS nya sampe puluhan ribuan, masing-masing BTS biasanya punya 3 cell-id, mabok dah kalo yang dijadiin parameter buat Rating nya cell-id :D. Dari parameter ini juga ketauan, pas lagi nelpon ini lagi di Home Network ( dalam negeri biasanya ), atau lagi Roaming di luar negeri.
- Calling Time, waktu dimana event itu terjadi. Dari MSC biasanya dalam millisecond, tapi operator berhak rounding dong ke second terdekat ;)
- Faktor lain, misal: Sisa Bonus, daftar paket promo apa nggak
</pre></div>
<p><strong>2. Realtime charging</strong>
Nah, setelah costnya berhasil ditentukan, tinggal ngurangin pulsa deh, secara realtime. Jadi begitu voice call selesai ditutup, langsung cek pulsa, keliatan deh sisa pulsa tinggal berapa, ga perlu nunggu sebulan pas billingnya keluar :) </p>
<p><strong>3. Realtime balance management</strong>
Balance management ini termasuk didalamnya manajemen sisa pulsa :D. Tau kan, jaman sekarang pake smartphone, data nyala terus, sambil kirim sms, pulsa habis, trus pelanggan isi ulang dan ngecek sisa pulsanya. Nah, ada duit masuk, duit keluar, dan bisa jadi menuju ke 'dompet pulsa' yang sama. Ini maksudnya balance management.</p>
<p>Nah, selain fungsi dasar diatas, biasanya OCS juga bisa melakukan hal-hal sbb:</p>
<p><strong>1. Mengirimkan notifikasi ke pelanggan</strong>
Pernah gak tiba-tiba nerima notifikasi 'sisa pulsa anda tinggal Rp xxx,- kirim 2 sms lagi untuk mendapat free sms seharian'. Nah, fitur notifikasi seperti ini bisa dimiliki oleh OCS. Alasannya ya wajar, karena OCS melakukan rating dan charging secara realtime, maka OCS bisa memberikan notifikasi lebih akurat juga. Fitur ini juga banyak dipakai buat pelanggan yang sedang roaming ke luar negeri, untuk menerima notifikasi peringatan tagihan ketika mencapai usage tertentu. Beberapa negara yang saya tau sudah mulai memiliki regulasi agar setiap operator memiliki fungsi notifikasi roaming control seperti ini.</p>
<p><strong>2. Maintain lifecycle </strong>
Lifecycle itu lebih populer dengan nama 'masa tenggang' kalo di sistem prabayar. Masa tenggang pertama, anda hanya bisa menerima panggilan. Masa tenggang berikutnya, nomer anda di blok tidak bisa melakukan dan menerima panggilan. Masa tenggang berikutnya, pulsa anda hangus :). Masa tenggang terakhir ? Nomer anda sudah dihapus dari jaringan telekomunikasi (baca:hangus). Nah, karena OCS menyimpan data subscription (kapan mulai start berlangganan, kapan masa tenggang, berapa sisa pulsa, dst), maka OCS juga lah yang biasanya secara realtime akan melakukan komunikasi dengan network element (dalam hal ini HLR, Home Location Register), untuk melakukan pemblokiran nomer.</p>
<p><strong>3. Maintain announcement list buat pelanggan</strong>
Pernah gak, sisa pulsa tinggal 500 perak, lalu dipake buat nelpon ? Biasanya kita dapet 'ceramah' panjang dulu dari operator, isinya kira-kira 'pulsa anda hampir habis, silakan melakukan isi ulang bla bla bla', trus baru telponnya nyambung. Lalu contoh lain, ketika lagi gencar promo dari operator, 1x tiap hari ketika akan melakukan panggilan telepon, anda dapet 'ceramah' lagi ? nah, OCS juga bisa mengirimkan kode announcement ke MSC, berubah-ubah sesuai dengan kondisi pelanggan. MSC akan menerima perintah pemutaran announcement, dan memutar announcement yang diperintahkan.Atau ketika nomer anda hampir expired, anda akan mendengar 'ceramah' untuk segera membeli voucher baru :)</p>
<p><strong>4. Revenue Reporting</strong>
Kalo ini sepertinya udah jelas ya, OCS juga merupakan sumber digalinya laporan keuangan laba perusahaan :). Hal ini biasanya tidak diproses secara realtime, karena OCS dirancang untuk transaksi online, bukan sebagai transaksi reporting. Biasanya setiap kali sebuah event selesai dirating, OCS akan menulis data transaksi berupa file CDR ( Call Detail Record ) yang kemudian bisa di proses dan di feed kedalam database untuk keperluan reporting.</p>
<p><strong>5. Centralized Subscriber and QoS storage</strong>
Nah, ini fungsi terbaru OCS yang paling keren di era Broadband. Yak, OCS juga bisa memberikan data mengenai QoS yang seharusnya dimiliki oleh pelanggan. Misal, seorang pelanggan A berlangganan paket data yang paling murah, seribu perak seharian, internet unlimited. Lalu ada pelanggan B, berlangganan paket data premium 500 ribu perak sebulan. Nah, karena OCS memaintain data paket apa saja yang dimiliki pelanggan, maka OCS juga merupakan sumber informasi QoS apa yang seharusnya diberikan pada pelanggan. Untuk pelanggan premium, tentu sudah seharusnya mendapat QoS paling tinggi, wajar karena dia bayar mahal untuk paket datanya. Nah, informasi QoS ini akan diberikan oleh OCS melalui sebuah protokol yang baru di sahkan oleh 3GPP, namanya Sy. Lebih lanjut tentang protokol charging di bagian ke 2 ya. Intinya, informasi QoS profile akan di feed oleh OCS ke PCRF, yang akan menerima query dari PCEF tentang QoS profile apa yang seharusnya di apply untuk tiap pelanggan.</p>
<p>Lho, ngapain harus lewat PCRF, kenapa PCEF nggak langsung nanya ke OCS kalo gitu, daripada harus lewat calo dulu kan ? :D. Ya bisa juga sih, spek 3GPP memungkinkan PCEF mengirim protokol Gx ke either PCRF atau OCS langsung (kalau OCS nya support). Masalahnya arsitektur yang terlanjur berkembang untuk paket data adalah, terpisahnya database pelanggan dan database QoS paket data. Arsitektur yang umum ( karena network operator biasanya adalah evolusi dari 2G, 3G, ke 4G ) yaitu database QoS ditaruh di PCRF, dan database pelanggan(account dan balance) berada di OCS. Nah untuk menyatukan data pelanggan ini, dan juga agar ketika mendaftarkan paket data tidak perlu mendaftarkan ke 2 tempat (OCS dan PCRF), maka arsitektur yang baru dikembangkan adalah, data pelanggan akan dimaintain di OCS, dan PCRS akan menggunakan protokol Sy untuk mengambil data QoS dari OCS, dan mengapply nya via PCEF. </p>
<p>Dapet gambar yang bagus nih di salah satu white paper nya vendor OCS terkemuka.</p>
<p><img alt="Hubungan OCS, PCRF, dan PCEF" src="http://onty.maclab.org/images/ocs-pcrf.jpg"></p>
<p>Udah pusing? berasa mbulet ? Silakan tinggalkan komentar. Kalau ada yang dirasa kurang masuk akal juga monggo silakan tinggalkan komentar. Kalau saya yang salah, tulisannya akan saya ralat, tidak usah kuatir ;)</p>
<p>Lanjut ke part 2 yah, protokol standar apa aja yang disupport oleh -kebanyakan- Online Charging System :)</p>
<p>Cheers.</p>Biar banyak,yang penting barokah...2011-02-18T03:05:00+00:002011-02-18T03:05:00+00:00ontytag:onty.maclab.org,2011-02-18:/2011/02/18/biar-banyak-yang-penting-barokah/<p>Kemaren,ayah terpaksa ngantor naik taksi,karena motornya dipake buat
ngurus imb.Sang sopir taksi bercerita,sambil mengisi waktu di
perjalanan.Entah kenapa tiba2 dia cerita,bahwa ini sudah ke 3x nya dia
ngambil mobil(di persh.taksi tertentu,mobil jadi milik karyawan setelah
6 tahun,klo 3x berarti udah …</p><p>Kemaren,ayah terpaksa ngantor naik taksi,karena motornya dipake buat
ngurus imb.Sang sopir taksi bercerita,sambil mengisi waktu di
perjalanan.Entah kenapa tiba2 dia cerita,bahwa ini sudah ke 3x nya dia
ngambil mobil(di persh.taksi tertentu,mobil jadi milik karyawan setelah
6 tahun,klo 3x berarti udah lebih 18 tahun jadi sopir ya ?) Dia cerita
bahwa ada temannya yg prihatin dg kondisinya,dan ngajak dia kerja yang
kurang halal.Sang sopir ini menolak tentu saja,tapi yg bikin ayah
terenyuh adalah...dia bilang walo sedikit nggak apa2,yang penting halal
dan enak dimakan bersama keluarga,nggak takut dikejar-kejar..Trus sang
temen tadi bilang,lha nyari rejeki yang haram aja susah,apalagi yang
halal....Si sopir cuma ketawa..Dia bilang,ya itu karena sudah dibutakan
oleh yang haram...</p>
<p>Emang bener,hidup jaman sekarang kudu pegangan yang kuat sama tali
agama,alhamdulillah ya para kupritku,ayah masih bisa kerja halal buat
kalian.InsyaAllah kalo ayah tetep bersyukur dan bekerja sebaik
mungkin,nikmat itu akan ditambah sama Allah,nggak perlu cari yang nggak
pasti dan belum jelas kehalalannya.</p>
<p>Yoo,semangat,gusti Allah ora sare..</p>
Bye bye OpenSolaris ?2010-08-14T00:00:00+01:002010-08-14T00:00:00+01:00Lintang JPtag:onty.maclab.org,2010-08-14:/2010/08/14/bye-bye-opensolaris/<p>So, I heard that OpenSolaris will be dead a.k.a discontinued.
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 …</p><p>So, I heard that OpenSolaris will be dead a.k.a discontinued.
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 ?</p>
<p>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.</p>
<p>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 :)</p>Solaris Jumpstart on Linux2010-08-10T00:00:00+01:002010-08-10T00:00:00+01:00Lintang JPtag:onty.maclab.org,2010-08-10:/2010/08/10/solaris-jumpstart-on-linux/<p><strong><em>Intro :</em>
</strong>
- Linux, Debian based (mine: Lenny), hostname : pegasus, act as the Solaris jumpstart server.
- Solaris, Solaris 10, hostname: solclient, will be the machine to be installed.
- IP addresses range 192.168.10.x (class C), make sure you use standard network class IP, this is where the standard broadcast address …</p><p><strong><em>Intro :</em>
</strong>
- Linux, Debian based (mine: Lenny), hostname : pegasus, act as the Solaris jumpstart server.
- Solaris, Solaris 10, hostname: solclient, will be the machine to be installed.
- 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.
- 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:</p>
<div class="highlight"><pre><span></span>elinpra@pegasus > printf "XXXXn" 192 168 10 5
C0A80A05
</pre></div>
<p>This file should be stored inside the root directory of tftp. Check the tftp setting on <strong>/etc/inetd.conf</strong>. Here is mine:</p>
<div class="highlight"><pre><span></span>elinpra@pegasus > cat /etc/inetd.conf
tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp/
</pre></div>
<p>Then, the file C0A80A05 should be put in<strong> /srv/tftp</strong>.</p>
<p>Steps :</p>
<p>1. Install bootparamd, rarpd, tftpd and nfs-kernel-server in Linux server (pegasus)</p>
<div class="highlight"><pre><span></span>root@pegasus > apt-get install bootparamd rarpd tftpd nfs-kernel-server
</pre></div>
<p>2. Run iptables -F, make sure no firewall in Linux server</p>
<div class="highlight"><pre><span></span>root@pegasus > iptables -F
</pre></div>
<p>3. Check the mac address of the solaris client.
Try boot from {ok}, see the mac address during booting (if the system is currently up, go to init 0 mode) :</p>
<div class="highlight"><pre><span></span>ok boot net
Resetting ...
LOM event: 56d 21h39m43s host reset
þ
Sun Fire V120 (UltraSPARC-IIe 648MHz), No Keyboard
OpenBoot 4.0, 1024 MB memory installed, Serial #61911409.
Ethernet address 0:3:ba:b0:b1:71, Host ID: 83b0b171.
Back to lom> or sc> using 'break' command.
</pre></div>
<p>4. Set <strong>/etc/ethers</strong> and <strong>/etc/hosts</strong> in Linux server with the mac address and hostname of the solaris client.</p>
<div class="highlight"><pre><span></span>elinpra@pegasus > echo "0:3:ba:b0:b1:71 solclient" >> /etc/ethers
elinpra@pegasus > echo "192.168.10.5 solclient" >> /etc/hosts
</pre></div>
<p>5. Start the rarpd if has not started yet.( I’m using debian based linux here )</p>
<div class="highlight"><pre><span></span>root@pegasus > /etc/init.d/rarpd start
</pre></div>
<p>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:</p>
<div class="highlight"><pre><span></span>root@pegasus > mkdir -p /mnt/sol10
root@pegasus > mount -o loop solaris_iso_file.iso /mnt/sol10
root@pegasus > cd /mnt/sol10
</pre></div>
<p>7. If you have the Solaris 10 CD, insert it on pegasus, do the following steps :</p>
<div class="highlight"><pre><span></span>root@pegasus > cd /mnt/cdrom/ (to your solaris cdrom directory)
</pre></div>
<p>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.
Locate the kernel on directory Solaris_10/Tools/Boot/platform/sun4u/inetboot for sun4u, or Solaris_10/Tools/Boot/platform/sun4v/inetboot for sun4v.
Copy it to <strong>/srv/tftp</strong> and make symbolic link to that file into C0A80A05.</p>
<div class="highlight"><pre><span></span>root@pegasus > cp inetboot /srv/tftp
root@pegasus > ln -s /srv/tftp/inetboot /srv/tftp/C0A80A05
</pre></div>
<p>9. Start tftpd daemon in pegasus :</p>
<div class="highlight"><pre><span></span>root@pegasus > /etc/init.d/openbsd-inetd restart
</pre></div>
<p>10. start nfs service in pegasus :</p>
<div class="highlight"><pre><span></span>root@pegasus > /etc/init.d/nfs-kernel-server start
</pre></div>
<p>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.</p>
<div class="highlight"><pre><span></span>root@pegasus > exportfs *:/mnt/cdrom -o fsid=0,ro,no_root_squash,crossmnt,no_subtree_check,sync exportfs *:/mnt -o fsid=0,ro,no_root_squash,crossmnt,no_subtree_check,sync
</pre></div>
<p>Check if the nfs shares can be mounted correctly.</p>
<div class="highlight"><pre><span></span>root@pegasus > mount -t nfs4 pegasus:/sol10 /tmp/somewhere
</pre></div>
<p>Verify in your mount list:</p>
<div class="highlight"><pre><span></span>root@pegasus > df -kh
</pre></div>
<p>Go to /tmp/somewhere, and make sure there’s a directory called sol10/, if not, then the nfs root stil wrong. </p>
<p>13. Configure bootparams in /etc/bootparams, fill in this entry: </p>
<div class="highlight"><pre><span></span>solclient root=pegasus:/sol10/Solaris_10/Tools/Boot install=pegasus:/sol10/ boottype=:in
</pre></div>
<p>14. You might want to see what's happen in your pegasus using tcpdump: </p>
<div class="highlight"><pre><span></span><span class="n">root</span><span class="nv">@pegasus</span> > <span class="n">tcpdump</span> -<span class="n">i</span> <span class="n">eth0</span>
<span class="n">tcpdump:</span> <span class="n">verbose</span> <span class="n">output</span> <span class="n">suppressed</span>, <span class="k">use</span> -<span class="n">v</span> <span class="o">or</span> -<span class="n">vv</span> <span class="k">for</span> <span class="n">full</span> <span class="n">protocol</span> <span class="n">decode</span>
<span class="n">listening</span> <span class="n">on</span> <span class="n">eth0</span>, <span class="n">link-type</span> <span class="n">EN10MB</span> (<span class="n">Ethernet</span>), <span class="n">capture</span> <span class="n">size</span> <span class="mi">96</span> <span class="nb">bytes</span>
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">16.385289</span> <span class="n">arp</span> <span class="n">who-has</span> <span class="n">osol1</span> (<span class="n">Broadcast</span>) <span class="n">tell</span> <span class="n">osol1</span>
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">16.786701</span> <span class="n">IP</span> <span class="n">pegasus</span> > <span class="n">OSPF-ALL</span>.<span class="n">MCAST</span>.<span class="n">NET:</span> <span class="n">OSPFv2</span>, <span class="n">Hello</span>, <span class="n">length:</span> <span class="mi">44</span>
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">17.904404</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">syslog</span> > <span class="mf">255.255.255.255</span>.<span class="n">sunrpc:</span> [|<span class="n">syslog</span>]
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">18.666258</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58847</span> > <span class="n">resolver</span>.<span class="n">ao</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">18.692884</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">ao</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58847</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">18.693883</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58848</span> > <span class="n">resolver</span>.<span class="n">sw</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">18.944002</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">sw</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58848</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">18.945066</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58849</span> > <span class="n">resolver</span>.<span class="n">am</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.349904</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">am</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58849</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.350799</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58850</span> > <span class="n">resolver</span>.<span class="n">ao</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.391665</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">ao</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58850</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.426161</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58851</span> > <span class="n">resolver</span>.<span class="n">sw</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.713817</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">sw</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58851</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">19.714855</span> <span class="n">IP</span> <span class="n">osol2</span><span class="mf">.58852</span> > <span class="n">resolver</span>.<span class="n">am</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain:</span> <span class="mi">57879</span>+ <span class="n">TXT</span>? <span class="n">_nfsv4idmapdomain</span>. (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">20.057720</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">syslog</span> > <span class="mf">255.255.255.255</span>.<span class="n">sunrpc:</span> [|<span class="n">syslog</span>]
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">20.125082</span> <span class="n">IP</span> <span class="n">resolver</span>.<span class="n">am</span>.<span class="n">ericsson</span>.<span class="n">se</span>.<span class="n">domain</span> > <span class="n">osol2</span><span class="mf">.58852</span>: <span class="mi">57879</span> <span class="n">ServFail</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span><span class="o">/</span><span class="mi">0</span> (<span class="mi">35</span>)
<span class="mi">10</span>:<span class="mi">35</span>:<span class="mf">21.870552</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">syslog</span> > <span class="mf">255.255.255.255</span>.<span class="n">sunrpc:</span> [|<span class="n">syslog</span>]
...
<span class="mi">10</span>:<span class="mi">45</span>:<span class="mf">43.677010</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">afpovertcp</span> > <span class="n">pegasus</span>.<span class="n">nfs:</span> . <span class="n">ack</span> <span class="mi">39685605</span> <span class="n">win</span> <span class="mi">47784</span>
<span class="mi">10</span>:<span class="mi">45</span>:<span class="mf">43.677183</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">afpovertcp</span> > <span class="n">pegasus</span>.<span class="n">nfs:</span> . <span class="n">ack</span> <span class="mi">39688501</span> <span class="n">win</span> <span class="mi">44888</span>
<span class="mi">10</span>:<span class="mi">45</span>:<span class="mf">43.677350</span> <span class="n">IP</span> <span class="n">solclient</span>.<span class="n">afpovertcp</span> > <span class="n">pegasus</span>.<span class="n">nfs:</span> . <span class="n">ack</span> <span class="mi">39691397</span> <span class="n">win</span> <span class="mi">41992</span>
...
</pre></div>
<p>15. Boot your solclient from ok prompt: </p>
<div class="highlight"><pre><span></span><span class="n">ok</span> <span class="n">boot</span> <span class="n">net</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span> <span class="n">install</span>
<span class="n">Boot</span> <span class="nl">device</span><span class="p">:</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">network</span><span class="p">@</span><span class="n">c</span><span class="p">,</span><span class="mi">1</span> <span class="n">File</span> <span class="n">and</span> <span class="nl">args</span><span class="p">:</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span> <span class="n">install</span>
<span class="mi">3</span><span class="n">a000</span> <span class="n">Using</span> <span class="n">RARP</span><span class="o">/</span><span class="n">BOOTPARAMS</span><span class="p">...</span>
<span class="n">Internet</span> <span class="n">address</span> <span class="nl">is</span><span class="p">:</span> <span class="mf">192.168.10.5</span>
<span class="n">Bootparam</span> <span class="n">response</span> <span class="n">received</span>
<span class="nl">hostname</span><span class="p">:</span> <span class="n">solclient</span>
<span class="nl">domainname</span><span class="p">:</span> <span class="p">(</span><span class="n">none</span><span class="p">)</span>
<span class="n">Found</span> <span class="mf">192.168.10.1</span> <span class="p">@</span> <span class="mi">8</span><span class="o">:</span><span class="mi">0</span><span class="o">:</span><span class="mi">20</span><span class="o">:</span><span class="nl">eb</span><span class="p">:</span><span class="mi">52</span><span class="o">:</span><span class="n">e0</span>
<span class="n">root</span> <span class="nl">server</span><span class="p">:</span> <span class="n">jumpstart</span> <span class="p">(</span><span class="mf">192.168.10.1</span><span class="p">)</span>
<span class="n">root</span> <span class="nl">directory</span><span class="p">:</span> <span class="o">/</span><span class="n">sol10</span><span class="o">/</span><span class="n">Solaris_10</span><span class="o">/</span><span class="n">Tools</span><span class="o">/</span><span class="n">Boot</span>
<span class="n">module</span> <span class="o">/</span><span class="n">platform</span><span class="o">/</span><span class="n">sun4u</span><span class="o">/</span><span class="n">kernel</span><span class="o">/</span><span class="n">sparcv9</span><span class="o">/</span><span class="nl">unix</span><span class="p">:</span> <span class="n">text</span> <span class="n">at</span> <span class="p">[</span><span class="mh">0x1000000</span><span class="p">,</span> <span class="mh">0x10a096d</span><span class="p">]</span> <span class="n">data</span>
<span class="n">module</span> <span class="o">/</span><span class="n">platform</span><span class="o">/</span><span class="n">sun4u</span><span class="o">/</span><span class="n">kernel</span><span class="o">/</span><span class="n">sparcv9</span><span class="o">/</span><span class="nl">genunix</span><span class="p">:</span> <span class="n">text</span> <span class="n">at</span> <span class="p">[</span><span class="mh">0x10a0970</span><span class="p">,</span> <span class="mh">0x12615bf</span><span class="p">]</span> <span class="n">da</span>
<span class="n">module</span> <span class="o">/</span><span class="n">platform</span><span class="o">/</span><span class="n">SUNW</span><span class="p">,</span><span class="n">UltraAX</span><span class="o">-</span><span class="n">i2</span><span class="o">/</span><span class="n">kernel</span><span class="o">/</span><span class="n">misc</span><span class="o">/</span><span class="n">sparcv9</span><span class="o">/</span><span class="nl">platmod</span><span class="p">:</span> <span class="n">text</span> <span class="n">at</span> <span class="p">[</span><span class="mh">0x12615c0</span>
<span class="n">module</span> <span class="o">/</span><span class="n">platform</span><span class="o">/</span><span class="n">sun4u</span><span class="o">/</span><span class="n">kernel</span><span class="o">/</span><span class="n">cpu</span><span class="o">/</span><span class="n">sparcv9</span><span class="o">/</span><span class="n">SUNW</span><span class="p">,</span><span class="n">UltraSPARC</span><span class="o">-</span><span class="nl">IIe</span><span class="p">:</span> <span class="n">text</span> <span class="n">at</span> <span class="p">[</span><span class="mh">0x126184</span>
<span class="n">SunOS</span> <span class="n">Release</span> <span class="mf">5.10</span> <span class="n">Version</span> <span class="n">Generic_139555</span><span class="o">-</span><span class="mi">08</span> <span class="mi">64</span><span class="o">-</span><span class="n">bit</span>
<span class="n">Copyright</span> <span class="mi">1983</span><span class="o">-</span><span class="mi">2009</span> <span class="n">Sun</span> <span class="n">Microsystems</span><span class="p">,</span> <span class="n">Inc</span><span class="p">.</span> <span class="n">All</span> <span class="n">rights</span> <span class="n">reserved</span><span class="p">.</span>
<span class="n">Use</span> <span class="n">is</span> <span class="n">subject</span> <span class="n">to</span> <span class="n">license</span> <span class="n">terms</span><span class="p">.</span>
<span class="n">Ethernet</span> <span class="n">address</span> <span class="o">=</span> <span class="mi">0</span><span class="o">:</span><span class="mi">3</span><span class="o">:</span><span class="nl">ba</span><span class="p">:</span><span class="nl">b0</span><span class="p">:</span><span class="nl">b1</span><span class="p">:</span><span class="mi">71</span>
<span class="n">Using</span> <span class="k">default</span> <span class="n">device</span> <span class="n">instance</span> <span class="n">data</span>
<span class="n">mem</span> <span class="o">=</span> <span class="mi">1048576</span><span class="n">K</span> <span class="p">(</span><span class="mh">0x40000000</span><span class="p">)</span>
<span class="n">avail</span> <span class="n">mem</span> <span class="o">=</span> <span class="mi">845930496</span>
<span class="n">root</span> <span class="n">nexus</span> <span class="o">=</span> <span class="n">Sun</span> <span class="n">Fire</span> <span class="n">V120</span> <span class="p">(</span><span class="n">UltraSPARC</span><span class="o">-</span><span class="n">IIe</span> <span class="mi">648</span><span class="n">MHz</span><span class="p">)</span>
<span class="n">pseudo0</span> <span class="n">at</span> <span class="n">root</span>
<span class="n">pseudo0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span>
<span class="n">scsi_vhci0</span> <span class="n">at</span> <span class="n">root</span>
<span class="n">scsi_vhci0</span> <span class="n">is</span> <span class="o">/</span><span class="n">scsi_vhci</span>
<span class="n">ramdisk0</span> <span class="n">at</span> <span class="n">root</span>
<span class="n">ramdisk0</span> <span class="n">is</span> <span class="o">/</span><span class="n">ramdisk</span><span class="o">-</span><span class="n">root</span>
<span class="n">root</span> <span class="n">on</span> <span class="o">/</span><span class="n">ramdisk</span><span class="o">-</span><span class="nl">root</span><span class="p">:</span><span class="n">a</span> <span class="n">fstype</span> <span class="n">ufs</span>
<span class="n">pcipsy0</span> <span class="n">at</span> <span class="nl">root</span><span class="p">:</span> <span class="n">UPA</span> <span class="mh">0x1f</span> <span class="mh">0x0</span>
<span class="n">pcipsy0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="n">simba0</span>
<span class="n">simba0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">isa</span><span class="mi">@7</span><span class="p">,</span> <span class="n">ebus1</span>
<span class="n">ebus1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">isa</span><span class="mi">@7</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">dld0</span>
<span class="n">dld0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">dld</span><span class="mi">@0</span>
<span class="n">SUNW</span><span class="p">,</span><span class="nl">eri0</span> <span class="p">:</span> <span class="n">Local</span> <span class="n">Ethernet</span> <span class="n">address</span> <span class="o">=</span> <span class="mi">0</span><span class="o">:</span><span class="mi">3</span><span class="o">:</span><span class="nl">ba</span><span class="p">:</span><span class="nl">b0</span><span class="p">:</span><span class="nl">b1</span><span class="p">:</span><span class="mi">71</span><span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">network</span><span class="p">@</span><span class="n">c</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="n">eri</span>
<span class="n">eri0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">network</span><span class="p">@</span><span class="n">c</span><span class="p">,</span><span class="mi">1</span>
<span class="n">SUNW</span><span class="p">,</span><span class="nl">eri1</span> <span class="p">:</span> <span class="n">Local</span> <span class="n">Ethernet</span> <span class="n">address</span> <span class="o">=</span> <span class="mi">0</span><span class="o">:</span><span class="mi">3</span><span class="o">:</span><span class="nl">ba</span><span class="p">:</span><span class="nl">b0</span><span class="p">:</span><span class="nl">b1</span><span class="p">:</span><span class="mi">72</span><span class="n">SUNW</span><span class="p">,</span><span class="nl">eri1</span> <span class="p">:</span> <span class="n">Using</span> <span class="n">local</span> <span class="n">MAC</span>
<span class="n">eri1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">network</span><span class="mi">@5</span><span class="p">,</span><span class="mi">1</span>
<span class="n">su0</span> <span class="n">at</span> <span class="nl">ebus1</span><span class="p">:</span> <span class="n">offset</span> <span class="mi">0</span><span class="p">,</span><span class="mf">3f</span><span class="mi">8</span>
<span class="n">su0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">isa</span><span class="mi">@7</span><span class="o">/</span><span class="n">serial</span><span class="mi">@0</span><span class="p">,</span><span class="mf">3f</span><span class="mi">8</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">usb</span><span class="p">@</span><span class="n">c</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span> <span class="n">ohci0</span>
<span class="n">ohci0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">usb</span><span class="p">@</span><span class="n">c</span><span class="p">,</span><span class="mi">3</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">usb</span><span class="mi">@5</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span> <span class="n">ohci1</span>
<span class="n">ohci1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">usb</span><span class="mi">@5</span><span class="p">,</span><span class="mi">3</span>
<span class="nl">cpu0</span><span class="p">:</span> <span class="n">UltraSPARC</span><span class="o">-</span><span class="n">IIe</span> <span class="p">(</span><span class="n">portid</span> <span class="mi">0</span> <span class="n">impl</span> <span class="mh">0x13</span> <span class="n">ver</span> <span class="mh">0x33</span> <span class="n">clock</span> <span class="mi">648</span> <span class="n">MHz</span><span class="p">)</span>
<span class="n">iscsi0</span> <span class="n">at</span> <span class="n">root</span>
<span class="n">iscsi0</span> <span class="n">is</span> <span class="o">/</span><span class="n">iscsi</span>
<span class="n">SUNW</span><span class="p">,</span><span class="nl">eri0</span> <span class="p">:</span> <span class="mi">100</span> <span class="n">Mbps</span> <span class="n">full</span> <span class="n">duplex</span> <span class="n">link</span> <span class="n">up</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">zfs0</span>
<span class="n">zfs0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">zfs</span><span class="mi">@0</span>
<span class="n">Configuring</span> <span class="n">devices</span><span class="p">.</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">devinfo0</span>
<span class="n">devinfo0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">devinfo</span><span class="mi">@0</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">pci</span><span class="mi">@1</span><span class="p">,</span> <span class="n">simba1</span>
<span class="n">simba1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">pseudo1</span>
<span class="n">pseudo1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">zconsnex</span><span class="mi">@1</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">ebus</span><span class="p">@</span><span class="n">c</span><span class="p">,</span> <span class="n">ebus0</span>
<span class="n">ebus0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">ebus</span><span class="p">@</span><span class="n">c</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">pmu</span><span class="mi">@3</span><span class="p">,</span> <span class="n">pmubus0</span>
<span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span> <span class="p">(</span><span class="n">glm0</span><span class="p">)</span><span class="o">:</span>
<span class="n">glm0</span> <span class="n">supports</span> <span class="n">power</span> <span class="n">management</span><span class="p">.</span>
<span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span> <span class="p">(</span><span class="n">glm0</span><span class="p">)</span><span class="o">:</span>
<span class="n">Rev</span><span class="p">.</span> <span class="mi">7</span> <span class="n">Symbios</span> <span class="mi">53</span><span class="n">c896</span> <span class="n">found</span><span class="p">.</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">scsi</span><span class="mi">@8</span><span class="p">,</span> <span class="n">glm0</span>
<span class="n">glm0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span>
<span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span><span class="p">,</span><span class="mi">1</span> <span class="p">(</span><span class="n">glm1</span><span class="p">)</span><span class="o">:</span>
<span class="n">glm1</span> <span class="n">supports</span> <span class="n">power</span> <span class="n">management</span><span class="p">.</span>
<span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span><span class="p">,</span><span class="mi">1</span> <span class="p">(</span><span class="n">glm1</span><span class="p">)</span><span class="o">:</span>
<span class="n">Rev</span><span class="p">.</span> <span class="mi">7</span> <span class="n">Symbios</span> <span class="mi">53</span><span class="n">c896</span> <span class="n">found</span><span class="p">.</span>
<span class="n">PCI</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">scsi</span><span class="mi">@8</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="n">glm1</span>
<span class="n">glm1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span><span class="p">,</span><span class="mi">1</span>
<span class="n">power0</span> <span class="n">at</span> <span class="nl">ebus1</span><span class="p">:</span> <span class="n">offset</span> <span class="mi">0</span><span class="p">,</span><span class="mi">800</span>
<span class="n">power0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">isa</span><span class="mi">@7</span><span class="o">/</span><span class="n">power</span><span class="mi">@0</span><span class="p">,</span><span class="mi">800</span>
<span class="n">su1</span> <span class="n">at</span> <span class="nl">ebus1</span><span class="p">:</span> <span class="n">offset</span> <span class="mi">0</span><span class="p">,</span><span class="mf">2e8</span>
<span class="n">su1</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">isa</span><span class="mi">@7</span><span class="o">/</span><span class="n">serial</span><span class="mi">@0</span><span class="p">,</span><span class="mf">2e8</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">fssnap0</span>
<span class="n">fssnap0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">fssnap</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">ramdisk1024</span>
<span class="n">ramdisk1024</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">ramdisk</span><span class="mi">@1024</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">winlock0</span>
<span class="n">winlock0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">winlock</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">llc10</span>
<span class="n">llc10</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">llc1</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">lofi0</span>
<span class="n">lofi0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">lofi</span><span class="mi">@0</span>
<span class="n">sd3</span> <span class="n">at</span> <span class="nl">glm0</span><span class="p">:</span> <span class="n">target</span> <span class="mi">0</span> <span class="n">lun</span> <span class="mi">0</span>
<span class="n">sd3</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span><span class="o">/</span><span class="n">sd</span><span class="mi">@0</span><span class="p">,</span><span class="mi">0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">fcp0</span>
<span class="n">fcp0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">fcp</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">fcsm0</span>
<span class="n">fcsm0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">fcsm</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">trapstat0</span>
<span class="n">trapstat0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">trapstat</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">pool0</span>
<span class="n">pool0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">pool</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">mem_cache0</span>
<span class="n">mem_cache0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">mem_cache</span><span class="mi">@0</span>
<span class="n">pseudo</span><span class="o">-</span><span class="nl">device</span><span class="p">:</span> <span class="n">fcode0</span>
<span class="n">fcode0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pseudo</span><span class="o">/</span><span class="n">fcode</span><span class="mi">@0</span>
<span class="n">sd0</span> <span class="n">at</span> <span class="nl">glm0</span><span class="p">:</span> <span class="n">target</span> <span class="mi">1</span> <span class="n">lun</span> <span class="mi">0</span>
<span class="n">sd0</span> <span class="n">is</span> <span class="o">/</span><span class="n">pci</span><span class="mf">@1f</span><span class="p">,</span><span class="mi">0</span><span class="o">/</span><span class="n">pci</span><span class="mi">@1</span><span class="o">/</span><span class="n">scsi</span><span class="mi">@8</span><span class="o">/</span><span class="n">sd</span><span class="mi">@1</span><span class="p">,</span><span class="mi">0</span>
<span class="n">Using</span> <span class="n">RPC</span> <span class="n">Bootparams</span> <span class="k">for</span> <span class="n">network</span> <span class="n">configuration</span> <span class="n">information</span><span class="p">.</span>
<span class="n">Attempting</span> <span class="n">to</span> <span class="n">configure</span> <span class="n">interface</span> <span class="n">eri1</span><span class="p">...</span>
<span class="n">Skipped</span> <span class="n">interface</span> <span class="n">eri1</span>
<span class="n">Attempting</span> <span class="n">to</span> <span class="n">configure</span> <span class="n">interface</span> <span class="n">eri0</span><span class="p">...</span>
<span class="n">Configured</span> <span class="n">interface</span> <span class="n">eri0</span>
<span class="n">Reading</span> <span class="n">ZFS</span> <span class="nl">config</span><span class="p">:</span> <span class="n">done</span><span class="p">.</span>
<span class="n">Setting</span> <span class="n">up</span> <span class="n">Java</span><span class="p">.</span> <span class="n">Please</span> <span class="n">wait</span><span class="p">...</span>
<span class="n">Serial</span> <span class="n">console</span><span class="p">,</span> <span class="n">reverting</span> <span class="n">to</span> <span class="n">text</span> <span class="n">install</span>
<span class="n">Beginning</span> <span class="n">system</span> <span class="n">identification</span><span class="p">...</span>
<span class="n">Searching</span> <span class="k">for</span> <span class="n">configuration</span> <span class="n">file</span><span class="p">(</span><span class="n">s</span><span class="p">)...</span>
<span class="n">Search</span> <span class="n">complete</span><span class="p">.</span>
<span class="n">Discovering</span> <span class="n">additional</span> <span class="n">network</span> <span class="n">configuration</span><span class="p">...</span>
<span class="n">Select</span> <span class="n">a</span> <span class="n">Language</span>
<span class="mf">0.</span> <span class="n">English</span>
<span class="mf">1.</span> <span class="n">French</span>
<span class="mf">2.</span> <span class="n">German</span>
<span class="mf">3.</span> <span class="n">Italian</span>
<span class="mf">4.</span> <span class="n">Japanese</span>
<span class="mf">5.</span> <span class="n">Korean</span>
<span class="mf">6.</span> <span class="n">Simplified</span> <span class="n">Chinese</span>
<span class="mf">7.</span> <span class="n">Spanish</span>
<span class="mf">8.</span> <span class="n">Swedish</span>
<span class="mf">9.</span> <span class="n">Traditional</span> <span class="n">Chinese</span>
<span class="n">Please</span> <span class="n">make</span> <span class="n">a</span> <span class="n">choice</span> <span class="p">(</span><span class="mi">0</span> <span class="o">-</span> <span class="mi">9</span><span class="p">),</span> <span class="n">or</span> <span class="n">press</span> <span class="n">h</span> <span class="n">or</span> <span class="o">?</span> <span class="k">for</span> <span class="nl">help</span><span class="p">:</span>
</pre></div>Playing around with low end VPS box2010-04-05T00:00:00+01:002010-04-05T00:00:00+01:00Lintang JPtag:onty.maclab.org,2010-04-05:/2010/04/05/playing-around-with-low-end-vps-box/<p>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 <a href="http://www.pasarhosting.com">here</a>. First of all, I bought the minimalist one, with 64mb memory, with no burstable …</p><p>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 <a href="http://www.pasarhosting.com">here</a>. 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 <a href="https://www.vpsmart.com/clients/knowledgebase.php?action=displayarticle&id=4">here</a> 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 :)</p>
<p>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 :</p>
<div class="highlight"><pre><span></span># apt-get remove --purge sendmail apache2
</pre></div>
<p>And dont forget to kill them, and remove them from startup script.</p>
<div class="highlight"><pre><span></span># kill -9 pid
# update-rc.d -f remove apache2
# update-rc.d -f remove sendmail
</pre></div>
<p>Ok, that left me around 5 mb used memory. Not bad :)
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 :</p>
<div class="highlight"><pre><span></span># apt-get install pdksh
</pre></div>
<p>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 :</p>
<div class="highlight"><pre><span></span># vi /etc/passwd
</pre></div>
<p>Change the line using /bin/bash, into /bin/pdksh, and voillaa, next login session will be using pdksh.</p>
<p>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 :</p>
<div class="highlight"><pre><span></span>HOSTNAME=`hostname`
PS1=`print "
</pre></div>Verifying your wordpress.com blog on google webmaster central2009-12-26T00:00:00+00:002009-12-26T00:00:00+00:00Lintang JPtag:onty.maclab.org,2009-12-26:/2009/12/26/verifying-your-wordpresscom-blog-on-google-webmaster-central/<p>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 …</p><p>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.</p>
<p>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.</p>
<p><img alt="" src="http://1.bp.blogspot.com/_02IFrF9Xz98/SzaUBp9a_8I/AAAAAAAADQM/ip9c_cwducc/s320/gwm.jpg"></p>
<p>After you add new site to google webmaster, it then brings you to a verification screen. Here, you choose Meta-tag for verification method.</p>
<p>Copy paste the meta-tag provided by google, and then go to your admin page of your wordpress.com blog.</p>
<p>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.</p>
<p><img alt="" src="http://1.bp.blogspot.com/_02IFrF9Xz98/SzaWJ9fR_DI/AAAAAAAADQU/T3Kuu2Fj_QI/s320/gwm2.jpg"></p>
<p>Back to your google webmaster page, click Verify. After 10-15 minutes, check back to see if it's already verified.</p>
<p>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 :)</p>
<p>My other blog is at http://theprasojos.wordpress.com , how about you ?</p>Quick guide on UNIX task scheduling with at and batch command2009-05-18T00:00:00+01:002009-05-18T00:00:00+01:00Lintang JPtag:onty.maclab.org,2009-05-18:/2009/05/18/quick-guide-on-unix-task-scheduling-with-at-and-batch-command/<p>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 …</p><p>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:</p>
<div class="highlight"><pre><span></span>$ <span class="n">at</span> <span class="n">now</span> <span class="mi">1</span> <span class="n">hour</span> <span class="nv">&1</span> > <span class="n">outfile</span> | <span class="n">mailx</span> <span class="n">mygroup</span>
!
<span class="n">commands</span> <span class="k">will</span> <span class="n">be</span> <span class="n">executed</span> <span class="n">using</span> /<span class="n">bin</span><span class="o">/</span><span class="n">tcsh</span>
<span class="n">job</span> <span class="mi">1242637613</span>.<span class="o">s</span> <span class="n">at</span> <span class="n">Mon</span> <span class="n">May</span> <span class="mi">18</span> <span class="mi">16</span>:<span class="mo">06</span>:<span class="mi">53</span> <span class="mi">2009</span>
</pre></div>
<p>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>&1 > 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:</p>
<div class="highlight"><pre><span></span>$ atq
Rank Execution Date Owner Job Queue Job Name
1st May <span class="m">18</span>, <span class="m">2009</span> <span class="m">17</span>:06 minsat <span class="m">1242637774</span>.a a stdin
$ at -l
<span class="m">1242637774</span>.a Mon May <span class="m">18</span> <span class="m">16</span>:18:45 <span class="m">2009</span>
</pre></div>
<p>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.</p>
<p>And to cancel the scheduled at command, we use atrm or at –r command as follows:</p>
<div class="highlight"><pre><span></span>$ atrm <span class="m">1242637774</span>.a
<span class="m">1242637774</span>.a: removed
$ at -r <span class="m">1242637774</span>.a
<span class="m">1242637774</span>.a: removed
</pre></div>
<p>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:</p>
<p>1. Direct time</p>
<div class="highlight"><pre><span></span>$ at <span class="m">01</span>.30
$ at 0815am Jan <span class="m">24</span>
$ at <span class="m">5</span> pm FRIday
</pre></div>
<p>2. Now keyword</p>
<div class="highlight"><pre><span></span>$ at now <span class="m">1</span> minutes
$ at now <span class="m">1</span> hours
$ at now <span class="s2">" 1day"</span>
</pre></div>
<p>3. Tomorrow keyword</p>
<div class="highlight"><pre><span></span>$ at <span class="m">0830</span> tomorrow
</pre></div>
<p>4. Noon keyword</p>
<div class="highlight"><pre><span></span>$ at noon tomorrow
</pre></div>
<p>5. Midnight keyword</p>
<div class="highlight"><pre><span></span>$ at midnight tomorrow
</pre></div>
<p>6. Week keyword</p>
<div class="highlight"><pre><span></span>$ at 2pm next week
</pre></div>
<p>7. Piped with other command</p>
<div class="highlight"><pre><span></span>$ <span class="nb">echo</span> <span class="s2">"mail -s 'REMINDER: Task Scheduler samples' lintang.jp@gmail.com"</span> <span class="p">|</span> at <span class="s1">'5/18/2009 10:00AM'</span>
</pre></div>
<p>8. Putting the job inside a file</p>
<div class="highlight"><pre><span></span>$ at –f runScript.sh now <span class="m">1</span> hour
</pre></div>
<p>9. Sending an email after the job is completed</p>
<div class="highlight"><pre><span></span>$ at –m –f runScript.sh now <span class="m">1</span> hour
</pre></div>
<p>10. Using another shell instead of the user’s default shell for execution</p>
<div class="highlight"><pre><span></span>$ at –c –f runScript.sh now <span class="m">1</span> week // C Shell
$ at –k –f runScript.sh now <span class="m">1</span> week // Korn Shell
$ at –s –f runScript.sh now <span class="m">1</span> week // Bourne Shell
</pre></div>
<p>Several behaviors and conditions that must be known when running at command as follows:</p>
<p>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.
2. The default shell environment to be used during execution is the user’s default shell, listed in /etc/passwd.
3. Any users that is allowed or forbidden to use at command are listed in the following file :</p>
<p>1. /usr/lib/cron/at.deny // denied user
2. /usr/lib/cron/at.allow // allowed user</p>
<p>If the file does not exist, for example: at.allow file does not exist, means that all users are allowed to use at command.</p>
<p>While batch command is similar with at -q b -m now 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.</p>
<p>Resource : 1. Unix at man pages, with some slang modifications :p</p>
<p>Fiuh, alhamdulillah, that was hard to wrote :D</p>Telco Billing #2, Interconnect that matters...2009-01-13T00:00:00+00:002009-01-13T00:00:00+00:00Lintang JPtag:onty.maclab.org,2009-01-13:/2009/01/13/telco-billing-2-interconnect-that-matters/<p>Ok, sekarang penentuan tarif interkoneksi.
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 …</p><p>Ok, sekarang penentuan tarif interkoneksi.
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.</p>
<p>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.</p>
<p>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.
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.
Billing Retail ( billing yang dikenakan pada pelanggan ) :</p>
<div class="highlight"><pre><span></span>1. Lokal, jika POC A = POC B
2. SLJJ, jika POC A != POC B
</pre></div>
<p>Billing interkoneksi ( billing antar operator ) :</p>
<div class="highlight"><pre><span></span>1. Lokal, jika POI A = POC B
2. SLJJ, jika POI A != POC B
</pre></div>
<p>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.</p>
<p>Kira-kira demikianlah proses interkoneksi. Mungkin di lain kesempatan akan dibahas tentang billing retail. Any comments ? please wrote it down.</p>Telco Billing #1, Interconnect that matters...2009-01-10T00:00:00+00:002009-01-10T00:00:00+00:00Lintang JPtag:onty.maclab.org,2009-01-10:/2009/01/10/telco-billing-1-interconnect-that-matters/<p>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 …</p><p>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 <a href="http://www.blogger.com/mod=">disini</a> .</p>
<p>Dalam bidang interkoneksi dikenal istilah-istilah berikut :</p>
<p><strong>1. POC (Point of Charge)</strong></p>
<p>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.</p>
<p><strong>2. POI (Point of Interconnection)</strong></p>
<p>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.</p>
<p><strong>3. Originasi</strong></p>
<p>Adalah titik dimana alur traffic berasal.</p>
<p><strong>4. Transit</strong></p>
<p>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.</p>
<p><strong>5. Terminasi</strong></p>
<p>Adalah titik dimana alur traffic berakhir di tujuan.</p>
<p>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.</p>
<p>Kita akan bahas ini dengan mengambil contoh langsung kasusnya, sebuah perusahaan telekomunikasi selular X.
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.</p>
<p>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 ;).
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.</p>
<p>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.</p>
<p>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.</p>
<p>Lalu bagaimana dengan penentuan tarif interkoneksi ? Tunggu di bagian #2 yah...</p>Bye bye apache, welcome Nginx2008-12-22T00:00:00+00:002008-12-22T00:00:00+00:00Lintang JPtag:onty.maclab.org,2008-12-22:/2008/12/22/bye-bye-apache-welcome-nginx/<p>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 …</p><p>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 <a href="http://nginx.net/">situsnya</a>.</p>
<p>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.</p>
<p>Berikut Linux saya, ubuntu 7.10 :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ uname -a
Linux cygnus 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux
</pre></div>
<p>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.</p>
<div class="highlight"><pre><span></span>root@cygnus:~# apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev nginx
</pre></div>
<p>Tunggu sejenak, bikin kopi dulu juga boleh. Atau kalau anda ingin waktu anda efisien, mari kita donlot dulu PHP dan Lighttpd nya :D
Saya ambil PHP versi 5.2.6, dan Lighttpd versi 1.4.19. Dari mana ? please deh, silakan googling, mudah didapat kok kedua-duanya.
Ok, kita mulai dengan PHP dulu, silakan ekstrak, compile, dan install. Berikut opsi yang saya gunakan untuk PHP saya.</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ ./configure --prefix=/usr/local/php-5.2.6 --with-mysql --enable-fastcgi --with-sockets --with-zlib
</pre></div>
<p>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.
Tunggu sejenak, setelah sukses, silakan lakukan langkah dibawah seperti biasa :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ make
lintang@cygnus:~$ sudo make install
</pre></div>
<p>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.
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</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ ./configure --prefix=/opt/lighttpd-1.4.19 --enable-static --disable-shared
</pre></div>
<p>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
Lalu seperti biasa, kita jalankan make, tapi kali ini tanpa make install.</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ make
</pre></div>
<p>Seharusnya nanti, di direktori src/ akan ada file bernama spawn-fcgi. Kopikan file tersebut ke directory /usr/bin sebagai berikut :
lintang@cygnus:~$ sudo cp spawn-fcgi /usr/bin/
Lalu anda buat skrip .sh sederhana sebagai berikut :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:/usr/local/php-5.2.6$ cat > /usr/bin/php-fastcgi #!/bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 8999 -f /usr/local/php-5.2.6/bin/php-cgi
</pre></div>
<p>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.
Ok, langkah terakhir tinggal setup nginx.conf anda, punya saya ada di sini /etc/nginx/nginx.conf.
Berikut isi file konfigurasi Nginx saya :</p>
<div class="highlight"><pre><span></span>user www-data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
include /etc/nginx/sites-enabled/*;
}
</pre></div>
<p>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.
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.
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 :</p>
<div class="highlight"><pre><span></span><span class="n">Filename</span> <span class="o">:</span> <span class="n">atutor</span><span class="o">.</span><span class="na">conf</span>
<span class="n">server</span> <span class="o">{</span>
<span class="n">listen</span> <span class="mi">80</span><span class="o">;</span>
<span class="n">server_name</span> <span class="n">atutor</span><span class="o">;</span>
<span class="n">access_log</span> <span class="sr">/var/log/nginx/</span><span class="n">atutor</span><span class="o">.</span><span class="na">access</span><span class="o">.</span><span class="na">log</span><span class="o">;</span>
<span class="n">location</span> <span class="o">/</span> <span class="o">{</span>
<span class="n">root</span> <span class="sr">/var/www/</span><span class="n">nginx</span><span class="o">-</span><span class="k">default</span><span class="o">;</span>
<span class="n">index</span> <span class="n">index</span><span class="o">.</span><span class="na">html</span> <span class="n">index</span><span class="o">.</span><span class="na">htm</span> <span class="n">index</span><span class="o">.</span><span class="na">php</span><span class="o">;</span>
<span class="o">}</span>
<span class="err">#</span><span class="n">error_page</span> <span class="mi">404</span> <span class="o">/</span><span class="mi">404</span><span class="o">.</span><span class="na">html</span><span class="o">;</span>
<span class="err">#</span> <span class="n">redirect</span> <span class="n">server</span> <span class="n">error</span> <span class="n">pages</span> <span class="n">to</span> <span class="n">the</span> <span class="kd">static</span> <span class="n">page</span> <span class="o">/</span><span class="mi">50</span><span class="n">x</span><span class="o">.</span><span class="na">html</span>
<span class="err">#</span>
<span class="n">error_page</span> <span class="mi">500</span> <span class="mi">502</span> <span class="mi">503</span> <span class="mi">504</span> <span class="o">/</span><span class="mi">50</span><span class="n">x</span><span class="o">.</span><span class="na">html</span><span class="o">;</span>
<span class="n">location</span> <span class="o">=</span> <span class="o">/</span><span class="mi">50</span><span class="n">x</span><span class="o">.</span><span class="na">html</span> <span class="o">{</span>
<span class="n">root</span> <span class="sr">/var/www/nginx-default/</span><span class="n">ATutor</span><span class="o">;</span>
<span class="o">}</span>
<span class="err">#</span> <span class="n">proxy</span> <span class="n">the</span> <span class="n">PHP</span> <span class="n">scripts</span> <span class="n">to</span> <span class="n">Apache</span> <span class="n">listening</span> <span class="n">on</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">80</span>
<span class="err">#</span>
<span class="err">#</span><span class="n">location</span> <span class="o">~</span> <span class="o">.</span><span class="na">php</span><span class="n">$</span> <span class="o">{</span>
<span class="err">#</span><span class="n">proxy_pass</span> <span class="n">http</span><span class="o">://</span><span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">;</span>
<span class="err">#</span><span class="o">}</span>
<span class="err">#</span> <span class="n">pass</span> <span class="n">the</span> <span class="n">PHP</span> <span class="n">scripts</span> <span class="n">to</span> <span class="n">FastCGI</span> <span class="n">server</span> <span class="n">listening</span> <span class="n">on</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">9000</span>
<span class="err">#</span>
<span class="n">location</span> <span class="o">~</span> <span class="o">.</span><span class="na">php</span><span class="n">$</span> <span class="o">{</span>
<span class="n">fastcgi_pass</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">8999</span><span class="o">;</span>
<span class="n">fastcgi_index</span> <span class="n">index</span><span class="o">.</span><span class="na">php</span><span class="o">;</span>
<span class="n">fastcgi_param</span> <span class="n">SCRIPT_FILENAME</span> <span class="sr">/var/www/</span><span class="n">nginx</span><span class="o">-</span><span class="k">default</span><span class="n">$fastcgi_script_name</span><span class="o">;</span>
<span class="k">include</span> <span class="sr">/etc/nginx/</span><span class="n">fastcgi_params</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<p>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.</p>
<p>And that's it, kita bisa mengetes konfigurasi nginx kita dengan perintah :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ sudo nginx -t
</pre></div>
<p>Lalu untuk menjalankan nginx bisa dengan perintah sbb :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ sudo nginx
</pre></div>
<p>Kalau kita ada perubahan konfigurasi nginx, setelah selesai mengedit file konfigurasi, untuk merestart nginx bisa dengan perintah sbb :</p>
<div class="highlight"><pre><span></span>lintang@cygnus:~$ sudo killall -HUP nginx
</pre></div>
<p>Udah deh, silakan arahkan browser anda di port 80, aplikasi anda siap melayani user :)</p>Teknologi CDMA 4502008-12-21T00:00:00+00:002008-12-21T00:00:00+00:00Lintang JPtag:onty.maclab.org,2008-12-21:/2008/12/21/teknologi-cdma-450/<p>Minggu siang, iseng-iseng menyalakan speedy dan browsing. Saya menemukan banyak artikel tentang CDMA 450, yang pas banget dengan bidang tempat kerja saya sekarang.
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 …</p><p>Minggu siang, iseng-iseng menyalakan speedy dan browsing. Saya menemukan banyak artikel tentang CDMA 450, yang pas banget dengan bidang tempat kerja saya sekarang.
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->3GPP), dan CDG(CDMA Development Group->3GPP2). Lalu, CDMA 450 ini posisinya dimana ? Sabar sabar...
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.
Gambar yang menarik saya temukan di situs CDG (http://www.cdg.org/technology/3g/cdma450.asp) berikut ini :
<img alt="Spektrum 450Mhz diantara spektrum lainnya" src="http://www.cdg.org/technology/3g/images/cdma_450_v04.jpg">
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.
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.</p>
<p>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.</p>
<p>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</p>Speedy Vs Matrix Broadband 3.5G2008-12-18T00:00:00+00:002008-12-18T00:00:00+00:00Lintang JPtag:onty.maclab.org,2008-12-18:/2008/12/18/speedy-vs-matrix-broadband-35g/<p>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 …</p><p>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.</p>
<p>Speedy</p>
<p>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.</p>
<p>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.</p>
<p>Matrix Broadband 3.5G</p>
<p>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 :)</p>
<p>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.</p>
<p>Any clue/wisdom words for me ? Please fill in your comment.</p>Popular telco billing terms #12008-06-20T00:00:00+01:002008-06-20T00:00:00+01:00Lintang JPtag:onty.maclab.org,2008-06-20:/2008/06/20/popular-telco-billing-terms-1/<p>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 …</p><p>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</p>
<p>1. What is Rating ?
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.</p>
<p>2. What is Charging ?
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.
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.</p>
<p>3. What is Re-rating ?
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.</p>
<p>4. What is Billing process?
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.</p>
<p>5. What is Convergence Billing?
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 :
a. One bill, for all types of services offered by the operators.
b. An online and realtime system, without having to wait for new billing cycle arrived to know your bill.
c. Easy to configure new service type, with it's own way-to-bill. This impacts on time to market for a new product.
d. Lot more.</p>
<p>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.</p>
<p>Then, have a nice interview :)</p>Welcome to billing world....2008-03-27T00:00:00+00:002008-03-27T00:00:00+00:00Lintang JPtag:onty.maclab.org,2008-03-27:/2008/03/27/welcome-to-billing-world/<p>Every event counts....
Outthinking. Outdoing....</p>
<p>Familiar with those words ? Well yes you're right. Those are the slogans for 2 billing company in telco industries.</p>
<p>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 …</p><p>Every event counts....
Outthinking. Outdoing....</p>
<p>Familiar with those words ? Well yes you're right. Those are the slogans for 2 billing company in telco industries.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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 ? :)</p>
<p>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.</p>
<p>Ok, that's it. Time to go to bed, tomorrow, there's still CDR waiting to be rated.</p>Glassfish for Tomcat and WebMethods2007-12-01T00:00:00+00:002007-12-01T00:00:00+00:00Lintang JPtag:onty.maclab.org,2007-12-01:/2007/12/01/glassfish-for-tomcat-and-webmethods/<p>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 …</p><p>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....</p>
<p>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 <em>need to provide them with webservices</em> to access all of our Card Management API in proper way.</p>
<p>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</p>
<p>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 <em>need a messaging service</em>.</p>
<p>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 <strong>'world wide wait'</strong> 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.</p>
<p>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.</p>
<p>Ok, that's my review, maybe I'll write more about this later.</p>Ruby Install on DSL Linux2007-11-13T00:00:00+00:002007-11-13T00:00:00+00:00Lintang JPtag:onty.maclab.org,2007-11-13:/2007/11/13/ruby-install-on-dsl-linux/<p>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' …</p><p>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 :
- http://www.ruby-lang.org/id
- http://hivelogic.com/narrative/articles/ruby_rails_lighttpd_mysql_tiger?status=301</p>
<p>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 :)</p>
<p>First, I downloaded ruby <a href="ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz">here</a>. And then as usual, run 3 commands :</p>
<div class="highlight"><pre><span></span><span class="n">dsl</span><span class="mi">@1</span><span class="p">[</span><span class="n">ruby</span><span class="o">-</span><span class="mf">1.8.6</span><span class="p">]</span><span class="err">$</span> <span class="p">.</span><span class="o">/</span><span class="n">configure</span> <span class="o">--</span><span class="n">prefix</span><span class="o">=/</span><span class="n">opt</span><span class="o">/</span><span class="n">ruby</span><span class="o">-</span><span class="mf">1.8.6</span>
<span class="n">dsl</span><span class="mi">@1</span><span class="p">[</span><span class="n">ruby</span><span class="o">-</span><span class="mf">1.8.6</span><span class="p">]</span><span class="err">$</span> <span class="n">make</span>
<span class="n">dsl</span><span class="mi">@1</span><span class="p">[</span><span class="n">ruby</span><span class="o">-</span><span class="mf">1.8.6</span><span class="p">]</span><span class="err">$</span> <span class="n">sudo</span> <span class="n">make</span> <span class="n">install</span>
</pre></div>
<p>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) :</p>
<div class="highlight"><pre><span></span>export PATH=/opt/ruby-1.8.6/bin:$PATH
</pre></div>
<p>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 :</p>
<div class="highlight"><pre><span></span><span class="n">dsl</span><span class="mi">@0</span><span class="p">[</span><span class="n">Installer</span><span class="p">]</span><span class="err">$</span> <span class="n">irb</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">)</span><span class="o">:</span><span class="mo">001</span><span class="o">:</span><span class="mi">0</span><span class="o">></span>
</pre></div>
<p>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 <a href="http://hivelogic.com/narrative/articles/ruby_rails_lighttpd_mysql_tiger?status=301">here</a> ').
I downloaded it from <a href="http://rubyforge.org/frs/?group_id=126">here</a>.
After that, I unpack it, and went inside the exploded directory and type : ruby setup.rb
This will start the installation process of RubyGems.</p>
<p>OK, next I installed Rails, what is it ?.
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.</p>
<p>After RubyGems installed, it's all easy to install Rails, I just have to type :
sudo gem install rails --include-dependencies
And RubyGems will download all the needs.</p>
<p>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 <a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.gz">here</a>. While Lighttpd is a webserver that became the default one when we choose Rails. I downloaded Lighttpd from <a href="http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2">here</a>.
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 :</p>
<p>PCRE : </p>
<div class="highlight"><pre><span></span>./configure --prefix=/opt/pcre-7.4
</pre></div>
<p>Lighttpd : </p>
<div class="highlight"><pre><span></span>./configure --prefix=/opt/Lighttpd-1.4.18
</pre></div>
<p>And the rest make and make install commands were same.</p>
<p>Ok, I should be ready for rock and roll with ruby on rails.
I'll write my next experiments later. Now, it's time to get rest, we'll have a great patch deployment tomorrow :)</p>SimplyMepis2007-08-09T00:00:00+01:002007-08-09T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-08-09:/2007/08/09/simplymepis/<p>Beberapa hari ini nyoba SimplyMepis, nice distro. As easy as Mandrake, but as powerful as Debian. Such a perfect combination. We can choose, whether RPM or APT. Ditambah internet di indosat yang sangat cepat, menjadikan nih linux mantep banget. Kecuali satu hal, ada trouble di libxml2 sehingga agak kacau nginstall …</p><p>Beberapa hari ini nyoba SimplyMepis, nice distro. As easy as Mandrake, but as powerful as Debian. Such a perfect combination. We can choose, whether RPM or APT. Ditambah internet di indosat yang sangat cepat, menjadikan nih linux mantep banget. Kecuali satu hal, ada trouble di libxml2 sehingga agak kacau nginstall PHP5. Error libxml2, padahal udah ada, /etc/ld.so.conf juga udah ngarah ke direktori itu, libxml2.so juga dah ada, so what yah ? pusing juga, belum solved. Belum lagi error bagian support PHP untuk mysql, as you know, di PHP5 sekarang mysql udah gak secara native lagi di support, kalo kita nggak nambahin parameter --with-mysql ya gak support. Maunya gak usah nginstall PHP, pindah ke java semua deh, tapi aku masih butuh phpMyAdmin nya, hehehe, mau gak mau harus nginstall PHP deh.</p>
<p>That's All, ntar kalo ada pengalaman lagi ku share deh.</p>
<p>Originally posted : 27/12/04 20:52</p>Apache Httpd and Tomcat integration using mod_jk, part 12007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/apache-httpd-and-tomcat-integration-using-mod_jk-part-1/<p>In my other blog, I've wrote about howto use mod_jk2 to integrate httpd and tomcat. The article can be accesed <a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load">here</a> and <a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load1">here</a>.
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 :</p>
<ul>
<li>httpd-2.2.4, can be downloaded <a href="http://apache.the.net.id/httpd/httpd-2.2.4.tar.gz">here …</a></li></ul><p>In my other blog, I've wrote about howto use mod_jk2 to integrate httpd and tomcat. The article can be accesed <a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load">here</a> and <a href="http://www.jroller.com/page/JPrasojo/?anchor=setup_tomcat_clustering_and_load1">here</a>.
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 :</p>
<ul>
<li>httpd-2.2.4, can be downloaded <a href="http://apache.the.net.id/httpd/httpd-2.2.4.tar.gz">here</a></li>
<li>tomcat-5.2.23, can be downloaded <a href="http://apache.the.net.id/tomcat/tomcat-5/v5.5.23/bin/apache-tomcat-5.5.23.tar.gz">here</a></li>
<li>tomcat-connector, can be downloaded <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">here</a></li>
</ul>
<p>I prefer apache.the.net.id since this is the nearest mirror from Indonesia. O ya, Im using Kubuntu Feisty Fawn in my laptop.
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.
onty@phoenix:/opt$ gunzip httpd-2.2.4.tar.gz
onty@phoenix:/opt$ tar -xvf httpd-2.2.4.tar
onty@phoenix:/opt$ mv httpd-2.2.4 httpd-2.2.4-src
onty@phoenix:/opt$ cd httpd-2.2.4-src
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 .
onty@phoenix:/opt/httpd-2.2.4-src$ ./configure --prefix=/opt/httpd-2.2.4 --enable-so --enable-cgi
onty@phoenix:/opt/httpd-2.2.4-src$ make onty@phoenix:/opt/httpd-2.2.4-src$ make install
Now, try to start it using root :
onty@phoenix:/opt/httpd-2.2.4-src$ cd /opt/httpd-2.2.4
onty@phoenix:/opt/httpd-2.2.4$ su -
root@phoenix:/opt/httpd-2.2.4# bin/apachectl start
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.
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
Edit your httpd.conf, add this line :
Include conf/extra/mod_jk.conf
This is new style from apache that makes us easier to maintain our configuration file in modular basis.
Now create a new file in conf/extra/ name it mod_jk.conf.
--------------------------------------------- mod_jk.conf -----------------------------------
JkWorkersFile /opt/httpd-2.2.4/conf/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /opt/httpd-2.2.4/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /tomcat-docs/* router</p>
<p>JkMount jkstatus
Order deny,allow
Deny from all
Allow from 127.0.0.1</p>
<p>-------------------------------------------------------
From the configuration file, we can see that :
We will place the log file in /opt/httpd-2.2.4/logs/mod_jk.log.
We will configure the connectors with a file named workers.properties located in /opt/httpd-2.2.4/conf .
We will have shared file that will be used by apache and tomcat, located in /var/log/httpd/mod_jk.shm. If the directory /var/log/httpd doesnt exist yet, we should create it first using root user.
The logger level will be INFO.
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'.
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).</p>
<p>Ok, now we need to create workers.properties in conf/ directory. See part 2 of this post.</p>Apache Httpd and Tomcat integration using mod_jk, part 22007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/apache-httpd-and-tomcat-integration-using-mod_jk-part-2/<p>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.</p>
<p>Ok, now we create workers.properties file.</p>
<div class="highlight"><pre><span></span>onty@phoenix:/opt/httpd-2.2.4$ vi conf/workers.properties
\------------------------------------------------------------------------------------
worker.list …</pre></div><p>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.</p>
<p>Ok, now we create workers.properties file.</p>
<div class="highlight"><pre><span></span>onty@phoenix:/opt/httpd-2.2.4$ vi conf/workers.properties
\------------------------------------------------------------------------------------
worker.list=router,jkstatus
# Define a worker using ajp13
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
# Define prefered failover node for worker1
worker.worker1.redirect=worker2
# Define another worker using ajp13
worker.worker2.port=8009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
# Define the LB worker
worker.router.type=lb
worker.router.balance_workers=worker1,worker2
# Define the status worker
worker.jkstatus.type=status
\------------------------------------------------------------------------------------
</pre></div>
<p>This file defines all our workers. Our 'router' worker will be a load balancer worker for other workers, including worker1 and worker2.</p>
<p>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.</p>
<p><img alt="" src="http://bp0.blogger.com/_02IFrF9Xz98/RmKTVamjjKI/AAAAAAAABkI/CptR2eLPrpA/s320/opt-structure.png">
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.</p>
<div class="highlight"><pre><span></span><span class="n">Tomcat1</span> <span class="o">:</span>
<span class="n">Server</span> <span class="n">port</span><span class="o">=</span><span class="s2">"8005"</span> <span class="n">shutdown</span><span class="o">=</span><span class="s2">"SHUTDOWN"</span>
<span class="o">..</span>
<span class="o">..</span>
<span class="n">Connector</span> <span class="n">port</span><span class="o">=</span><span class="s2">"8009"</span>
<span class="n">enableLookups</span><span class="o">=</span><span class="s2">"false"</span> <span class="n">redirectPort</span><span class="o">=</span><span class="s2">"8443"</span> <span class="n">protocol</span><span class="o">=</span><span class="s2">"AJP/1.3"</span>
<span class="o">..</span>
<span class="o">..</span>
<span class="n">Connector</span> <span class="n">port</span><span class="o">=</span><span class="s2">"8080"</span> <span class="n">maxHttpHeaderSize</span><span class="o">=</span><span class="s2">"8192"</span>
<span class="n">maxThreads</span><span class="o">=</span><span class="s2">"150"</span> <span class="n">minSpareThreads</span><span class="o">=</span><span class="s2">"25"</span> <span class="n">maxSpareThreads</span><span class="o">=</span><span class="s2">"75"</span>
<span class="n">enableLookups</span><span class="o">=</span><span class="s2">"false"</span> <span class="n">redirectPort</span><span class="o">=</span><span class="s2">"8443"</span> <span class="n">acceptCount</span><span class="o">=</span><span class="s2">"100"</span>
<span class="n">connectionTimeout</span><span class="o">=</span><span class="s2">"20000"</span> <span class="n">disableUploadTimeout</span><span class="o">=</span><span class="s2">"true"</span>
<span class="n">Tomcat2</span> <span class="o">:</span>
<span class="n">Server</span> <span class="n">port</span><span class="o">=</span><span class="s2">"9005"</span> <span class="n">shutdown</span><span class="o">=</span><span class="s2">"SHUTDOWN"</span>
<span class="o">..</span>
<span class="o">..</span>
<span class="n">Connector</span> <span class="n">port</span><span class="o">=</span><span class="s2">"9009"</span>
<span class="n">enableLookups</span><span class="o">=</span><span class="s2">"false"</span> <span class="n">redirectPort</span><span class="o">=</span><span class="s2">"8443"</span> <span class="n">protocol</span><span class="o">=</span><span class="s2">"AJP/1.3"</span>
<span class="o">..</span>
<span class="o">..</span>
<span class="n">Connector</span> <span class="n">port</span><span class="o">=</span><span class="s2">"8080"</span> <span class="n">maxHttpHeaderSize</span><span class="o">=</span><span class="s2">"8192"</span>
<span class="n">maxThreads</span><span class="o">=</span><span class="s2">"150"</span> <span class="n">minSpareThreads</span><span class="o">=</span><span class="s2">"25"</span> <span class="n">maxSpareThreads</span><span class="o">=</span><span class="s2">"75"</span>
<span class="n">enableLookups</span><span class="o">=</span><span class="s2">"false"</span> <span class="n">redirectPort</span><span class="o">=</span><span class="s2">"8443"</span> <span class="n">acceptCount</span><span class="o">=</span><span class="s2">"100"</span>
<span class="n">connectionTimeout</span><span class="o">=</span><span class="s2">"20000"</span> <span class="n">disableUploadTimeout</span><span class="o">=</span><span class="s2">"true"</span>
</pre></div>
<p>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</p>
<div class="highlight"><pre><span></span>start1.sh
#!/bin/bash
export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat1
export JAVA_HOME=/opt/jdk1.6.0
./startup.sh
start2.sh
#!/bin/bash
export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat2
export JAVA_HOME=/opt/jdk1.6.0
./startup.sh
stop1.sh
#!/bin/bash
export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat1
export JAVA_HOME=/opt/jdk1.6.0
./shutdown.sh
stop2.sh
#!/bin/bash
export CATALINA_BASE=/opt/apache-tomcat-5.5.23-cluster/tomcat2
export JAVA_HOME=/opt/jdk1.6.0
./shutdown.sh
</pre></div>
<p>Basically, these file just aimed to setup environment variable named CATALINA_BASE to point which tomcat instance we want to start/stop.</p>
<p>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.</p>
<p>Feel free to drop any comments about this posting.
Thanks, good luck trying !</p>My (Outdated) Mac OS.X 10.4.12007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/my-outdated-mac-osx-1041/<p>I think this picture will describe enough for us ...</p>
<p><img alt="" src="http://jroller.com/resources/j/JPrasojo/myMac.jpg"></p>
<p>Cool eh ? Sayang ini baru versi 10.4.1, yg terbaru versi 10.4.7</p><p>I think this picture will describe enough for us ...</p>
<p><img alt="" src="http://jroller.com/resources/j/JPrasojo/myMac.jpg"></p>
<p>Cool eh ? Sayang ini baru versi 10.4.1, yg terbaru versi 10.4.7</p>Nexenta Alpha 52007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/nexenta-alpha-5/<p>Hehe, alhamdulillah, seneng juga bisa nyobain nexenta alpha 5 walau hanya di vmware. Sempat kaget nggak nemu pkgadd, malah nemu apt-get. Dan pertama bingung juga waktu mau install package dasar -> GCC karena kalo install satu-satu dependancy nya kan nggak mungkin (bisa kriting). Akhirnya nemu repository yg harus ditambahin di /etc …</p><p>Hehe, alhamdulillah, seneng juga bisa nyobain nexenta alpha 5 walau hanya di vmware. Sempat kaget nggak nemu pkgadd, malah nemu apt-get. Dan pertama bingung juga waktu mau install package dasar -> GCC karena kalo install satu-satu dependancy nya kan nggak mungkin (bisa kriting). Akhirnya nemu repository yg harus ditambahin di /etc/apt/sources.list yaitu :</p>
<div class="highlight"><pre><span></span><span class="k">deb</span> <span class="s">http://gnusolaris.org/apt-obsolete</span> <span class="kp">elatte-unstable</span> <span class="kp">main</span> <span class="kp">contrib</span> <span class="kp">non-free</span>
<span class="k">deb-src</span> <span class="s">http://gnusolaris.org/apt-obsolete</span> <span class="kp">elatte-unstable</span> <span class="kp">main</span> <span class="kp">contrib</span> <span class="kp">non-free</span>
</pre></div>
<p>Terus, kepentok juga ketika menghadapi proxy kantor yg make ISA Server, dimana harus masukin username/password domain. Solusinya, make ini : http://ntlmaps.sourceforge.net/</p>
<p>Happy nexenta-ing ... :)</p>
<p>Sekarang mau coba me linux kan nih solaris, terus mau coba zoning di solaris, trus mau coba....WAAA IYAAAA, laptopnya mau dituker ama kantor beberapa hari lagi :( mosok install ulang rek :(( semoga vmware bisa dikopi doang .vmx nya, hopefully ....</p>
<p>originally posted 6/26/06</p>Solaris, SNMP, and OpenNMS2007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/solaris-snmp-and-opennms/<p>These day, I explore about SNMP. After wikipedia-ing in <a href="http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">here</a>, I try to install one of the recomended software called OpenNMS. After tried the live demo, it looks cool. So I decided to download it in <a href="http://downloads.sourceforge.net/opennms/opennms-1.3.2-1-sol10-sparc-local.gz?modtime=1168971264&big_mirror=0">here</a>.</p>
<p>I followed all the installation step guide from <a href="http://www.opennms.org/documentation/InstallUnStable.html">here</a>. I also need to …</p><p>These day, I explore about SNMP. After wikipedia-ing in <a href="http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">here</a>, I try to install one of the recomended software called OpenNMS. After tried the live demo, it looks cool. So I decided to download it in <a href="http://downloads.sourceforge.net/opennms/opennms-1.3.2-1-sol10-sparc-local.gz?modtime=1168971264&big_mirror=0">here</a>.</p>
<p>I followed all the installation step guide from <a href="http://www.opennms.org/documentation/InstallUnStable.html">here</a>. I also need to download and install the pre requisites package such as rrdtool, and the postgresql. Fortunately, blastwave.org has great tools called pkg-get, yeap, sounds familiar with you Debian users ? I also thought that only Nexenta OS has this such-thing tools, but now, all solaris distro can use this tools I guess, well, at least I tried that one and it works for Solaris in both Sparc and Intel machine.</p>
<p>Ok, back to the tools. If we followed the step exactly, and goes to this step : install -dis, I got an error said that fail to load the iplike.so because libgcc_so.1 not found. That's some problem I usually got on linux box. If this is linux box, I just have to locate it, insert the path to /etc/ld.so.conf, and run the /sbin/ldconfig as root. But this is solaris box, cant do that, so, after googling, I found the crle command. I tried that to point the location for shared object files. Still no works. Howcome ? Dont ask me, it just doesnt work:p, So...again, googling, and found same problem in <a href="http://www.experts-exchange.com/Software/Server_Software/Web_Servers/Q_22464371.html">here</a>. So the problem will be solved by just copying the .so files to /usr/lib ? And, it works. This is weird, I alredy put the /usr/lib within the crle command like this :</p>
<div class="highlight"><pre><span></span>-bash-3.00# crle -l /usr/local/lib:/usr/sfw/lib:/lib:/usr/lib/:/opt/opennms/lib:/usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/
</pre></div>
<p>Ah, no idea, so I run the install -dis again, and this time it works.....</p>
<p>Next, playing around with OpenNMS and try to setup the weblogic snmp agent to send trap message to the OpenNMS poller. We'll see....</p>
<p>originally posted 4/11/07</p>Why Telco? *Narsis2007-06-03T00:00:00+01:002007-06-03T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-03:/2007/06/03/why-telco-narsis/<p>Kalo ditanya, kenapa bahagia di industry telco. Simply karena di sektor ini kayaknya teknologi berkembang terus, hampir tiap waktu (terlepas dari..apakah teknologinya sekarang akan kepake ato nggak, e.g: 3G ). Alasan lain, karena kayaknya di sektor inilah, orang-orang IT bener-bener <em>dianggap</em>. Industri lainnya mungkin adalah perbankan sama perminyakan. Sedangkan …</p><p>Kalo ditanya, kenapa bahagia di industry telco. Simply karena di sektor ini kayaknya teknologi berkembang terus, hampir tiap waktu (terlepas dari..apakah teknologinya sekarang akan kepake ato nggak, e.g: 3G ). Alasan lain, karena kayaknya di sektor inilah, orang-orang IT bener-bener <em>dianggap</em>. Industri lainnya mungkin adalah perbankan sama perminyakan. Sedangkan di industri lainnya, orang IT ada yang hanya jadi IT Support, they deserve more than that! Mereka asset berharga perusahaan ... tentunya kalo perusahaan tahu gimana cara membuat mereka usefull.
Satu argumen dengan apa yg kumaksud <em>bener-bener dianggap</em>, artinya setelah mereka bikin aplikasi, jadi, mereka nggak ditinggalin gitu aja dan cuman buat support aplikasi itu. Jarang ada inovasi teknologi baru, kerjanya ya bikin Sistem Informasi. Kalo gitu ceritanya, gimana orang IT bisa berkembang, ya nggak ? Beda ama orang IT yg di 3 industri tadi, setelah aplikasi baru, jadi, mereka mungkin support, tapi mereka selalu dapet update teknologi terbaru. Mereka belajar banyak hal baru.</p>
<p>Bicara tentang industri telko, menurutku dibagi jadi 2 bagian besar, bagian <em>kasar</em>, dan bagian <em>lunak</em>. Bagian <em>kasar</em> (ada quote nya loh, gak kasar beneran) itu bagiannya temen2 elektro jurusan telkom, sama mungkin arus lemah. Disitu ada BTS, BSC, MSC, dan lain sebagainya. Kalo bagian <em>lunak</em> nih bagiannya orang informatika, sama mungkin orang elektro jurusan komputer. Disini ada yang namanya Billing, CRM, midleware, SMS Gateway, SMSC, USSD, Smart Card , HLR, dst.</p>
<p>Bicara tentang bagian lunak, Billing nih jantungnya perusahaan telko. Disini semua tagihan dicatat. Tiap kali suatu service/layanan selesai diberikan (misal : telepon, sms, gprs) akan dibuat suatu file bernama CDR, yang nantinya akan di rating oleh mesin billing, yang nantinya (kalo postpaid) akan ditagihkan tiap bulan. Rating ini dilakukan tiap hari, untuk tiap event, untuk semua pelanggan. Jadi nggak usah dibayangin betapa sibuknya mesin billing ini tiap hari.</p>
<p>Di front desk, ada customer care yang berhubungan langsung dengan pelanggan menggunakan aplikasi CRM. Aplikasi CRM ini biasanya dibangun diatas sebuah platfor terintegrasi. Kenapa begitu ? iya dong, customer care kan harus bisa njawab semua pertanyaan pelanggan yang berkaitan ama service yg di deliver. Contoh nyata nya, kita dateng ke gallery, trus nanya ... mbak, tagihan bulan lalu yg harus saya bayar berapa ya ? mbak, hp saya kok nggak bisa dihubungi sejak kemarin ya ? mbak saya mau aktivasi MMS gimana caranya ya ? mbak saya mau terminate nomer saya bisa nggak ? mbak, saya mau pindah dari prepaid ke postpaid, dst dsb. Dari gambaran diatas, bisa dilihat bahwa aplikasi CRM ini terhubung ke Billing, ke HLR (buat mengetahui kondisi service number anda di network), dan ke aplikasi2 proprietary lainnya. Ruwet ? yep, banget.</p>
<p>Dari situ, diperlukan sebuah, sesuatu, sesosok (halah..) mesin yang berfungsi mengintegrasikan semua sistem-sistem back end tadi. Aplikasi ini banyak disebut dengan istilah midleware. Salah satu implementasinya dalam bentuk ESB <a href="http://jroller.com/page/JPrasojo/?anchor=esb_1">disini</a>. Bayangannya, mesin ini punya konektor spesifik buat masing-masing back end system tadi (Service Engine) yang di ekspos dalam macam-macam bentuk protokol (Binding Components) seperti http, webservice, JMS, dst. Jadi misalnya, aplikasi CRM ingin mendapatkan data dari Billing, maka dia tidak harus connect langsung ke Billing menggunakan API API yg disediakan spesifik oleh billing, tapi dia bisa connect ke midleware menggunakan http, webservice, atau apapun yg disediakan oleh midleware. Tampak lebih rumit step nya ? nggak juga. Bayangin kalo sebuah operator memiliki beberapa sistem billing yang mempunyai API berbeda-beda, tentu sang CRM harus membuat konektor yg berbeda-beda pula. Bayangkan juga kalo yang harus memakai system billing tidak hanya aplikasi CRM, tentu untuk masing-masing aplikasi itu harus dibuat konektor ke billing. Arsitekturnya jadi bintang ruwet. Midleware menyederhanakan hal ini. Kita hanya harus membuat satu konektor untuk masing-masing system, kemudian konektor tadi di ekspose sebagai service yg bisa diakses melalui Binding Components. Untuk referensi bisa dibuka situs <a href="http://www.eaipatterns.com">ini</a>.</p>
<p>Lalu ada sms gateway. Contoh paling simple kegunaannya nih ketika registrasi kartu pra bayar. Kirim sms ke 4444, ketik daftar#bla bla bla. Contoh lain yaa kalo ada acara AFI atau Indonesian Idol gitu lah. Sms gateway ini sesuai namanya - gateway -, berfungsi sebagai penghubung dua hal atau lebih yang berbeda. Kalau kita kirim sms, akan diterima dan diteruskan oleh SMSC. Nah, kalau untuk kasus diatas, registrasi kartu pra bayar, logikanya kan ada proses insert ke database. Nah, proses insert ini bukan bagiannya SMSC karena dia cuma meneruskan sms saja. Oleh karena itu, dibuatlah gateway yang menghubungkan antara SMSC, sehingga ujungnya tuh sms bisa kecatet dan masuk ke database. Atau untuk kasus AFI/Indonesian Idol, dari SMSC akan meneruskan ke Content Provider, yang nyediain layanan ini.</p>
<p>Pengembangan lebih lanjut dari layanan yang disediakan SMSC ini adalah WAP PUSH dan MMS. Contoh layanan WAP PUSH ini mungkin adalah detikportal.com yang diakses via HP. Sedangkan untuk MMS mungkin penjelasannya begini, ketika kita dapet kiriman MMS, maka kita akan dapat sms yang berisi link yang bisa di klik untuk di download. Untuk referensi bisa buka <a href="http://www.mbuni.org">disini</a>.</p>
<p>Sekian dulu bloggingnya ... waktunya ishoma :D</p>
<p>logger.info("written @grhaXL, 9th floor" );</p>
<p>originally posted 7/12/06</p>Tora(Toolkit for Oracle) Installation2007-06-01T00:00:00+01:002007-06-01T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-06-01:/2007/06/01/toratoolkit-for-oracle-installation/<p>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 …</p><p>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 ?
Ok, here's the step I saved from my installation adventure :</p>
<p>1. get Oracle instant client
You can get it here :
http://download.oracle.com/otn/linux/instantclient/instantclient-basic-linux32-10.2.0.3-20061115.zip
http://download.oracle.com/otn/linux/instantclient/instantclient-sdk-linux32-10.2.0.3-20061115.zip</p>
<p>2. Unzip it at some directory, e.g : /opt/instantclient_10_2</p>
<p>3. Add the directory to /etc/ld.so.conf, dont forget run /sbin/ldconfig.
Here's the sample from my laptop :
------------------
onty@phoenix:~$ cat /etc/ld.so.conf
/lib
/usr/lib
/usr/lib/firefox/plugins
/opt/instantclient_10_2
------------------</p>
<p>4. Install libqscintilla.
Thank God, I'm using Kubuntu,and having great internet connection in my office. So just simply run apt-get.
root@phoenix:/opt# apt-get install libqscintilla6 libqscintilla-dev</p>
<p>5. Download and Unzip tora
You can get it <a href="http://sourceforge.net/projects/tora">here</a>. I'm using version 1.3.21.</p>
<p>6. compile start
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
oracle@phoenix:/opt/tora-1.3.21$ make
oracle@phoenix:/opt/tora-1.3.21$ make install</p>
<p>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.</p>
<h1>define THREAD_ASSERT(x) if((x)!=0) {</h1>
<p>throw (qApp->translate("toThread","Thread function "%1" failed.").arg(QString::fromLatin1( #x ))); }</p>
<p>/<em> new added start </em>/
void <em>toThreadStartWrapper(void </em>t);
/<em> new added end </em>/</p>
<p>void toThread::initAttr()</p>
<p>After that, I continued with make, and make install.</p>
<p>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.</p>
<p>OK, that's for today's tip.</p>Testing my new Blog2007-05-29T00:00:00+01:002007-05-29T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-05-29:/2007/05/29/testing-my-new-blog/<p>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.</p><p>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.</p>Tukang jual pisang goreng2007-05-04T00:00:00+01:002007-05-04T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-05-04:/2007/05/04/tukang-jual-pisang-goreng/<p>Yesterday is my 12th day in Malaysia. My company has a join project with ECM for our client, Mi3G. Yesterday, we went to Subang HiTech to install the production server.When break time, we went to street corner to find some snack, and there we met a lady who sell …</p><p>Yesterday is my 12th day in Malaysia. My company has a join project with ECM for our client, Mi3G. Yesterday, we went to Subang HiTech to install the production server.When break time, we went to street corner to find some snack, and there we met a lady who sell pisang goreng and another gorengan. She's from Indonesia. She'd been here for 16 year, what a quite long story. Well, that's not the part that amaze me. From just selling pisang goreng, she can pay her working permit every 6 month for about 2000RM. First time she created the working permit, she must pay around 4000RM. What a number. Then suddenly I realized that, hey, Allah AlMighty is the most fair judge. Everybody that worked hard and always wish for Allah's bless and ridho should have it's own destiny.</p>
<p>Ok, keep fight, the solaris machine and the lucene are waiting ...
Bismillah.</p>Webservices with spring2007-04-19T00:00:00+01:002007-04-19T00:00:00+01:00Lintang JPtag:onty.maclab.org,2007-04-19:/2007/04/19/webservices-with-spring/<p>These few days, I had a task to create a webservice client. Sounds interesting and challenging, because usually if we depends on weblogic's control, we can make any webservices client much much easier, just a few click, and tadaaa. The problem is, the webservice client will become stand alone module …</p><p>These few days, I had a task to create a webservice client. Sounds interesting and challenging, because usually if we depends on weblogic's control, we can make any webservices client much much easier, just a few click, and tadaaa. The problem is, the webservice client will become stand alone module, so, I can't use any java controls since those controls will be managed by weblogic container during runtime.
Then I turn to find another simple and fast way to create webservice client. But, before that of course, since the remote system is not ready yet, I have to create some dummy web service first. Weblogic 9.2 having strange behaviour. First, we create webservice project from the Eclipse-based-IDE. After that, we generate the wsdl files. But, dont ever try to validate it :D because it will fail. Just pass and use those webservice to create weblogic client. That's strange, fail to validate, but it works :D</p>
<p>Ok, dont waste time, since I already had the webservice simulator works no matter how :p I began to create the webservice client. Coding from scratch ? no, it's painful, and I need to do it fast. I turn out to spring and axis which offers it's integration. This is my bean config sample :</p>
<div class="highlight"><pre><span></span>org.apache.axis.client.ServiceFactory
http://localhost:7001/AggregatedInfoFeederSimulator/AggregatedInfo?WSDL
http://com/ericsson/aggregateinfo/sub/services
AggregatedInfoService
AggregatedInfoSoapPort
com.ericsson.mi3g.sub.aggregatedinfo.wsclient.RemoteInfoPortIntf
com.ericsson.mi3g.sub.aggregatedinfo.wsclient.RemoteInfoServiceIntf
</pre></div>
<p>I'm using AggregatedInfoJaxRpcProxyFactoryBean, this is a class that extends JaxRpcPortProxyFactoryBean. We need to extend it to override the postProcessJaxRpcService(Service service) method that will be used to register which deserializer would be used to object that I pull from webservice. First time I try to run, the method is not being called at all, I'm curious. But after googling, I found out that we need to import the right class for the arguments. It should be javax.xml.rpc.encoding.Service;</p>
<p>Ok, the webservice client is done, now it's time to develop the database persistence part. I'm using Ibatis. Ibatis is cool, and I prefer this to hibernate if we need to do the complex query. In telco apps, there are no such simple query, right ? also, we need to be ready if someday the query changed, new field added, depends on requirement.</p>
<p>The database persistence done. Now, create the ant script to run this module, since I had lots of CLASSPATH to include. I can't put it all in bash script and change all the path when it's moved out to production. </p>
<p>And that's it, I'm done.</p>
<p>logger.info("from cyberjava with love....");</p>ESB #1 (Revised)2006-04-07T00:00:00+01:002006-04-07T00:00:00+01:00Lintang JPtag:onty.maclab.org,2006-04-07:/2006/04/07/esb-1-revised/<p>Baru dapet chm tentang ESB(Enterprise Service Bus), karangan Dave Chappel dari <a href="http://arih.wordpress.com">mas Ari</a>. Nih ulasan bab pertamanya :</p>
<p>Bab pertama ngejelasin tentang apa itu ESB(Enterprise Service Bus). Tahun-tahun sebelumnya kita mengenal istilah Service Oriented Architecture (SOA), Enterprise Application Integration (EAI), Business-to-Business (B2B), dan web services. Semua teknologi ini intinya …</p><p>Baru dapet chm tentang ESB(Enterprise Service Bus), karangan Dave Chappel dari <a href="http://arih.wordpress.com">mas Ari</a>. Nih ulasan bab pertamanya :</p>
<p>Bab pertama ngejelasin tentang apa itu ESB(Enterprise Service Bus). Tahun-tahun sebelumnya kita mengenal istilah Service Oriented Architecture (SOA), Enterprise Application Integration (EAI), Business-to-Business (B2B), dan web services. Semua teknologi ini intinya sama, yaitu improvisasi hasil bisnis dari integrasi sistem-sistem yang telah ada sebelumnya. Sedangkan konsep ESB lebih kepada "..loosely coupled, highly distributed integration network that can scale beyond the limits of a hub-and-spoke EAI broker" . Jadi ketika bicara tentang ESB, maka didalamnya akan meliputi :</p>
<div class="highlight"><pre><span></span>1. Messaging
2. Web Services
3. Transformasi data
4. Intelligent Routing yang mampu meneruskan message dari node satu ke yang lain tanpa melalui mekanisme broadcast.
</pre></div>
<p>Lebih lanjut dijelaskan dalam halaman berikutnya, tentang konsep-konsep apa saja yang telah diakomodir oleh generasi integrasi sebelumnya (SOA, EAI, B2B) sebagai berikut :</p>
<div class="highlight"><pre><span></span>1.It must adapt to suit the needs of general-purpose integration projects across a variety of integration situations, large and small. Adaptability includes providing a durable architecture that is capable of withstanding evolutions in protocols, interface technology, and even process modeling trends.
2.It must link together applications that span the extended enterprise using a single unified approach and a common infrastructure.
3.It must extend beyond the boundaries of a single corporate IT data center and into automating partner relationships such as B2B and supply-chain scenarios.
4.It must have simplicity of design and low barriers to entry, enabling the everyday IT professional to become a self-empowered integration architect.
5.It must provide an SOA across the pervasive integration that enables integration architects to have a broad, abstract view of corporate application assets and automated business processes.
6.It needs the flexibility and ability to react to and meet the needs of changing business requirements and competitive pressures.
</pre></div>
<p>Gambar berikut menunjukkan lebih jelas tentang posisi ESB dan teknologi integrasi pendahulunya.</p>
<p><a href="http://jroller.com/resources/j/JPrasojo/Clipboard01.jpg">2</a></p>
<div class="highlight"><pre><span></span>1. Traditional EAI Brokers.
Arsitektur EAI Broker seperti ini memiliki keunggulan dimana semua fungsi-fungsi yang disediakannya (termasuk manajemen routing dan bisnis rule) dapat diatur secara terpusat. Tetapi buku ini mengatakan bahwa arsitektur ini kurang cocok untuk level integrasi antar departemen atau unit bisnis yang berbeda. Lebih lanjut dijelaskan dalam bab 2 mengenai ini.
2. Application Server.
Application server dapat menghubungkan protokol-protokol yang berbeda dengan baik, namun hasilnya adalah sebuah aplikasi yang saling bergantung satu sama lain, yaitu antara integration logic dan application logic.
3. Message Oriented Middleware.
Menyediakan konektivitas yang baik, loosely coupled, dengan gaya asinkron, antar aplikasi. Hal ini memungkinkan beberapa aplikasi yang kecepatan responsenya berbeda, menjadi tidak saling menunggu satu sama lain. Namun, arsitektur MOM ini membutuhkan pemrograman low-level yang cukup lumayan, sehingga bisa jadi waktu development akan lama. Belum lagi masalah perbedaan fisik network yang menyebabkan beberapa infrastruktur MOM tertentu menjadi tidak bisa diandalkan.
4. Yang terakhir, ESB.
Disini, kita tidak lagi bicara tentang pemrograman, tetapi lebih ke arah bagaimana sebuah service di konfigurasi. Di ESB juga terdapat pemisahan arsitektur yang jelas antara business logic(proses bisnis aplikasi) dengan integration logic(routing dan transformasi format data).
</pre></div>
<p><a href="http://jroller.com/resources/j/JPrasojo/Clipboard02.jpg">3</a></p>
<p><strong>Traditional Integration Broker Architecture</strong></p>
<p><a href="http://jroller.com/resources/j/JPrasojo/Clipboard03.jpg">4</a></p>
<p><strong>ESB Architecture</strong></p>
<p>Berikut karakteristik dari ESB :</p>
<p><strong>Pervasiveness. </strong></p>
<div class="highlight"><pre><span></span>An ESB can be adapted to suit the needs of general-purpose integration projects across a variety of integration situations. It is capable of building out integration projects that can span an entire organization and its business partners.
</pre></div>
<p><strong>Highly distributed, event-driven SOA. </strong></p>
<div class="highlight"><pre><span></span>Loosely coupled integration components can be deployed on the bus across widely distributed geographic deployment topologies, yet are accessible as shared services from anywhere on the bus.
</pre></div>
<p><strong>Selective deployment of integration components. </strong></p>
<div class="highlight"><pre><span></span>Adapters, distributed data transformation services, and content-based routing services can be selectively deployed when and where they are needed, and can be independently scaled.
</pre></div>
<p><strong>
Security and reliability. </strong></p>
<div class="highlight"><pre><span></span>All components that communicate through the bus can take advantage of reliable messaging, transactional integrity, and secure authenticated communications.
</pre></div>
<p><strong>
Orchestration and process flow. </strong></p>
<div class="highlight"><pre><span></span>An ESB allows data to flow across any applications and services that are plugged into the bus, whether local or remote.
</pre></div>
<p><strong>
Autonomous yet federated managed environment. </strong></p>
<div class="highlight"><pre><span></span>An ESB supports local autonomy at a departmental and business unit level, and is still able to integrate in a larger managed integration environment.
</pre></div>
<p><strong>
Incremental adoption. An ESB can be used for small projects. </strong></p>
<div class="highlight"><pre><span></span>Each individual project can build into a much larger integration network, which can be remotely managed from anywhere on the bus.
</pre></div>
<p><strong>
XML support. </strong></p>
<div class="highlight"><pre><span></span>An ESB can take advantage of XML as its "native" datatype.
</pre></div>JBoss Vs BES2006-04-07T00:00:00+01:002006-04-07T00:00:00+01:00Lintang JPtag:onty.maclab.org,2006-04-07:/2006/04/07/jboss-vs-bes/<p>Finally, I know why I got this error :</p>
<div class="highlight"><pre><span></span>javax.naming.NameNotFoundException: OracleDS not bound ...
</pre></div>
<p>Padahal di browse di Jboss console ada loh OracleDS. Udah kucoba ngeganti dengan java:OracleDS, java:/OracleDS, java:comp/env/OracleDS, semua nggak bisa....</p>
<p>Ternyata ada konfigurasi yg harus ditambahin di oracle-ds.xml, selama ini kalo …</p><p>Finally, I know why I got this error :</p>
<div class="highlight"><pre><span></span>javax.naming.NameNotFoundException: OracleDS not bound ...
</pre></div>
<p>Padahal di browse di Jboss console ada loh OracleDS. Udah kucoba ngeganti dengan java:OracleDS, java:/OracleDS, java:comp/env/OracleDS, semua nggak bisa....</p>
<p>Ternyata ada konfigurasi yg harus ditambahin di oracle-ds.xml, selama ini kalo lookup langsung OracleDS tuh, dia akan nyari di JVM yang sama. Pantesan, lha aku jalaninnya dengan debug di eclipse, jelas beda JVM ama JBoss nya. Setelah browsing, akhirnya nemu link yang bilang, bahwa ada konfigurasi yang harus ditambahin di oracle-ds.xml nya, yaitu ini :
false</p>
<p>Dengan begini, dia akan lookup JNDI name ke localhost:1099 dan dapet deh OracleDS. Happy ending deh...</p>
<p>Sekarang latihan bikin MDB di JBoss setelah sebelum nya sukses di BES. BES ? apa itu ? Borland Enterprise Server, J2EE nya Borland. Entah kenapa jatis partneran ma ni produk, kukira produk mereka hanya borland Delphi ama JBuilder, hehehe.</p>
<p>Sekilas tentang BES 6.5, nggak ada yg amazing yah, standar2 aja, masih J2EE 1.3 compliant. Ngga bisa dibandingin ama webmethods Integration Server karena emang beda. BES lebih ke J2EE App.Server, sedangkan webMethods lebih ke Middleware, EAI Broker. Tapi fitur yg menarik di JBoss (dan satu-satunya yg menarik buatku) adalah SonicMQ nya. Sebanding dengan webMethods Broker.</p>
<p>Semangat !!!</p>Mawar Merah ...2005-07-09T13:15:00+01:002005-07-09T13:15:00+01:00Lintang JPtag:onty.maclab.org,2005-07-09:/2005/07/09/mawar-merah/<p>Memang ku tak mampu belikan dia Perhiasan...</p>
<p>Tak pernah atau memberi kemewahan...</p>
<p>Tapi ku yakin dia bahagia tanpa itu semua....</p>
<p>Lagu "kebangsaan" masa lalu, waktu SMU, ditengah-tengah jaring pengaman sosial yang tidak berfungsi dengan baik, dengan kesenjangan yang benar-benar jelas terlihat.....</p>
<p>Dunia, kali ini kuingin mengatakan padamu....</p>
<p>kau boleh berada …</p><p>Memang ku tak mampu belikan dia Perhiasan...</p>
<p>Tak pernah atau memberi kemewahan...</p>
<p>Tapi ku yakin dia bahagia tanpa itu semua....</p>
<p>Lagu "kebangsaan" masa lalu, waktu SMU, ditengah-tengah jaring pengaman sosial yang tidak berfungsi dengan baik, dengan kesenjangan yang benar-benar jelas terlihat.....</p>
<p>Dunia, kali ini kuingin mengatakan padamu....</p>
<p>kau boleh berada di genggamanku...</p>
<p>tapi jangan pernah kau mampir di hatiku.....</p>
<p>kppti again, 5th floor, ditemani slank's mawar merah......</p>Kenangan buat ustadz ...2005-06-15T06:32:00+01:002005-06-15T06:32:00+01:00Lintang JPtag:onty.maclab.org,2005-06-15:/2005/06/15/kenangan-buat-ustadz/<p>Merendahlah,</p>
<p>engkau kan seperti bintang-gemilang</p>
<p>Berkilau di pandang orang</p>
<p>Diatas riak air dan sang bintang nun jauh tinggi</p>
<p>Janganlah seperti asap</p>
<p>Yang mengangkat diri tinggi di langit</p>
<p>Padahal dirinya rendah-hina</p>
<p>(Rahmat Abdullah) -</p>
<p>Seorang Ustadz yang, ...</p>
<p>Jika aku membaca tulisannya selalu membuatku ngantuk. Tapi entah kenapa, kharismanya-atau apalah, yg membuatku membaca …</p><p>Merendahlah,</p>
<p>engkau kan seperti bintang-gemilang</p>
<p>Berkilau di pandang orang</p>
<p>Diatas riak air dan sang bintang nun jauh tinggi</p>
<p>Janganlah seperti asap</p>
<p>Yang mengangkat diri tinggi di langit</p>
<p>Padahal dirinya rendah-hina</p>
<p>(Rahmat Abdullah) -</p>
<p>Seorang Ustadz yang, ...</p>
<p>Jika aku membaca tulisannya selalu membuatku ngantuk. Tapi entah kenapa, kharismanya-atau apalah, yg membuatku membaca tulisannya sampai habis.</p>
<p>Kalimat awal dari tulisan2 nya, selalu menyiratkan kecerdasan dan kebijakan. Nggak liat orangnya sendiri sih, cuman aku bisa percaya, aneh ya ?</p>
<p>Ustad, semoga dirimu mendapat tempat yang layak, di sisi Allah.Amin.</p>Kru-keadilan.....last word.2005-06-10T04:56:00+01:002005-06-10T04:56:00+01:00Lintang JPtag:onty.maclab.org,2005-06-10:/2005/06/10/kru-keadilanlast-word/<p>Kru-keadilan, gak terasa kamu udah lama menemaniku sejak 2002. Saat-saat yang indah dan pahit kita lalui silih berganti, sampai tiba saatnya aku harus melepasmu, demi kebaikan semua.</p>
<p>Kru-keadilan, maafkan sikapku selama ini, yg kadang-kadang menganggap remeh kemampuanmu. Sekarang aku tahu, kamu nggak kalah dengan yang lain..hanya lebih lambat, that's …</p><p>Kru-keadilan, gak terasa kamu udah lama menemaniku sejak 2002. Saat-saat yang indah dan pahit kita lalui silih berganti, sampai tiba saatnya aku harus melepasmu, demi kebaikan semua.</p>
<p>Kru-keadilan, maafkan sikapku selama ini, yg kadang-kadang menganggap remeh kemampuanmu. Sekarang aku tahu, kamu nggak kalah dengan yang lain..hanya lebih lambat, that's all...</p>
<p>Aku juga tahu, beberapa game tidak mampu kamu mainkan karena keterbatasan grafis, but it's ok, I'm not a gamer. Dengan Counter strike saja aku sudah puas koq.</p>
<p>Kru-keadilan, teringat saat-saat kita mroyek bersama, saat-saat aku mengerjakan tugas, saat saat aku mengerjakan tugas akhir, kau dengan setia menemaniku.
Terimakasih untuk itu semua.</p>
<p>Di tempatmu yang baru nanti, kuharap engkau bahagia.</p>
<p>Terimakasih, atas semuanya.</p>
<p>Kru-keadilan :</p>
<p>Celeron 1,1 Ghz,512M,20Gb...</p>Romantika...2005-06-08T20:42:00+01:002005-06-08T20:42:00+01:00Lintang JPtag:onty.maclab.org,2005-06-08:/2005/06/08/romantika/<p>Ada pesona romantika datang tiba-tiba</p>
<p>masa klasik insani hadir kembali</p>
<p>kadang ku ingin memasukinya lagi</p>
<p>namun bisakah tepis yang ada</p>
<p>tak mungkin dustai diriMu,</p>
<p>bukan tak ingin tinggal selamanya</p>
<p>hanya tak bisa pergi</p>
<p>Terlihat dalam gelap yang tak tampak sebelumnya</p>
<p>Terjamah pada hampa dan tenang</p>
<p>mencintaiMu...</p>
<p>...Pasti adalah sesuatu yang …</p><p>Ada pesona romantika datang tiba-tiba</p>
<p>masa klasik insani hadir kembali</p>
<p>kadang ku ingin memasukinya lagi</p>
<p>namun bisakah tepis yang ada</p>
<p>tak mungkin dustai diriMu,</p>
<p>bukan tak ingin tinggal selamanya</p>
<p>hanya tak bisa pergi</p>
<p>Terlihat dalam gelap yang tak tampak sebelumnya</p>
<p>Terjamah pada hampa dan tenang</p>
<p>mencintaiMu...</p>
<p>...Pasti adalah sesuatu yang terindah</p>
<p>Tapi tak satu janji pun yang ingin kuingkari</p>
<p>untuk selalu dapat bersama</p>
<p>Mungkin bila hidayah itu datang....</p>
<p>Adopted from Reza's Keajaiban....</p>Dia...2005-04-16T23:03:00+01:002005-04-16T23:03:00+01:00Lintang JPtag:onty.maclab.org,2005-04-16:/2005/04/16/dia/<p>dia,...</p>
<p>tidak perlu terkenal</p>
<p>tidak perlu harus orang top</p>
<p>dia,...</p>
<p>haruslah sholihah,</p>
<p>setia,</p>
<p>ikhlas dan mau menerimaku apa adanya,</p>
<p>memiliki senyum yang menyejukkan hati - sehingga ketika ku pulang tiap hari, segala penatku hilang diterpa senyum tulusnya</p>
<p>dia,....</p>
<p>haruslah seseorang yang dewasa dan bijak menyikapi keadaan yang ada,</p>
<p>pandai bergaul dengan …</p><p>dia,...</p>
<p>tidak perlu terkenal</p>
<p>tidak perlu harus orang top</p>
<p>dia,...</p>
<p>haruslah sholihah,</p>
<p>setia,</p>
<p>ikhlas dan mau menerimaku apa adanya,</p>
<p>memiliki senyum yang menyejukkan hati - sehingga ketika ku pulang tiap hari, segala penatku hilang diterpa senyum tulusnya</p>
<p>dia,....</p>
<p>haruslah seseorang yang dewasa dan bijak menyikapi keadaan yang ada,</p>
<p>pandai bergaul dengan keluarga dan lingkungan sekitar</p>
<p>dia,....</p>
<p>dengan dia, kuingin arungi waktu, jalani hidup,</p>
<p>bersama, menggapai bahtera yang ditakdirkan oleh sang Sutradara kehidupan</p>
<p>me@KPPTI, 5th floor...</p>
<p>bersama dinginnya AC yg kian menusuk...</p>Kado buat bapak2005-04-16T23:02:00+01:002005-04-16T23:02:00+01:00Lintang JPtag:onty.maclab.org,2005-04-16:/2005/04/16/kado-buat-bapak/<p>Guratan-guratan usia itu tampak mewarnai wajahnya.</p>
<p>Tangan yang kekar dan kokoh, semakin bersahaja dengan kerutan-kerutan keriput akibat kulit yang termakan usia. Rambut yang semakin memutih di kepala dan di janggutmu, bagaikan saksi bisu yang telah menyertaimu, sepanjang perjalanan hidupmu...</p>
<p>Bapak, masih ingat kan ? Waktu itu krisis moneter, dan engkau termasuk …</p><p>Guratan-guratan usia itu tampak mewarnai wajahnya.</p>
<p>Tangan yang kekar dan kokoh, semakin bersahaja dengan kerutan-kerutan keriput akibat kulit yang termakan usia. Rambut yang semakin memutih di kepala dan di janggutmu, bagaikan saksi bisu yang telah menyertaimu, sepanjang perjalanan hidupmu...</p>
<p>Bapak, masih ingat kan ? Waktu itu krisis moneter, dan engkau termasuk salah satu karyawan yang kena PHK.</p>
<p>Bapak, masih ingat kan ? Waktu itu, perusahaan harus ditutup, dan ... kau bahkan tidak tega untuk menulis namamu sendiri sebagai orang-orang yang belum menerima gaji bulan terakhir, ?... aku tidak tega Bu, mereka lebih susah daripada kita, mereka harus menerima haknya duluan? .</p>
<p>Bapak, masih ingat kan ? Waktu itu, anakmu ini terjangkit virus minder di sekolah, semuanya dari keluarga yang berada, sedangkan kita ? Lalu apa nasihatmu ? Bahwa kebahagiaan itu letaknya di hati, bukan terletak dari banyaknya materi yang terlihat. Bahwa kekayaan, materi, semuanya milik Allah, titipan semata ...</p>
<p>Bapak, masih ingat kan ? Waktu itu, aku masih TK, dan ketika kau pulang kantor, langsung ku menghambur, memelukmu, dan mengatakan ?... Pak, aku pingin cepet besar seperti bapak? dan saat itu, engkau hanya tersenyum.</p>
<p>Bapak, masih ingat kan ? Waktu itu, kau selalu memaksaku untuk mengikuti pelajaran tambahan bersamamu. Dan dengan malas-malasan, aku pun mengikutinya, namun ternyata, hasilnya tidak percuma.</p>
<p>Bapak, masih ingat kan ? Waktu itu, dengan nakalnya aku bermain-main dengan anak kunci, sehingga aku terkunci sendirian dalam kamar yang gelap. Aku berteriak dan menangis sekeras-kerasnya, akhirnya, dengan sabar dan telaten, kau mengajariku membuka pintu dari luar...aku memelukmu begitu aku berhasil keluar dari kamar ...</p>
<p>Bapak ...</p>
<p>Aku ingin membahagiakanmu, dengan akhir sisa hidupmu, aku ingin segalanya yang terbaik untukmu.
Walaupun itu tidak akan pernah sepadan, dengan apa yang telah kauberikan selama ini, setidaknya inilah sembah baktiku.</p>
<p>Ya Allah, ampunilah dosa-dosaku, dosa kedua orang tuaku, dan perlakukanlah mereka dengan kasih sayangMu, sebagaimana mereka memperlakukanku dengan kasih sayang pula, ketika aku masih kecil ...</p>
<p>me@my-private-room</p>Nulis Ah...2005-03-26T22:57:00+00:002005-03-26T22:57:00+00:00Lintang JPtag:onty.maclab.org,2005-03-26:/2005/03/26/nulis-ah/<p>It's holiday from friday to sunday, some people might spend their time with thier families. Here, I spend my time hanging around the virtual world. Nevermind, so what ? this is my life :)</p>
<p>Some people told me that I should go out, hanging around with my friends, just to make my …</p><p>It's holiday from friday to sunday, some people might spend their time with thier families. Here, I spend my time hanging around the virtual world. Nevermind, so what ? this is my life :)</p>
<p>Some people told me that I should go out, hanging around with my friends, just to make my life more colorfull, well...that's not my kind of type. I'd like to spend my time here, with my lovely Celeron(tm) surfing the virtual world, with 2 mbps bandwidth..ups :D</p>
<p>Last night, in Yahoo Messenger, my friend told me about something happened, because of my status message in Yahoo Messenger. It's just because of misunderstanding , they just dont get the different between the words "outsourcer", and "outsorcerer". What a bad tragedy, I should be carefull to write my status at Yahoo Messenger next time.</p>
<p>This morning, I had a news, one of my friends gave birth her first baby. A new life is coming to this world. Congratz for you, ukhti Citra and Mr Darlis. I knew them since I was at college, Mr Darlis was my lecturer.</p>
<p>This afternoon, when I took shower, my eyes (kelilipen, kemasukan busa sampo-opo bahasa inggrise ?? ) got slipt off ? :D That time, I realize that....our eyes is one of the most precious thing that Allah gave us. I cant imagine how my life will be without this eyes. Sometimes, Allah just keep remembering us with small things, but...it's worthed U know , sometimes, with small things, Allah try to warn us, Allah is watching us, whenever...wherever...whatever....Ya Allah, astaghfirullohaladzim.</p>
<p>This night, about 10 pm, it's just me and my friend here in the office, we both freak :) Tomorrow...who knows there will be tomorrow ?</p>
<p><em>from 5th floor, Indosat building, with love, passion, and tenderness...</em></p>Fit Words for you Bastards2004-11-11T00:16:00+00:002004-11-11T00:16:00+00:00Lintang JPtag:onty.maclab.org,2004-11-11:/2004/11/11/fit-words-for-you-bastards/<p>Satu hal !</p>
<p>Tiada kata yang tepat untuk menggambarkan perlakuan keji USA di Fallujah,IRAK kecuali :</p>
<p>"Terkutuklah kau pasukan hina Amerika !!! "</p><p>Satu hal !</p>
<p>Tiada kata yang tepat untuk menggambarkan perlakuan keji USA di Fallujah,IRAK kecuali :</p>
<p>"Terkutuklah kau pasukan hina Amerika !!! "</p>Bosan...2004-10-08T05:08:00+01:002004-10-08T05:08:00+01:00Lintang JPtag:onty.maclab.org,2004-10-08:/2004/10/08/bosan/<p>Bosan dengan PHP. Lagi di kantor nih, males ngapa-ngapain.
O ya, psychotazkia.or.id is up and running, walaupun make CMSnya orang :)</p><p>Bosan dengan PHP. Lagi di kantor nih, males ngapa-ngapain.
O ya, psychotazkia.or.id is up and running, walaupun make CMSnya orang :)</p>Ngabuburit dengan PHP2004-10-04T17:49:00+01:002004-10-04T17:49:00+01:00Lintang JPtag:onty.maclab.org,2004-10-04:/2004/10/04/ngabuburit-dengan-php/<p>Assalamu'alaikum ...</p>
<p>hari minggu, lagi nunggu buka di kantor, sambil nunggu burning suse ma xandros desktop, bosan mau ngapain, jadi ngisi blog deh. mau cerita tentang PHP, one of the most powerfull programming language in the web environments.di project yg sekarang, aku make php dan xml (ini sih mungkin biasa …</p><p>Assalamu'alaikum ...</p>
<p>hari minggu, lagi nunggu buka di kantor, sambil nunggu burning suse ma xandros desktop, bosan mau ngapain, jadi ngisi blog deh. mau cerita tentang PHP, one of the most powerfull programming language in the web environments.di project yg sekarang, aku make php dan xml (ini sih mungkin biasa ya),mbikin monitoring tools(baca:kulit) buat aplikasi sms gateway nya kannel.benernya kannel dah nyediain sih, interface cgi mereka, namun biar bisa dijual, kayaknya interface yg mereka sediain gak cukup "menarik", makanya php datang sebagai pahlawan bertopeng :p. Tau kan, di kannel mereka nge bind port tertentu buat monitoring sms gateway mereka, kalo disini sih port 13000, tergantug settingan adminport di kannel.conf nya.Nah, tantangannya adalah bagaimana informasi status gateway yg update tiap detik tuh bisa diterima langsung di klien tanpa halaman web yg dibangun tuh "berkedip", you know, blinking, kalo kita ngerefresh halamannya kan jelek, masak tiap detik refresh. Nah, untuk yg satu ini, salut deh buat microsoft, yg, harus diakui, bener bener paling bagus ngimplementasiin XML di browser mereka. Dengan javascript timer, dan microsoft XMLHTTP, it's done, jadi deh. Jadi ceritanya tuh, kita tetep ngupdate info, narik ke client lewat browser, tapi nggak dengan cara ngerefresh satu halaman. Untuk monitoring seperti ini, kan informasinya harus realtime, berarti butuh koneksi terus menerus antara klien dengan server kannel. Kalo lewat web, setiap kita minta koneksi ke server, kan selanjutnya udah, putus, walaupun masih ada objek session, tapi gak ada gunanya, soalnya kita bener bener minta info yg terbaru dari server. Jadi, konsepnya, kita tetep minta info ke server tiap detik, via javascript timer dan XMLHTTP tadi, tapi lewat "jalan belakang, dimana user juga gak tau bahwa web browsernya sedang ngerequest halaman terus menerus ke server, yg mereka tau ada tulisan berisi status yg keupdate terus di layar mereka. Kalo di mozilla, entahlah, belum tau. YG jelas, implementasi XML Data Island di Mozilla gak sebagus dan semudah punya Microsoft (omongan jujur dari pecinta linux :p ).</p>
<p>Selain itu, aku juga make php buat generate report dengan format excel dan pdf, bikin chart juga dengan library jpgraph. Agar php support format pdf, harus download dulu library dari pdflib, setelah itu, untuk memulai, ada library/class php bagus milik fpdf di http://www.fpdf.org, cool, kita bisa masukin gambar juga di pdf kita.</p>
<p>Masalah lain ada pada waktu generate pdf.Kan di aplikasi web itu aku juga bikin graph chart dari library jpgraph gd, file yg terbentuk kan berasal dari php, jadi nggak murni file grafik, cuman di set content-type nya berupa grafik. Ehh, si fpdf nggak mau, errornya bilang, bahwa file grafik hasil generate dari php itu nggak ditemukan. Hmm, pusing juga, padahal path nya bener loh. Akhirnya aku ngoprek lagi tuh jpgraph, sampai pada settingan dimana jpgraph mendukung cache, jadi file hasil generate tadi bisa disimpan sebagai cache berbentuk FILE ASLI bertipe...macem macem sih, kebetulan punyaku berformat png, ya udah deh, tinggal set pdfnya supaya ngambil gambar dari file asli di direktori cache tadi, beres...</p>
<p>eh, dah dulu yak, dah buka nih....mau cari minum dulu di pantry, bye,.....</p>Perjalanan Ke Barat....2004-09-14T12:38:00+01:002004-09-14T12:38:00+01:00Lintang JPtag:onty.maclab.org,2004-09-14:/2004/09/14/perjalanan-ke-barat/<p>Besok, ke Jakarta, first flight, mengadu nasib, mengubah sejarah :p
Rencananya besok nginep di masjid, sambil semoga bisa nginep di tempat mas Yono98, di tempat mas Heri Surahman katanya ada iparnya dua dateng, jadi agak rame, gak enak juga sih. Opsinya : masjid UI Salemba, sama kosnya mas Yono98.</p>
<p>Dear blog …</p><p>Besok, ke Jakarta, first flight, mengadu nasib, mengubah sejarah :p
Rencananya besok nginep di masjid, sambil semoga bisa nginep di tempat mas Yono98, di tempat mas Heri Surahman katanya ada iparnya dua dateng, jadi agak rame, gak enak juga sih. Opsinya : masjid UI Salemba, sama kosnya mas Yono98.</p>
<p>Dear blog, gak tau kapan aku bisa kembali mengisimu lagi.....
Semoga aja di tempat kerja nanti ada internetnya ya ? :)</p>
<p>baydeway, aku jadi teringat beberapa taun lalu, ....seseorang mengutarakan idenya dan mengajakku untuk membuat situs..bukan psychotazkia lho, ada lagi yang laen, namanya funkids.com, domainnya terlanjur dibeli sama orang.....</p>
<p>Situs itu, rencananya dia, tentang situs pendidikan anak-anak islami. Dia seneng banget sama anak-2 kecil kali ya ?
Tapi kesibukan kuliah membuat semuanya tergilas oleh waktu.</p>
<p>Teringat ucapan Ustadz Rofi' ...... "BERSAMA ALLOH KITA BISA !" :) so...let's fight for a better tomorrow .... :)</p>Something wrong with me ???2004-09-13T21:57:00+01:002004-09-13T21:57:00+01:00Lintang JPtag:onty.maclab.org,2004-09-13:/2004/09/13/something-wrong-with-me/<p>Something wrong with me.
Gak tau kenapa, cuman ngerasa aja, kalo ada sesuatu yang berubah pada diriku.</p>
<p>proses kedewasaan ? semoga .....</p>
<p>Soulmate hunting ? Maybe :)</p><p>Something wrong with me.
Gak tau kenapa, cuman ngerasa aja, kalo ada sesuatu yang berubah pada diriku.</p>
<p>proses kedewasaan ? semoga .....</p>
<p>Soulmate hunting ? Maybe :)</p>Buat hacker keadilan...2004-09-12T18:46:00+01:002004-09-12T18:46:00+01:00Lintang JPtag:onty.maclab.org,2004-09-12:/2004/09/12/buat-hacker-keadilan/<p>For hacker-keadilan ....</p>
<p>Detik...menit...jam....
Hari...Bulan...Tahun...
tlah berganti</p>
<p>saatnya memulai
fase barukehidupan</p>
<p>Ummat menanti
Selamat berjuang Bro ...</p><p>For hacker-keadilan ....</p>
<p>Detik...menit...jam....
Hari...Bulan...Tahun...
tlah berganti</p>
<p>saatnya memulai
fase barukehidupan</p>
<p>Ummat menanti
Selamat berjuang Bro ...</p>Blog2004-09-04T00:00:00+01:002004-09-04T00:00:00+01:00Lintang JPtag:onty.maclab.org,2004-09-04:/2004/09/04/blog/<p>akhirnya....walaupun dengan IE dan sejumput koneksi starone :p akhirnya bisa ngisi BLOG lagi....</p><p>akhirnya....walaupun dengan IE dan sejumput koneksi starone :p akhirnya bisa ngisi BLOG lagi....</p>Petualangan bulan ini..2004-08-29T00:39:00+01:002004-08-29T00:39:00+01:00Lintang JPtag:onty.maclab.org,2004-08-29:/2004/08/29/petualangan-bulan-ini/<p>baru sadar, tiga minggu berturut-turut, setiap akhir pekan, aku pasti di luar kota.</p>
<p>2 minggu kemaren, ke Semarang, nikahnya temen di tempat KP dulu. Berangkat naek travel jam 8 pagi, sampe gedung jam 6, padahal acaranya jam 7. Terus jam 8 nya udah cabut lagi ke Surabaya, by travel juga …</p><p>baru sadar, tiga minggu berturut-turut, setiap akhir pekan, aku pasti di luar kota.</p>
<p>2 minggu kemaren, ke Semarang, nikahnya temen di tempat KP dulu. Berangkat naek travel jam 8 pagi, sampe gedung jam 6, padahal acaranya jam 7. Terus jam 8 nya udah cabut lagi ke Surabaya, by travel juga. Serba instant....</p>
<p>1 Minggu kemaren, ke Bojonegoro, nikahnya Aini. Nggak nyangka tuh akhwat satu bakalan melesat duluan, hehe. Semoga diberi petunjuk yang terbaik selalu deh An. Padahal rasanya masih baru kapan kenal, jadi inget acara permikomnas di Yogya juga sama Galih, mas Aryo98, mas Ade98, Puspa ... yang waktu kita bisa ngeberhentiin kereta itu :)</p>
<p>Minggu ini, yang aku baru aja dateng jam 21.30 tadi, dari Yogyakarta, aslinya dari Cilacap sih, tapi sowan dulu ke temen-temen lama di Yogya. Seru banget petualangan satu ini, in the middle of nowhere :p, sebuah negeri dengan penduduk berbahasa asing yang tidak kumengerti, hahaha, lha iya, lha wong bahasanya kayak Cici tegal gitu :p lucu ndengernya. Selamat ya mas Bakti, barokallah pernikahannya, doain adekmu yang satu ini cepet menyusul, dapet istri sholihah, yang cantik , putih, ups....jangan dibicarain disini kali ya :p</p>
<p>Gitu aja deh, mau tidur dulu, besok ngantor pagi soalnya.</p>