Tuesday, May 20, 2008

Customizing Asus AM200g - I. PREPARATION


As a fresh ADSL subscriber I became the owner of Asus AM200g ADSL modem/wireless router. The box is quite powerful - it is run by a 256 MHz processor, has 16 MB of RAM and is running Linux, so I'd like to use it for some other useful tasks. Since Asus has not yet released the source code it's not going to be that easy.



I want to touch the original firmware the least possible, so I'm going to add everything to an attached flash drive.
But the firmware only supports vfat and squashfs! Because of vfat filesystem limitations I decided to use a squashfs partition to store program files and a vfat one to store data that need to be modified, let's see how it works out. Note that all is done using Mandriva Linux 2008.1.



# urpmi squashfs-tools
$ mksquashfs /tmp/directory /tmp/dir.sqsh
Parallel mksquashfs: Using 1 processor
Creating little endian 3.1 filesystem on /tmp/dir.sqsh, block size 131072.
[==============================================================] 6136/6136 100%
Exportable Little endian filesystem, data block size 131072, compressed data, compressed metadata, compressed fragments, duplicates are removed
Filesystem size 4586.44 Kbytes (4.48 Mbytes)
8.61% of uncompressed filesystem size (53255.07 Kbytes)
Inode table size 53222 bytes (51.97 Kbytes)
23.13% of uncompressed inode table size (230058 bytes)
Directory table size 73178 bytes (71.46 Kbytes)
31.71% of uncompressed directory table size (230774 bytes)
Number of duplicate files found 3581
Number of inodes 7327
Number of files 6092
Number of fragments 224
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 1235
Number of uids 1
hajma (500)
Number of gids 0

Now I wrote the created image to the flash drive's first partition:
# dd if=/tmp/dir.sqsh of=/dev/sdb1

Rather surprisingly, the firmware only supports squashfs v2.0, so after plugging the flash to the router, it shows in the logs
kernel: SQUASHFS error: Major/Minor mismatch, filesystem is (3:1), I support (1 : x) or (2 : <= 0)
and in addition squashfs v3 does not support creating v2 images. Oh fsck. So I downloaded squashfs2.0-r2.tar.gz and
# urpmi make
# urpmi zlib1-devel
$ tar -xvf squashfs2.0-r2.tar.gz # note that tar now automatically gunzips the file too!
$ cd squashfs2.0-r2/squashfs-tools/
$ make
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2   -c -o mksquashfs.o mksquashfs.c
mksquashfs.c: In function ‘create_inode’:
mksquashfs.c:476: warning: integer constant is too large for ‘long’ type
mksquashfs.c:489: error: lvalue required as left operand of assignment
mksquashfs.c:541: warning: integer constant is too large for ‘long’ type
mksquashfs.c:546: warning: integer constant is too large for ‘long’ type
mksquashfs.c:549: error: lvalue required as left operand of assignment
mksquashfs.c:568: warning: integer constant is too large for ‘long’ type
mksquashfs.c: In function ‘write_file’:
mksquashfs.c:1030: warning: integer constant is too large for ‘long’ type
mksquashfs.c:1096: warning: integer constant is too large for ‘long’ type
mksquashfs.c: In function ‘dir_scan’:
mksquashfs.c:1275: warning: integer constant is too large for ‘long’ type
mksquashfs.c:1352: warning: integer constant is too large for ‘long’ type
make: *** [mksquashfs.o] Error 1
$
hmm, okay, the old crap does not want to be compiled with gcc 4 ...
# urpmi gcc3.3
$ CC=gcc-3.3.6 make
$ ./mksquashfs /tmp/directory /tmp/dir.sqsh
# dd if=/tmp/dir.sqsh of=/dev/sdb1
After plugging it into the router,
kernel: SQUASHFS: Mounting a different endian SQUASHFS filesystem on sda1
shows up in the logs. Okay, time to try
$ ./mksquashfs /tmp/directory /tmp/dir.sqsh -be
# dd if=/tmp/dir.sqsh of=/dev/sdb1
and I am getting one error message less! But I still see an ugly
kernel: SQUASHFS error: lzma_fs error while decompressing!
kernel: SQUASHFS error: Unable to read cache block [4bea97:7ae]
kernel: SQUASHFS error: Unable to read inode [4bea97:7ae]
kernel: SQUASHFS error: Root inode create failed" and it does not get mounted.
Googling reveals three links that do not help much. But since decompression is mentioned ... let's try to turn off compression ... :
$ ./mksquashfs /tmp/opends/src /tmp/dir.sqsh -be -noI -noD -noF
# dd if=/tmp/dir.sqsh of=/dev/sdb1
and voila, it gets mounted!
kernel: usb 1-1: new high speed USB device using address 7
kernel: scsi5 : SCSI emulation for USB Mass Storage devices
kernel: Vendor: USB 2.0 Model: Flash Disk Rev: 0.00
kernel: Type: Direct-Access ANSI SCSI revision: 02
kernel: SCSI device sda: 2047999 512-byte hdwr sectors (1049 MB)
kernel: sda: assuming Write Enabled
kernel: sda: assuming drive cache: write through
kernel: sda1 sda2
kernel: Attached scsi removable disk sda at scsi5, channel 0, id 0, lun 0
kernel: Attached scsi generic sg0 at scsi5, channel 0, id 0, lun 0, type 0
kernel: USB Mass Storage device found at 7
syslog: mkdir -p /var/usb/usb_1
syslog: mount /dev/sda1 /var/usb/usb_1
Next time I'll try to get a jabber server running, time to go sleep now. Customizing Asus AM200g - V. firmware modification Customizing Asus AM200g - IV. jabberd configuration Customizing Asus AM200g - III. jabberd and vim Customizing Asus AM200g - II. Preparing the environment

