Thursday, April 23, 2009

Tips Nekat Ambil ISO Untuk Para Fakir Bandwidth (a.k.a Menyambut Rilis Ubuntu 9.04)

Ingin segera merasakan Ubuntu 9.04 tapi fakir bandwidth? Kalau anda sudah punya ISO 9.04 RC, trik ini bisa dipakai:

$ cp ubuntu-9.04-rc-desktop-i386.iso ubuntu-9.04-desktop-i386.iso
$ rsync -avP mirror.favorit.anda::ubuntu-releases/.pool/ubuntu-9.04-desktop-i386.iso .
receiving incremental file list
ubuntu-9.04-desktop-i386.iso
96623225 13% 81.49kB/s 2:10:08
Apa untungnya? Sebenarnya ISO 9.04-rc vs 9.04 hanya berbeda 'sedikit'. Dengan rsync anda hanya perlu mengambil perbedaannya, yang pasti jauh lebih kecil daripada ukuran ISO yang ~700MB. Perhatikan bahwa kecepatan unduh pernah mencapai angka yang berlipat-lipat daripada bandwidth anda. Pada saat itu, rsync mengambil potongan dari salinan lokal alih-alih dari server sumber.

Selamat menikmati Jaunty Jackalope!

ps: titik tunggal di akhir baris perintah jangan sampai tertinggal

