I got an Asus EeePC for Christmas. As a long time Linux user the pre-installed Windows XP version had a very short life, something around ten minutes to check that the hardware is working. In general installing Linux is not very hard, actually the harder part was to build the install USB stick, as the EeePC has no disk drive. But first a few sentences about the EeePC.
The device is small and looks cute so the girl acceptance level is pretty high as my personal girl acceptance level test girl confirmed. It just feels right. The weight is alright, 1.1kg is fair enough. Three USB slots, one more than my Apple Mac Book, so good too. VGA out, fine, SD card slot, alright, not that I need it but … RaLink WiFi chip, Gigabit network, built-in web cam, Bluetooth, synaptics touch pad. That’s pretty good, sounds like a complete computer, doesn’t it? The display resolution is 1024×600 – good for such a small device.
As as result of the overall size, the keyboard is of course small too. Also I’m now writing this entry on it, it takes some time to get used to it. The position of the pipe/less/greater-key is annoying as it can only be reached in combination with the fn modifier key. This is not very convenient for a programmer. The rest of the layout is more or less standard and it doesn’t take so long to not miss every key.
When I tried Bluetooth the first time, the device was not detected at all. Neither on Windows nor on Linux. But while changing other stuff I found out that the Bluetooth adapter was disabled in the BIOS. It is a nice feature to allow to hard disable some features in the BIOS but disabling anything by default seems not like the most clever idea. So please fix, Asus.
Sadly the EeePC suffers a heat problem. If you stress it a bit it gets really hot on the downside (like the Mac Books). So don’t put it on your naked thigh.
I have the model with two solid state discs which makes a total of 12GB disk space. Not very much but enough for my use cases (and I always wanted to have a SSD based device). I decided to go with Ubuntu:http://ubuntu.com also I normally prefer Gentoo because of the size. Source base distributions like Gentoo don’t differentiate between the actual packages and the header files so a complete Gentoo installations takes a lot more disk space than any binary distribution. Additionally, it was Christmas evening and I wanted something quick. While Gentoo is flexible, it is not quick to install.
Although I chose Ubuntu, I would roughly guess that Fedora or SuSE would work fine too, please leave a comment if you have an experience to share.
I chose Ubuntu mainline, not Eeebuntu because I want to have the latest and greatest Ubuntu and I can configure my panel myself.
Before you read on further make sure you understand that this is not about a dual boot installation. I completely removed the Windows system, so please make sure this is what you want too.
First of all we need a boot medium. There is an SD card slot and a number of USB ports, so the alternatives are USB disk drive, SD card, USB stick. I chose the latter but the rest should work too. Creating an USB boot stick requires a bit of manual work: download the Ubuntu Intrepid Ibex (8.10) ISO image for 32bit computers (Atom CPU) then:
cat /usr/share/syslinux/mbr.bin > /dev/sdX
syslinux -s /dev/sdX1
mount -o loop <iso> /mnt/iso
mount /dev/sdX1 /mnt/stick
cp /mnt/iso/.* /mnt/stick
mv /mnt/stick/dists/intrepid /mnt/stick/dists/stable
mv /mnt/stick/syslinux /mnt/stick/isolinux
mv /mnt/stick/isolinux/syslinux.cfg /mnt/stick/isolinux/isolinux.cfg
Now the USB boot stick is ready. Just plug it in, type F1 to select the boot menu, choose the stick as the boot medium, boot from it and install Ubuntu as usual. Everything is detected and configured correctly including the synaptics touch pad, web cam and screen. The only missing components are the WiFi adapter and the specials keys. The keys generate ACPI events so it should not be hard to get them running. However, I don’t use specials keys so I don’t care.
The WiFi adapter is a RaLink RT2860 and RaLink provides a driver for it. You could download and manually compile this driver but I found it more convenient to have specific package for it.
The linux-eeepc-lean kernel from array.org works really well and includes support for the RaLink WiFI adapter. Just follow the setup instructions to install it. Then boot the new kernel and, if everything works fine, edit /boot/grub/menu.lst to use the eeepc lean kernel as the default kernel. The Ubuntu installation is now done, enjoy!
The scenario: my RAID crashed because I’ve messed around with the partition table of one of the disks in there. This results in a RAID array not being able to assemble itself because the superblock of the messed up device is invalid. The trick is pretty easy: just recreate the whole RAID with
mdadm. The existing metadata will not be overwritten, the current information is just replicated. I used to have a simple RAID1, but I’ve now recreated it as an incomplete RAID5 (
--raid-devices=2) as the missing disk is soon to be bought.
$ mdadm --create /dev/md0 --level=5 --raid-devices=2 /dev/<original> /dev/<crashed>
If you like to stick with a RAID1, and not doing the migration to RAID5 along the way, just use
--level=1 instead. I’m not really sure if the order of the disks matter and I’m not brave enough to find it out.
Tomorrow I’m going to buy the next disk for the RAID to make sure the redundancy level is alright. Generally I’m pretty amazed that this kind of setup is so robust. Even me messing around with it can’t bring it down.
Thanks to the heros on the Mactel list I have sound again. If you use Linux on a MacBook of the third generation and your soundcard has been detected but just no sound will come out, putting the following in /etc/modprobe.conf (on Gentoo: /etc/modprobe.d/alsa and modules-update afterwards) should fix the problem. Please reboot or reload snd-hda-intel after changing the configuration. NOTE: it has been reported to work fine on MacBook Pro’s too.
options snd-hda-intel index=0 model=mbp3
Ubuntu does a lot of patching on free software/open source projects. This patches are often really helpful but they were hard to find in the past. This has changed now as there is a location to browse applied patches by packages. Thanks, Ubuntu!
Next time I when try to set up a huge display as an external monitor for my MacBook, I will use DVI, not VGA. Because DVI works wonderfully, VGA does not. This enables the display above the builtin LCD (left or right is not possible with current intel drivers, because maximum virtual screen size is 2048×2048):
xrandr --ouput TMDS-1 --auto --above LVDS
Sometimes after plugging in xrandr does not list the correct resolution for the external device. In that situation you need to create them by hand. The following three-liner does all the work for you:
xrandr --newmode "1680x1050" 149.00 1680 1760 1944 2280 1050 1050 1052 1089 xrandr --addmode TMDS-1 1680x1050 xrandr --output TMDS-1 --mode 1680x1050 --above LVDS
First of all, you need hal from the 0.5.9-serie, then fetch madwifi-hal-0.9.20.3-current.tar.gz and my patch (adapted from http://madwifi.org/attachment/ticket/1315/141-Madwifi-fixes.patch). Apply this patch, ignore the first two chunks, execute make, make install and then reboot. Finally the device ath0 exists which is your wireless device.
A few days ago, SpreadGNOME has been launched. While it is a good idea to split developer-pages and marketing-pages, as like Mozilla does it with mozilla.org and SpreadFirefox, pages like SpreadGNOME should have the appeal of a marketing-page. There should be funky screenshots, big headings, concise texts – the page should give the visitor the impression of cool people, writing sexy software which is much better than the thing he currently uses. Just ask yourself: is this the impression you get when you visit SpreadGNOME?
There is a new design but this does not look like a »The most important thing you miss in your life is using GNOME«-page, sorry. Putting links to a tech-orientated news-portal, a wiki-page for developers and gnome.org is not that imaginative.
As they are calling for suggestions, they could have them:
During my daily work I often heard discussions about how to handle charset properly. What a server must provide to handle charsets correctly, which configuration for Apache is needed, what options must be set in
php.ini to make PHP correctly working, which functions should be avoided when using PHP, which locales must be used and so on. So I want to give a short overview how to sail around common problems in a LAMP-setup.
CONFIG_NLS_UTF8is set to
.UTF-8-suffix. For german feel free to choose
de_DE.UTF-8. Make sure your glibc is provides this locales. To convert current names of files you can just use convmv. For a desktop you must also adjust the font and set a correct TTY-font but this could be ignored for a server which is just administrated via remote shell.
Content-Type-header. Take a look at the output of
wget -S http://usrportage.de, my weblog, which is hosted on Schokokeks.org, a properly configured server (sure!):
wget -S usrportage.de
—21:00:33— http://usrportage.de/ => `index.html’
Resolving usrportage.de… 18.104.22.168
Connecting to usrportage.de|22.214.171.124|:80… connected.
HTTP request sent, awaiting response… HTTP/1.1 200 OK Date: Thu, 13 Jul 2006 19:00:27 GMT Server: Apache X-Powered-By: PHP/5.1.4-pl0-gentoo with Hardening-Patch X-Blog: Serendipity Set-Cookie: PHPSESSID=9da2ded6522851ef8ddc3ebe7590b354; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache X-Serendipity-InterfaceLang: de X-FreeTag-Count: Array Connection: close Content-Type: text/html; charset=UTF-8
Length: unspecified [text/html] [ <=> ] 65,557 250.71K/s
21:00:33 (250.19 KB/s) – `index.html’ saved 
Content-Type: text/html; charset=UTF-8. (You can also the a bug in S9Y, which poorly casts an array, but anyway.) So your browser is notified, that it should send UTF-8 encoded data. That’s the whole secret. To configure Apache properly, make sure the directive
AddDefaultCharsetis set to
$string = utf8_encode( $_POST[‘key’] );
SET NAMES utf8;By the way: have I ever mentioned you should ever use
UTF-8and – anyway – don’t use functions from the ereg-family also they have an
mb_-Prefix. They aren’t binary-safe, that’s all you need to know.
iconvto correct those who are not.
htmlspecialchars()does not reflect PHPs
default_charset-directive but assumes iso-8859-15 as the default charset, which is pretty annoying and should be considered as a bug, from my point of view. So you need to pass
UTF-8as the third parameter to the function to make sure it will work properly with Unicode.
With GNOME 2.14 Avahi, the implementation of the Zeroconf-specification from Freedesktop, is shipped with. It brings the convenient feature to autodetect services. As you can see on the screenshot, it detects a lot of services and provides the possibility to use them on »one-click«. This Zeroconf-technology is looking back to a confusing history: there are two implementations before avahi: howl and mDNS, which both have licensing issues. So the Freedesktop-project brings us a good step forward and it works as easy as you can’t imagine. Licensing issues prevents Ubuntu from integrating howl or mDNS, but let us hope, they will integrate it now.
Build required packages:
Set the USE-flags »avahi«, »bookmarks«, »dbus« and »python« and emerge
net-dns/avahi. Now emerge
x11-misc/service-discovery-applet. After all, rebuild affected packages to reflect the USE-flag change (
emerge -DuN world) and to guarantee full support for avahi.
Start required services on boot
# rc-update add avahi-daemon default
- rc-update add avahi-dnsconfd default
Start required services
# /etc/init.d/avahi-daemon start # /etc/init.d/avahi-dnsconfd start
Getting notified via mail about recent warnings, information messages and error on your Gentoo system is good thing but getting notified via Jabber could be also helpful in some cases. The new notification framework of portage in the current 2.1-serie previews makes it easy and possible to implement somthing like this. To show how easy it is, I did it. You can see the result in the Gentoo Bugzilla. I am utilizing XMPPPY, a friendly Python-library to do so.
How to use?
1.) Install an ebuild of the 2.1-serie of
3.) Copy this file to
/etc/make.conf and set the following options:
PORTAGE_ELOG_JABBERTO="email@example.com firstname.lastname@example.org email@example.com"
I’m proud to provide a new Ejabberd-ebuild to our users. Ejabberd 1.1.1 comes with an important new feature: it supports MySQL natively. I fixed up PostgreSQL-issues in the ebuild and provide now the native drivers for MySQL and PostgreSQL Also I’m happy to mention that NU2M, the company which is involved in Mabber and for which I’m currently working for, is going to release some really interesting Jabber-components, especially for Ejabberd, during the next weeks.
Some months ago I ranted about Gentoo’s Ejabberd-ebuilds and I want to comment another issue: Ejabberd provides support for PostgreSQL via its ODBC-drivers. That’s reflected in the ebuild, there is a postgres USE-flag. That’s generally fine, but helps nothing, ’cause you need the native PostgreSQL-driver from the jungerl-distribution. But: there is no ebuild in portage. Whether you can’t find jungerl nor the native PostgreSQL-driver in portage, which makes the USE-flag buggy one the one hand and completely useless on the other hand. Is it common not to test functionality when adding a USE-flag?
Machte meinen Tag:
From: Georgi Guninski
Subject: [Full-disclosure] Linus mass killing integer overflows
the news is, the benevolant dictator has said “let there be C++”, and there is more secure, full featured, reliable and faster linux kernel written2 mainly in C++. the official release is scheduled for 2.8 or when redhat™ becomes ready for the desktop3, whichever comes first.
key improvements include:
a) integer overflows were PITA for the kernel janitors. once the classes SafeInt and SafeLong were implemented with suitable operators, the new kernel is 100% “int/long too big” free. the refactoring tool made this part easy.
b) some clever abuse of exceptions dramatically reduces the amount of OOPS:
cases like ‘(SafeInt)0=foo->bar()’ are now gracefully catch()ed, killing
c) kernel structures were just lame emulation of C++ objects. now they are native C++ objects.
d) exceptions result in cleaner, easier to read code and almost stop the nasty abuse of “goto”
currently there are discussions for implementing COM in the kernel and/or scripting the kernel from userland, but Linus hasn’t made up his mind yet.
the first public prerelease will be available from ftp://ftp.kernel.org/pub/linux/kernel soon.
My wishlist for 2.8:
-jvm (should boost my swing apps)
-sql support to query kernel table and fs data
-lisp and prolog interpreters (don’t have a use for this but I’m sure somebody will need it)
The kernel folks have taken a seriously wrong turn here. They should have delayed the preview release until the garbage collector was ready. That’s where the real value for these patches starts.
> My wishlist for 2.8:
> -jvm (should boost my swing apps)
agreed. i vote for implementing parrot – http://www.parrotcode.org/ to avoid
perl vs python vs java flames.
> -sql support to query kernel table and fs data
this seems a bad idea. what if a mcse discovers a sql injection in kernelspace? the side effects may be worse than a cake on b1l1.
> -lisp and prolog interpreters (don’t have a use for this but I’m sure
> somebody will need it)
rms likes lisp, so we can count on him.
I’d put jabber.breakmygentoo.net in the vhosts of our ejabberd, so feel free to register a Jabber-account, if you are a BreakMyGentoo-developer. Otherwise you’ll become virtually tared and feathered, you understand?
Also you can join us in firstname.lastname@example.org.