Sunday, May 18, 2008

Rychlost opravy chyb aneb úpadek Gnome a KDE

Před více než rokem jsem porovnával rychlost opravy chyb, a teď mě napadlo podívat se, jak se od té doby situace změnila.



Metodika zůstala stejná:



Vyberou se chyby z bugzilly za šestiměsíční období (leden-červen 2006 a květen-říjen 2007). Zajímavé jsou jen opravdové chyby, takže nepočítáme duplicity, neplatné chyby a chyby způsobené původním kódem (upstream). Pokud nebyla chyba opravena do 6 měsíců, počítá se jako neopravená.



Oproti původnímu srovnání jsem v Mandriví Bugzille počítal jen položku Mandriva Linux (i když ty ostatní položky měly dohromady jen pár desítek bugů) a v Novellí Bugzille jen položku openSUSE. Vynechal jsem RedHat, anžto jsem nakonec nějak nepochopil, jakým způsobem tu Bugzillu vedou.



A výsledek je na obrázcích.



Mandriva si polepšila, očividně je to důsledek změn, které zavedl Adam Williamson. (Nahlášená chyba je nejprve prozkoumána členy triage teamu, kteří se postarají, aby se nejednalo o duplicitu a aby hlášení obsahovalo všechny potřebné informace. Teprve pak je předána vývojářům, kteří tak neztrácejí čas.)



openSUSE je stabilní, Gentoo si mírně polepšilo.


Ale velké překvapení mě čekalo u KDE a Gnome.

U KDE očividně platilo, že chyba je buďto opravena v den nahlášení anebo nikdy. Teď silně polevili, a to i přes výrazně nižší počet hlášení.



Největší překvapení bylo ale u Gnome. Z 50% úspěšnosti se dostali na 16 %. Musí se ale uznat, že měli trochu těžší situaci - počet hlášení se jim ztrojnásobil a polovina z nich byly duplicity (<flame>tipnul bych si na ubunťáky - je jich hodně, mají Gnome jako default a mají vyšší podíl BFU</flame>) (za duplicity mohou hlavně automatická hlášení při pádu aplikací, hlavně od uživatelů Fedory a Ubuntu)


Data 2006


Data 2007

Data:


