Mobile view of the internet

This might be old news to most people but I didn’t know it…
You can use a special google url to view websites like mobiles phones do. Try this for example:
http://google.com/gwt/n?u=http://void.gr/kargig/blog/.
It’s quite useful when you want to see how your site looks like from a mobile phone or when you want to use a browser from a terminal like lynx or links (I know you don’t use these browsers but sometimes I do…)
To begin browsing in “mobile view” just go to http://www.google.com/gwt/n and all links you click afterwards will be parsed through the proxy.

And another link I liked was this: http://www.google.com/xhtml. Mobile view of google’s search.

Another day, another debian headache

The case is this, a debian server running Debian 4.0 etch has it’s motherboard broken. We send it for replacement but they don’t have another of the same model to send us so they send us a shiny new model. The new model houses a P35 chipset. The latest Debian 4.0 etch kernel is 2.6.18 which does not support the ICH9 chipset that the motherboard has. The result ? The machine can’t find any sata discs attached to it and it can’t boot. Wonderfull!

Asking around for a possible solution I got two types of answers: a) build a newer kernel on my own b) upgrade the whole system to testing (lenny) instead of stable (etch).
As far as solution (a), I was not willing to build a kernel of my own. It’s not that I can’t, it’s the fact that I find it ridiculous for a debian system to have to build a kernel of my own just like I did when I was using slackware. It’s debian, the distribution thought to be the most stable and well polished and and and…there must be an automated way to run a recent proper kernel.
Regarding solution (b), I was not willing to de-stabilize my system. I want and need to run stable versions of services on that server. A lot of people told me that “testing” is very stable. If debian testing is stable enough then they must mark it as stable and push the previous “stable” into the void. While it’s named “testing” I don’t trust it.

The solve the problem, I booted with a beta of the next version of iloog, mounted the debian partition and chrooted to it. Following some help I was given on IRC I added the testing sources to /etc/apt/sources.list:
deb http://ftp.ntua.gr/pub/linux/debian/ stable main contrib non-free
deb-src http://ftp.ntua.gr/pub/linux/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib
deb-src http://security.debian.org/ stable/updates main contrib
deb http://ftp.ntua.gr/pub/linux/debian/ testing main contrib non-free
deb-src http://ftp.ntua.gr/pub/linux/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib
deb-src http://security.debian.org/ testing/updates main contrib

Reading some stuff about “apt pinning” I added the following in /etc/apt/preferences:
Package: *
Pin: release a=stable
Pin-Priority: 700
---blank line---
Package: *
Pin: release a=testing
Pin-Priority: 650

(that —blank line— mark should really be an empty line. due to theming problems with this blog I can’t make it appear properly inside <code> tags)

Then I issued an: aptitude update
Then I got errors like:

Dynamic MMap ran out of room
Error occurred while processing vdr-plugin-skinenigmang (NewVersion1)
Problem with MergeList /var/lib/apt/lists/ftp.ntua.gr_pub_linux_debian_dists_lenny_main_binary-i386_Packages
The package lists or status file could not be parsed or opened.
Couldn’t rebuild package cache

The solution to those were to create another file named /etc/apt/apt.conf with the following inside it:
APT::Cache-Limit "15388608";

Running aptitude update again was fine. Then an apt-cache search linux-image showed me the list of available kernels. I now had a 2.6.24 kernel available. Finally an aptitude install linux-image-2.6.24-1-686 installed the new kernel.
I had to edit the /etc/grub/menu.conf a bit for it to play nicely (due to the chrooting I guess) but afterwards the server booted just fine.

I don’t know whether what I did is good or bad for a debian system. The fact is that it works and aptitude update does not want to upgrade any of my packages to the testing version.

<rant>
Please debian maintainers, if you have finished patching your machines due to the recent openssl vulnerability you created, rename your “stable” release to “ancient” and “testing” to “stable” so we have less trouble running your distro on new hardware. Thanks in advance.
</rant>

pcmanfm 0.4.1.1 ebuild

A new pcmanfm version (0.4.1.1) is out and since there’s no ebuild yet available I made one by modifying a bit the one I found about version 0.3.2.2 on sunrise overlay. I’ve included a patch I found about enabling/disabling deletion confirmations.

Downloads:
pcmanfm 0.4.1.1 ebuild
pcmanfm 0.4.1.1-r1 ebuild
confirm_delete.patch

tested on x86 and ppc (thanks to comzeradd)

enjoy!

P.S. Looks like I didn’t search that well on bugzilla, there are other ebuilds there too: http://bugs.gentoo.org/show_bug.cgi?id=121902

Fotox 42 ebuild

Since the newest available fotox ebuild I found was for version 17, I decided to change it for version 42 which is currently the latest and greatest.

To compile and install it using portage you also need a minor patch I made for it’s build system.
fotox-42.ebuild
fotox-build.patch

kernel fun

I know this has been posted a zillion times again and again…but it’s still a lot of fun:

