Gentoo Logo
Gentoo Logo Side
Gentoo Spaceship

Contributors:
. Alec Warner
. Alex Alexander
. Alex Legler
. Alexis Ballier
. Andreas Proschofsky
. Andrew Gaffney
. Arun Raghavan
. Ben de Groot
. Bernard Cafarelli
. Bjarke Istrup Pedersen
. Brent Baude
. Caleb Tennis
. Christian Faulhammer
. Christian Zoffoli
. Damien Krotkine
. Daniel Drake
. Daniel Gryniewicz
. Daniel Ostrow
. David Abbott
. David Shakaryan
. Davide Italiano
. Denis Dupeyron
. Diego E. Pettenò
. Donnie Berkholz
. Doug Goldstein
. Gentoo Haskell Herd
. Gentoo News
. Gilles Dartiguelongue
. Greg KH
. Gunnar Wrobel
. Gustavo Felisberto
. Hanno Böck
. Hans de Graaff
. Ioannis Aslanidis
. Jan Kundrát
. Jeffrey Gardner
. Jeremy Olexa
. Joe Peterson
. Jonathan Smith
. Jorge Manuel B. S. Vicetto
. Joseph Jezak
. Josh Saddler
. José Alberto Suárez López
. Kenneth Prugh
. Krzysiek Pawlik
. Lance Albertson
. Luca Barbato
. Luis Francisco Araujo
. Marcus Hanwell
. Mark Kowarsky
. Mark Loeser
. Markos Chandras
. Markus Ullmann
. Mart Raudsepp
. Matthias Geerdsen
. Michael Marineau
. Michal Januszewski
. Mike Doty
. Mike Pagano
. Mounir Lamouri
. Nathan Zachary
. Ned Ludd
. Nirbheek Chauhan
. Olivier Crête
. Patrick Kursawe
. Patrick Lauer
. Patrick McLean
. Paul de Vrieze
. Peter Weller
. Petteri Räty
. Piotr Jaroszyński
. Remi Cardona
. Renat Lumpau
. Rob Cakebread
. Robert Buchholz
. Robin Johnson
. Romain Perier
. Ryan Hill
. Sebastian Pipping
. Serkan Kaba
. Shyam Mani
. Steev Klimaszewski
. Stefan Schweizer
. Steve Dibb
. Stuart Longland
. Sune Kloppenborg Jeppesen
. Sven Wegener
. Thilo Bangert
. Thomas Anderson
. Timothy Redaelli
. Tiziano Müller
. Tobias Klausmann
. Tobias Scherbaum
. Yuval Yaari
. Zack Medico
. Zhang Le

Last updated:
October 07, 2009, 23:03 UTC

Disclaimer:
Views expressed in the content published here do not necessarily represent the views of Gentoo Linux or the Gentoo Foundation.


Bugs? Comments? Suggestions? Contact us: planet@gentoo.org

Powered by:
Planet Venus

Welcome to Planet Gentoo, an aggregation of Gentoo-related weblog articles written by Gentoo developers. For a broader range of topics, you might be interested in Gentoo Universe.

October 05, 2009
Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)

I say “default editor” in quotes because Gentoo really does not have a default editor, but rather a fallback-editor for whenever the users hadn’t chosen one themselves. And this is why stuff like the stage3, sudo, openrc and so on default to that when $EDITOR is unreliable (that is, until we can move to a full-fledged wrapper script).

Paul, in the previous post explained it quite well, albeit briefly, but since some other people asked me about that again, I’ll quote him and then go in a bit more of details:

… Third nano was kept as the default because it is small, straightforward, and easy to get out of when you don’t know it (let’s face it neither vi(m) nor (x)emacs is that easy to get out of). Fourth, by having the EDITOR/VISUAL variables point to nano (which is installed by stage2 as well as stage3) things would be working (although probably not optimal) out of the box. …

Indeed Paul speaks well: neither vi (or vim) nor emacs (or xemacs) is going to work. Why is that? Some people even goes as far to say that “it’s called *vi*sudo“ and “vi is the default Unix editor”. At the same time, I wouldn’t be surprised to hear “Emacs is the default GNU editor”. Well, let’s decompose it in two different problems.

Technical problem: the system set is messy already (and this is also “thanks” to my own pambase creation — which is, though, a solution to a previous problem). The packages that do enter the system set should be, whenever possible, small and with little dependencies. This includes, obviously, USE-optional dependencies, since when they are enabled, the dependencies also become part of the system set (like it happens with gnome and pambase). The dependency tree of nano is near invisible, while those of both vim and emacs are quite long (sure there are things like elvis, nvi, zile and jove, but this will bring us to the next point…).

Reality problem (or flame-retardant method): there is no way on Earth that any average number of people will be accepting to use the same editor as default, when taken from the list of “most popular” editors. Hey we cannot even find consensus among the three developers of lscube (I’m using Emacs – yeah I’m an Emacs user, burn me – and my colleagues using VIM and Eclipse). If we were to choose vim, all Emacsen users will complain, if we were to use GNU Emacs, both vim and XEmacs users will complain, and so on so forth. So we use nano, which is likely to make unhappy the most people, but all in the equal amount.

There’s a corollary to the reality problem above: if we were to choose any of the lightweight variants that I named above, or more of them, most likely the problem would be more or less the same, since almost all people would be pretty unhappy with the choice and would then unmerge that and install their editor of choice. But it would most likely upset the two “main factions” unequally, which would make one feel discriminated against.

Newbie problem: finally, there is another note: both Emacs and VI (and respective clones) aren’t exactly the most user-friendly editors. A newbie user who has no clue how to work in Gentoo is unlikely to guess at first sight how to use either of them, while nano is pretty much the easiest thing you might find around. You can fight as much as you want about powerfulness (Emacs and VI are obviously much more powerful than nano) and you can fight about relative easiness of use (:w versus C-x C-w) but nano is going to win over both of them in that regard.

So no, we’re not going to change the default anytime soon.

Gentoo Linux - Ten Years Compiling: 1999 - 2009 (October 05, 2009, 01:02 UTC)

Happy Tenth Birthday, Gentoo!

Gentoo Linux is proud to announce the immediate availability of a new, special edition LiveDVD to celebrate this monumental occasion. The LiveDVD features a superb list of packages, some of which are listed below.

  • System packages include: Linux Kernel 2.6.30 (with gentoo patches), Accessibility Support with Speakup 3.1.3, BASH 4.0, GLIBC 2.9, GCC 4.3.2. Binutils 2.18, Python 2.6.2, Perl 5.8.8, and more.
  • Desktop Environments and window managers include: KDE 4.3.1, GNOME 2.26.3, Xfce 4.6.1, Enlightenment 0.16.8.15, Openbox 3.4.7.2, Fluxbox 1.1.1, TWM 1.0.4, and more.
  • Office, graphics, and productivity applications include: OpenOffice 3.1.1, G/Vim 7.2.182, Abiword 2.6.4, GNUCash 2.2.9, Scribus 1.3.3.11, GIMP 2.6.4, Inkscape 0.46, Blender 2.49a, XSane 0.996, and much more.
  • Web browsers include: Mozilla Firefox (Minefield) 3.5.3, Arora 0.7.11, Opera 10.0, Epiphany 2.26.3, Galeon 2.0.4, Seamonkey 1.1.17, and other favorites.
  • Communication tools include: Pidgin 2.5.9, Quassel 0.5, Mozilla Thunderbird 2.0.23, Claws Mail 3.7.2, Ekiga 2.0.12, Qtwitter 0.7.1, irssi 0.8.13, and many more.
  • Multimedia applications include: Amarok 2.1.1, MPlayer 1.0_rc4, DvdAuthor 0.6.14, LAME 3.98.2, FFMPEG 0.5_p19928, GNOME-MPlayer 0.9.7, SMPlayer 0.6.6, and several others.

The Gentoo-Ten LiveDVD is available in two flavors, a hybrid x86/x86_64 version, and an x86_64-only version. The livedvd-x86-amd64-32ul-10.0 will work on x86 or x86_64. If your arch is x86, then boot with the default gentoo kernel. If your arch is amd64 boot with the gentoo64 kernel. This means you can boot a 64bit kernel and install a customized 64bit userland while using the provided 32bit userland. The livedvd-amd64-multilib-10.0 version is for x86_64 only.

Please select your architecture to be redirected to a mirror for download: x86amd64

A FAQ is available to assist you. We have also started a thread in our Forum. Please post any bugs you encounter.

In addition, we have some exceptional new artwork from Ben Stedman, and Gentoo Developer Alex Legler.

Thank you for your continued support,

Gentoo Linux Developers, The Gentoo Linux Foundation, and The Gentoo-Ten Project

October 04, 2009
Review progress (October 04, 2009, 22:39 UTC)

In overlay news, we are currently at 75% of completeness for the 2.28 release. Currently reviewed 46 ebuilds, at bit less than 55 to go.

In other news, if you get strange gnupg related failures, head over to bug #275291. We will apply patch we someone from gnome herd has a chance to get around it.

Mounir Lamouri a.k.a. volkmar (homepage, stats, bugs)
Gentoo/PPC needs you ! (October 04, 2009, 21:41 UTC)

Gentoo/PPC team is here to make sure packages are marked stable and are keyworded as soon as possible and without breaking the tree. Unfortunately, we can't manage the flow of bugs coming and the list is growing too quickly.
Stabilizing and keywording is a big work. Fauli have explained it a few weeks ago in a blog entry.

So if you have a PowerPC and you want to help, you can and we will appreciate it !
First of all, look at the Gentoo/PPC testing doc. Some things may be outdated, consider essentially the procedures.

I've made some bug lists to make the life of everybody easier:
- stabilization requests
- keyword requests
- security bugs

Please, refer to the Gentoo/PPC testing doc if you want to help on one of these bugs.

Do not hesitate to come see us on #gentoo-powerpc on freenode.

2009 Gentoo 10 Screenshot Winners (October 04, 2009, 18:02 UTC)

Woot! Happy Birthday Gentoo. As part of the Birthday party today we announce the winning screenshots.

Thanks to everyone who entered the contest. There were 54 entries using 5 different window managers / desktop environments.

The Winners
  1. Quick23t Compiz Fusion
  2. ashtophet Fvwm 2.5.27
  3. Integer Fluxbox

For all the specifications and cool details please visit the winners page.

discuss this!

Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
Explaining the sudo crapfest (October 04, 2009, 17:45 UTC)

Some of you might have noticed that I’ve been attacked in the past few days over a feature change bug (now unrestricted so you all can judge it for what it was) with sudo.

Let’s try to explain what the problem seems to have been with that bug: the sudo ebuild, since a long time ago, when it was maintained by Tavis Ormandy (taviso, of, among other things, ocert fame), changed the default editor used to nano. The reasoning for this is that you have to have a valid default editor in sudo, and that, after all, is what we ship in the stage3 as default editor, and what OpenRC sets as default editor if the user sets nothing else. I kept the same setting because, well, I could see the point in it; and I’m not a nano user, I don’t have a single nano executable on my main running systems: I use GNU Emacs for all my “heavy” editing, and zile (of which I’m a minuscule contributor from time to time) for the smaller stuff.