Mandriva old
(2006-01-01 - 2006-06-30)
Celkový počet chyb: 2634
Z nich nás ale zajímá jen: 2089
(Protože nepočítáme 215 DUPLICATE, 46 WORKSFORME, 175 INVALID, 74 WONTFIX a 35 REPORTEDUPSTREAM)
Neopraveno zůstalo: 1050
Opraveno bylo: 1039
Celkem bugů opravených do 1 dne: 207
Celkem bugů opravených do 7 dnů: 205
Celkem bugů opravených do 14 dnů: 85
Celkem bugů opravených do 30 dnů: 112
Celkem bugů opravených do 61 dnů: 127
Celkem bugů opravených do 183 dnů: 303
Mandriva new
(2007-05-01 - 2007-10-30)
Celkový počet chyb: 4174
Z nich nás ale zajímá jen: 3128
(Protože nepočítáme 479 DUPLICATE, 54 WORKSFORME, 306 INVALID, 154 WONTFIX a 53 REPORTEDUPSTREAM)
Neopraveno zůstalo: 1278
Opraveno bylo: 1850
Celkem bugů opravených do 1 dne: 334
Celkem bugů opravených do 7 dnů: 456
Celkem bugů opravených do 14 dnů: 201
Celkem bugů opravených do 30 dnů: 237
Celkem bugů opravených do 61 dnů: 192
Celkem bugů opravených do 183 dnů: 430
openSUSE old
Celkový počet chyb: 7005
Z nich nás ale zajímá jen: 4297
(Protože nepočítáme 1093 DUPLICATE, 263 WORKSFORME, 801 INVALID a 551 WONTFIX)
Neopraveno zůstalo: 1525
Opraveno bylo: 2772
Celkem bugů opravených do 1 dne: 474
Celkem bugů opravených do 7 dnů: 707
Celkem bugů opravených do 14 dnů: 337
Celkem bugů opravených do 30 dnů: 431
Celkem bugů opravených do 61 dnů: 359
Celkem bugů opravených do 183 dnů: 464
openSUSE new
Celkový počet chyb: 7368
Z nich nás ale zajímá jen: 4710
(Protože nepočítáme 1221 DUPLICATE, 294 WORKSFORME, 611 INVALID a 532 WONTFIX)
Neopraveno zůstalo: 1674
Opraveno bylo: 3036
Celkem bugů opravených do 1 dne: 457
Celkem bugů opravených do 7 dnů: 775
Celkem bugů opravených do 14 dnů: 389
Celkem bugů opravených do 30 dnů: 454
Celkem bugů opravených do 61 dnů: 425
Celkem bugů opravených do 183 dnů: 536
gentoo old
Celkový počet chyb: 20603
Z nich nás ale zajímá jen: 13871
(Protože nepočítáme 4179 DUPLICATE, 630 WORKSFORME, 1412 INVALID a 511 WONTFIX)
Neopraveno zůstalo: 5088
Opraveno bylo: 8783
Celkem bugů opravených do 1 dne: 2218
Celkem bugů opravených do 7 dnů: 2037
Celkem bugů opravených do 14 dnů: 851
Celkem bugů opravených do 30 dnů: 989
Celkem bugů opravených do 61 dnů: 1006
Celkem bugů opravených do 183 dnů: 1682
gentoo new
Celkový počet chyb: 13675
Z nich nás ale zajímá jen: 10103
(Protože nepočítáme 2153 DUPLICATE, 355 WORKSFORME, 763 INVALID a 301 WONTFIX)
Neopraveno zůstalo: 3348
Opraveno bylo: 6755
Celkem bugů opravených do 1 dne: 1557
Celkem bugů opravených do 7 dnů: 1518
Celkem bugů opravených do 14 dnů: 695
Celkem bugů opravených do 30 dnů: 855
Celkem bugů opravených do 61 dnů: 935
Celkem bugů opravených do 183 dnů: 1195
kde old
Celkový počet chyb: 10724
Z nich nás ale zajímá jen: 7142
(Protože nepočítáme 1364 DUPLICATE, 966 WORKSFORME, 995 INVALID a 257 WONTFIX)
Neopraveno zůstalo: 5176
Opraveno bylo: 1966
Celkem bugů opravených do 1 dne: 1731
Celkem bugů opravených do 7 dnů: 16
Celkem bugů opravených do 14 dnů: 0
Celkem bugů opravených do 30 dnů: 27
Celkem bugů opravených do 61 dnů: 85
Celkem bugů opravených do 183 dnů: 107
kde new
Celkový počet chyb: 6689
Z nich nás ale zajímá jen: 4612
(Protože nepočítáme 825 DUPLICATE, 425 WORKSFORME, 678 INVALID a 149 WONTFIX)
Neopraveno zůstalo: 3648
Opraveno bylo: 964
Celkem bugů opravených do 1 dne: 276
Celkem bugů opravených do 7 dnů: 145
Celkem bugů opravených do 14 dnů: 61
Celkem bugů opravených do 30 dnů: 81
Celkem bugů opravených do 61 dnů: 117
Celkem bugů opravených do 183 dnů: 284
gnome old
Celkový počet chyb: 20740
Z nich nás ale zajímá jen: 15018
(Protože nepočítáme 3809 DUPLICATE, 0 WORKSFORME, 406 INVALID, 695 NOTABUG, 481 NOTGNOME, 0 NOTXIMIAN a 331 WONTFIX)
Neopraveno zůstalo: 7627
Opraveno bylo: 7391
Celkem bugů opravených do 1 dne: 1843
Celkem bugů opravených do 7 dnů: 1753
Celkem bugů opravených do 14 dnů: 748
Celkem bugů opravených do 30 dnů: 908
Celkem bugů opravených do 61 dnů: 851
Celkem bugů opravených do 183 dnů: 1288
gnome new
Celkový počet chyb: 63421
Z nich nás ale zajímá jen: 35707
(Protože nepočítáme 25159 DUPLICATE, 0 WORKSFORME, 449 INVALID, 645 NOTABUG, 1184 NOTGNOME, 0 NOTXIMIAN a 277 WONTFIX)
Neopraveno zůstalo: 29887
Opraveno bylo: 5820
Celkem bugů opravených do 1 dne: 1447
Celkem bugů opravených do 7 dnů: 1262
Celkem bugů opravených do 14 dnů: 513
Celkem bugů opravených do 30 dnů: 620
Celkem bugů opravených do 61 dnů: 700
Celkem bugů opravených do 183 dnů: 1278