Swearing? NEVER!
# cd /usr/src/linux; egrep -ir "( fuck)|( shit)|( crap)" *
arch/m68k/mac/config.c: * have to disable interrupts for this. Our IRQ handlers will crap
arch/sparc/mm/srmmu.c: /* Clear any crap from the cache or else... */
arch/sparc/mm/srmmu.c: * this shit off... nice job Fujitsu.
arch/sparc/mm/srmmu.c: /* Clear any crap from the cache or else... */
arch/sparc/lib/checksum.S: * give up. I'm serious, I am going to kick the living shit
arch/sparc/kernel/ptrace.c:/* Fuck me gently with a chainsaw... */
arch/sparc/kernel/process.c: /* fuck me plenty */
arch/sparc/kernel/head.S: /* XXX Fucking Cypress... */
arch/sparc/kernel/sunos_ioctl.c: /* Binary compatibility is good American knowhow fuckin' up. */
arch/sparc/kernel/ebus.c: * Here we list PROMs and systems that are known to supply crap as IRQ numbers.
arch/sparc/kernel/pcic.c: * to shit into regions like that.
arch/um/drivers/daemon_kern.c: /* We will free this pointer. If it contains crap we're burned. */
arch/frv/mb93090-mb00/pci-frv.c: * timer as certain crappy BIOSes forget to set it properly.
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't try to access
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't try to access
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't try to access
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't even give the
arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe ... Don't try to access
arch/mips/pci/fixup-ip32.c: * right if there exists such a broken piece of crap.
arch/mips/pci/pci.c: * timer as certain crappy BIOSes forget to set it properly.
arch/mips/sgi-ip22/ip22-setup.c: * fucking with the memory controller because it needs to know the
arch/mips/kernel/irixelf.c:#if 0 /* XXX No fucking way dude... */
arch/mips/kernel/genex.S: * Big shit, we now may have two dirty primary cache lines for the same
arch/mips/kernel/vmlinux.lds.S: /* ABI crap starts here */
arch/mips/kernel/traps.c: * (Duh, crap, there is someone with a triple R6k machine)
arch/mips/kernel/irixioctl.c: * irixioctl.c: A fucking mess...
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1064 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1065 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1066 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1067 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1068 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1069 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1070 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1071 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1072 XXX AFS shit DC*/
arch/mips/kernel/irix5sys.S: sys irix_unimp 0 /* 1073 XXX AFS shit DC*/
arch/mips/kernel/sysirix.c:/* 2,191 lines of complete and utter shit coming up... */
arch/mips/kernel/irixsig.c: /* XXX do sigstack crapola here... XXX */
arch/v850/Kconfig:# Turn off some random 386 crap that can affect device config
arch/v850/Kconfig: # The crappy-ass zone allocator requires that the start of allocatable
arch/sparc64/mm/ultra.S: * in Microelectronics who refused to fix this shit.
arch/sparc64/solaris/socksys.c: * No shit. WTF is it supposed to do, anyway?
arch/sparc64/kernel/viohs.c: * to be aware of this crap.
arch/sparc64/kernel/iommu_common.c: printk("verify_sglist: Crap, messed up mappings, dumping, iodma at ");
arch/sparc64/kernel/traps.c: /* Shit... */
arch/sparc64/kernel/binfmt_aout32.c: /* Fuck me plenty... */
arch/arm/common/it8152.c: * timer as we don't have even crappy BIOSes to set it properly.
arch/arm/kernel/head.S: * We're trying to keep crap to a minimum; DO NOT add any machine specific
arch/arm/kernel/head.S: * crap here - that's what the boot loader (or in extreme, well justified
arch/cris/arch-v32/drivers/gpio.c: * Removed old crap.
arch/ppc/8xx_io/commproc.c: * XXX: This is actually crap. CPM_DATAONLY_BASE and
arch/ppc/syslib/cpm2_common.c: /* XXX: This is actually crap. CPM_DATAONLY_BASE and
arch/ppc/syslib/ppc405_pci.c: * the kernel try to remap our BAR #1 and fuck up bus
arch/x86/pci/pci.h: u32 miniport_data; /* Crap */
arch/x86/pci/i386.c: * timer as certain crappy BIOSes forget to set it properly.
arch/x86/mach-visws/setup.c: * What lunatic came up with this shit?
arch/x86/mach-voyager/voyager_smp.c: * FIXME: This algorithm is total crap when mixed with SMP
arch/x86/kernel/cpu/cpufreq/powernow-k7.c: * Some Athlon laptops have really fucked PST tables.
arch/x86/kernel/cpu/mcheck/mce_64.c: by default and leave crap in there. Don't log. */
arch/x86/kernel/cpu/mtrr/generic.c:/* Some BIOS's are fucked and don't set all MTRRs the same! */
arch/parisc/kernel/sys_parisc.c:/* Fucking broken ABI */
arch/powerpc/sysdev/commproc.c: * XXX: This is actually crap. CPM_DATAONLY_BASE and
arch/powerpc/sysdev/cpm2_common.c: /* XXX: This is actually crap. CPM_DATAONLY_BASE and
arch/powerpc/platforms/cell/spider-pic.c: * crap and we don't know on which BE iic interrupt we are hooked on at
arch/powerpc/platforms/powermac/smp.c: * ideally, all that crap will be done in prom.c and the CPU left
Documentation/DocBook/kernel-hacking.tmpl: * give up. I'm serious, I am going to kick the living shit
Documentation/DocBook/kernel-locking.tmpl: If you don't see why, please stay the fuck away from my code.
Documentation/scsi/ibmmca.txt: backwards. This confuses the crap out of those heathens who've
Documentation/sound/alsa/ALSA-Configuration.txt: Note: This driver is really crappy. It's a porting from the
Documentation/ManagementStyle:a while, and you'll feel cleansed. Just don't crap too close to home.
drivers/pci/pci-driver.c: * horrible the crap we have to deal with is when we are awake...
drivers/ide/pci/cmd640.c: * These chips are basically fucked by design, and getting this driver
drivers/ide/ide-probe.c: * have the same drive viewed twice. This occurs with crap CF adapters
drivers/ide/ide-io.c: * remove all the ifdef PCI crap
drivers/lguest/lg.h: * There are many cases where the Guest can do something invalid, like pass crap
drivers/char/ip2/i2ellis.c:// !!! Not Used, this is DOS crap, some of you young folks may be interested in
drivers/char/agp/amd64-agp.c: /* Northbridge seems to contain crap. Try the AGP bridge. */
drivers/hwmon/abituguru.c: anyways. If we read sensors/pwms not there we'll just read crap
drivers/video/sstfb.c: and as reading fbinit 6 will return crap (see FBIINIT6_DEFAULT) we just
drivers/video/aty/radeon_pm.c: /* Hrm... same shit, X doesn't do that but I have to */
drivers/video/sis/init301.c: /* This is a piece of typical SiS crap: They code the OEM LCD
drivers/scsi/NCR53C9x.c: * how bad the target and/or ESP fucks things up.
drivers/scsi/NCR53C9x.c: /* shit */
drivers/scsi/NCR53C9x.c: /* Be careful, we could really get fucked during synchronous
drivers/scsi/NCR53C9x.c: /* Crapola, mark it as a slowcmd
drivers/scsi/NCR53C9x.c: /* shit */
drivers/scsi/aha1542.c: * the strategy handler takes care of that crap.
drivers/scsi/aha1542.c: * the strategy handler takes care of that crap.
drivers/scsi/dc395x.c: /* KG: Can this prevent crap sense data ? */
drivers/scsi/scsi_tgt_lib.c:/* TODO: test this crap and replace bio_map_user with new interface maybe */
drivers/scsi/qlogicpti.h:/* Am I fucking pedantic or what? */
drivers/net/3c509.c: * Using disable_irq stops us crapping on other
drivers/net/irda/donauboe.c:toshoboe_gotosleep (struct pci_dev *pci_dev, pm_message_t crap)
drivers/net/sunlance.c: * This was the sun4c killer. Shit, stupid bug.
drivers/net/wan/dscc4.c: * - misc crapectomy.
drivers/net/wan/dscc4.c: * If the driver ends sending crap on the wire, it
drivers/net/wan/cycx_main.c:* 2000/07/13 acme remove useless #ifdef MODULE and crap
drivers/net/wan/z85230.c: * Check if we crapped out.
drivers/net/wan/z85230.c: ct=2; /* Shit happens.. */
drivers/net/declance.c: * v0.007: Big shit. The LANCE seems to use a different DMA mechanism to
drivers/net/sky2.c: * to handle crap frames.
drivers/net/sunhme.c: /* Remember: "Different name, same old buggy as shit hardware." */
drivers/net/sunhme.c:/* Only Sun can take such nice parts and fuck up the programming interface
drivers/net/3c523.c: /* this bit masking stuff is crap. I'd rather have separate
drivers/net/dm9000.c: mdelay(8); /* same shit */
drivers/block/ub.c: * This is typically ENOMEM or some other such shit.
drivers/block/umem.c: * That's crap, since doing that while some partitions are opened
drivers/media/video/ov7670.c: * Weird crap seems to exist in the upper part of
drivers/media/video/bt819.c: BUG? Why does turning the chroma comb on fuck up color?
drivers/media/video/usbvideo/usbvideo.c:/* XXX: this piece of crap really wants some error handling.. */
drivers/media/video/indycam.c: /* Indy specific crap */
drivers/mtd/mtd_blkdevs.c: registered, to prevent the link/init ordering from fucking
drivers/mtd/ubi/scan.c: dbg_bld("using old crappy leb_ver stuff");
drivers/macintosh/windfarm_pm81.c: /* One more crappy race: I don't think we have any guarantee here
drivers/macintosh/windfarm_pm91.c: /* One more crappy race: I don't think we have any guarantee here
drivers/parport/parport_pc.c: * Piles of crap below pretend to be a parser for module and kernel
drivers/md/dm.c: * you this clearly demarcated crap.
drivers/usb/serial/whiteheat.c: * firmware is improved to guard against crap sent to device
drivers/pcmcia/sa1100_jornada720.c: * What is all this crap for?
drivers/watchdog/shwdt.c: * brain-damage, it's managed to fuck things up one step further..
drivers/serial/pmac_zilog.c: * shadows so we don't write crap there before baud rate is
drivers/serial/sunsu.c: * splitting all the OBP probing crap from the UART probing.
drivers/ata/sata_via.c: * SCR registers on vt6420 are pieces of shit and may hang the
drivers/ata/pata_cmd640.c: * Of putting crap on the disk
drivers/ata/pata_acpi.c: /* We always use the 0 slot for crap hardware */
fs/reiserfs/inode.c: /* crap, we are writing to a hole */
fs/partitions/sgi.c: u8 _unused0[48]; /* Device parameter useless crapola.. */
fs/jffs2/dir.c: /* Oh shit. We really ought to make a single node which can do both atomically */
fs/jffs2/super.c: assumes that they're not aligned -- so it emits crappy
fs/jffs2/TODO:2. get_sb()->build_fs()->scan() path... Why get_sb() removes scan()'s crap in
fs/jffs2/gc.c: all the iget() crap anyway */
fs/file_table.c: * Note: This is a crappy interface. It is here to make
fs/namei.c: * have to copy the last component. And all that crap because of
fs/binfmt_aout.c: /* Fuck me plenty... */
include/asm-arm/arch-cl7500/io.h: * GCC is totally crap at loading/storing data. We try to persuade it
include/asm-arm/arch-rpc/io.h: * GCC is totally crap at loading/storing data. We try to persuade it
include/asm-arm/arch-omap/keypad.h: * in order to workaround certain crappy HW designs that produce ghost
include/asm-v850/pgalloc.h:#include <linux /mm.h> /* some crap code expects this */
include/scsi/scsi_host.h: /* legacy crap */
include/linux/netfilter/nf_conntrack_pptp.h:/* crap needed for nf_conntrack_compat.h */
include/linux/netfilter/xt_limit.h: /* Ugly, ugly fucker. */
include/linux/mtd/cfi.h: of optimising away all the crap for 'bankwidth' larger than
include/linux/mtd/cfi.h: of optimising away all the crap for 'bankwidth' larger than
include/linux/cyclomx.h:* 2000/07/13 acme remove crap #if KERNEL_VERSION > blah
include/asm-m68k/sun3xflop.h:/* We don't need no stinkin' I/O port allocation crap. */
include/asm-m68k/sun3ints.h:/* master list of VME vectors -- don't fuck with this */
include/asm-ia64/pal.h:/* Machine Check related crap */
include/asm-mips/mipsprom.h:/* More PROM shit. Probably has to do with VME RMW cycles??? */
include/asm-sparc64/system.h: /* If you fuck with this, update ret_from_syscall code too. */ \
include/asm-sparc64/io.h:/* PC crapola... */
include/asm-sparc/floppy.h:/* We don't need no stinkin' I/O port allocation crap. */
include/asm-cris/arch-v32/spinlock.h: * writers) in interrupt handlers someone fucked up and we'd dead-lock
kernel/cpu.c:/* Crappy recursive lock-takers in cpufreq! Complain loudly about idiots */
lib/vsprintf.c: * Wirzenius wrote this portably, Torvalds fucked it up :-)
net/netfilter/nf_queue.c: /* James M doesn't say fuck enough. */
net/netfilter/xt_hashlimit.c:/* hash table crap */
net/netfilter/nf_conntrack_ftp.c: else { /* Some other crap */
net/ipv4/netfilter/arp_tables.c: duprintf("Valid hook crap: %08X vs %08X\n",
net/ipv4/netfilter/nf_nat_snmp_basic.c: * (And this is the fucking 'basic' method).
net/ipv4/netfilter/ip_tables.c: duprintf("Valid hook crap: %08X vs %08X\n",
net/ipv4/netfilter/ipt_REJECT.c: This means that the iptables jump stack is now crap. We
net/ipv4/tcp_input.c: /* Old crap is replaced with new one. 8)
net/ipv4/tcp_input.c: * all the algo is pure shit and should be replaced
net/ipv4/ah4.c: case 0x85: /* Some "Extended Security" crap. */
net/ipv4/ip_input.c: * new frame it queues. Still crap because
net/ipv4/ip_input.c: /* When the interface is in promisc. mode, drop all the crap
net/ipv6/netfilter/ip6t_REJECT.c: This means that the ip6tables jump stack is now crap. We
net/ipv6/netfilter/ip6_tables.c: duprintf("Valid hook crap: %08X vs %08X\n",
net/core/skbuff.c: /* Fuck, we are miserable poor guys... */
net/irda/irnet/irnet.h: * instances on demand (no /dev/ircommX crap) and to allow linkname
net/appletalk/ddp.c: * Size check to see if ddp->deh_len was crap
net/llc/llc_input.c: * When the interface is in promisc. mode, drop all the crap that it
net/sched/sch_cbq.c: BTW cbq-2.0 has a crap in this
sound/pci/maestro3.c:/* XXX fix this crap up */
sound/pci/es1968.c: /* parallel in crap, see maestro reg 0xC [8-11] */
sound/pci/au88x0/au88x0_core.c: // FIXME: get rid of this crap.
sound/pci/cs46xx/dsp_spos_scb_lib.c: /* !!!! THIS IS A PIECE OF SHIT MADE BY ME !!! */
sound/aoa/soundbus/i2sbus/i2sbus-core.c: * useless crap (ugh ugh ugh). We work around that here by calling
sound/oss/trident.c: * crap documentation), perhaps broken ? */
sound/oss/uart6850.c: * Status: Testing required (no shit -jgarzik)
sound/oss/opl3.c: * What the fuck is going on here? We leave junk in the beginning
sound/oss/i810_audio.c: * Adjust for misclocked crap
sound/oss/i810_audio.c: * Adjust for misclocked crap
sound/oss/via82cxxx_audio.c: /* accounting crap for SNDCTL_DSP_GETxPTR */</linux>

some of those are hilarious 😀

Horrible or Terrible
# cd /usr/src/linux; egrep -ir "( horrib)|( terrib)" *
arch/m68k/math-emu/multi_arith.h: probably eliminate this horribly wasteful loop. I will
arch/m68k/lib/checksum.c: * Fixed some nasty bugs, causing some horrible crashes.
arch/m68k/kernel/sys_m68k.c: * This is really horribly ugly.
arch/sparc/mm/srmmu.c: * horrible eh? But wait, after extensive testing it appears
arch/sparc/kernel/sys_sparc.c: * This is really horribly ugly.
arch/sparc/kernel/wuf.S:/* Don't touch the above registers or else you die horribly... */
arch/sparc/kernel/pcic.c: * We do not use horrible macros here because we want to
arch/ia64/ia32/ia32priv.h: implementation specific libraries for optimization. Not terribly
arch/um/sys-ppc/Makefile:# the asm link is horrible, and breaks the other targets. This is also
arch/um/sys-i386/syscalls.c: * This is really horribly ugly.
arch/frv/lib/checksum.c: * Fixed some nasty bugs, causing some horrible crashes.
arch/frv/kernel/sys_frv.c: * This is really horribly ugly.
arch/mips/kernel/signal.c: * Horribly complicated - with the bloody RM9000 workarounds enabled
arch/mips/kernel/signal32.c: * Horribly complicated - with the bloody RM9000 workarounds enabled
arch/mips/kernel/syscall.c: * This is really horribly ugly.
arch/mips/Kconfig: # Horrible source of confusion. Die, die, die ...
arch/v850/kernel/syscalls.c: * This is really horribly ugly.
arch/sparc64/kernel/sys_sparc.c: * This is really horribly ugly.
arch/arm/plat-omap/gpio.c: * horribly racy, but it's the best we can do to work around
arch/arm/mach-ixp2000/ixdp2x00.c: * a driver on each NPU will try to manage it and we will have horrible
arch/arm/mach-ebsa110/io.c: * Luckily, the work-around for this is not too horrible. See
arch/arm/kernel/sys_arm.c: * This is really horribly ugly.
arch/cris/arch-v10/kernel/kgdb.c: part of the code in order to avoid horrible addressing modes. */
arch/cris/kernel/sys_cris.c: * This is really horribly ugly. (same as arch/i386)
arch/ppc/boot/simple/pci.c: * This isn't a terribly fancy algorithm. I just map the spaces from
arch/ppc/kernel/setup.c: * This 0x10000 offset is a terrible hack but it will go away when
arch/sh/mm/tlb-nommu.c: * Nothing too terribly exciting here ..
arch/sh/drivers/pci/ops-dreamcast.c: * wouldn't make it terribly far through the PCI setup anyways.
arch/sh/oprofile/op_model_sh7750.c: * profile for too horribly long.
arch/sh/kernel/sys_sh.c: * This is really horribly ugly.
arch/x86/kernel/apm_32.c: * disabled before the suspend. Linux used to get terribly confused by that.
arch/x86/kernel/cpu/cyrix.c: * If this breaks your GX1 horribly, please e-mail
arch/x86/kernel/sys_i386_32.c: * This is really horribly ugly.
arch/sh64/kernel/unwind.c: * Finding the previous stack frame isn't horribly straightforward as it is
arch/sh64/kernel/sys_sh64.c: * This is really horribly ugly.
arch/m32r/kernel/sys_m32r.c: * This is really horribly ugly.
arch/h8300/lib/checksum.c: * Fixed some nasty bugs, causing some horrible crashes.
arch/h8300/kernel/sys_h8300.c: * This is really horribly ugly.
arch/powerpc/platforms/cell/spider-pic.c: /* Now do the horrible hacks */
arch/powerpc/kernel/syscalls.c: * This is really horribly ugly.
arch/s390/kernel/compat_linux.c: * This is really horribly ugly.
arch/s390/kernel/sys_s390.c: * This is really horribly ugly.
arch/m68knommu/lib/checksum.c: * Fixed some nasty bugs, causing some horrible crashes.
arch/m68knommu/kernel/sys_m68k.c: * This is really horribly ugly.
arch/alpha/kernel/osf_sys.c: a terribly broken way to program.
block/ll_rw_blk.c: * size, something has gone terribly wrong
Documentation/unicode.txt:since they are horribly vendor-specific. This, of course, is an
Documentation/unicode.txt:excellent example of horrible design.
Documentation/lguest/lguest.c: * something went terribly wrong. */
Documentation/DocBook/kernel-hacking.tmpl: it is horrible and worse: division and multiplication does not work
Documentation/DocBook/videobook.tmpl: terribly useful to anyone.
Documentation/scsi/ibmmca.txt: 1) I passed a horrible weekend getting mad with NMIs on kernel 2.2.14 and
Documentation/sound/oss/README.OSS:in some systems but is likely to cause terrible noise on some other systems.
Documentation/sound/oss/README.OSS:are terrible), just modify ssinit.c to use another microcode file and try
Documentation/sound/oss/README.OSS:Some MAD16 based cards may cause feedback, whistle or terrible noise if the
Documentation/svga.txt:off by default as it's a bit unreliable due to terribly bad PC design. If you
Documentation/pci-error-recovery.txt:isn't terribly complex). That means some IRQ latency for other devices
Documentation/filesystems/inotify.txt: Signals are a terrible, terrible interface for file notification. Or for
drivers/pci/pci-driver.c: * horrible the crap we have to deal with is when we are awake...
drivers/pci/hotplug/cpqphp_pci.c:#include "../../../arch/x86/pci/pci.h" /* horrible hack showing how processor dependent we are... */
drivers/pci/hotplug/ibmphp_pci.c: err ("strange, cannot find bus which is supposed to be at the system... something is terribly wrong...\n");
drivers/pci/hotplug/ibmphp_res.c: debug ("something terribly wrong. Cannot find parent bus to the one to remove\n");
drivers/pci/hotplug/cpqphp_core.c:#include "../../../arch/x86/pci/pci.h" /* horrible hack showing how processor dependent we are... */
drivers/lguest/core.c: /* All long-lived kernel loops need to check with this horrible
drivers/char/hvcs.c: * throw us into a horrible recursive echo-echo-echo loop.
drivers/input/serio/i8042-x86ia64io.h: * die horrible death on reboot.
drivers/input/serio/hp_sdc.c: * compared to the CPU. This should not be too horrible most of the time,
drivers/input/mouse/psmouse-base.c: * Some boxes, such as HP nx7400, get terribly confused if mouse
drivers/video/sis/init.c: /* Terrible hack, but correct CRTC data for
drivers/scsi/NCR53C9x.c: /* Check for partial transfers and other horrible events. */
drivers/scsi/NCR53C9x.c: * we could die horribly! I used to have the sg
drivers/scsi/NCR5380.c: seems to be no terribly good way of doing this on a 5380 under all
drivers/scsi/NCR5380.c: the usual exit conditions are not met. Not a terribly clean or
drivers/scsi/aic7xxx_old/aic7xxx.seq: * In order for this to be reliable, we have to do all sorts of horrible
drivers/net/acenic.c: * Nothing terrible happens, if we load wrong size.
drivers/net/ne2k-pci.c: /* This looks like a horrible timing loop, but it should never take
drivers/net/eepro.c:/* The horrible routine to read a word from the serial EEPROM. */
drivers/net/ibm_newemac/core.c: * not terribly harmful)
drivers/net/lib8390.c: * card means that approach caused horrible problems like losing serial data
drivers/net/tulip/winbond-840.c:A horrible bug exists in the transmit FIFO. Apparently the chip doesn't
drivers/net/tulip/winbond-840.c: /* Work around horrible bug in the chip by marking the queue as full
drivers/net/tulip/eeprom.c: return; /* Horrible, impossible failure. */
drivers/net/tulip/eeprom.c: return; /* Horrible, impossible failure. */
drivers/net/tulip/tulip_core.c: /* bugfix: the ASIX must have a burst limit or horrible things happen. */
drivers/net/atl1/atl1_main.c: * Fix TSO; tx performance is horrible with TSO enabled.
drivers/net/wan/z85230.c: * The caller must hold sufficient locks to avoid violating the horrible
drivers/net/3c501.c: Do not purchase this card, even as a joke. It's performance is horrible,
drivers/net/appletalk/ltpc.c: * anything terribly complicated -- it pretends to be an ether device
drivers/media/video/pvrusb2/pvrusb2-sysfs.c: This next batch of horrible preprocessor hackery is needed because the
drivers/mtd/maps/sa1100-flash.c: the chance, and this leads to horrible problems
drivers/atm/firestream.c:/* It seems the ATM forum recommends this horribly complicated 16bit
drivers/pnp/pnpbios/bioscalls.c: * PnP BIOSes are generally not terribly re-entrant.
drivers/pnp/pnpbios/bioscalls.c: * Note that some PnP BIOSes (e.g., on Sony Vaio laptops) die a horrible
drivers/parisc/iommu-helpers.h: /* Horrible hack. For efficiency's sake, dma_sg starts one
drivers/usb/serial/usb-serial.c: /* BEGIN HORRIBLE HACK FOR PL2303 */
drivers/usb/serial/usb-serial.c: /* END HORRIBLE HACK FOR PL2303 */
drivers/isdn/i4l/isdn_net.c: * The solution is horribly but it runs, so what:
drivers/pcmcia/m32r_pcc.c:/* this is horribly ugly... proper locking needs to be done here at
drivers/pcmcia/i82365.c:/* this is horribly ugly... proper locking needs to be done here at
drivers/pcmcia/m32r_cfc.c:/* this is horribly ugly... proper locking needs to be done here at
drivers/serial/8250.h: * Digital did something really horribly wrong with the OUT1 and OUT2
drivers/ata/pata_qdi.c: * libata. While the QDI6580 was 'neat' in 1993 it is no longer terribly
fs/ntfs/layout.h: * horrible thing to do as it would trash our current driver implementation. )-:
fs/ntfs/namei.c: * architectures is usually 64 bits so it would all fail horribly on huge
fs/ocfs2/dlm/dlmmaster.c: /* ok, something horribly messed. kill thyself. */
fs/ocfs2/cluster/quorum.c:/* this is horribly heavy-handed. It should instead flip the file
fs/isofs/inode.c: * then we have horrible problems with trying to piece together
fs/hpfs/dnode.c: * It's easy to read but terrible to write.
fs/namei.c: * checks. It's a horrible hack to work around the braindead sysfs
fs/ncpfs/inode.c: a terrible hack, but I do not know
include/asm-arm/arch-pxa/hardware.h: especially if it is a variable, otherwise horrible code will result. */
include/asm-arm/arch-s3c2410/irqs.h: * and we don't end up having to do horrible things to the
include/asm-x86/apicdef_64.h: * the local APIC register structure, memory mapped. Not terribly well
include/asm-x86/string_32.h: * This looks horribly ugly, but the compiler can optimize it totally,
include/asm-x86/apicdef_32.h: * the local APIC register structure, memory mapped. Not terribly well
include/asm/apicdef_64.h: * the local APIC register structure, memory mapped. Not terribly well
include/asm/string_32.h: * This looks horribly ugly, but the compiler can optimize it totally,
include/asm/apicdef_32.h: * the local APIC register structure, memory mapped. Not terribly well
include/asm-v850/bitops.h: to use a real constant value. This is horrible, and ultimately
include/asm-v850/processor.h: * The only places this is used seem to be horrible bletcherous kludges,
include/asm-xtensa/system.h: * This only works if the compiler isn't horribly bad at optimizing.
include/linux/dccp.h: This mapping is horrible, but TCP has
include/linux/serialP.h: * Digital did something really horribly wrong with the OUT1 and OUT2
include/linux/sunrpc/svc.h: * change the number of threads. Horrible, but there it is.
include/linux/bitmap.h: * Otherwise many inlines will generate horrible code.
include/asm-m68k/page.h:/* This #define is a horrible hack to suppress lots of warnings. --m */
include/asm-ia64/elf.h: implementation specific libraries for optimization. Not terribly
include/asm-mips/dma.h:/* Horrible hack to have a correct DMA window on IP22 */
include/asm-sparc/io-unit.h: * XXX some horrible hwbugs though, so be careful. -DaveM
mm/slob.c: * however to avoid the horrible mess in include/linux/mm_types.h, we'll
mm/memory.c: * There's a horrible special case to handle copy-on-write
mm/truncate.c: * the VM. Can you say "ext3 is horribly ugly"? Tought you could.
net/netfilter/nf_conntrack_extend.c:/* Horrible trick to figure out smallest amount worth kmallocing. */
net/ipv4/ipvs/ip_vs_lblc.c: * Martin Hamilton : fixed the terrible locking bugs
net/ipv4/ipconfig.c: * seems to be a terrible waste of CPU time, but actually there is
net/irda/irttp.c: * because it has horrible latency. No tasklets
net/packet/af_packet.c: * of horrible races and re-entrancy so we can forget about it
net/econet/af_econet.c: * of horrible races and re-entrancy so we can forget about it
sound/oss/ad1848.c: /* Still hanging here. Something must be terribly wrong */
sound/ppc/awacs.c: /* Sorry for the horrible delays... I hope to get that improved

Openvpn – MULTI: bad source address from client – solution

Problematic Configuration:
OpenVPN server config:
dev tun
port 1194
proto udp
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
persist-key
persist-tun
server 10.8.0.0 255.255.255.0
keepalive 10 30
client-to-client
comp-lzo
ifconfig-pool-persist ipp.txt
status /etc/openvpn/openvpn-status.log
verb 3
push "redirect-gateway"

OpenVPN client config:
dev tun
client
proto udp
persist-tun
persist-key
resolv-retry infinite
mute-replay-warnings
remote REMOTE.HOST 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 3

The problem:
Using the above config files I continuously got errors like this on the server syslog:

May 1 00:00:00 hostname ovpn-openvpn[22563]: client1/X.Y.Z.W:1194 MULTI: bad source address from client [10.10.1.11], packet dropped

where X.Y.Z.W is my public IP and 10.10.1.11 is the Lan IP of the machine that makes the connection to the openvpn server.

The solution:
OpenVPN server config:
dev tun
port 1194
proto udp
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
persist-key
persist-tun
server 10.8.0.0 255.255.255.0
keepalive 10 30
client-to-client
comp-lzo
ifconfig-pool-persist ipp.txt
status /etc/openvpn/openvpn-status.log
verb 3
push "redirect-gateway"
client-config-dir ccd
route 10.10.1.0 255.255.255.0

Then I created the /etc/openvpn/ccd/ dir and put inside a file named client1 with the following contents:
# cat /etc/openvpn/ccd/client1
iroute 10.10.1.0 255.255.255.0

Client configuration stays the same.

All should be fine now and in your server logs you will now see entries like this:

May 1 00:00:00 hostname ovpn-openvpn[27096]: client1/X.Y.Z.W:1194 MULTI: Learn: 10.10.1.11 -> client1/X.Y.Z.W:1194

Hint: If you want your clients to be able to access the internet through the VPN tunnel you _must_ create NAT.
a typical config on a debian acting as the OpenVPN server:
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address A.B.C.D
netmask 255.255.255.0
gateway A.B.C.E
network A.B.C.0
broadcast A.B.C.255
post-up iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.1/24 -j MASQUERADE
post-up echo 1 > /proc/sys/net/ipv4/ip_forward

jailkit-2.3 ebuild patch fix for sunrise overlay

There’s an ebuild for jailkit version 2.3 on sunrise overlay. Unfortunately it has a bug that can cause severe headaches. It patches your /etc/shells in a VERY wrong way so that you can easily end up _only_ with /usr/sbin/jk_chrootsh inside /etc/shells. This can lock you out of your machine!

This behaviour is due to a patch that comes with the ebuild named: jailkit-2.3-destdir.patch.
In order to fix this behavior, I’ve patched the patch so that it works as it should. Now it just adds “/usr/sbin/jk_chrootsh” under all the previous shells you had in your /etc/shells file.

Full File: jailkit-2.3-destdir.patch
Patched File: jailkit-2.3-destdir.patch.patch (wonderfull name :P)

shell history meme

Since I am not using bash but zsh, I had to modify the notorious command to suit me:
% cat .zsh_history| awk '{a[$1]++ } END{for(i in a){print a[i] " " i}}'| sort -rn|head
404 vim
363 mv
295 cd
226 ls
209 scp
189 rm
176 dig
170 mplayer
164 eix
163 svn

PGP Keysigning Party στη Θεσσαλονίκη

*UPDATED με ώρα/μέρος*

Την Τετάρτη 23 Απριλίου του 2008 στη Θεσσαλονίκη θα διεξαχθεί συνάντηση για συλλογή/ανταλλαγή υπογραφών σε pgp/gpg κλειδιά. Για τη συμμετοχή σας θα χρειαστείτε κάποιο επίσημο έγγραφο που να πιστοποιεί την ταυτότητα που αντιστοιχεί στο κλειδί σας, και αρκετά αντίγραφα από το ψηφιακό δακτυλικό αποτύπωμα του κλειδιού σας και του ονόματός σας γραμμένα σε χαρτί.

Περισσότερες πληροφορίες για τη διαδικασία που θα ακολουθηθεί (Informal Method Party) υπάρχουν εδώ.

Το ακριβές μέρος και η ώρα θα ανακοινωθούν μέσα τις επόμενες μέρες.
Το meeting θα γίνει μάλλον σε cafe της πόλης ώστε να μπορέσουμε να συζητήσουμε και να γνωριστούμε καλύτερα.

Όσοι πιθανώς ενδιαφέρονται ας κάνουν ένα comment εδώ ή στο blog του Πάτροκλου για να μετράμε συμμετοχές έστω και στο περίπου.

*Update*
Ημερομηνία συνάντησης: Τετάρτη 23/04/2008
Ώρα: 16:30
Μέρος: Καμάρα Θεσσαλονίκης

Gentoo baselayout-2 and openrc impressions

*updated*
one word: _amazing_.

The first thing someone notices is the speed difference. It is BIG.
Just take a look at the following 2 graphs from the same machine and judge on your own:

Baselayout: 1.12.11.1

Baselayout: 2.0.0

55->29 seconds!!!! Impressive!

Machine specs described here: http://www.void.gr/kargig/blog/2007/08/16/iloog-706-on-sony-vaio-pcg-sr21k/

I haven’t done any thorough tests on it yet, but I will certainly do. Great job roy marples! Thans a lot!

Tip: to get bootchart working when you have baselayout-2 installed add: init=/sbin/bootchartd to your kernel line in grub. Else you will face problems getting it to work.

*UPDATE*
Baselayout: 2.0.0 with kernel 2.6.24 + running prelink.

25 Seconds!! that’s less than 50% of the original 55seconds boot process!

Greek gentoo users unite!

Aggelos Orfanakos, one of the two greek gentoo developers, has created a google map where every gentoo user in Greece can place his coordinates so we can easily spot each other and maybe “create” a community, do some meetings and have some fun 🙂

You are all welcome to join!

Gentoo Users in Greece

playing with QR codes

While fooling around on the net today I bumped into QR codes. I had seen them on some contact cards and some websites before, but I didn’t really pay any attention back then.

Creating a code is easy, there are a bunch of ways to do it. Nokia has a generator offering two modes, Datamatrix (default) and QR (look at the bottom of the page): http://mobilecodes.nokia.com/create.jsp.

Reading the code is quite easy too. You just need a code reader for your mobile phone. Nokia’s reader couldn’t work on my Nokia N70 but Kaywa Reader worked just fine. Go the their site, login with bugmenot and download the reader for your own mobile phone.

Then just play with it.

Here’s how it looks like:

Weird(?) thing is that I couldn’t find any applications for linux (open source if possible) to able to “ocr” the images and provide output of the code inside them. Do you know any ?

Another WD failure – not an april fool’s joke

In one of my previous posts (titled: It’s official: Western Digital hates me and I hate them too) I described how 3 Western Digital drives I owned crashed in 2 months.

Last week I left the city I live to go to Athens, Greece where fosscomm was taking place. When I returned I checked the logs of my machines and in one of them I found this:


hdi: lost interrupt
hdi: status error: status=0x51 { DriveReady SeekComplete Error }
hdi: status error: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
hdi: no DRQ after issuing MULTWRITE_EXT
hdi: status error: status=0x51 { DriveReady SeekComplete Error }
hdi: status error: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
hdi: no DRQ after issuing MULTWRITE_EXT
hdi: status error: status=0x51 { DriveReady SeekComplete Error }
hdi: status error: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
hdi: no DRQ after issuing MULTWRITE_EXT
hdi: status error: status=0x51 { DriveReady SeekComplete Error }
hdi: status error: error=0x04 { DriveStatusError }
ide: failed opcode was: unknown
pdc202xx_new: Primary channel reset.
hdi: no DRQ after issuing MULTWRITE_EXT
ide4: reset: success
hdi: dma_timer_expiry: dma status == 0x21
hdi: DMA timeout error
hdi: dma timeout error: status=0x80 { Busy }
ide: failed opcode was: unknown
hdi: DMA disabled
pdc202xx_new: Primary channel reset.
ide4: reset: success
hdi: lost interrupt
md: super_written gets error=-5, uptodate=0
raid5: Disk failure on hdi1, disabling device. Operation continuing on 5 devices

This the fourth crashed WD drive in 2 months! It’s not an april fool’s joke.. it’s still 31st of March..


Model Family: Western Digital Caviar SE family
Device Model: WDC WD2000JB-55GVA0
Serial Number: WD-WCALL1025118

Of course it’s out of warranty. Again.

As Fuzz said, this whole thing must be a logic timebomb planted inside WD disks years ago to force us move to SSD drives.

I’m getting pretty tired of it though…

My current desktop

Since sotiris asked, here’s a recent desktop screenshot.

Ok it’s not so recent (12/Nov/2007)…but it hasn’t changed at all since then 😛

It’s Fluxbox with ROX Desktop and of course it’s Gentoo! 😀

Interested in what comzeradd, agorf and Charmed[] have for desktop ?

It’s official: Western Digital hates me and I hate them too

About a month ago one of the hard disks in my PC started showing DMA errors on syslog. It was a Western Digital WD1200JB with manufacture date: 13 MAR 2002. Luckily on that disk I only kept temporary data like downloads, some music and videos, and some pretty old backups. As soon as I saw the DMA errors on syslog I placed a spare 200Gb drive on the box and tried to rsync all data to it. I saved most of the needed data but I lost some of my old backups. The case is that I didn’t really know what was inside them, there were some directories named like: “/Backups/OLD/foobar/backup_older/random_crap”. I guess it was crap after all. I never needed anything from inside that directories for at least the last couple years.

2 weeks ago I returned from a trip to Athens. I checked my mails where I get reports from ossec on various servers I manage. One of these mails reported that a RAID5 array with 6x200Gb disks was degraded due to a hard disk failure. Yes, it was a Western Digital, again. Model Number:WD2000JB, manufacture date: 26 AUG 2004. I had another 200Gb drive at home where I keep my backups. Since I couldn’t afford the risk of not having a spare disk for my home backups, I bought a Seagate ST3500320AS. Since the new disk was 500Gb I copied all my data from the “spare” 200Gb disk and also made a full backup of my boot disk which is 120Gb. I then replaced the faulty 200Gb on the server with the “spare” 200Gb drive I had at home.

On Thursday I came back from an one-week trip, this time to my hometown. All was fine until Friday noon. Then I tried to open a text file inside my home dir (which is a seperate partition on my boot disk) that I keep some random notes and the machine started crawling. I couldn’t open the file. I tried to copy the file to another disk without success. I only got some beautiful I/O errors on the terminal and DMA errors on the syslog. Guess what! The disk was a Western Digital 1200JB with manufacture date: 14 DEC 2001. Under different circumstances I would cry at my bad luck…but the only thing I could do was laugh. I couldn’t stop laughing about this mess. I placed the 500Gb Seagate on a external USB case and started to rsync the root dir on top of my 2 weeks ago rsync. A couple of files couldn’t be read from the boot disk but they were already on the “backup” so I saved everything. Since I had no spare disk left at home I went out and bought another hard disk. I couldn’t find any 250 or 320Gb Seagate drives so I bought another 500Gb Seagate ST3500320AS. What was funny was that the salesman at the local store tried to convince me to buy a Western Digital 320Gb without success of course, I wonder why…
I placed the new 500Gb disk in my box, booted iloog, partitioned the disk and rsync-ed my data from the “old” 500Gb disk to the new.

YES, I am using smartctl/smartd on all of my boxes even at home. Smartctl was not showing ANY errors at all before the first DMA errors appeared on syslog. I am regularly testing all my disks with smartctl’s tests: short, long and conveyance (where it’s supported)

The first disk is in complete unusable form right now. I tried partitioning it and formatting it but it moans painfully when it is accessed. It currently shows more than 100 S.M.A.R.T. errors. It’s dead.
The second one has about 4-5 S.M.A.R.T. errors logged. It doesn’t make any strange noises when operating but I haven’t extensively tested it yet. It surely cannot be trusted…
The third disk has bad sectors and about 20 S.M.A.R.T. errors. Most of them were “created” during the check for bad blocks process and every time a bad arrea is accessed more errors are added to the log. During operation it makes an annoying sound which is like scratching metal parts against each other.
Funny thing is what smartcl reports for all disks, even for the first one:

SMART overall-health self-assessment test result: PASSED

I am well aware that all disks were over their guarantee (3 years), that’s why I was keeping backups (of important stuff) over separate disks, but I don’t think I’ll be buying any Western Digital drives in the near future…I need some time to get over this month of crashes…

Any other Western Digital haters out there ?