This is just the default editor used by sudo, but by no definition the only one. Indeed it’s mostly used in two places: visudo and sudoedit. The former, respects the EDITOR variable, with the usual rules, so if your root user has the EDITOR variable set to anything it’ll be used (this is also not a default, we pass explicitly the --with-env-editor option at ./configure); the only place where it’s not used, by default that is, is if you invoke sudo visudo, but not because we set the default to nano, but rather because sudo by default resets the environment. For what concerns sudoedit, it honours the EDITOR variable by default without us doing anything about it.

Why did we ask sudo to explicitly honour the EDITOR variable? Isn’t that unsafe? Well, not really. First of all, sudoedit is a special command that takes care of allowing an user to edit a file without running anything as root user, so the EDITOR will always be fired up with the same permission as the user running it (pretty cool stuff); and for what concerns visudo… if you allow an user to run visudo, they can easily set up their user to do anything at all, so the permission under which EDITOR runs is pretty much moot.

So why did I refuse to use the EDITOR variable in the ebuild? Well the reason is that I hate that particular dirty hack (because a dirty hack it is). Other ebuilds, like fcron, have been doing it, and I don’t like its use there either. The reason is that it makes package building relying on a variable that is not by default saved anywhere, and that might not really be the same between the build and host machines (just as a further example, I have different EDITOR settings between root and my user… if I were to build sudo right now_, with solar’s changes, with my usual method – sudo emerge with envkeep – I would get a build error: EDITOR="emacsclient -c"). If this is really a big concern, the proper solution is to have a proper virtual implementation of the editor: a /usr/libexec/gentoo-editor script that accepts just one parameter (a filename) and relies the call to the currently-selected editor via the EDITOR environment variable. Something like this:

#!/bin/sh

if [ $# != 1 ]; then
    echo "$0 accepts exactly one parameter." >/dev/stderr
    return 1
fi

if [ "x$EDITOR" = "x" ]; then
    echo "The EDITOR variable must be set." >/dev/stderr
    return 1
fi

exec "$EDITOR" "$1"

Note: I wrote this snippet right at my blog, I haven’t tested, checked, re-read it at all.

This would allow ebuilds to properly set a default (or even a forced default!) in their configuration stages, without getting in the way of users’ choices.

Now, this is going to require a bit of work; the reason for that is that you have to make sure that it works standalone, that it works with the packages that would like to use it, and most likely you want to make available a “safe-editor” script as well, to enable eventual safe modes where shell-escape (as well as opening random files) is disabled, for those applications that do open the editor as a different user. Since I have never seen much point in pushing this further (I have a long TODO list of stuff much more important for QA, Gentoo and users as a whole), I haven’t done anything about it before, and I didn’t want to start that. But hey if somebody wanted to contribute it, I would have been the first one making use of it.

Now, how much in the way of users I have been by passing --with-editor=/bin/nano in the ebuild? I would sincerely say very little. Do you want to change the default at build time? Take your “How Gentoo Works” handbook out and look up in the index the topic EXTRA_ECONF. It’s a variable. It allows you to pass further options to econf. Options to ./configure (which is what econf wraps around) are positional: the last one passed is the one that “wins”.

Too much work to use EXTRA_ECONF each time you merge sudo?

# mkdir -p /etc/portage/env/app-admin
# echo 'EXTRA_ECONF=\'$EXTRA_ECONF --with-editor="${EDITOR}"\'' >> /etc/portage/env/app-admin/sudo

It really isn’t that dificult, is it?

And what really ticked me off is users, which, as precious as they are, are still just users (in this case not even a well-known power user) telling me what the “Gentoo way” is… I think I know pretty well the Gentoo way, given I’ve been a major developer for the most part of the past five years, I’m one of those trying his best to keep everything up to date and maintained, I’m the one who’s running his own workstation to make sure that Gentoo packages do build out of the box.

Health status report (October 04, 2009, 16:48 UTC)

For hose who’re still worried after my latest health post I have good news finally. In the past three weeks my blood sugar levels kept between 62 and 118 mg/dL which is definitely not bad. This is, though, while I’m taking both metformin and glibenclamide pills (400+2.5g each meal). I also increased my usual exercise, thanks to Nintendo’s Wii Fit (the best way to stop a geek from being sedentary: give him a chart to follow!).

My eyesight is, though, still fluctuating, although the €65 glasses I bought are definitely useful hen reading, especially stuff written quite small, I’m now using fewer days than I expected them to be used. They are also only for near sight obviously, so I can only use them to read or write, but that’s also fine. After all, they are temporarily and I paid them quite less than the ones I used before, even though the lenses are quite huge.

All in all, I cannot really complain at how things are going, if not for the fact that I’m really sleeping too little, between one thing and another; last night (at the time I’m writing) I was up till 5am to fix my radeon’s driver installation (and I just now remembered that I haven’t opened two bugs for it yet!), and the night before I was up till 3am to prepare charts for some Gentoo-related analysis.

This is mostly why I start to have a short fuse with people who attack me for the work I’m doing. I’m not expecting all the users to be thankful, and I know a lot will always complain about something, see the whole XMMS crap-spreading, but really it gets old after a while, given I’m not paid to do what I do already.

Josh Saddler a.k.a. nightmorph (homepage, stats, bugs)
R700, KMS, 3D, SSD, and other hardware (October 04, 2009, 08:37 UTC)

Gosh, just look at all the buzzwords in the title!

As you may have guessed, I'll be talking a bit about the recent developments on the FOSS drivers for RadeonHD cards, specifically for R700 cards. And some other hardware stuff.

Radeon

Yesterday, October 3, I made some big ol' changes to my workstation.

I decided to try out the new video driver stack that all the kids have been talking about. Kernel Mode Setting, git Mesa/xf86-video-ati/libdrm, git kernel 2.6.32_rc1-git3. All that jazz. I wanted to see if the 3D and KMS features were really working on my RadeonHD 4550 or not. I normally run a stable graphics stack, with ~arch Mesa/x86-video-ati/libdrm where necessary to keep up on 2D acceleration and features.

This was a big leap for me. So I first consulted some of the X11 team members, remi and nirbheek, who were quite helpful. I installed the latest git-sources kernel, which at the time was 2.6.32_rc1-git3. Mike Pagano has since added -git5. Next, I downloaded the individual -9999 ebuilds for the git master packages from the X11 overlay, stuck 'em in my local overlay, and merged 'em. Only thing left to do was reboot.

Lemme tell ya -- KMS in action is awesome. The console output is just beautiful, and there's no more flickering when SLiM and Xfce load.

I did notice some minor graphical corruption of the default mouse pointer. However, the corruption isn't present when using any pointer but the default "arrow", and it also isn't seen when hovering inside a Firefox window. I was told this is because Firefox uses its own cursors. Anyway, I reported the bug upstream.

Disclaimer: I know glxgears isn't a benchmark. But folks always want to know its results anyway. I tried running glxgears, which gave me a result of over 1300FPS with desktop compositing activated. My window manager is xfwm4, so all compositing is via Xrender, not OpenGL. Disabling compositing resulted in a 500FPS boost to over 1800FPS. What's this mean? Who knows. Probably nothing. Moving on.

I took the advice of my fellow developers on IRC and installed quake3-demo. Couldn't run it, though. It blanked the screen, then a message from my LCD firmware appeared, some kind of "input not supported" or "input not detected" error. It slowly repeated the window, drawiing it from center to the top right. I had to Ctrl-Alt-Bksp to get to the console. It also locked up SLiM in the background, pegging one of my CPU cores at 100%. At this point, I rebooted just to test that KMS was still working, then called it a night.

Today, I revisited my pointer corruption bug tried the workarounds posted by Alex Deucher. To my surprise, each one worked! Booting with radeon.modeset=0 removes the glitch, though it makes each boot extremely ugly, of course. Specifying EXANoDownloadFromScreen "true" in /etc/X11/xorg.conf also fixes the corrupted pointer, though it may also be slowing down all screen drawing operations by the tiniest bit. The jury's still out on that one; it may just be my imagination. I decided to keep this second fix, as KMS is just too glorious to throw out. I like pretty boots.

I also revisited quake3-demo, since I found some pointers on the Phoronix forums that had a workaround, which is to run OpenGL applications prefixed by LIBGL_ALWAYS_INDIRECT=1. To my surprise, this worked nicely. I tested resolution has high as 900-something by 720. My screen is 1440x900, but I haven't felt like pushing it that far, yet. The game is fluid and playable. I need to figure out how to display FPS so I can properly record what I'm seeing.

With the success of Q3demo, I remembered that QuakeLive has recently added Linux support. I installed the add-on for Firefox and tried it out. Works nicely, though I'm also running Firefox with LIBGL_ALWAYS_INDIRECT=1 just to be sure. As Alex Deucher and John Bridgman have pointed out on the Phoronix forums, that variable really isn't the safest thing to do, since if something crashes it can take down the whole X server, not just the application. However, it's also the only way I get working 3D games.

QuakeLive is pretty playable, though the framerates in a few places aren't smooth -- I can't tell if this is because of my card's capabilities, or the driver stack, or the whole weird idea of playing a 3D first-person shooter inside a web browser. :) The big problem with QuakeLive is that the sound is terribly distorted: the voices are greatly drawn-out and slowed down, like playing an old tape recorder at 1/4 speed. There are some solutions on the QL forums, but they're mainly for Ubuntu/Pulseaudio users. I haven't found anything that works for me, yet. The effects and music are okay; it's just the voices that lag horribly.

I've also installed the latest Nexuiz, version 2.5.2, in anticipation of future testing. One of these days I'll reinstall UT2004, but I haven't read any succesful reports of that game on R700 cards. There's a lot of testing to do in the future!

Overall, I'm thrilled with the new driver hotness for my ATI card. I bought it specifically because I knew the 2D support at the time was excellent, and because there would be so many good things coming down the way for other features, including 3D acceleration. (Yes, just like the latest XKCD strip. I swear, it's like that guy listens to everything I say and watches everything I do. It's really spooky!)

Hats off to all the developers for making it happen. Many thanks!

SSD

After August's fiasco with a defective SSD, I decided to use my refund from the RMA and order a different SSD a few days ago. This time I've settled on a SanDisk enterprise SSD from an HP blade server. Only cost $49, no shipping charges. Brand new. eBay for the win.

It packs 16GB of SLC flash, which makes it perfect for mounting /usr/portage and /var on it. This way I can feel free to sync whenever I want, instead of only once a week or more. My system drive uses MLC flash, so I've been trying to ease the write load on it, which means putting the high-write activity on a dedicated disk.

The SanDisk SSD "only" has sustained reads/writes at 60MB/sec, but that's plenty for syncing Portage, as the real limiter is not how fast data can be dumped to the disk, but how fast the rsync servers can send it to my box. Same for /var writes -- it's mostly just log files and some tiny temp things, as /var/tmp is already mounted on a RAMdisk. No large files that need >100MB/sec bandwidth. I'm lookin' forward to shovin' it in my box!

More hardware

Since September 28 was my birthday and all, I've been treating myself to various bits of cheap hardware. Like a replacement AC adapter for my DC PicoPSU. The current AC brick is rated at 102W, which is way more than I need, but the problem is that it spins up its tiny fan at only 50%-75% load. This means that opening up a bunch of tabs, compiling packages, playing Quake, watching large-sized Hulu videos and whatnot turns on the fan right away. And it's the world's most annoying fan. It's loud, whiny, it hisses, and it blows the bad smell of very hot electronics out into the room. Lemme tell you, hot plastic and PSU guts do not smell good.

I just ordered a replacement fanless adapter. This thing is high-quality, designed to run very cool. And it's rated at 150W output, meaning it can match my 150W PicoPSU. My max system draw is maybe 60W, but I'll have overhead room in case I ever feel like upgrading a key component somewhere.

I also bought a $40 wireless router, an Asus WL-520gU. I already have a WL-500gP v2, which I hacked and flashed with DD-WRT a long time ago. This new router is so that I can hook up my Xbox 360 to the network without having to run 50 feet of cable across the carpet. I chose the 520gU instead of the gC because the gU supports Xlink Kai, which seems prett cool to me, as I don't have a Gold Live account. Yay for tricky internets. Apparently it's pretty common to buy a cheap wireless router and put it into client mode, rather than buying the $100 official USB dongle . . . which doesn't even support WPA2-AES or any decent security. Asus routers are known for excellent open-source support, and I've had nary a complaint about my current one. Yay for Linux on routers! Yay for online gaming!

* * *

Oh yes, and before I forget, this month's Xfce desktop:

Space ice!

It's October, but my current desktop is so pretty (gallery link) I haven't felt the need to switch for the last couple of weeks. There's another clean version that just shows off the wallpaper in my devspace.

David Abbott a.k.a. dabbott (homepage, stats, bugs)
Podcast 64 The Making Of Gentoo Ten LiveDVD (October 04, 2009, 01:14 UTC)

Happy Birthday Gentoo
livedvd
The 10th anniversary Gentoo LiveDVD was made by the community for the community. It was created with the help of Gentoo developers from around the world and users alike. In this podcast I talk about some of the people and a brief discussion on how it came together.

Full Screenshot
Join us on freenode irc channel #gentoo-ten

LINKS:
Gentoo Ten Team
http://dev.gentoo.org/~dabbott/pr/gentoo-ten-team.txt
Gentoo Ten LiveDVD FAQ
http://www.gentoo.org/proj/en/pr/releases/10.0/faq.xml
Forum Post
http://forums.gentoo.org/viewtopic-t-793820.html
Gentoo Ten Wallpapers
http://www.gentoo.org/proj/en/pr/releases/10.0/graphics.xml

irc network freenode channel #linuxcrazy

LiveDVD (released Oct 4, 2009)
http://www.gentoo.org/main/en/where.xml

Download

ogg

mp3

specs

October 03, 2009
Jeremy Olexa a.k.a. darkside (homepage, stats, bugs)
Re-locating a linode installation (October 03, 2009, 23:02 UTC)

I recently had a bit of downtime on my linode. If you are wondering what a 'linode' is, check out my review or the website. And a big thank you to the folks that used my referral code when they got setup with linode themselves, you guys rock!

So, about my recent 1/2 day downtime. It was self-inflicted because I wanted to move to a different datacenter. I moved my linode from Newark, NJ to Dallas, TX. It is quite a long story, but it boils down to a problem with my ISP (Comcast). I was only able to pull 100K/s from the Newark datacenter and 2-3M/s from the others. This was unacceptable. I tried to get it escalated past Comcast's frontline support but they kept asking me questions like "Do you use a router? If so, each computer only gets 1/2 the speed" & "Every computer is different. I'm glad that you can get 3M/s from another host, that is really good" Sigh.

At least Linode's customer server was helpful and allowed me to work around the ISP. The steps to move a linode are as follows:

  1. File a support request. (My initial request was answered in 11 minutes)
  2. Shutdown your linode
  3. Hit the 'migrate' button, after support sets up your migration
  4. Wait for the transfer. My total transfer time was ~43 minutes (~6G to transfer). This was pretty fast throughput, in my opinion
  5. Meanwhile, update your DNS for your new IP.
  6. Since you can queue up a boot job, I just let it go and checked in on it a couple hours later. Magic, it was online. :)