update: pemakaian rsync dapat menghemat 584 MB
   732909568 100%  271.13kB/s    0:43:59 (xfer#1, to-check=0/1)

sent 189658 bytes received 148727157 bytes 55973.24 bytes/sec
total size is 732909568 speedup is 4.92

Tuesday, April 07, 2009

Mengamati Mekanisme Back End Facebook

Kehebohan SNTM di Facebook akhir-akhir ini malah menimbulkan pertanyaan sangat menggelitik di benak saya: kenapa kurva pertambahan pendukung SNTM stabil?

Perhatikan kemiringan kurva, dari pukul 8 pagi sampai 10 malam. Linier kan? Padahal kabar panas seperti ini mestinya membuat efek snowball kan? Atau paling tidak ada 'ledakan' saat istirahat makan siang. Atau saat jam pulang kantor. Atau kapanpun. Yang jelas bagi saya, linieritas itu sangat membingungkan.

Sebenarnya data delta, bukan kumulatif, bisa lebih berbicara.

Akan tetapi data tersebut agak meragukan karena pada sekitar pukul 17 frekuensi sampling diubah dari per 10 menit menjadi per 5 menit. Walaupun post-processing juga ikut disesuaikan, tapi seolah ada kesalahan yang belum bisa saya jelaskan penyebabnya.

Dugaan saya, berdasar keduga grafik di atas, adalah mekanisme back end Facebook yang mengerem. Tapi apa gunanya?

Tracking grup SNTM baru menarik juga untuk diamati, karena trend terdahulu, yaitu penambahan yang linier juga terjadi disini.

Sunday, February 08, 2009

Tweaking htop display


htop is more flexible than top from procps. But recently I found a tiny inconvinience when htop display processes which use more than 10GB memory. Those processes use 6 characters in VIRT field, while normally it is 5 or less.





$ diff -urN Process.c.orig Process.c
--- Process.c.orig 2008-09-23 10:43:34.000000000 +0700
+++ Process.c 2009-02-07 23:21:57.000000000 +0700
@@ -205,8 +205,8 @@
static void Process_printLargeNumber(Process* this, RichString *str, unsigned long number) {
char buffer[11];
int len;
- if(number >= (1000 * ONE_M)) {
- len = snprintf(buffer, 10, "%4.2fG ", (float)number / ONE_M);
+ if(number >= (10 * ONE_M)) {
+ len = snprintf(buffer, 10, "%3.1fG ", (float)number / ONE_M);
RichString_appendn(str, CRT_colors[LARGE_NUMBER], buffer, len);
} else if(number >= (100000)) {
len = snprintf(buffer, 10, "%4ldM ", number / ONE_K);

After small modification above, now htop behaves 'properly'.

Tuesday, January 20, 2009

Setup Mercurial pada RHEL 4


/* pasang paket mercurial */
$ sudo yum install mercurial
/* ambil flup, ekstrak, instal modul flup */
$ wget http://www.saddi.com/software/flup/dist/flup-1.0.1.tar.gz
$ tar xvfz flup-1.0.1.tar.gz
$ sudo easy_install flup-1.0.1
/* ikuti langkah selanjutnya di http://www.selenic.com/mercurial/wiki/index.cgi/RHEL4HgWebDirSetup */

Sunday, January 11, 2009

Cacah Partisi SCSI Maks Pada Linux

Sempat panik ketika salah satu partisi (yang berukuran paling besar) pada disk eksternal saya tidak dapat di-mount, bahkan tidak dikenal oleh Linux. Cari-cari info kesana kemari, ternyata ini limitasi device SCSI, yang hanya menyediakan 16 nomor minor untuk setiap major. Dari file Documentation/devices.txt di source kernel:

  8 block       SCSI disk devices (0-15)
0 = /dev/sda First SCSI disk whole disk
16 = /dev/sdb Second SCSI disk whole disk
32 = /dev/sdc Third SCSI disk whole disk
...
240 = /dev/sdp Sixteenth SCSI disk whole disk

Partitions are handled in the same way as for IDE
disks (see major number 3) except that the limit on
partitions is 15.
Jadi misalnya hard disk tersebut dikenal sebagai /dev/sdb, maka hanya akan ada /dev/sdb1 s/d /dev/sdb15 yang dapat diakses oleh Linux. Karena disk eksternal saya memakai interface USB, yang oleh Linux ditangani melalui subsistem SCSI, maka pembatasan tersebut berlaku. Kelihatannya tidak mudah membongkar pembatasan tersebut (belum sempat dicoba sih), karena berakibat panjang pada pergeseran nomor minor block device SCSI. Bila minor untuk /dev/sda kita perbesar dari 16 ke 32, maka nomor awal minor sdb bergeser dari 16 ke 32, sdc dari 32 ke 48, dst. Cacah device SCSI yang didukung akan berkurang dari 16 ke 8. Barangkali untuk mayoritas pengguna, 8 device SCSI yang masing-masing bisa memiliki 32 sub-device, lebih bermanfaat daripada 16 device yang masing-masing hanya memiliki 16 sub-device.

Friday, January 09, 2009

Patch for Broadcom NetXtreme II 10GbE on kernel 2.6.22

While preparing some IBM x3950 M2 machines, I got several problems. Distro used is Debian Lenny AMD64 varian, which provides kernel 2.6.22 and 2.6.26. Machine couldn't boot kernel 2.6.26, but this problem needs proper IPMI setup or local access (which I don't have now). So back to kernel 2.6.22. Next problem is that 2.6.22 doesn't support Broadcom BCM57710 10GbE. Searching IBM's support, I find potential driver v1.45.20, but they are for SLES/RHEL. Time to get dirty!

First try, too many errors:

$ make KVER=2.6.22-bnx
make -C /lib/modules/2.6.22-bnx/build M=`pwd` modules
make[1]: Entering directory `/usr/src/linux-2.6-2.6.22'
CC [M] /home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.o
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c: In function ‘bnx2x_xmit_type’:
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9759: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9764: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c: In function ‘bnx2x_pkt_req_lin’:
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9809: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9810: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c: In function ‘bnx2x_start_xmit’:
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9899: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9899: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9968: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9975: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9976: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9978: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9992: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9992: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9992: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9992: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10000: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10007: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10008: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10044: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10045: error: ‘struct sk_buff’ has no member named ‘h’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10048: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10048: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10048: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10048: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10050: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:10056: error: ‘struct sk_buff’ has no member named ‘nh’
make[2]: *** [/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.o] Error 1
make[1]: *** [_module_/home/andika/src/broadcom/bnx2x-1.45.20] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6-2.6.22'
make: *** [bnx2x.o] Error 2
After long warming up, last effort involving GNU global (gtags, htags), creating cross references for kernel 2.6.21, 2.6.22, and 2.6.28, path to solution started to appear. The culprit is file bnx2x-compat.h which is a compatibility header created to make this driver compatible to multiple kernel versions. Line #4 originally:
#if (LINUX_VERSION_CODE < 0x020617)
changing this to
#if (LINUX_VERSION_CODE < 0x020616)
made a big difference:
make -C /lib/modules/2.6.22-bnx/build M=`pwd` modules
make[1]: Entering directory `/usr/src/linux-2.6-2.6.22'
CC [M] /home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.o
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c: In function ‘bnx2x_interrupt’:
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:1746: error: ‘struct bnx2x_fastpath’ has no member named ‘napi’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:1746: error: too many arguments to function ‘netif_rx_schedule’
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c: In function ‘bnx2x_poll’:
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9660: error: ‘napi’ undeclared (first use in this function)
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9660: error: (Each undeclared identifier is reported only once
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9660: error: for each function it appears in.)
/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.c:9660: error: too many arguments to function ‘netif_rx_complete’
make[2]: *** [/home/andika/src/broadcom/bnx2x-1.45.20/bnx2x_main.o] Error 1
make[1]: *** [_module_/home/andika/src/broadcom/bnx2x-1.45.20] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6-2.6.22'
make: *** [bnx2x.o] Error 2
All error disappeared after this complete patch:
--- bnx2x_compat.h.asli 2008-08-26 16:07:35.000000000 +0700
+++ bnx2x_compat.h 2009-01-08 22:51:52.000000000 +0700
@@ -1,14 +1,16 @@
#ifndef __BNX2X_COMPAT_H__
#define __BNX2X_COMPAT_H__

-#if (LINUX_VERSION_CODE < 0x020617)
+#if (LINUX_VERSION_CODE < 0x020618)

#define skb_copy_from_linear_data_offset(skb, pad, new_skb_data, len) \
memcpy(new_skb_data, skb->data + pad, len)

#define netif_rx_schedule(dev, X) netif_rx_schedule(dev)
#define netif_rx_complete(X, Y) netif_rx_complete(dev)
+#endif

+#if (LINUX_VERSION_CODE < 0x020616)
/* skb_buff accessors */
#define ip_hdr(skb) (skb)->nh.iph
#define ipv6_hdr(skb) (skb)->nh.ipv6h
Alternatively you can get the patch here: http://research.indocisc.com/~andika/ibm/bnx2x-compat-2.6.22.patch

NIC working now, next target is making 2.6.27+ kernel boots.

Ayo Menerjemahkan Ubuntu Jaunty!

Baru saja saya menerima email:

Message-ID: <49661839.30506@canonical.com>
Date: Thu, 08 Jan 2009 23:14:01 +0800
From: Arne Goetje
To: ubuntu-translators@lists.ubuntu.com
Subject: Jaunty now open for translations

Dear all,

the subject says it all: We have opened Rosetta for Jaunty translations.

Happy translating! :)

Cheers
Arne

Bagaimana kondisi saat ini?
Indonesian statistics in Jaunty
Translatable items: 466.046
Untranslated: 375.453