So, to finish the story off. Linode++, Comcast--. I wish I didn't need to do something like this, I wish my ISP was...I don't know...smart?

Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
Update: Gentoo in commercial environments (October 03, 2009, 18:28 UTC)

I've been busy collecting some really great stories from people using Gentoo in places that I really didn't expect. Some of them want to remain anonymous, which I have no issue with. But there are some gems like this one:

==========
Hey, I'm the CTO of a small company in Sweden, and this is our short 'success story' :-)

blogg.se is a Swedish blogging platform which generate 130 000 new entries, 150 000 comments and 2 500 new accounts on a daily basis. We currently (September 25th, 2009) have a reach of 2,2M unique visitors per week.

Gentoo has always been the preferred OS choice for us. We (the developers) were all attracted by its 'sane' defaults and clean approach to software deployment.

Here at blogg.se we use Gentoo for all our staging, testing and production environments. We have about 30 running instances on 32-bit, 64-bit and KVM-virtualized hardware.

Gentoo (and its wide ecosystem of utils) has been very helpful in helping us plan our environment. We use layman to distribute our own software, Metro for building custom images and a wide range of apps for maintaining our installs.

The collaborative efforts of Gentoo is inspiring and something you want to be a part of. I'm already involved through the Sunrise-overlay and hopefully qualifying as a Gentoo developer some time soon.

Johan Bergström
CTO blogg.se
===========

That's quite awesome on multiple levels, and I thank Johan for sharing this short glimpse at how people leverage Gentoo. I hope to publish a few more stories soon, so stay tuned and feel free to mail me your story!

Last-minute reminder: Today is Gentoo bugday**! (October 03, 2009, 15:42 UTC)

**fixing bugs with both users and devs together.

Join us in #gentoo-bugs on Freenode, please!

October 02, 2009
Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
Quick note: I [censored] hate bzr (October 02, 2009, 19:17 UTC)

flame@yamato bzr % bzr branch http://bzr.savannah.nongnu.org/r/man-db
http://bzr.savannah.nongnu.org/r/man-db/ is permanently redirected to http+urllib://bzr.savannah.gnu.org/r/man-db/
bzr: ERROR: Not a branch: "http+urllib://bzr.savannah.gnu.org/r/man-db/.bzr/branch/".

The command is copy-pasted from Savannah

And yes, this was trying to fix man-db with heirloom-doctools .

Does it come with includes or? (October 02, 2009, 15:40 UTC)

I’m not sure if I went to a large extent writing about this before, but I probably should try to write about it here again, because, once again, it helps removing some useless .la files from packages (and again, this is just something done right, not something I’m pulling out of thin air; if you think I’m pulling it out of thin air, you have no clue about libtool to begin with — and I’m not referring to leio’s complains, that’s another topic entirely).

Shared objects are, generally, a good thing because they allow different programs to share the same code in memory; this is why we consider shared libraries better than the static archives. Unfortunately, simply using, boilerplate, a shared object is a bad thing: you need to know what you’re doing.

For instance, if your software simply uses a single executable, propose no API for other software to use and you don’t use plugins then you really should not be using libraries at all, and should rather link everything together in the executable. This avoids both the execution overhead of PIC code, and the memory overhead of relocated data .

Library install flowchart

And again, here are some explanation:

  • if you’re installing a plugin you usually just need the shared object, but if the software using it supports external built-ins (I can’t think of even a single example of that but it’s technically possible), then you might want to consider making the static archive version optional;
  • you only install header files if your package provides a public API (it’s a library) or if it uses plugins (plugins need an interface to talk with the main program’s body);
  • if you’re going to share code between different executables, like inkscape does for instance (it does it wrong, by the way), what you want is to install a shared object (there is an alternative technique, but that’s a different matter and I’ll discuss that in the near future hopefully);
  • if you’re installing a single executable, you probably want to install no library at all; this might not be the case if you use plugins though, so you might have to think about it; while application can easily make use of plugins (zsh does that for instance, this takes away at least some error checking at linking time; this is, anyway, simply a matter of development practice, you can still use plugins with no library at all);
  • if you’re installing a library (that is, anything with a public API in form of header files), then you’re obviously going to install a shared object copy of it; the static archive version might be actively discouraged (for plugin-based libraries such as PAM, xine, Gtk+, …), or might simply be made optional for the remaining libraries.

October 01, 2009
News from the front (October 01, 2009, 23:04 UTC)

For those that might have been wondering where was that guy speaking about imminent stabilization of gnome 2.26, well I was taking some time off (sort of). The Gnome 2.26 situation got a bit better in the last weeks as due to the production of a release media, a lot of dependencies we were waiting on are finally getting stabilized. You can still see progress on bug #263083, closer than ever !

Since I can't stand working on Gnome 2.26 anymore and since upstream has been kind enough to drop their new almost shiny 2.28, I started doing some QA on ebuilds in overlay before allowing them to move to the tree. Over 92 ebuilds, all of which are not necessarily interesting for gnome 2.28, I've currently reviewed 25 and that's with current 65% of completeness of the ebuild bumps, so there is still quite some work, and don't expect the overlay to be safe for use just yet.

One last word on 2.26, there will be a migration guide, it's still getting a few modifications before it all goes public with stabilization but I'm spreading the word in the hope that we won't see any new bugs concerning what has been documented.

Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
Plugins and static libraries don't mix well (October 01, 2009, 22:48 UTC)

There is one interesting thing that, I’m afraid, most devleopers happen to ignore, either spontaneously, or because they really don’t know about them. One of this is the fact that static libraries and plugins usually don’t mix well. Although I have to warn you, that’s not an absolute and they can easily designed to work fine.

The main problem though is to ponder whether it is useful to use static libraries and plugins together, and then it’s to find out if it’s safe to or not. Let’s start from the basis. What are static libraries used for? Mostly for two reasons: performances, and not having to depend on the dynamic version of the same library in the system. If performance of the library is a problem, it’s much more likely that the culprit is the plugins system rather than the dynamic nature of the library; I have said something about it in the past, although I didn’t go much in details and I haven’t had time to continue the discussion yet.

For what concerns dependencies, the plugins usually need a way to access the functions provided by the main library; this means there is an ABI dependency between the two; now the plugins might not link against the library directly, to support static libraries usage, but it also means that if the internal ABI changes in any way between versions, you’re screwed.

What does this mean? That in most cases when you have plugins, you don’t want to have static libraries around; this means that you also don’t need the .la files and so you have quite a bit of cleanup.

More to the point, if you’re building a plugin, you don’t want to build the static version at all, since the plugin will be opened with the dlopen() interface, from the dynamic version of the library (the module). Since not always upstream remember to disable the static archive building in their original build system, ebuild authors should take care of disabling them, either with --disable-static or by patching the build system (if you don’t want to stop all static lib building). And this is not my idea but a proper development procedure (and no, it does not mean any discussion: if it’s a plugin — and it’s not possible to make it a builtin — you shouldn’t install the archive file! Full stop!).

Now, you can see where this brings us again: more .la files that are often currently installed and are not useful at all. Like .la files for PAM modules (libpam does not load them through the .la so they are not useful — and this is definitely the word of the PAM maintainer! And for PAM-related packages, that word is The Word). Let’s try to continue this way, shall we? From the leaves.

Remi Cardona a.k.a. remi (homepage, stats, bugs)

Turned out that xorg-server 1.6 is pretty much ready for stabilization, as only a handful of bugs were reported over the testing period since last week, and they only concerned the stabilization list.

Without further ado, I've asked our faithful Arch Teams (pretty much all of 'em) to stabilize xorg-server 1.6 and friends. amd64 was the first one to the finish line with a stabilization done in under a day!

Gentoo is again back in business for X. Woo!

Now to all stable users, don't forget to read the upgrade guides we wrote :

Don't forget, please file bugs in bugzilla.

flagedit 0.0.8 (October 01, 2009, 11:57 UTC)

As promised, I released a new version, flagedit-0.0.8.

Nothing really exciting in here, flagedit now supports /etc/portage/*.keyword as folders (bug #241668 )

I'll move on and try to implement features suggested in the previous blog entry comments, namely :

  • metadata.xml description support from Donnie Berkholz : not sure what the idea is ?
  • set/unset/(reset) hardmask on a package from pavel : that's a great idea.
  • clean obsolete package.keywords entries : I can do that.

Back to Gentoo development (October 01, 2009, 11:56 UTC)

It's been quite a while since I've done anything for Gentoo. It's a new year, and it's a good time to start contributing again.

You know how it is : real life versus OSS contributions... Well the real life got the best of me for too long, but although things was very interesting - albeit time consuming - I miss the good old satisfaction of updating the ebuild of my small software that nobody uses :)

I'm even more motivated by the fact that I realized recently that I own some piece of software that are actually used by quite a lot of people (more than 2 is a lot for me).

Namely : Flagedit the Ultimate Console Based Use Flags Editor. Albeit a bit old, it's still used b quit a lot of people, and it really needs some love from me.

So I'm going to start committing stuff again. My motto : start small so you don't stop. So I started by updating the homepage and gave flagedit a new home .

Next on list : bug 241668 to support folder structure of portage

But hey, you fellow reader : what would you like to see improved in flagedit ?

Note : if you want to beta test upcoming versions of flagedit, drop me a mail, or comment.

booh 0.9.1 ebuild (October 01, 2009, 10:00 UTC)

It's been a long time since my last commit in the gentoo tree ! I had lost motivation and interest. But now I'm back with one simple goal for now : just maintain my ebuilds, don't get involved in any discussion, and take it easy :)

So I'm happy to celebrate my comeback with the much awaited ebuild for the new version of booh : 0.9.1.

This new version (well actually 0.9.0) brings a lot of new features and programs : album2booh booh-classifier booh-fix-whitebalance booh-gamma-correction webalbum2booh

Enjoy!

server reinstallation (October 01, 2009, 09:59 UTC)

The server I'm paying for (dedibox) crashed for unknown reason, I had to reinstall it. Luckilly enough I could boot in rescue mode and archive my important data, it helped to get everything up and running again, or at least the important bits (gentoo, apache, this blog, postgresql)

The newest addition on this server :

  • squid to act as proxy
  • backup-manager as a backup solution

backup-manager is not very powerful, but it's small, light and simple to install and configure. All you need is Perl and gettext :) It'll do until I migrate to bacula.

ssh, keychain (October 01, 2009, 09:57 UTC)

On our way back from FOSDEM, I had a quick discussion about ssh with Chris, and it motivated me to clean up all my ssh keys, passphrases, agents.

So now I use different keys for work and home, and ssh keychain on both.

Next move is to add my work identity to my home session to be able to connect directly to servers at work without having to go through my workstation at work. Without putting my home private id on my machine at work, nor copying my home public id on all servers at work. It should be possible I've heard :)

Anyway, here is briefly how I did it : ssh-keygen (dsa as main key). Then install keychain (see http://www.gentoo.org/proj/en/keychain/ and con figure it a bit. I added the following script in /etc/profile.d/keychain.sh (gentoo host), and I use the built in keychain on my mac.

#!/bin/bash
# start keychain, with the private keys to be cached
/usr/bin/keychain ~/.ssh/id_dsa
# then load the generated files
for i in ~/.keychain/*-sh*; do
echo "sourcing $i"
source $i
done

I know, I know, everybody is supposed to know everything about ssh, but I'm happy to admit that I learnt 2 or 3 things while setting up everything properly. Besides, how many of you have no passphrase on your ssh key ? :)

FastCgi and Movable Type (October 01, 2009, 09:40 UTC)

This blog now runs on apache + mod_fastcgi. I can feel the difference, especially given the fact that the hardware is not that powerful. I was curious aboud mod_fcgid, which claims to be better but compatible, but I'm not sure why exactly (I think something to do with better timing in spawning / killing cgi persistents processes).

I was willing to move to lighttpd as well, but it looks like it's more work than just installing and configuring mod_fastcgi for apache. By the way, you have to make sure that FCGI (the Perl module) is installed otherwise Movable Type will refuse to work.

September 30, 2009
Marcus Hanwell a.k.a. cryos (homepage, stats, bugs)
The Big Move and New Position at Kitware (September 30, 2009, 23:40 UTC)

On Monday 21 September we packed the majority of our belongings into the back of a Penske truck and made the 500 mile drive (in convoy - Louise, William, Dax and myself) from Pittsburgh, PA to Clifton Park, NY. Since then we have been unloading the truck, unpacking our things into our new home and doing all those things you have to do when you move house, and several things necessary when moving between states and jobs.

Me in the Penske truck before returning it

This is certainly the most rural house I have lived in since I was very young. We found a nice duplex on the outskirts of Clifton Park, it uses well water and I am the proud owner of the contents of two full propane tanks (no natural gas lines run out to the house). We also have a really nice wood fire in the living room, and I snagged the family room and am using it as a large home office! Thankfully they were able to hook up a cable Internet connection on Tuesday last week, and so I was not offline for too long.

Tomorrow is my first day with Kitware, I will be attending a training course being run by Kitware for the remainder of the week and so won't have my first day in the office until next Monday. I will be working in the scientific visualization group on projects such as ParaView, and have had lots of ideas for future Avogadro development over the last few weeks. I am very much looking forward to working in some new areas, but also to enhancing the previous research and development I have done in the area of visualization in chemistry. I am also looking forward to working on CMake.

September 29, 2009

Global Financial Derivatives trading company, OSTC Poland, uses Gentoo Linux in significant sectors of its IT infrastructure. We spoke with long time Gentoo user and head of OSTC Poland's IT department, Patryk Rządziński, to learn more about how and where Gentoo is used. We discovered, as you will read in the full interview, that Gentoo, and more generally open source software, serves well in the commercial world.

Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
Another C++ piece hits the dust (September 29, 2009, 11:19 UTC)

You might remember my problem with C++ especially on servers; yes that’s a post of almost two years ago. Well today I was able to go one step further, and kill another piece of C++ from at least my main system (it’s going to take a little more for it to apply to the critical systems). And that piece is nothing less than groff.

Indeed, last night we were talking in #gentoo-it about FreeBSD’s base system and the fact that, for them similarly to us, their only piece of C++ code in base system is groff; an user pointed out that they were considering switching to something else, so a Google run later I come up with the heirloom project website.

The heirloom project contains some tools ported from the OpenSolaris code base, but working fine on Linux and other OSes; indeed, they work quite well in Gentoo, after creating an ebuild for them, removed groff from profiles, and fixed the dependencies of man and zsh.

A few notes though:

  • the work is not complete yet so pleas don’t start already complaining if something doesn’t look right;
  • man is not configured out of the box; I’m currently wondering what’s the best way to do this;
  • after configuring (manually) man, you should be able to read most man pages without glitches;
  • for some reason, we currently install man pages in different encodings (for instance man’s own man page in Italian is written in latin-1); heirloom-doctools use UTF-8 by default, which is a good thing, I guess; groff does seem to have a lot of problems with UTF-8 (and man as well, since the localised Italian output often have broken encoding!);
  • groff (and man) both have special handling of Japanese for some reason, I don’t know whether the heirloom utilities are better or worse for Japanese, somebody should look into it.

September 28, 2009
Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
Removing .la files, for dum^W uncertain people (September 28, 2009, 14:53 UTC)

Since I have been still fighting with the damned .la files and I’m pretty sure that even though I have explained some use cases most of my colleagues haven’t really applied them, I decided to go with a different approach this time: graphical guides.

Since the post about the tree size has gotten so much feedback, probably because the graphs impacted on people, this might actually prove useful.

.la files removal flowchart

Note: I first tried to draw the chart with Inkscape, but the connector available on its code only draws straight lines, which are unusable for stuff like this; I found no way to anchor lines to an arbitrary point of objects either, so I gave up; dia is tremendously bad to work with; kivio 2 is not in Portage nor available as binary package for either Windows or OSX; OpenOffice to the rescue, worked almost flawlessly, unfortunately I didn’t want to waste time to define customised colours so you get the bad and boring ones in the image.

As you can see from this graph, my idea is that, at the end, every .la file is removed. Of course this is not immediate and depends on a series of factors; this graph shows at least the basic question you got to ask yourself when you have to deal with shared libraries. Please note that this does not apply the same to plugins and for that I’ll post another, different flow chart.

  • Does the package install internal libraries only? A lot of packages provide convenience libraries to share code between different executable programs (see this post for more information about it); this can be detected easily: there are no include files installed by default, the library is not in the ld path (such as /usr/lib/packagename). In this case, the .la files are not useful at all, and can be removed straight away.
  • Does the package only install shared objects? The .la files are only meaningful for static libraries that have no dependency information; if a package is not installing static libraries (.a files) it needs not the .la files.
  • Do the libraries in the package need other libraries? If the libraries are standalone, and only depend on the C library (libc.so), then there is no dependency information useful in the .la file, and can be dropped.
  • Is pkg-config the official way to link to the libraries? When using pkg-config, the dependency information is moved inside the .pc file, so the copy in the .la file is redundant, and thus unnecessary.
  • Is the package new? When adding a new package into Portage, there is no reason to keep the .la files around when the conditions shown above apply. For packages that are already in portage, the removal of .la files need to be considerate, or you’ll get the same kind of fire I got for trying to remove some (useless) .la files out of the blue. Not a situation that I like, but so is life.

EntropyKey packaging in Gentoo (September 28, 2009, 11:30 UTC)

As I have announced before I ordered two EntropyKey (one for Yamato so I can test it, and one for the router to put it into production). They arrived today, so I went on and packaged the ekeyd software (the daemon that takes care of feeding the entropy data to the kernel), which is now in portage as app-crypt/ekeyd.

There are though a few notes on both the package and the packaging procedure that I’d like to write about, for posterity.

Firstly, I really don’t see it as a really good move to make use of LUA in such a project; this is both because it looks like overkill to me, and because LUA itself isn’t really extremely standardised between distributions. In Gentoo, additionally, it’s using the wrong path for the compiled extensions, and is thus not really multilib-safe (although it’s debatable how useful multilib is getting, but that’s beside the point for now).

Another problem is, the software not only uses the base LUA code, but also needs the luasocket extension. And not even a vanilla luasocket, because it needs Unix socket support, and that is not built by default by the source package; I had to patch the sources to force building and installing it.

Beside these two problems, and the fact that the Makefile isn’t really extremely straightforward (and I needed to hack it a bit around to avoid -Werror and gzipping of man pages (Portage takes care of that), packaging wasn’t that much of a problem; the code seems clean and with the exception of some format warnings (reason why -Werror would have been a problem), no other problem was found (the package uses -fno-strict-aliasing though, which means that some optimisations will be discarded, too bad.

For what concerns the use of the package, the current ebuild in Portage is good enough for use, I’m using it myself, but it has some things that are still incomplete. For instance, it currently does not check for the Linux kernel options for CDC (and contextually I should probably keep a table of kernels to warn about — Linux 2.6.31 will not work for instance, out of the box, because of a bug in the CDC driver), and the userland USB daemon lacks an init script (which I would probably make much easier to use than the actual daemon: the daemon wants to know the USB bus position of the key, since I don’t like to rely on that I’d rather make use of lsusb or some other method to get the position from the ID pair and the serial of the key itself).

I am also pondering about moving the two daemons in /usr/libexec to avoid polluting root’s path with daemon commands (since they should only be started by the init script).

So as you might guess, there’s going to be a r1 version probably even today, depends on how much time I have free (I have lots of stuff to do, sigh).

Tobias Scherbaum a.k.a. dertobi123 (homepage, stats, bugs)
Förderverein Gentoo e.V. strebt Auflösung an. (September 28, 2009, 10:20 UTC)

(For readers on planet.g.o: This one is in German language only, but i do consider this important enough to be published on planet.g.o although.)

Wichtig: Ich schreibe hier als Privatperson, nicht als Vorstandsmitglied des Förderverein Gentoo e.V.!

Die am vergangenen Freitag stattgefundene Mitgliederversammlung hat sich mehrheitlich dafür ausgesprochen, den Förderverein Gentoo e.V. aufzulösen. Entgegen der Tagesordnung wurde mangels Kandidaten kein neuer Vorstand gewählt, so dass der bisherige Vorstand weiterhin geschäftsführend im Amt bleibt. Alle Mitglieder des Vereins werden in den kommenden Tagen angeschrieben und zu einer außerordentlichen Mitgliederversammlung eingeladen, die voraussichtlich am 07.11. in Bottrop stattfinden wird und in welcher über die Auflösung formal beschlossen werden kann.

Vorweg: Auf die Gentoo-Distribution an sich hat dies keinerlei Auswirkungen, Gentoo ist nicht tot und wird weiter bestehen – auch unabhängig von einem Förderverein im deutschsprachigen Raum.

Was ist der Förderverein Gentoo e.V.? Der Verein wurde im Herbst 2003 am Rande der Practical Linux in Gießen mit dem Ziel gegründet, die Verbreitung und Präsenz von Gentoo im deutschsprachigen Raum zu fördern und unterstützen.

Warum will sich der Verein auflösen? Es konnte aus dem – kleinen – Kreis der bei der Mitgliederversammlung anwesenden Mitglieder kein neuer Vorstand gefunden werden. Die Mehrheit der anwesenden Mitglieder sieht keine Perspektive den Verein weiter sinnvoll zu betreiben. Es ist seit Gründung des Vereins im Jahr 2003 nicht gelungen, eine kritische Maße zu erzeugen, die sich und den Verein gegenseitig pusht und weiterbringt, aktiv am Vereinsleben teilnimmt. Realistisch betrachtet war ich in der vergangenen Zeit ein Einzelkämpfer – zu wenig für einen Verein.

Welche Konsequenzen ergeben sich aus der Entscheidung? Die Präsenz von Gentoo auf Messen und Veranstaltungen wird darunter leiden. Auch wenn es um den Verein in der Vergangenheit ruhig war, konnte dieser dennoch über Mitgliedsbeiträge und Zuwendungen die Finanzierung von Flyern und Bannern, Vorfinanzierung von T-Shirts, etc. pp. sicherstellen. Ob sich Privatpersonen finden, die künftig nicht unerhebliche Beträge vorfinanzieren oder für Flyer etc. aufwenden wollen und können, wird sich zeigen müssen. Insgesamt gehe ich davon aus, dass sich die Präsenz auf Veranstaltungen zunächst nicht großartig verändern wird – langfristig mag ich keine Perspektiven abgeben. Was diese Entscheidung für mich persönlich bedeutet, wird sich auch noch zeigen müssen – meiner Motivation sind insbesondere diverse Begleitumstände der Mitgliederversammlung nicht sonderlich zuträglich. Auch fraglich ist zunächst, inwieweit es das Portal gentoo.de künftig noch geben wird, wenn kein Verein zur Finanzierung des Betrieb des Servers bereit steht. Und: Es gibt sicherlich weitere Implikationen einer Vereinsauflösung, die sich erst im Nachhinein zeigen werden.

Schade.

Diego E. Pettenò a.k.a. flameeyes (homepage, stats, bugs)
The size of the Gentoo tree (September 28, 2009, 01:54 UTC)

You might have noticed that I started working on cleaning up the tree (before I had a few problems with my system, but that’s for another day). Some people wondered whether that’s really going to make much difference, so I wanted to take a look at it myself. I was already quite sure that, while reducing the size of filesdir is important, especially to avoid more stuff to be added to the tree, getting rid of all the filesdir wouldn’t really make a terrible impact. Some extra time at hand, some find commands later, and Google Docs, lead to this:

As you can see, the big part of the tree is ate up by the support files, more than twice the size of all the ebuilds; files/ directories are just little more than ebuilds, and there is a huge amount of filesystem allocation overhead, even if my tree is in a filesystem with 1 KiB blocks. Another interesting note is that the licenses use up more space than the whole set of profiles, scripts and eclasses!

For the sake of finding something to work on, let’s break up the support files class into a different graph:

So much for those who complained that adding information about packages in metadata.xml is wasting space for users… the real space waster are change logs instead! But they are useful to keep around, for a while at least. I guess what we really need is better ChangeLog integration in repoman, so that a) it updates the ChangeLog on commit (stopping developers from committing without updating them!) and b) it can delete older and obsolete entries (like, keep the most recent 40 changes or so).

September 27, 2009
Gentoo Ten LiveDVD Testing (September 27, 2009, 17:02 UTC)

Attention Gentoo Community,

In honor of Gentoo's 10th birthday, we are producing a new livedvd! We need YOU to test it on as many x86 and x86_64 machines as you can and post bugs. Please report your bugs. Feel free to entertain yourself and fellow Gentoo rock stars on our forum.

The livedvd-x86-x86_64 will work on x86 or x86_64. If your arch is x86 boot with the default gentoo. If your arch is amd64 boot with gentoo64. The livedvd-amd64 is for well, amd64 only.

UPDATE: Due to demand, we have moved the files onto the regular mirror infrastructure. Please select your archiecture to be redirected to a mirror: x86amd64

So, give us a hand by testing like crazy AND posting bugs and we'll have the greatest livedvd ever.

Thanks for your continued support,

The Gentoo-Ten Project

David Abbott contributed to the draft for this announcement.

September 26, 2009
Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
Gentoo usage in commercial environments (September 26, 2009, 12:01 UTC)

Just sent this to the gentoo-dev@ mailinglist in the hope of getting some excellent propaganda material out of it:

[snip]
Hello everybody!

As Gentoo approaches its 10th birthday I've been wondering how and where it is used. We used to have some great stories from companies in the weekly newsletter, but that one has become very dormant a while ago.

I'd like to collect your success stories, endorsements and case studies so we can present to the rest of the world how using Gentoo makes your life easier and is totally awesome. If you don't want to have that information public I'll gladly anonymize it as long as I can be reasonably certain that you really exist. What is important is that you, if you actively use it in a commercial environment, write me whatever you think is important. Or you motivate someone you know to write it. Do your contribution to making things better :)

Everything from "I use it and it's great!" to a story starting on a rainy day in November 1885 is good. Don't be afraid, I'll work with you on making it into something readable.
And if you have specific criticism I'll take that too - maybe we can find an easy way to improve things. That is in your best interest too, so go ahead. Invest a few minutes of your time so we can save you more time!
[snip]

If you think you can contribute something just send me an email and I'll see what I can do.

September 24, 2009
Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
Gentoo Codeswarm (September 24, 2009, 01:09 UTC)

When I saw people do codeswarms of amarok and banshee and other small projects I thought "Hey, I can do that too!"

Now, after some work, and lots of CPU-cycles used, I have some results to show. And they are quite ... nice? awesome? For you to decide.

It all begins with pulling the data from cvs. Since I was in a hurry I did a naughty thing - do a checkout from anoncvs.gentoo.org, run cvs log > logfile
That is naughty because it causes a huge load on the server. Polite persons will create a local copy of the repository and run their own cvs server.

After ca. 50 minutes I had a logfile of 456926138 bytes, or roughly 450MB. This gets transformed into a list of events for codeswarm. The transformation itself is quite fast, but takes lots of RAM. In this case just over a gigabyte. So there I was with a 220MB XML dump to feed into the renderer ...

The first attempt died nicely because the default of using 1GB RAM cripples the render speed. Well, actually, my first first attempt died a horrible death because some [censored] in the Java world don't check what dynamic objects they load. And this means I had to run it all in a 32bit chroot. Grate phun. Grrr :D

Processing that amount of data looked quite reasonable for the first hour or so. Then it slowed down quite a bit, then even more. Increasing the memory helped a lot - I just let the JVM have 3.5G (it's a crippled 32bit process after all) and it effectively used ~2.5G. I think this shows the limitations of the current approach quite well.

Still it was too slow and too dense. The amount of files overwhelmed the screen so that it was looking very ... crowded

And that's a bit bland. I did notice that you can colour things, so obviously I split by categories. The colours are mostly random, but seem to work well. And in testing things I realized that the drawing time is negligible compared to the physics / preprocessing, so obviously I increased the resolution a bit. Hey, we live in the modern times of Full HD ... why compromise with legacy formats!

real    2876m48.775s
user    2897m44.342s
sys     10m28.831s
That's what "time" had to say about my little experiment. Almost 2 days of CPU-time at 2.6Ghz ... and that's with a naughty tweak. I reduced the amount of items because I realized that it was going to take Too Long (tm). So instead of representing each file ... why not represent each directory as one "thing"?
                    filename = filename.replace('files/','')
                    filename = filename.replace('/var/cvsroot/gentoo-x86/','')
                    filename = filename.replace('Attic','')
                    filename = "/".join(filename.split('/')[:-1])
That's all the mods I needed - strip the repo location at the front, fold files/ and Attic/ away and cut off the filename. Ends up with "category/package" instead, which for the purposes of Gentoo is a much more useful identifier. And the rendering time went down from one frame every 30 minutes worst case to about one frame every 3 minutes worst case. Y'know, the "unmodified" version is still processing after over 118 hours CPU time ... not that nice :)

One positive effect is that it reduces the input from over 200MB to just around 100MB.
Now after 48h CPU I have 13367 single PNGs with a total size of pretty exactly 5GB. Feeding those into mencoder generates 557.8 seconds of video with an average bitrate of 1737.2kB. The encoding takes 22 minutes walltime or 40 minutes CPU-time - in other words mencoder uses two threads properly. Good to know!

So just to warn you, the result of my little experiment is a high-bitrate 1080p video. It is about 116MB in size ...
Get it here
(US mirror)

Enjoy!

September 23, 2009
Remi Cardona a.k.a. remi (homepage, stats, bugs)

Here we go again. This time, we're going for the double sweepstakes as we're trying to stabilize both libxcb 1.4 and xorg-server 1.6!

For once, the server upgrade shouldn't be too hard and the server upgrade guide is remarkably slim. There's been no change in input, nor HAL, nor just about anything else for most users.

Only Intel users might have a few surprises with DRI2 and UXA. But at this point, they should be good surprises :)

However, the libxcb upgrade is going to cause more troubles for some users. If you are/were using x11-libs/libX11 with USE="xcb", then you might have to rebuild lots of packages. This is why we've taken such a long time to unmask and stabilize libxcb 1.4. But now, we've worked hard to write a proper libxcb upgrade guide, which users are definitely going to want to read.

I would say the libxcb guide is more important than the xorg-server upgrade guide.

Anyhow, right now, I calling out for help among our stable users. If you've always wanted to contribute to Gentoo but didn't know how, here's your chance.

  1. Grab the stabilization list from bug #282290
  2. Append it to your /etc/portage/package.keywords
  3. run : emerge -DuNa world like always to update

Again, don't forget to read both upgrade guides before running the update, just so you don't start panicking when portage is unable to continue the upgrade.

As always, you're more than welcome to CC yourself in the stabilization tracker, but please DO NOT COMMENT IN THE TRACKER if you have issues, you'll just annoy everyone there. Just file a new bug and we'll look at it.

Don't forget that most X maintainers lurk in #gentoo-desktop on FreeNode if you have any questions.

That's all for today

Steve Dibb a.k.a. beandog (homepage, stats, bugs)
new pear setup (September 23, 2009, 02:59 UTC)

I've just commited PEAR 1.8.1 to the tree (and will do 1.9.0 shortly to get us up to speed), but I wanted to let users know about a change in the way packages are installed.  Actually, it only affects the base packages.  Up until now, the PEAR-PEAR package in portage included all the necessary deps in one ebuild.  With this new version, I've split each package up into its own ebuild.

There's a couple of reasons for this, but the most important is that it will give us flexibility to deal with changes from upstream.  For example, with 1.8.1 and above, PEAR changed it's base XML dependency to XML_Util.  That one was already in the tree, and so the new pear base system relies on that.  If the other base ones change between versions, we can focus on that.

Another nice little change is that the base system ebuild now is just dev-php/pear.  So, "emerge pear" and you're done.

The new versions are all currently marked as unstable across the arches.  I would appreciate any and all feedback on the change.  I'm still a bit skeptical that this is the best approach, and a bit nervous at any fallout that may occur, so please file bug reports and let me know if you have any issues.  Thanks, all. :)

September 21, 2009
Robin Johnson a.k.a. robbat2 (homepage, stats, bugs)
Visualizing Gentoo profiles (September 21, 2009, 10:31 UTC)

To add a new USE flag, that's globally enabled for all Linux profiles, what's the minimum set of profiles that need to change? Deprecated profiles must be handled as well, for users that need to migrate still.

I ran into this today, while working on the USE=modules changes for linux-mod.eclass.

As an attempt to solve this, I munged up some GraphViz work to show profile inheritance, pictures as the end. Both sets have the trailing profiles "/desktop", "/developer", "/server" turned off for the 2008.0 and 10.0 releases, to cut down on the noise.

Graphs and script for download.

My answers as to which profiles:

  • default-linux
  • default/linux
  • base
  • embedded

Odd observations

  • Several Prefix profiles (linux/{amd64,ia64,x86} link to 2008.0 profiles explicitly instead of the generic architecture)
  • default/linux does not bring in base. Some profiles at a glance neglect this and might not have base brought in at all.
  • "embedded" is all alone in the tree.

Thumbnail of one graph

Question for any skilled GraphViz users:

If all nodes in a given subgroup/cluster have an edge going to a single destination node, is there any way to get graphviz to replace them with a single fat edge from cluster to destination node?

Kenneth Prugh a.k.a. ken69267 (homepage, stats, bugs)
Java with Opera 10 on Gentoo AMD64 (September 21, 2009, 04:15 UTC)

So I recently was messing around with Opera 64bit on Gentoo and trying to get Java to work. The process was actually a lot easier than I expected. First I made sure I had the latest sun-jdk installed, which was dev-java/sun-jdk-1.6.0.16 in this case. Now to make it work with Opera I did the following:

cd /opt/sun-jdk-1.6.0.16/jre/lib/amd64/

Opera doesn’t seem to work by default like this, probably because it ignores the plugin and uses java directly. Because of this, you need to symlink the libjvm.so so Opera can find it:

ln -s server/libjvm.so .

Set opera to use /opt/sun-jdk-1.6.0.16/jre/lib/amd64/ as the java path and restart opera. All should be working now, you can check by following this test page: http://www.opera.com/media/applets/clock/

If anyone knows a more proper way of doing this, be sure to let me know

September 19, 2009
Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
How not to write an app (September 19, 2009, 22:02 UTC)

So it seems that Ciaran is upset again. Which seems to be quite normal. But he has some good advice, and I thought I'd share some with you too.

Let's start with an easy one. Descriptive error messages. This is good:

$ bash -x foobar.sh
bash: foobar.sh: No such file or directory
This is not:
  ... In program paludis -ip portage:                                                                                                
  ... When performing install action from command line:                                                                              
  ... When adding install target 'portage':                                                                                          
  ... When parsing user package dep spec 'portage':                                                                                  
  ... When parsing generic package dep spec 'portage':                                                                               
  ... When disambiguating package name 'portage':                                                                                    
  ... When finding all versions in some arbitrary order from packages matching */portage with filter all matches filtered through supports action install:                                                                                                                
  ... When loading entries for virtuals repository:                                                                                  
  ... When finding all versions sorted from packages matching sys-kernel/gentoo-sources with filter all matches filtered through supports action install:                                                                                                                 
  ... When generating metadata for ID 'sys-kernel/gentoo-sources-2.6.28-r5::gentoo':                                                 
  ... When running an ebuild command on 'sys-kernel/gentoo-sources-2.6.28-r5::gentoo':                                               
  ... When running ebuild command to generate metadata for 'sys-kernel/gentoo-sources-2.6.28-r5::gentoo':                            
  ... When running command 'sandbox /usr/libexec/paludis/ebuild.bash '/usr/portage/sys-kernel/gentoo-sources/gentoo-sources-2.6.28-r5.ebuild' metadata':                                                                                                                  
  ... In ebuild pipe command handler for 'LOG0qaglobal scope tr':                                                                    
  ... global scope tr                                                                                                                
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] (same context) global scope tr                                                              
paludis@1253390790: [QA e.child.message] In thread ID '19463':
That's about 1/35th of the whole output ... which is just drowning out any reasonable information. Complete output is just under 750 lines, so good luck finding any error. But I guess there's a reason for that.

Now something really neat:
  ... In program paludis -ip portage:                                                                                                
  ... When performing install action from command line:                                                                              
  ... When adding install target 'portage':                                                                                          
  ... When parsing user package dep spec 'portage':                                                                                  
  ... When parsing generic package dep spec 'portage':                                                                               
  ... When disambiguating package name 'portage':                                                                                    
  ... Package name 'portage' is ambiguous, assuming you meant 'sys-apps/portage' (candidates were 'sys-apps/portage', 'virtual/portage')  
Let me say this as clearly as possible. Never assume. If you try to guess what I might have meant to say you may do something I explicitly do not want to happen or even something which breaks things. If your app is unable to unambiguously parse my input quit.
Failure to do so will reduce in lots of tears and you falling on sharp objects. Multiple times.

And of course ...
Fetch error:
  * In program paludis -ip portage:
  * When performing install action from command line:
  * When executing install task:
  * When performing pretend actions:
  * When fetching 'dev-db/sqlite-3.6.18:3::gentoo':
  * Fetch error: Fetch of 'dev-db/sqlite-3.6.18:3::gentoo' failed
I don't think that means what you think it does. A pretend action that doesn't only pretend, but claims to fetch things? That better be a small oopsie in the explanation that doesn't, in any way, describe what actually happens.

Now, Ciaran. You can try to ridicule me through your blog. You can relabel comments as my name if you don't like them (it's your blog after all - even though that's exquisitely rude) and then deny you did it (we call that lying).
But if you have to do so do it directly. Don't try to be funny (you saw what that did in the Funtoo-uses-Internet-Explorer Situation).
Don't label any criticism as FUD (see "Ten Ways PMS Raped your Baby").

And if you fork PMS then do so. You have your own hosting already. Now all you need is your own mailinglist and please leave those that work on the official version alone. And don't command us around, we're not your slaves.

Think you can do that? That would be awesome. Thanks!

Reality vs. PMS (September 19, 2009, 21:23 UTC)

If you ever get bored enough (which, on an epic scale from fighting with the Spartans at the Thermopylae to reading the telephone book should be just around counting the grains of rice in a 50kg-bag) and start reading PMS, you might get a few of those "Wait a minute ..." thoughts that happen when things aren't quite right.

One of those is around page 26, where PMS defines that bash 3.0 or higher is to be used. Which actually means "it has to be bash 3.0 compatible, but may be any higher version". Or to be even more precise: Ebuilds are not allowed to use any features not in bash 3.0, but the execution environment may be any higher version if it is compatible. How could we have a straightforward text that doesn't need interpretation! The lack of flamewars! The lack of circular reasoning!

Now if you look around on your installed machines you may notice that:

  • The oldest available ebuild is app-shells/bash-3.1_p17
  • Portage depends on >=app-shells/bash-3.2
  • Current stable on amd64 and x86 is bash4
Which means that you can't even use bash 3.0 anymore. And if you had an install that old you'd run into many upgrade issues - portage blocking bash, bash blocking portage, portage being unable to read EAPI1 ebuilds. A big mess with no clean upgrade path ... apart from injecting binpkgs and pretending that mess never happened.
From bash Changelog:
*bash-3.0-r12 (05 Jul 2005)
*bash-3.1 (10 Dec 2005)
*bash-3.2 (12 Oct 2006)
*bash-4.0 (21 Feb 2009)
So anyone not having bash 3.2 hasn't updated since May 2007. Seriously. That's when bash-3.2_p17 went stable. (October was just when the ebuild was added, the Changelogs are a bit tricky to parse)

So for all intensive purposes (and of course all intents and purposes) we can assume bash 3.2 installed anyway. Plus there's no older ebuild anyway, apart from the 3.1_p17 that is a leftover from a horrible upgrade path.
Even worse, for at least a year there has been a "contamination" of the tree in the form of bash 3.2 features like the "+=" assignment. Which means that some ebuilds won't work with 3.0 anyway. Extra bonus? Many eclasses use it, which means, in short, that you need 3.2 or higher. And it has been tolerated (maybe even encouraged) for such a long time that there's no way to undo that change now.

The obvious thing to do (fix PMS) has been ignored for quite some time. So I thought I'd send an email to the gentoo-pms mailinglist to get it sorted out. Guess what?
The amazing one-character patch was denied.

That's the best way to make PMS irrelevant - refuse to let it document reality.

David Abbott a.k.a. dabbott (homepage, stats, bugs)

jorge
Today I am pleased to introduce to all of you, Jorge Manuel Vicetto, Gentoo Developer, KDE Lead, and also a member of, Forums, Sparc, UserRel, DevRel, and in his spare time helps run the elections. Jorge is from Terceira island in the Azores.

If you would prefer to read the interview;
http://www.gentoo.org/proj/en/pr/20090918-jmbsvicetto-interview.xml

LINKS:
Gentoo KDE Project
http://www.gentoo.org/proj/en/desktop/kde/index.xml
Jorge's Boxes
http://dev.gentoo.org/~jmbsvicetto/boxes/
Get Involved
http://dev.gentoo.org/~jmbsvicetto/recruiting/default-recruiters.txt
Bugzilla
https://bugs.gentoo.org/

irc network freenode channel #linuxcrazy

Download

ogg

mp3

September 18, 2009
Jeremy Olexa a.k.a. darkside (homepage, stats, bugs)

Searched high and low to find this silly little info. Finally found it here.


# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name

# Set default vhost server location here
evhost.path-pattern = "/www/%0/htdocs"

# If we don't have a %3, default to htdocs
$HTTP["host"] =~ "^[^.]+\.[^.]+$" {
    evhost.path-pattern = "/www/%2.%1/htdocs/"
}

# If we don't have a %4, find the subdomain
$HTTP["host"] =~ "^[^.]+\.[^.]+\.[^.]+$" {
    evhost.path-pattern = "/www/%2.%1/subdomains/%3/"
}

# If we have a %4, find the subdomain2.subdomain1. If we have have %4+, use %4
# anyway. If you have 4+, write a explicit rule for doc-root.
$HTTP["host"] =~ "^.+\.[^.]+\.[^.]+\.[^.]+$" {
    evhost.path-pattern = "/www/%2.%1/subdomains/%4.%3/"
}

Now my only wishlist is to do something similar for var.logdir, but %[1-4] is only set up with evhost. So, do you do anything smarter than this for your server?

Daniel Drake a.k.a. dsd (homepage, stats, bugs)
A new OLPC deployment in Nigeria (September 18, 2009, 18:48 UTC)

Earlier this month, I found myself embarking on a last-minute journey to a One Laptop per Child workshop in Port Harcourt, Nigeria. They are preparing for a 6000 XO laptop deployment in that region of the country. I attended to support the 5-day event, which was coordinated by Michael Tempel and Claudia Urrea.

The laptops were donated by Rusal/Alscom, and the deployment will be primarily run by Schlumberger’s Excellence in Educational Development division. SEED already uses its local staff to run some education projects in Nigeria (and many other countries).

We covered a range of activities including Write, Record and Paint, then spent a decent amount of time on TurtleArt and Scratch. We also handed out 75 sensors and ran some activities around the measurement of humidity, temperature and light.
The abilities of the attendees (the vast majority of which were first-time users) grew very nicely during the workshop.

The group consisted of about 80 teachers and 20 children. Both the size of the group and the wide age range presented some challenges. Usually, such workshops would be run only with the core teams behind the deployments (a smaller group overall), but the way that things are developing in Nigeria meant that it made more sense for us to work with a larger group at this time.

One of the biggest stumbling blocks of the workshop was working with the Scratch activity – while a very valuable activity, its integration with the Sugar desktop environment is damagingly minimal. For example, instead of using Sugar’s simplistic “Journal” storage system, it presents regular-looking Load and Save dialogs which proved very challenging for the new users. Seeing people struggle with interfaces that we see all over the desktop computing world really reminds you just how ground-breaking and significant the simplicity of Sugar is.

We also ran into some problems with the Paint activity regularly freezing the systems, unreliable saving/loading with USB disks, and some confusion relating to Measure’s sensors interface. We were kept on our feet at all times, meaning that I didn’t really have time to sit down and diagnose the issues in detail, but they should not be hard to reproduce at a later date. The issues were not significant enough to cause any major disruption.

I ran a few technical sessions with a few people who will become the basis of the technical team, plus some interested volunteers and teachers. As I’ve seen in other places, this was challenging because prior experience with Linux is low and internet access is scarce, so “look up this topic on the OLPC wiki” is not an answer that everyone is able to work with, and “run this command at the terminal” requires a decent amount of explanation. Nevertheless, the enthusiasm is overwhelming (as always) and I went away feeling confident that the core team is now comfortably in a position to get things moving and pass on knowledge to a wider group.

Our hours were cut short by the high security around us, meaning that we didn’t have much non-workshop time to interact with the attendees (or really see the country at all), but overall it was a lovely group to work with and I’m confident that we’re going to see great things come out of their efforts. I’m now back in Nepal until November.

September 15, 2009
Kenneth Prugh a.k.a. ken69267 (homepage, stats, bugs)
X11 forwarding a chroot (September 15, 2009, 19:11 UTC)

I figured I’d blog this so I wouldn’t stop forgetting how to do this and possibly learn a “better” way to do this. I’m going to assume that vanilla x11 forwarding works outside the chroot as a starting point.

The process is relatively simple that I use. First I ssh into my server as a user using the -Y option like so:

ssh -Y ken@fooserver

Then I su to root:

su

Now comes the part that makes the forwarding work. We need to export the magic cookie that our current session is using so that the chroot can import it and use it. We do this like so:

xauth list > /tmp/X

This saves the magic cookie info into a file under /tmp so that we may access it later. Now its time to chroot in:

chroot /mnt/devchroot/ /bin/zsh

and I generally like to set my PS1 to remind me that it’s a chroot but is not necessary:

PS1="dev $PS1"

Now we need to import the magic cookie after chrooting in:

xauth add $(cat /tmp/X)

At this point x11 forwarding should now be working in the chroot. An easy way to test is to simply launch an xterm inside the chroot. xterm&

If the xterm appears everything is in working condition. At this point you should probably delete the /tmp/X file for security.

September 14, 2009
Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
Javaaaaaaargh. (September 14, 2009, 22:54 UTC)

I presume my liking of Java is known well enough ;)

So I tried a Java app today just to see how well it works. And suddenly ... this:

*** glibc detected *** /usr/lib/jvm/sun-jdk-1.6/bin/java: free():
invalid pointer: 0x00000000420eef40 ***                                        
    
======= Backtrace: ========= 
/lib/libc.so.6[0x3002271e46]
/opt/sun-jdk-1.6.0.16/jre/lib/amd64/libdcpr.so[0x7f8c503d2b52]             
/opt/sun-jdk-1.6.0.16/jre/lib/amd64/libdcpr.so[0x7f8c503dbe05]             
/opt/sun-jdk-1.6.0.16/jre/lib/amd64/libdcpr.so(Java_sun_dc_pr_PathFiller_reset+
0x43)[0x7f8c503d51c3]                                                      
[0x7f8cf52a4f50]                                                                
                                                                          
======= Memory map: ========                                                    
                                                                           
40000000-40009000 r-xp 00000000 09:00 85671701 /opt/sun-jdk-1.6.0.16/bin/java  
40108000-4010b000 rwxp 00008000 09:00 85671701 /opt/sun-jdk-1.6.0.16/bin/java   
41716000-42288000 rwxp 00000000 00:00 0        [heap]
So I think "well, sun-jdk is teh shizzle, I'll try ... err ... no, that one is fetch restricted. So is this one. Err, yeah, icedtea-bin!
Guess what. Same result. Not good.
Now I'm thinking "A crash _in the Java core_? No wai!".
/opt/sun-jdk-1.6.0.16/jre/lib/amd64/libzip.so(
Java_java_util_zip_Deflater_deflateBytes+0x305)[0x7fe671a33e95]
[0x7fe66eb3d4a2]
What, a crash in libzip? That smells bad. Random code execution bad. I find that very unlikely! How on earth does this happen?
Now, let's go bleeding edge and try to build icedtea from source. That only takes ... sigh. About one hour on a quadcore. Grumble grumble yell moan grumble.

And? Can you guess it? Implodes the same way. This is getting really interesting!

Hmm. Looks like all the code this app uses is pure Java. Hmm, this makes no sense. But ... wait ... what's that? "core.jar" - guessing from imports this is the Processing library. That looks like a candidate. Let's have a look at the homepage ... yes, this seems to be C++ code with a Java interface. Ok, this could mess with things. But how?
Just injecting the .jar with the newest version doesn't change a thing. Crummy. And I do notice that their LINUX tarball has files with the .dll ending. File says:
PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit
Uhm. Yah. No good.
But I can try to build it from source, yes?
Yes. These nice people have a svn repository I can pull from. And as a Gentoo user I'm used to playing with such things.

If you have a weak stomach you should stop reading now!
Now, svn checkout. unzip, make, c++, I have all of those (Gentoo sei Dank!). Let's have a look at the build syste... the build... what the ...
Ok, there's a build/ directory with linux/ and windows/ and other directories. And in those directories are, uhm, scripts. And the eclipse editor preferences? What the ... but I digress. Scripts. There's one called "make.sh". Good! Let's have a look.

#!/bin/sh
Ok, so they aren't using any bash features I hope!
  ARCH=`uname -m`
  if [ $ARCH = "i686" ]
  then
    echo Extracting JRE...
    tar --extract --file=jre.tgz --ungzip --directory=work
  else
#    echo This is not my beautiful house.
#    if [ $ARCH = "x86_64" ]
#    then
#      echo You gots the 64.
#    fi
Wat. SRSLY. I lack words to describe this. So the whole 64bit part is commented out. Why do I think that that's not a good idea? And what is "Extracting JRE..." supposed to mean? Noone sane would ... but ... omg. MAH BRAINZ. There's a FULL JRE in the svn checkout.
    echo "
The Java bundle that is included with Processing supports only i686 by default.
To build the code, you will need to install the Java 1.5.0_15 JDK (not a JRE,
and not any other version), and create a symlink to the directory where it is
installed. Create the symlink in the \"work\" directory, and named it \"java\":
ln -s /path/to/jdk1.5.0_15 `pwd`/work/java"
    exit
Some things are not meant to be seen. Like this message, which throws up many questions (and the rest of my lunch). At this point my motivation approached zero (or rather, my motivation to do useful things. I had a strong motivation to hurt some people).

And I try to run that crashy code in my i686 chroot. Guess what. Yes!

Now I do wonder. Who is to blame here?
The clueless upstream that doesn't even know how to cut a release without including their editor config?
The Java runtime that loads any crap without doing sanity checks? (Seriously ... how can you load a 32bit .so or even a .dll into your adress space without immediately exploding?)
Or me, who still thinks there are Java apps out there that don't make you go insane?

So, after a few hours of tracking it down I'm again reminded why I usually don't touch Java at all. The amount of stupid I've found today is enough to last a small african country for a year ...
Oh, one small final note. I can't really blame people for not knowing platform-specific things. But there's a fine line between being a bit ignorant and being purposefully incompetent. If you don't know how to package for a platform find someone who does. Ask on IRC, or if you don't like that on mailinglists. But please, don't release broken stuff like that. It's very rude and can be devastating for the mental state of people that might use your software!

I just ran into “No space left on device” from Portage again. In such a situation previously I ran

# df -H

just to find that there was space left on all mounted devices! Confused I deleted a few distfiles through

# rm -vf /usr/portage/distfiles/*

and found Portage to work again magically. This time I remembered a chat with rbu: Inodes can run out, too. Checking the number of free inodes I was in trouble indeed:

# df -i -H
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
..
/dev/sda7               1.3M    1.3M       1  100% /var
..

That’s all I wanted to share.

(PS: With /var on a different partition now deleting distfiles no longer helps…)

September 12, 2009
Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
Building Stuff, the Gentoo way (September 12, 2009, 18:40 UTC)

Today's blog post shall be focussed on how to efficiently build packages. So here's the boring part: Hardware specs.

Processor: AMD Phenom(tm) 9950 Quad-Core Processor @ 2.6Ghz
RAM: 8GB
/var/tmp/portage: 8GB SSD (2x4GB Compact Flash / RAID0 )
Storage: 4-disk SATA RAID-5 (mdadm)

Now that's quite powerful, but still you easily end up waiting some time for things to be compiled. And of course you usually don't want to test in your livesystem environment. So chroots to the rescue!
Currently I have 4 chroots I regularly use: i686 and amd64, stable and testing. That makes testing things quite a bit easier, especially when you run into some bugs that only happen on stable systems. The setup is quite simple, and because I'm lazy I've added some small scripts that mount everything I need.
All chroots share /usr/portage and /usr/portage/distfiles. That's a bindmount - saves lots of space and keeps them all in sync. One "special" thing is /usr/portage/packages, that's a bindmount per chroot. So I have a packages dir with amd64-stable, amd64-unstable etc. subdirectories, which makes searching quite a bit easier if I ever need a binpkg.

The make.conf is as default as possible, but if you build lots 'o stuff you end up with a few interesting mods:

FEATURES="buildpkg"
NOCOLOR="true"
PORT_LOGDIR="/var/log/portage"
PORTAGE_ELOG_SYSTEM="save"
PORTAGE_ELOG_CLASSES="info warn error log qa"
USE="X gcj objc"
VIDEO_CARDS="vga"

Why would I do that? Well, first of all buildpkg. That saves a binpkg of everything built, which saves quite a bit of time. The whole logging thing is very convenient if you build things with a script like this:
for i in `pquery --max -a 'x11-drivers/*'`; do emerge $i; done
Why would I do such a thing? Well, maybe someone asks me if all x11-drivers work with the new mesa or xorg-server. And like this I just kick it off and grep the logfiles later. Obvious, eh?
Lastly the useflags are optimized to make the toolchain capable of building exotic stuff like gnustep or java packages out of the box. Otherwise you'd soon be rebuilding gcc, which takes time and effort ... so let's add it as early as possible. And VIDEO_CARDS to make xorg "thinner" - less drivers installed, and we don't actually use the drivers anyway!

Now if I want to test a package I usually use:
FEATURES="test" emerge -1avk somepackage
which has the advantage that it uses binpkgs if available (k), shows me what will happen and (a)sks. And -1 / --oneshot so it doesn't end up in world file, so I can get rid of everything with a simple emerge --depclean.
Since there are so many packages where tests fail I often short-circuit and use --onlydeps to get everything installed without having to run and fail tests and only run the tests of the package I actually want to test. As you can see that's quite streamlined to get as many things compiled with as little effort as possible. To work on things I usually group one console tab in the shared PORTDIR (which in my case is a cvs checkout) with one console tab in the chroot. That way I can easily toggle between ebuild editing and compiling. Usually I only have two such tab groups open because otherwise I tend to forget things. Whenever possible I try to avoid doing two things at once in one chroot because that can cause some headaches, it is easier for me to use a different chroot for it. And setting up a new one is quite easy :)

A short while ago I deleted ~12000 binary packages because I was getting a few inconsistencies - the gcc 4.3 to 4.4 migration cost me quite a lot in terms of build time. But now I've mostly caught up, the common packages exist as binaries for fast install and everything else would need to be compiled anyway.
So much for the "how to compile things" part. Next week on BBC: How to make an omelette without eggs!

September 11, 2009
Greg KH a.k.a. gregkh (homepage, stats, bugs)
LinuxCon 2009 tutorial (September 11, 2009, 20:48 UTC)

Somehow I got convinced to give a tutorial at LinuxCon this year, and it was originally scheduled to be my normal "Write a Real, Working, Linux Driver" tutorial I've been giving for the past 4 years or so (which happens to be online here, if you are bored and need something to fall asleep to.)

But that's old-hat, as people on 4 major continents have seen it before. So, to try to break up the boredom, I'm please to announce a change:


Write and Submit Your First Kernel Patch

This tutorial will cover the steps necessary to properly compose, describe, and submit a Linux kernel patch. It will cover the basic usage of git, and how that works with the Linux kernel development cycle. As part of the tutorial, every attendee will compose and submit a patch to the Linux kernel that will be included in the main kernel tree.

Every attendee should have a solid grasp of the C language, and know how to build and install, a Linux kernel from scratch (if not, reading the book, Linux Kernel in a Nutshell, free online, ahead of time would be a very good idea.) The latest source tree, from the git repository, of the Linux kernel should be installed on every attendees laptop before they arrive.


Sign up on the tutorial web site if you are going to attend so I get a clue how many people to expect. Right now I have unique material for 100 people to write new patches for, but can come up with more if needed.

See you all at LinuxCon, should be a fun time. I'm also giving a few other talks there as well, so come and heckle.

In 2006 Jo Vermeulen compared Bazaar and Git performance-wise. Up to today Bazaar has a bad reputation regarding speed and from the results of Jo you see at least that Git is incredibly fast, Bazaar is usable but a bit slow on the uptake in some scenarios. Jo strictly did not use any remote operations which are hard to compare, but from some own tests I do know that Git is incredibly fast there, too, while Bazaar can be really slow on the initial clone operations. The latter fact may be history now, as the new 2a repository format has been introduced with Bazaar 1.17 and enabled by default in 2.0 (both are in Portage). It gives improved speed and flexibility while using up a bit more disk space than the old formats.

Back to what we are really looking at: The scenario. Operations chosen by Jo were:

  • Repository initialisation
  • Adding of a Linux kernel tree
  • Diffing (not possible with current Git)
  • Commit of many files (whole kernel tree)
  • Diff on empty changeset
  • Output of status information
  • Small commit

The results were clearly in favour of Git, especially the empty diff was quite awkard for Bazaar. The same operations were done by Jordan Mantha in 2008, also including Mercurial in a follow-up.

A clever idea by Jordan was to provide time ratios, as test environments and settings were a bit different (other kernel version, different computer system). He concluded that Bazaar got faster, so did Git, but in the end Bazaar gained more ground. So now is the time to repeat the tests with current versions of both SCM systems, the following table only has the ratios of the other two guys.

You will note that Git is mostly faster than Bazaar (apart from the add operation), but the absolute time of Bazaar is more than sufficient (got faster since 2006 and 2008) and outweighed by its better user interface in my eyes. Ranked by used space Git (471MB) wins, followed by Bazaar (482MB) and Mercurial (554MB); the numbers are for the whole tree including working tree.

The used versions are given in the table, all times in seconds. For the sake of completeness, Mercurial is also listed in the table and compared to the ratios Jordan reached.

Edit: I corrected the repository sizes because Git's gc command gives a good improvement in repository size. Additionally I should add that no custom options were used, just the straight commands.

Task

Git 1.6.4.2

Bazaar 2.0 RC1

Ratio

Ratio Git 1.5.4.3/Bzr 1.3.1

Ratio Git 0.99.9c/Bzr 0.7pre

Mercurial 1.3.1

Ratio

Ratio Git 1.5.4.3/Bzr 1.3.1/Hg 0.9.5

Initialization

0.008

0.783

0.010

0.257

0.100

0.265

1 : 97.88 : 33.13

1: 3.88 : 1.59

Adding files

14.612

6.556

2.229

2.930

1.320

1.867

7.83 : 3.51 : 1

5.65 : 1.92 : 1

Committing large changes

5.270

52.685

0.100

0.410

0.440

41.836

1 : 10 : 7.94

1 : 2.41 : 1.68

Diffing no changes

0.110

0.182

0.604

0.007

0.00025

0.731

1 : 1.66 : 6.65

1 : 138 : 3.91

Getting repo status

0.313

0.818

0.383

0.305

0.022

0.630

1 : 2.61 : 2.01

1.14 : 3.74 : 1

Small commit

0.338

1.282

0.264

0.044

0.058

1.278

1 : 3.79 : 3.78

1 : 22.7 : 4.82

gentoo-dev for Gentoo users (September 11, 2009, 00:56 UTC)

Maybe I’m the last to stumble upon this… anyway: Nabble is monitoring gentoo-dev offering a search and browse interface and two feeds for it: “new message” and “new threads”. I was thinking the “new threads” one could be a great tool to Gentoo users that are not interested in every single mail (I currently am) but still would like to keep on track of the big picture of gentoo-dev.   I would have needed just that for the Google Summer of Code mailing list.

Patrick Lauer a.k.a. bonsaikitten (homepage, stats, bugs)
"/usr/portage is my overlay" (September 11, 2009, 00:33 UTC)

... and I wish more devs would focus on getting things in the tree. The proliferation of overlays is really nice because some have quite exotic stuff, but I find it frustrating to have to use 12 overlays to get all the apps I want/need. So please, if you can, consolidate. Push things to sunrise instead of your private overlay. And if it works (even it a bit ugly) push it to our main tree. Mask it if you don't like it. But please try to avoid handing users this nice puzzle game with 12 incompatible overlays that break random other stuff ...