 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.
May 03, 2009
In case you were wondering what the hell is happening with gnome 2.26 still sitting in the overlay, well, we started moving it to the tree. It's going to take a while before everything is in tree but it is on its way. Don't forget to fill bugs if you find one that is really new so we can write a nice upgrade guide if needs be. For now the only issue is the gnome-desktop upgrade that needs a nice message for non-portage-2.2 users but we are not there yet.
|
May 02, 2009
For a small team, deploying 3500 XO laptops in 10 schools is a significant challenge. The difficulties include assigning the correct number of laptops to each class, ensuring that each child has a laptop, and having some way of tracking which child owns which laptop for the purpose of future tech support and repairs. Additionally, the handout process can be difficult - children are extremely excited to receive their laptops, hence the classroom environment can easily ascend into chaos, becoming rather stressful. The children also need some initial guidance to complete the installation (entering your name, and choosing colours for the sugar interface).
For the OLPC Paraguay deployments in Caacupé, we created a system which worked rather well. Actually, the basis of it was shamelessly copied from Uruguay, as recently observed by Sebastian Codas.
First, the preparatory stages:
- The teacher of each class creates a register of their students, including their national ID number. (In Paraguay, the children are required to obtain national ID before receiving a laptop, whereas having national ID at that age is ordinarily quite rare. The huge increase in the number of children with ID in Caacupé is another significant success of this project.)
- The principal of each school submits all the registers to ParaguayEduca.
- The registers are entered into ParaguayEduca’s inventory system.
- The inventory system generates a label for each laptop, including: student’s name, class, school, and a random, unique ID. The unique ID is also printed on the label as a barcode.
- When printing the laptop labels, the inventory system also generates the labels to go on the laptop boxes (up to 5 laptops per box), including: school, class, and total number of boxes that should be received by that class. Laptops are combined into boxes by classes - no box ever has more than 1 destination.
Secondly, the process of applying the labels:
- Each box of 5 laptops is unboxed individually.
- The pages of labels (many per page, grouped by destination classroom) are cut up into individual labels.
- The laptop labels are stuck to the laptops, inside the battery compartment.
- Each laptop is scanned into the inventory system using a USB barcode scanner. Note that two barcodes are scanned per laptop (which are next to each other): First, the label with student information as described above; second, the already-present barcode that shows the serial number of the laptop. This creates an association between the unique serial number of each laptop, and the student that will receive it.
- The laptops are reboxed, with the appropriate labels being stuck to the box.
- The laptop boxes are stacked according to which school they are heading to.
Labelling laptops in the warehouse
Finally, the delivery:
- The laptops for an entire school are loaded into a truck.
- We drive to the school.
- We request the help of 15 or so of children from upper grades, ones that can carry laptop boxes.
- We unload each laptop box from the truck, giving it to a child. An accompanying teacher clarifies the exact location of the classroom, and the children move the boxes.
- In the classroom, a volunteer explains the process to the teacher: 5 laptops per box, each laptop has a label. Simply read out the student’s name as printed on the laptop, insert the battery, hand over the laptop and a charger, and move onto the next one. Note that no registration or paperwork is needed here (it was done much earlier), it is literally handing out the laptops to excited children.
Easy laptop handout process
There are several nice points about this system. Firstly, laptop handout, which can be a stressful and difficult process, is now incredibly easy and can be done by anyone (all the difficult parts including paperwork have been done beforehand), allowing us to harness a group of local volunteers without any prior involvement in the project. Secondly, the information (student name and class) visible on the label can be easily used by anyone to return a misplaced XO to its owner, and further enforces the principle of child ownership. Thirdly, it’s quite failure-proof: the label is inside the battery compartment so is unlikely to be lost or damaged, but even if so, a new label can be easily generated from the serial number of the laptop (which is very difficult to displace, being additionally stored on a chip inside the laptop!).
However, no system is perfect. Any system which requires someone to do something 3500 times — such as slicing and applying labels — is time consuming and prone to human error. We were a little low on space, in a hot and smelly warehouse. Nevertheless, the project itself and the experiences in the schools were more than enough to keep us motivated.
It’s amazing to look back on the week and to see how much work was done, even if we did start at 5am every day! Within 4 days, we completed entering the registers into the inventory system, finalizing and testing connectivity and electricity at schools, printing labels and labelling laptops, and of course delivering laptops to schools and assisting the handout.
|
Virtualisation woes, again (May 02, 2009, 12:09 UTC)
I know this starts to get old, with my ranting about virtualisation software, but since I’m trying my best to optimise the power of Yamato to software testing, I’m still working on getting virtualised systems to properly work for me.
In a long series of blog posts ranting about VirtualBox, QEmu, KVM and so on, there was exactly one system that worked quite fine up to now: Windows XP (SP3) under VirtualBox. With the latest release, though, this was broken too: network started up then came crashing down, with a striking resemblance to an old Solaris problem .
Since I was in need to have my Windows XP virtual machine working for a job, I tried porting it to Parallels on my iMac, with the Parallels demo (since my license was only valid for 3.x series). After waiting for the 64GB image file to convert, it turns out that there is no hope in getting it to start: the VirtualBox additions drivers crash with a blue screen of death at boot when they are executed outside of a VirtualBox instance; the Windows Recovery console does not allow to remove the drivers from loading, and trying to delete the drivers to avoid them from loading was not an option, since they get installed in the program files directory (that the recovery console cannot access).
At the end, given the absolute unreliability of VirtualBox on every operating system at this point, I simply gave up and paid for the upgrade of my license to Parallels 4, which is now providing as my only Windows XP instance (which I’m still unfortunately tied to for work), and deleted VirtualBox from my system. Why, you’d ask, since networking not working is far from the biggest problem out there? Well the biggest problem, and the final straw that broke the camel’s back, was that while trying to figure out why Samba was not working, VirtualBox’s network filter module crashed the kernel. So what? Well, VirtualBox decided that rather than using the quite well-tested mixed kernel/userland TUN/TAP networking system, or the userland virtual network (with tap to interfacing it with the rest) provided by VDE, they had to provide a kernel module instead. For performance reasons, or, quite most likely, so that they can have the same interface to the network internals between different operating systems. Do I have to make it explicit how this is a problem?
Interestingly, while writing this I noticed that there are problems downloading VirtualBox and the thing also reminded me of how many time they messed up the ebuilds by changing the tarballs…
But it doesn’t stop here. Remember the NetBSD trouble with the networking I reported about one month ago? Well, I wanted to see if something changed with the new NetBSD 5.0 release (I actually wanted to make sure that feng detected the newly-added POSIX Message Queue support properly), but still no luck, I don’t see any network card with whatever model I provide to KVM, included the e1000 that I’d expect NetBSD to support at least.
On the other hand I was at least able to get Ubuntu (9.04) working on KVM, next step is Fedora 11, so I can actually test feng on other distributions as well as Gentoo.
|
Desktop without plugdev (May 02, 2009, 01:26 UTC)
For quite a while now, Gentoo has used the plugdev group as a catch-all for Things-You-Need-Special-Permission-For-On-Desktops. This includes automounting (what it was originally for), dbus policy, networkmanager policy, and so on.
As of today, modulo bug # 268223, I have what appears to be a full working desktop without being in the plugdev group. This means, in my opinion, that policykit/consolekit is fully useful on Gentoo.
|
May 01, 2009
I have one silly project I should probably look forward to work on this weekend to vent off some steam: getting my WRT54GL router to run with Gentoo/MIPS. I know it’s probably going to fail because I know near to nothing about MIPS, I know nothing about Gentoo/MIPS, and I remember being told that the mipsel target that WRT54GL are is not well supported by Gentoo. Either way, I’m going to try.
You could probably be wondering why I would be trying something as silly as this, and the reasons are actually a bit of a series. The first problem is that I lack an IPMI agent for accessing Yamato remotely (for remote light out and other things) and I’m sure that’s going to be useful to me soonish. The second one is that I need to set up again the routing of my office with a single wireless client, instead of the current setup which I prepared last year with Yamato having a wireless card.
The problem with IPMI is that I plan on not being at home all day every day in the future; I actually hope to be able to get a driving license this year and make good use of it by finding a job out of home (especially important for my mental health lately!) and in that case I’d be likely to need a way to access Yamato remotely if it gets messed up. Having a low-power system like the WRT to work as a jump box is acceptable I’d say.
With routing, the issue is at the same time simpler and more complex. Simpler because I just need a router to route between the general wireless network (which is accessible by almost anybody) and the wired network that I use for the office and my bedroom. More complex because the original setup used the WRT54GL, then I decided to move to just a single network card, but now I’m in a setup that is quite messed up: Yamato routes all the traffic of PlayStation 3, AppleTV, and iMac, as well as the eventual computers I need to fix and other stuff like that which actually translates the whole thing into a real mess, especially because I ended up splitting the network to such extents that applying NFS ACLs simply by IP masks is impossible.
Of course I could just be using OpenWRT like I did before, but since every upgrade of OpenWRT has been a real mess to deal with (with all their changes into setup, interfaces, nvram and so on), I’m actually thinking that Gentoo would be easier to maintain for me, given I’d just have to update the image once in a blue moon hopefully. I could also just start the router through a TFTP-provide image and then leave it to be with that. At any rate, it would also be a nice experiment and a way to learn a bit more about embedded systems, so…
Right now I only found how to take it apart and I noticed that I have to solder in myself the pins for serial console access, unfortunately it’s almost 1am so soldering them in right now is out of question (I also have to find the pins, which I’m not sure I have at home, worse case scenario I’m going to desolder them from somewhere). I should probably go taking a look to whether the Linus kernel tree can boot on this thing. When I last used it, OpenWRT only supported 2.4 on it; while 2.6 was being worked on it didn’t work on this model, and the wireless network was supposed never to work on it, since it’s using the infamous Broadcom wireless chip (which nowadays might actually work out of the Linus tree via the b43 driver).
If anybody (especially the colleagues actually working on Gentoo/MIPS) have a clue about what I’m to expect out of this, I’d be quite happy to hear it, even if it’s “You’re crazy, it’s never going to work” or “Leave it alone, it’s too much hassle to bother with”.
Oh and yah, I know this thing is not powerful enough to build and it’ll have to go through cross-compiling, and cross-compiling with Portage is not nice, and all the stuff like that. I guess the point is that I intend to work a bit more on that matter, even if currently I’m not paid to do so (I was for a while some time ago). There are more than a few things that I’m interested in looking at to find a solution, actually. It’s very low priority (unless someone bribes me to pick it up ) but maybe I can be of help to the broader picture somehow.
|
I call this “long-awaited” because I promised Donnie to write about this a few months ago, but I haven’t had time to work on it in quite a while. Since today it should be an holiday, yet I’m still working on a few things, I’m going to try filling the hole.
I have been criticising CMake quite a bit on my blog, and I have been trying with all my strength to show that autotools aren’t as bad as they are made appear since I think that is still the best build system framework we have available at the moment. But in all this, I’m afraid the wrong message was sent somehow, so I want to clear it up a bit.
First of all, CMake isn’t as bad as, say, scons or imake; it’s also not as bad as qmake under certain circumstances. I don’t think that CMake is bad in absolute; I just think it’s bad as an “universal” solution. Which I have to admit autotools are bad for too, to an extent. So let me explain what my problem is.
For Free Software for a long time the autotools framework was the almost de-facto standard for lots of packages; switching away from that to CMake just because “it’s cool” or it seems easier (it does seem easier, mostly because the autotools documentation and examples are full of particularly bad code), it’s not the right thing to do since it increases the work for packages, especially because for some things CMake isn’t yet particularly polished.
I blame KDE for the CMake tide not much because I don’t think it was the right choice for them, but rather because they seem to pinpoint the reasons to the change to autotools defects when they are, actually, making a pragmatic choice for a completely different reason: supporting Microsoft Visual C++ compiler. As I have already expressed more than a couple of time, the autotools-based buildsystem in KDE 3 is a real mess, a bastardised version of autotools. Blaming autotools in general for that mess is uncalled for.
It’s also not only about Windows support; you can build software under Windows with just autotools, if you use cygwin or msys with GCC, what you cannot do is building with Microsoft’s compiler. Since GCC objectively still lacks some features needed or highly desired under Windows, I can understand that some projects do need Microsoft’s compiler to work. I’m not sure how true that is for KDE, but that’s their choice to desire Microsoft’s compiler. And CMake allows them to do that. More power to them.
But in general, I’m very happy if a project whose build system is custom-made, or based on scons or imake, gets ported to CMake, even if not autotools, since that would mean having a somewhat standard build system, which is still better than the other options. And I’m totally fine if a project like libarchive gets dual build system to build on Unix and Windows with the “best” build system framework available on those systems.
Still, I think CMake has a few weak spots that should be taken care of sooner rather than later, and which are shared with autotools (which is what I usually point out when people say that it’s always and only better than autotools; while it’s actually making similar mistakes).
The first is the fact that they seem to have moved (or people claim they moved) from an actual build system solution to a “framework to build build systems” which is more or less what autoconf basically can be said to be and what scons always have been. This is particularly bad because it ensures that there is no standard way to build a package without actually having to check the definition files for that particular release: scons provides no standard options for flags handling, feature switching and similar; autotools can be messed up since different packages will use the same variable names for different meanings. If CMake were to provide just a framework, it’s have the same exact problem. I think somewhat this was supposed to be limited, from what I read when I tried to learn CMake, but the results now don’t seem to be as good.
The second problem is slightly tied to the one above, and relates to the “macro hell”. One of the worse issues with autoconf is that beside the set of macros provided with autotools itself, there are basically no standard macros. Sure there is the Autoconf Macro archive but even I fail at using it (had some problems before with the license handling, should probably try to use it again), and the result is that you end up copying forking and modifying the same macros over a series of projects. Some of the macros I wrote for xine are now used in lscube and also in PulseAudio .
CMake provides a set of modules to identify the presence of various libraries and other software packages; but instead of using it as an official repository for these macros, I’ve been told that they are “just examples” of how to write them. And some of them are very bad examples. I already ranted about the way the FindRuby module was broken and the issue was ignored until a KDE developer didn’t submit his version. Unfortunately there are still modules that are just as broken. The CMake developers should really look into avoiding the “macro hell” problem of autotools by integrating the idea of a macro archive with CMake itself, maybe having an official “CMake modules” package to install to the side to provide the package search macros, which can be updated independently from the actual CMake package.
I have lots of reserves about CMake, but I still think it’s a better alternative than many others. I also have quite a few problems with autotools, and I know they are far from perfect. Both build systems have their area of usefulness, I don’t think either can be an absolute replacement for the other, and that is probably my only problem with all this fuzz over CMake. Also, I do have an idea of what kind of buildsystem framework could hopefully replace both of them, and many other, but I still haven’t found anything that comes near it; I’ll leave that description for part two of this post, if I can find time.
|
April 30, 2009
Eix goodness (April 30, 2009, 22:00 UTC)
Today seems to be the day of multi-assigned bugs, so I decided to write a few words on why you should not file a multi-assigned bug but rather file a tracker and then multiple bugs, which is what I do for the issues I found with tinderbox (and not just that) and the way I reached over 1500 bugs open at one point.
While creating new bugs means that you got more work to do, and even the bugzilla database gets loaded more, mutli-assigning a bug (that is creating a bug with a list of ebuilds involved and CCing all the maintainers of those ebuilds) means overloading the mail server and even worse the mailboxes of the developers involved. For each comment (useless or not) you get to send multiple emails, and it’s not extremely unlikely that a dev gets to receive multiple copies of the same comment if he’s on many aliases.
Even more obnoxious is when you get in a fight on whether that’s the correct way to proceed for one given package, and you get to have back and forth arguments between the filer (or the QA team, or whoever) and the maintainer of that package that get sent to multiple developers who are not involved and who are most likely not interested in the problem. Even worse, you have no clear timeline on when a bug was corrected for a given package, since the history is merged and you got to check on when someone commented, and de-CCed an alias from the bug.
The tracker method allows for the tracker to be visible by the QA team, which can monitor which bugs get fixed and which gets ignored, and each team only gets to see what they have to be concerned with. And to file the actual bugs, you can just use the ”Save as bookmarkable template” method that I also use to file my bugs.
So please use trackers and templated-bugs, I beg you!
|
My quest for MIPS N32 firefox could finally come to an end, since I just got it scores the same as X86 firefox.
Remember I said it would encounter bus error on a few websites in my last related post. But I didn't plan to look into this issue before dealing with cache aliasing problem.
However, since Rayson Ho helped me to locate the exact cause of this issue, I decided to finish it first.
The problem is caused by unaligned access of ldc1/sdc1 instruction. These two instructions' operand must be 8 bytes aligned. But when crashing, the operand is only 4 bytes aligned.
After some discussion and experimenting, I found a workaround for sina.com.cn crashing problem. Yeah, a padding pointer sounds scary and fragile, but it did work. Before posting any comment to this, please make sure you have read all the emails in that thread.
Then Fai Wong reported to me that it still crash in acid3 test. So I took another look. This time the problem happened in a different location, and it is harder to solve. Because the object in question sometimes is 8 bytes aligned, but sometimes it is only 4 bytes aligned, which does not make any sense, since the object contains double variable. So, either way, the double variable just can't get aligned in both case. I thought of kernel exception handler. I did come up with a patch and it worked! But since Ralf refused to accept it, I had to move on. And I found the reason is because of the way the memory is allocated - placement new. Thanks to LI Daobing for telling me this. And this is what the final patch looks like.
|
Gentoo: Bitlbee is sweet! (April 30, 2009, 03:30 UTC)
I recently moved from using pidgin to using bitlbee (net-im/bitlbee). Bitlebee is sweet because it allows me to access "traditional IM" via irssi in a screen session from anywhere that I am via my co-located server. Of course, you can use any irc client that you are familiar with. As more and more of my friends move away from traditional IM, I don't feel a need to pay as much attention to the various networks. So, it can stay off my desktop without worries. Do you use bitbee? Any fun tips?
|
April 29, 2009
Gentoo has been accepted for its 4th consecutive year in the Google Summer
of Code! Check out our
GSoC 2009 homepage if you are interested in this year's GSoC for Gentoo.
If you'd like to apply to be a mentor, you can do so on the
webapp. Please read the
mentoring guide before applying.
Interested students can browse Gentoo's project ideas
and student applications will be accepted starting March 23rd.
|
The Gentoo embedded team would like to announce that we will be automatically
building and releasing stages for ARM and SuperH/SH. We hope these stages will
help out people interested in developing embedded linux applications.
On the ARM side, we are currently releasing stages for the following CHOSTs:
- arm-unknown-linux-gnu (old ABI, in progress)
- armv4l-unknown-linux-gnu (old ABI, in progress)
- armv4tl-softfloat-linux-gnueabi (EABI)
- armv5tel-softfloat-linux-gnueabi (EABI)
On the SuperH/SH side, we are currently releasing stages for the following
processors:
The stages are available under the /releases/arm/autobuilds
directory for ARM and /releases/sh/autobuilds for SH at your
favorite mirror.
Because building stages for these architectures takes a while, we plan on
releasing stages on a monthly or bi-monthly basis. If you would like to talk
about Gentoo on those architectures, please join us on #gentoo-embedded @
irc.freenode.net.
We would like to thank QNAP Inc.
and Marvell Technology Group
for providing us with support and hardware for ARM based chips. However we
would like to expand our ARM support to the armv6 and armv7 processors. If you
or your company can provide us with some hardware we would greatly appreciate
it. Please contact the Gentoo ARM team if
you or your company are able to assist us.
We would like to also thank Renesas Technology Corp.
who has graciously provided us hardware and support for the SuperH platform.
|
As you can see, your favorite website now displays more information,
reflecting the activity that's been going on behind the scenes all
along. Thanks to popular demand, the latest blog posts from planet.gentoo.org, packages from
packages.gentoo.org and
security announcements are summed up on Gentoo's home page.
Discuss
this!
|
What: Gentoo contributors get together to help each other fix bugs
Where: irc.freenode.net, #gentoo-bugs
When: Saturday, January 3, in a timezone near you
What do you need to bring? - A Gentoo system, an Internet connection and an IRC client
- Your bug. If you don't have one, we will find you one to suit your area
of interest and your skills
- Your favorite editor
- A way to test that your bug is fixed (asking people counts!)
- You don't need to know C, C++, or bash
What's a bug? Gentoo's way of tracking change requests. A change
request can be anything from "I've found a typo in foo" to "I've built this
really useful program called bar but there's no ebuild for it." Bugs have
various levels of helpfulness, from identifying the existence of a problem
to localizing the problem to providing the patch to fix it.
There are bugs in documentation such as man pages as well as ebuilds and the
source code that Gentoo distributes. These bugs are problem reports. Bugs
for things Gentoo doesn't do yet but you think should be done are feature
requests. Bugday is more about fixing problems than adding features,
but you won't be turned away if you want help with a new feature.
Want to know more about Bugday? It's held on the first Saturday of
every month. It's an opportunity for everyone to contribute to making Gentoo
better, and eventually you might even become a Gentoo developer. See the
Bugday project
page for more details.
Bugday is about community spirit. Gentoo is a community—there
is no "me" and "them", there is only "we," so instead of lobbying for "them"
to fix your particular bug, work together to fix it! Bugday is an
opportunity to get help to help yourself.
If you've been wanting to get involved but weren't sure how, Bugday is a
great way for you to see what goes on in making a distribution and get
involved in Gentoo.
Discuss
this! Roy Bamford contributed the draft for this announcement.
|
The time has come! Our release engineers have been refining their
automated builds of the minimal CD and stage3 tarballs, and the first
builds are uploaded to our mirrors. Select your favorite mirror and
navigate to the /experimental/ directory. Under the x86, amd64,
ia64, alpha, and sparc64 architectures, the autobuilds directory contains
stages. So far, minimal CD images are only available for x86 and amd64.
We're still working to add automated builds for ppc, ppc64 and hppa as
well as CD images for architectures lacking them. We built the stage3
tarballs from the latest stable packages. Fresh builds will show up
every week, although sometimes we might skip a week if build problems
crop up.
Because these builds are automated, they have not been rigorously
tested as the old releases. Occasionally, you might run into
problems. If that happens, just try a file from a different week.
Please try out these new builds and leave your feedback on the
forums. As always, please report any bugs
on Bugzilla. Happy holidays! Discuss
this! Ben de Groot contributed the draft for this announcement.
|
In future releases, Gentoo will focus on a more
back-to-basics approach that will give you up-to-date
install media on a regular basis and make much better use of our
human resources. We're looking into automated weekly
builds of the minimal CDs and stage tarballs as well as
maybe an annual LiveCD release. We will keep you updated as we
decide on the details of this new approach.
Consequently, we're canceling the 2008.1 release. The
release engineering team has to reconsider its
priorities—we overstretched our human resources during the
prolonged 2008.0 release process. This caused too much stress
for our release engineers and multiple postponements of the
release.
You can help! The release engineering
team is looking for new volunteers because it perpetually has a
severe lack of manpower. We are particularly looking for people with a
good grasp of ebuild development and the ability to debug/fix problems
that crop up during building and testing of the stage tarballs and ISO
images. We will update the staffing needs page with more details.
Discuss
this! Ben de Groot contributed the draft for this announcement.
|
What: Gentoo contributors get together to help each other fix bugs
Where: irc.freenode.net, #gentoo-bugs
When: Saturday, September 6, in a timezone near you
What do you need to bring? - A Gentoo system, an Internet connection and an IRC client
- Your bug. If you don't have one, we will find you one to suit your area
of interest and your skills
- Your favorite editor
- A way to test that your bug is fixed (asking people counts!)
- You don't need to know C, C++, or bash
What's a bug? Gentoo's way of tracking change requests. A change
request can be anything from "I've found a typo in foo" to "I've built this
really useful program called bar but there's no ebuild for it." Bugs have
various levels of helpfulness, from identifying the existence of a problem
to localizing the problem to providing the patch to fix it.
There are bugs in documentation such as man pages as well as ebuilds and the
source code that Gentoo distributes. These bugs are problem reports. Bugs
for things Gentoo doesn't do yet but you think should be done are feature
requests. Bugday is more about fixing problems than adding features,
but you won't be turned away if you want help with a new feature.
Want to know more about Bugday? It's held on the first Saturday of
every month. It's an opportunity for everyone to contribute to making Gentoo
better, and eventually you might even become a Gentoo developer. See the
Bugday project
page for more details.
Bugday is about community spirit. Gentoo is a community—there
is no "me" and "them", there is only "we," so instead of lobbying for "them"
to fix your particular bug, work together to fix it! Bugday is an
opportunity to get help to help yourself.
If you've been wanting to get involved but weren't sure how, Bugday is a
great way for you to see what goes on in making a distribution and get
involved in Gentoo.
Discuss
this! Roy Bamford contributed the draft for this announcement.
|
New notebook (April 29, 2009, 15:49 UTC)
After many years of good service my old HP Compax nx9005 had to be replaced by a younger model...and there it is the Dell Vostro 1510. Although I wanted to buy an AMD-based laptop again my choices where so limited I went with Intel. Anyway, the processor is a T8100, 3GB of RAM (so I stay with x86), 250GB of hard disk space, a non-glare TFT panel with 1440x900. Really a nice piece of hardware although the keyboard sounds a bit flaky. Gentoo is now installed on it and apart from some glitches (no working backlight dimming yet) it is rock-solid.
|
April 28, 2009
I have been experimenting with Qt Creator since the first release. I have always preferred a minimal editor for development work, with my main needs being good syntax highlighting, the ability to switch between different files quickly and something that stays out of my way as much as possible. Previously I had used Vim, Kate and several konsole instances the majority of the time.
Recently I have been looking for something with better integration, and so had been slowly keeping an eye out for a lightweight IDE. My main requirements were something lightweight, good C++ support, ideally good Qt support and CMake integration. Over the weekend I tried the latest Qt Creator 1.1 release and was really impressed.
Seb Ruiz made a great post on Qt Creator 1.1 that summed up many of my thoughts, and gave a quick walkthrough. It was not immediately obvious how to import a CMake project, I was looking for an import project option. All that is necessary is to go to file and open. You can then open the base CMakeLists.txt file for your project and the CMake plugin will do the rest.
From there on in you get great integration with the build system, version control (Git and friends), and your friendly GDB debugger. Under projects you might want to quickly add -j5 (if you are lucky enough to have a quad core machine) to the additional arguments input for make, and select the main executable target for your project if you also have several other executable targets (unit tests etc).
The first time you debug a project you will be prompted to build the Qt debugger helper. Then the integration with GDB really wins over using GDB directly, or using ddd which I had been using more and more recently. I would highly recommend trying Qt Creator if you are looking for a lightweight, cross platform IDE. There are certainly other great IDEs out there, but I think that Qt Creator is a great fit for my development style (and may be yours).
|
I recently ran into an issue where I wanted to move several KVM based virtual machines from one server to another server. There’s several ways you can accomplish this depending on what you want to do. In my case I was using LVM for the disk backend, so simply copying the disk image files wasn’t an option. It boiled down to two basic options.
- Put system in single-user mode, rsync the contents over, and reinstall grub
- Use dd and copy the whole LVM volume over piped through ssh
The advantage using the rsync method is that you’re only copying the files you need over, thus less data transfer happens. But then you run into needing to re-run grub (which generally isn’t a problem). In addition, if you’re using LVM within the LVM volume for the VM and the volume group is named the same, you run into some interesting issues. The advantage for using dd is that you can get a literal copy of the disk image and just start the VM back up without any other steps. Of course, this will only work if the volumes are the same on both ends.
So I decided to go with dd but ran into a problem of seeing the progress of a 15G volume copy. I did some digging around and found a blog post that mentioned using a command line application called ‘bar‘ so I decided to give it a shot! Its a fairly simple application that just creates a basic progress bar based on the data being piped into it. If you’re running Gentoo, the package is called app-admin/bar.
Here’s the command I ended up running:
dd if=/dev/lvm/cholula-disk | bar -s 15g | \
ssh -c arcfour $host "dd of=/dev/lvm/cholula-disk"
When ran, it gives you output similar to:
6.0GB at 17.9MB/s eta: 0:08:32 40 [========================= ]
The downside is that you need to specify the block device size before hand, but for something simple like this its quite nice. Of course I could just use one of the many dd forks out there which include progress bars but this is quick, dirty, and simple!
I used the arcfour cipher mainly to reduce the CPU overhead and increase the throughput, but you should probably never use this cipher on an untrusted network as it does have weaknesses. I didn’t try doing throughput tests on other ciphers, but it would be interesting. It took me approximately 10-12 minutes to copy a 15G volume over a gigabit network which isn’t too bad.
Another trick you can do is utilitize the LVM snapshot feature and create a snapshot of the running volume. If any data changes on the volume, it won’t be copied over obviously, but it will at least let you do a cold “live” migration of sorts.
|
April 27, 2009
Bored? (April 27, 2009, 22:50 UTC)
Are you tired of laying around the apartment, wishing you had something fun and productive to do?
NOW YOU DO!
We have 400* open bugs assigned or CC'd to maintainer-needed in bugzilla. Many of these are easy fixes, like packages not respecting CFLAGS, or CC hardcoded, or missing dependencies. You (yes, you) can earn the admiration and respect of your peers** simply by fixing _one_ maintainer-needed bug per day. How much easier could it be? And, in a limited time offer, if you go as far as to find a maintainer or herd for a maintainer-needed package, you'll receive a miniature Larry the Gender-Confused Cow bobblehead absolutely free of charge***.
Act now, repoman is standing by.
* okay, 399. ** okay, just me. *** okay, not really
|
Continuing from part 1:
After several hours of preparation in the gloomy hours of Tuesday morning, we hopped in the truck and returned to the school of Tiniente Fariña to deliver laptops to the students who attend the morning shift. Everything went smoothly, as the teachers had already learned the handout process from doing it in the previous afternoon.
Following on, we delivered to the rural school of Daniel Ortellado. Like many schools, this one has now been themed for OLPC by the students and community. You can see one of the several XO logos freshly painted on the exterior in the photo below, and note the new colours of the classroom interior.
Next up was the lovely school of Profesor Cabrera, slightly off out into the countryside. We arrived with perfect timing; the children were lined up in the courtyard, teachers and parents seated, ready to commence the ceremony. This video captures the excitement. Soon after, the children began to chant ‘X-O-X-O’ at the tops of their voices. After some brief talks including one from the governor of Caacupé, we handed over 6 laptops (one to each child from each grade) and then moved into the classrooms to hand over the rest.
In the afternoon, we headed to Cristo Rey. This school was a little different, as at least for the younger grades, all the parents were present and they were the recipients of the laptops (before passing them onto their children later). The sheer number of people in the school made things a little more chaotic, but it was evident that the teachers had planned the procedure in advance and were well prepared for the handout.
We used Wednesday to take care of some of the smaller schools. Bright and early was Raúl Peña. It was interesting to see children head straight for the internet in this school, whereas in other places, Speak and Record were the first instant-hit activity epidemics. This school is located near the main WiMaX base station which provides internet to all 10 schools, and hence has an impressively speedy connection. The internet connections are provided for free by Personal, a loyal sponsor of the project.
Next up, we delivered to Santa Teresita Cabañas, a rural school. This school is tiny but in some ways that made the event even more significant; the children and parents had actually turned up eagerly in the morning even though we told them that we would not be arriving until the afternoon! They held a very cute ceremony with an impressive dance performance, and then we handed out laptops to the entire school on-stage.
Somehow still on schedule, we headed to Dr Pino to conclude the day, another rural school. Many parents were in attendance of the handout.
more photos on flickr.
Continue reading part 3.
|
Continuing from part 2:
We finished the deployment on Thursday morning with two of the larger schools. First thing, we went to Tiniente Aquino, in time for their ceremony. While quite used to these now (various talks and testmonials, press, the national anthem and a dance performance) it was again exciting to witness the excitement in the air. At the close of ceremony we went into the classes and initiated the handout.
Now experts in the art, we arrived at the final school (for now), Herminia Machada. The introductory ceremony featured a dance including an XO laptop! Everyone was very friendly and after a small hiccup with the server, everything was fine.
To mark the end of the deployment, we returned to the school of Daniel Ortellado, where a lunch had been prepared for the whole team. We then spent some time with children exploring their laptops. As we sat down for a group photo, more and more children came over to take photos using their laptops, refusing to let us leave before they had captured the moment for themselves. For us, it was a nice point on which to end the week.
Of course, with only a small team distributing almost 1000 laptops per day, some hiccups are inevitable. The worst error was when we accidentally missed 6 classes when deploying at one school, but with support from the teachers we finished everything off a few hours later.
Some children had not been correctly registered with us, so did not receive laptops initially. Try telling a child that there is no laptop for them when all of the other children are turning theirs on for the first time. Raúl was so touched by one teary-eyed girl in this situation that he actually gave her his personal laptop, but after a few minutes of exploring she was considerate enough to hand it back and wait a day or two for us to solve the problem.
Another difficulty is with faulty laptops; only a few have been reported so far, but it’s difficult when you encounter them. Our strategy for this and for missing laptops was for the teachers to make a list of problems to hand to the principal of the school. With our tight schedule, it was simply not possible to fix the problems on-the-spot, but we managed to attack them school-by-school in timely fashion.
ParaguayEduca officially formed less than a year ago, so it is a great achievement for them to have now saturated 50% of a big city through deployments in 5 rural and 5 urban schools. Funds have already been secured to purchase laptops to saturate the other 50%. The support from sponsors, teachers, parents and communities here is incredible; the combination of public and private sector interest plus links to government seems to be the perfect recipe for such a project in this country.
Of course, this is not the end of the OLPC Paraguay implementation, it is merely the start.
|
Desktops, etc. (April 27, 2009, 01:31 UTC)
Man, it's been awhile since I blogged. I meant to keep putting up a monthly Xfce desktop, share some tips, talk about the latest Gentoo work, etc. And then real life got in the way.
Laptop
I killed yet another piece of hardware when updating my Thinkpad R61i on Friday. I've been sick this whole week, so I had some free time. The laptop hadn't been updated since early February, so there were 176 packages, including the big move to GCC 4.3, which necessitated a system rebuild. Unfortunately, I left the battery in while the system was on AC power for the compiling work. I guess the heat must have built up too much, because the battery got fried. Got the dreaded "battery light flashes amber rapidly" error. So now I only have the extended-life battery, which is heavier and bulkier.
Add that to the list of hardware that compiling Gentoo has killed over the years. The list includes another battery, an external power brick, an internal PSU, two motherboards, two RAM sticks, one RAM slot, two hard drives, and a fan. I'm really on a roll, here.
I still can't find a replacement battery for less than $90, even on eBay, so I may hold off. What I did do was order two more gigs of RAM, to bring the total up to 4GB. Only cost $40 at Amazon, free shipping. Why the RAM? While updating, I ran into the dreaded OOM-killer! The GCC 4.3 compile uses more than the 2GB available and it aborted the merge. This was with nothing else running, too. So be warned: if GCC dies when you move to 4.3, back off on your MAKEOPTS. I had to adjust mine from -j3 to -j2 while compiling GCC and glibc.
Also, while I was updating my whole system, I decided to move the rest of my X/kernel stack to ~arch, as I wanted the new Intel KMS/GEM/UXA hotness. This necessitated using ~arch xf86-video-intel and Mesa, as well as ~arch gentoo-sources, as 2.6.29 has some needed code not present in 2.6.28. I discovered that while this part of the graphical stack was just fine for KMS and fast graphical login, xorg-server-1.5.3 resulted in hard lockups as soon as I opened any windows. I had to grab xorg-server-1.6, libXfont, and randrproto from the X11 overlay in order to get a usable environment. It works great! No more lockups.
So, how much of an improvement is the new stack over what was available in February? I'll let the following numbers speak for themselves. These are the median-high numbers recorded. For the old stack, the numbers varied from 48FPS to 59FPS. For the new stack, from 489FPS to 504FPS. Sync to vblank and vsync have never been enabled.
xorg-server-1.5.3-r1, libdrm-2.4.4, xf86-video-intel-2.6.1, mesa-7.3, gentoo-sources-2.6.27-r8
$ glxgears
Failed to initialize GEM. Falling back to classic.
292 frames in 5.0 seconds = 58.272 FPS
xorg-server-1.6, libdrm-2.4.6, xf86-video-intel-2.6.3-r1, mesa-7.4, gentoo-sources-2.6.29-r1
$ glxgears
2516 frames in 5.0 seconds = 503.174 FPS
Now, the usual caveat about glxgears not being a good benchmarking tool applies here. However, it is useful for relative comparison from one version to the next. And as you can see, it's an order of magnitude better. I notice that stuff is drawn much smoother; there's less flickering especially when shifting Terminal windows around. And I haven't hardly begun to tweak my system for best UXA performance. KMS is nice and smooth; it happens pretty quick in the boot process. No more flickering, just fast loading of SLiM and then Xfce.
My xorg.conf is pretty minimal; the only changes I've specified for the Intel driver section are these:
Option "FramebufferCompression" "false"
Option "AccelMethod" "UXA"
Option "Tiling" "false"
Option "EnablePageFlip" "true"
There are probably some other things I should add for maximum performance, so I'll have to spend several more days hunting for 'em. But out-of-the-box, I'm extremely impressed with the current X stack.
Now all I need is smooth full-screen Flash video performance . . .
Xfce 4.6
The other thing I put on the laptop was Xfce 4.6.1. Decided that as long as my core graphics stack is part ~arch, it wouldn't hurt to try out the latest and greatest Xfce hotness. Now that some outstanding bugs were fixed from 4.6.0 (including a remote security bug, and an icons issue), I thought it'd be worth it. It's pretty slick. The desktop environment is initialized a bit faster than even a fully tweaked 4.4.3.
About the only outstanding issue I have with it is that there is no graphical menu editor. At first, I couldn't get a satisfactory menu even editing the XML file by hand; it was just too different from the old one. So my menu was cluttered with useless toplevel entries, such as Web Browser, File Manager, and so on. Fortunately, Mike pointed me to the solution, so now all offending stuff has been cleared out. Right now my menu works just fine, so I only really need a graphical menu editor for convenience's sake.
I really like 4.6 a lot. The artwork packaged with it is outstanding; I'm using one of the stock backgrounds because it's just that sexy.
Xfce 4.6 is a smash hit, so well done, guys. Very well done. And there's even more good stuff planned for the future. There's a great interview on Planet Xfce with one of the core developers. He discusses some of the exciting stuff coming down the pipe for Thunar, so make sure to read it.
Gentoo
I've been rather quiet on the Gentoo front for the last three months, because life in the outside world has a way of unexpectedly intruding on me. I've been on devaway since February while I try to get stuff into some semblance of order. Sadly, however, I've had to do much more documentation work than I originally scheduled, which keeps cutting into my plans for other areas. I've made a bunch of bugfixes and commits over the last couple of weeks especially. One of the most visible changes is in the Get Gentoo page, putting the automated weekly builds at the top. The handbooks will be updated, too, but they require a tremendous overhaul, so I'll need all the resources of my fellow GDP members to accomplish that. If I can get 'em, that is.
One of the other things I like to do is find some interesting little-known application, determine its usefulness, then hack up an ebuild for it. It's really good practice, actually.
Out of all the applications I've written and updated ebuilds for, the only one that's got me stumped is WordGrinder. I've been in contact with WordGrinder's upstream author, who's a really helpful guy, but I still can't get the ebuild working. While compiling and installing by hand works great, something happens during the compile phase as run by Portage where it violates the sandbox, killing the merge.
Plus, given the pmfile used by the package, it doesn't really respect a user's CFLAGS/CHOST and related configuration. That has to be altered somehow, so I've been trying to work out a similar solution to the one used by our dev-lang/lua ebuilds. No real luck there, but it's not my first priority. What I really want to do is have the merge workin' with Portage. So it's an interesting, informative, occasionally frustrating learning process. 
Anyway, take a look at all the stuff in there. I recently reorganized the ebuilds by category/package, instead of dumping everything into a single directory. Some of these have since moved into Portage sometime after I wrote the ebuild for 'em, and some (like Songbird and WordGrinder) are works in progress. I've run into quite a few nifty apps; places like GnomeFiles are excellent resources. Most of the stuff in here I discovered on GnomeFiles, and a lot of the packages on the website are simple enough that it's just a few minutes' work to hack up an ebuild.
|
April 26, 2009
This marks the end of an unforgettable week for me and the team at ParaguayEduca. Within 4 days, we completed the deployment of 3500 laptops in the city of Caacupé, Paraguay, reaching about 50% of the city’s children aged 6-12. After working close to 16 hours every day, we may have lost out on some eating and sleeping but every minute was worth it!
The week really started on Saturday, when a couple of team members headed to Caacupé to start the process of labelling laptops which I will write more about the other time. They were assisted by a group of volunteers.
On Sunday, the rest of us travelled to Caacupé with high spirits. We are lucky enough to have been given a beautiful, enormous old house in the city which we stayed in for most of the week. We did some planning and set up camp.
Monday started at 4am, a pattern which repeated for the whole week. Most of the team went to the warehouse to continue labelling; I went to finish off some infrastructure and testing work in some schools. When 9am arrived, I had already been working in 6 schools that day. The next step was preparing for the grand symbolic event representing the introduction of the laptops, at the school of Tiniente Fariña. Everything was wonderfully prepared; we had a large audience, lots of press, and had the presence of various important people including the minister of education and the vice president. After various talks and a performance from a well known Paraguayan music group, we handed over the first 10 laptops, to 1 child from each school.

At the close of the event, the children went to their classes and we started the laptop handout for the afternoon students at Tiniente Fariña. Everything went smoothly, I will be writing more about the actual logistics another time. There was much excitement in the air.
Late in the afternoon, we went to the second school, Municipal Santa Teresita. As we walked in carrying boxes, we were greeted with a huge cheer and many smiling children! Another symbolic ceremony was underway, for the parents and children of the school. We began handing out the laptops on stage and moved inside when it got dark. The children were very excited, applauding every single recipient of a laptop, but to my amazement were obedient enough to leave the school without turning on their laptops. The teachers wanted them to wait until the following day, when they would have time to assist the students getting started.
One of the most amazing aspects of the week was simply the excitement of the children. With all of the media attention of the Paraguayan project and the amazing support of teachers and the community, the children were very aware that they would be receiving laptops! Most schools had an opening ceremony, and many have been decorated accordingly. The students had produced various artwork and posters.
More photos on Flickr.
Continue reading part 2.
|
April 25, 2009
For a series of fortunate circumstances, since last week I’ve restarted packaging Ruby libraries, that I needed both for my own blog (Typo) and other stuff. As usual, I’m trying to avoid packaging gems since they can be quite of a pain in the bum to deal with. But since that’s something it’s known already I want to post a few more notes, especially in light of the fact we’ll hopefully be having a decent way to package gems in Gentoo by the end of the Summer.
Beside the fact that gems install lots of crap unconditionally (tests, examples, documentation, compiled object files, a copy of the original gem, ...) and also brings in quite a few dependencies unconditionally (like rake, rspec and similar, which for us are only needed at build time), gems don’t run tests, which means there is no way for ebuilds to self-test the installed package to make sure it works; this actually did bite me with dev-ruby/aws-s3: the two latest 0.6 releases don’t pass tests at all. And I unfortunately have overseen it on dev-ruby/uuidtools, and now that I’ve investigated it, it turns out to be a bug in Ruby 1.8.7 .
What is interesting is that while the rubygems-based installs often bring in stuff like rake, rspec and other testing tools, most of the times they don’t get to require the packages that are only used for tests; I’ll use as example dev-ruby/sparklines that I just added to portage, which I based off Hans’s ebuild in his overlay (which used the gem). While the gem ebuild required dev-ruby/hoe at runtime, because that’s what the gemspec said, my ebuild only requests it at build time if either doc or test USE flags are enabled (because it’s required in the Rakefile itself), but at the same time, for testing it requires two more packages: dev-ruby/dust and dev-ruby/tidy_table (both of which I also added today).
Packaging the new stuff with fake gemspecs is, after all, not too bad, I think I can streamline it a bit more if I drop a few fields in the fake specs and then use generic replacements for the rest, but I’d rather avoid overdoing it since it’s just going to be a temporary solution.
And before you ask, no I’m not really keen on adding this stuff to an overlay for the only reason that I don’t intend on using overlays on the server where this blog is hosted, and since I’m packaging the Ruby code to put it to use from there rather than the original typo itself (see this repository for the public branches I’m using), Portage is where the packages belong.
So expect a few more packages in the dev-ruby/ category for the coming weeks.
|
April 24, 2009
Xorg-1.5 and 2.6.30-rc3 (April 24, 2009, 06:34 UTC)
Last night I keyworded vanilla-sources-2.6.30-rc3. If you're an alpha user,
please test this kernel as it's our first shot in months to get Xorg-1.5 into
working order. If you feel adventurous, you can also keyword Xorg (and all it
needs) and give it a spin. Currently, the glint/Permedia driver is broken, but
nv/nvidia cards should work.
|
April 21, 2009
Where it's at (April 21, 2009, 18:17 UTC)
I know, I know, I should post more often. I have no excuse and as such will
cut to the chase: where we are alpha-wise at the moment.
Xorg 1.5+
The patch from
Ivan has finally made it into the mainline kernel. The earliest vanilla
version having it is 2.6.30-rc2. I'm currently running that kernel and
xorg-1.5 on my dev/testing machine and it's looking good so far. There still
is a problem with the glint driver, but I suspect that is independent of the
PCI access patches. The "nv" driver works perfectly.
Originally, I had hoped I could get them included in .29 or 29.N, but it
was not to be. In the course of working for that I asked myself how much
pestering a kernel developer is willing to put up with (and what a sign of
annoyance would look like with Ivan). I would have loved to see more/quicker
progress, but when people stop reacting to your mails at all, you start to
second-guess yourself.
AGP on the UP1500
Matt has done a superb job of finding out
email addresses and other contact info regarding the PALCode sources. For
those don't know: the PALCode is a sort-of BIOS the Alpha architecture uses.
As such it is one of the key reasons why the AGP port on the UP1500 is little
more than a glorified PCI slot currently: AGP 4x does not work at all because
there are bugs in the PALCode. Since the source to that was never published
and binary-patching such a crucial piece of software (without knowing what
you're doing) is an exceedingly bad idea, getting the PALCode for the UP1500
is just about the only way this will ever get fixed. Unfortunately, there are
several different owners of the IP in the PALCode source. We'll keep you
posted on the progress regarding that.
In a related note, Matt keeps trying to get Hewlett-DEC-Compaq and
subsidiaries to release any piece of source code from the CCC (C
compiler) and related libraries (especially the math library). No luck yet,
but Matt can be very persistent, I have learned. ;)
Moreover, Matt has created a patch page on the
AlphaLinux wiki. Right now, there are patches for the kernel futex
implementation (what caused the tst-robust1 freezes in the glibc test suite),
a patch for several math functions in the glibc (have been broken since
forever) and a patch for ed which fixes a certain set of compile-time
optimizations.
General package status and workforce/load
Armin76 and I are able to stem the package work tide (testing, keywording,
stabilizing) as it is now. But if one of us can't commit the necessary time
(several hours a week, I'd guess), things will start to pile up. Fortunately,
Matt has sent in his archtester's quiz and as soon as I find the time, I will
give it a thorough look and work with him to get him up to speed. Even if he
hasn't commit rights, not having to watch stuff compile all the time will
bring down our workload.
Security bugs
Nothing terribly newsworthy, I'm trying to get to them quickly. If you see
a slow sec bug that we might have overlooked, feel free to bug me by mail or
us by IRC (Freenode/#gentoo-alpha).
Hardware and Performance
I recently benchmarked the UP1500s IDE controller (ALi M5229) with a Maxtor
120G disk against a SymBIOS Logic 53C895 with a 33G Seagate Barracuda. Even
through the SCSI disk is quite a ways older than the IDE disk, it outperformed
the IDE disk in all disciplines (except seek times, but the IDE disk won by a
hair there). So I went and looked up pricing for U2W/LVD160/LVD320 disks on
the major hardware retailer websites. The prices are simply insane. 73GB cost
about 160 Euros, bigger disks have a better price/GB ratio, but are still too
expensive. 300GB would set me back 320 Euros. Not going to happen. I have a
few other ideas up my sleeve, but I will need to work on them a bit more. Oh,
and on ebay.de you only find small U2W disks - the big ones are SCA only.
|
It’s time for a great summer in Germany again! And what better opportunity to spend it than with Gentoo friends at LinuxTag?
The largest Linux consumer and developer fair in Europe will be taking place Wednesday, June 24th to Saturday, June 27th. And of course Gentoo will be there with a booth. Meet some of the developers of your favourite distribution, and satisfy all your ebuild needs, maybe even have us fix one or the other bug. We even hope to bring some merchandise this time. So if you haven’t registered for a hostel or hotel, you might want to do that now.
You are also more than welcome to contribute to the booth, either by attending as a staff member (free entrance to the show is only one of the many benefits!), or by organising t-shirts, flyers and maybe even cups. Please contact me via email if you’re up for that.
And now back to hacking on my thesis and some security bugs… oh, and NetworkManager 0.7.1 is coming, thanks to Robert Piasek and Gilles Dartiguelongue who have been contributing a lot to the ebuilds while I was slacking.
|
Shared Object Version (April 21, 2009, 16:35 UTC)
Picking up where I left with my post about ABI I’d like to provide some insights about the “soversion”, or shared object version, that is part of the “soname” (the canonical name of a shared object/library), and its relationship with the -version-info option in libtool.
First of all, the “soname” is the string listed in the DT_SONAME tag of the .dynamic section of an ELF shared object. It represents the canonical name the library should be called with, and it’s used to create the DT_NEEDED entries for the shared objects and dynamic executables depending on it, as well as the canonical name used when opening the library through dlopen() (without the full path).
Usually, the soname is composed of the library’s basename (libfoo.so) followed by a reduced shared object version, but the extent to which is reduced (or not) depends on the standard rules for the operating system and a few other notes. What I’m going to talk about today is that last part, the shared object version, which is probably the most important part of the soname.
First of all, the “soversion” does not correspond to either the package version nor the -version-info parameter (although it is calculated starting from that one); using either directly would be a big mistake, unless you expect to be able to keep a perfect ABI based on your package versioning, in which case you might want to try using the package version, but that’s quite a difficult thing to do.
The part of this version that is embedded in the soname is the version of the ABI, and has to change when the ABI is changed following the rules I shown previously. If this was kept the same between versions and the ABI was broken, software would be going to subtly crash because of the changes in the ABI. By changing the ABI version, and thus the soname, you make the loader refuse to start the program with a different library than it was developed for; of course it does not make the software magically work, but it will at least stop it from crashing further on along the road.
By default on Linux and Solaris, there is a single component used for the soname, as ABI version, at least with libtool, projects following, manually, this rule, and setting their soversion the same as their package version would be providing a single ABI for each major version of their software; I rarely have seen anything like that working out good. Ruby uses a mix of this, by defining two components as the soversion, so that eventually you could have libruby.so.1.8 and libruby.so.1.9 (on the other hand, we rename them to libruby18 and libruby19 so that they don’t collide for other reasons, but that’s beside the point). This works as long as they don’t have to change, for any reason, the ABI of a minor release of Ruby; when that happens, something will certainly break.
The -version-info of libtool is explicitly distinct from the package version, as well as the actual soversion, and is used to provide a consistent library versioning among releases, by providing three components: current, age and revision; they represent the information in form of API/ABI supported and dropped; understanding the separation is quite a time waste but it can be summarised in three simple steps:
- if you don’t change the interface at all just increase the “interface revision” value;
- if you make backward-compatible changes (like adding interfaces), increase the “current interface” value and the “older interface age” value, reset “interface revision” to zero;
- if you make backward-incompatible changes, breaking ABI (removing interfaces for instance), increase the “current interface” value and reset both “older interface age” and ”interface revision” to zero.
Depending on the operating system, this will create a soname change either on backward-incompatible changes (Linux, Solaris and Gentoo/FreeBSD), or with any type of change to the interface (vanilla FreeBSD).
Again, the idea is that each time you might have a backward-incompatible change you get a different soname so that the loader can’t mix and match different interfaces. When you don’t guarantee any ABI stability between versions, usually for internal libraries, like GNU binutils do for libbfd, you just put the package name in the library’s basename rather than soversion, and set the soversion to all zeros, so you get stuff like libbfd-2.20.so.0.0.0. This way you’re sure that, whether you change interfaces or not, an upgrade of your package won’t break others’ software. Of course it should also be enough for people to understand that it should not be used at all since it’s not guaranteed to be stable.
Next step is going to describe the symbol versioning technique to reduce the amount of backward-incompatible changes, to keep the same ABI available until it really has to go.
|
Gentoo: Xfce-4.6.1 released (April 21, 2009, 04:48 UTC)
The release of Xfce-4.6.1 was announced approximately 36 hours ago on the xfce-announce mailing list. It is my pleasure to say that it is now in the Gentoo tree as well. You can find a shiny 4.6.1 bugfix release upon your next --sync.
Due to the number of bugfixes by the Xfce team upstream, the Gentoo Xfce team has decided to remove 4.6.0 related ebuilds and focus on bringing 4.6.1 to the stable tree. As always, please test and report bugs. Upstream issues should goto the Xfce bug tracker.
|
April 20, 2009
Since portage-2.2_rc29 there is support for a metadata/layout.conf file in an overlay which is used to specify names of repositories which satisfy dependencies on eclasses and/or ebuilds. See the QA Overlay Layout support thread on the gentoo-dev mailing list for information about why this is necessary, and refer to the portage(5) man page for details about the layout.conf format
If you want overlay eclasses to override eclasses from other repos then you'll want to refer to the portage(5) man page for information about the /etc/portage/repos.conf file which can be used to specify site-specific repository configuration information. Note that configuration settings which are specified in repos.conf do not apply to tools such as repoman(1) and egencache(1), since operations performed by these tools are inherently not site-specific.
Since portage-2.2_rc31, repos.conf can be used to create repository aliases, in case you want to substitute one repo for another one that is specified in layout.conf. This is especially useful for funtoo users, who may want something like this in /etc/portage/repos.conf:
[funtoo]
aliases = gentoo
|
plasma-emergelog plasmoid (April 20, 2009, 12:43 UTC)
Usually I use yakuake whenever I need to do terminal job. But having to press the shortcut key again and again in order to hide and unhide yakuake is not that handy , especially when somebody wants to monitor the emerge progress :). So , two days ago, I decided to write a simple kde4 plasmoid to monitor emerge progress for me . The plasmoid monitors /var/log/emerge.log file, so make sure that you have at least ‘read’ access before you use it.
There is no tarball for this yet, but you can install it using two different ways
1) Cloning git repo
git clone git://github.com/hwoarang/plasma-emergelog.git
cd plasma-emergelog
cmake -DCMAKE_INSTALL_PREFIX=/usr
make
make install ( as root )
2) Using the ebuild from kde-testing overlay
I did push an ebuild for this plasmoid on kde-testing overlay. Feel free to try it
Credits: Filewatcher plasmoid helped me a lot to create this plasmoid
You can browse the git repository here
Update 02-05-2009
Version 0.0.1 released on kde-look.org
Link

|
April 19, 2009
For those owning a laptop with a bitten apple on it and everyone else that is afflicted with a Broadcom 43xx chipset that is not supported by in-kernel drivers, you might be interested in the following facts:
- gentoo has net-wireless/broadcom-sta which I happily discovered just after writing a sucky ebuild for it.
- you absolutely need to disable SSB and b43 or blacklist them if you compiled these as modules because it will interfere very badly with wl driver (as in eth1 won't show up at all). For some reason it worked just fine in 2.6.24-gentoo-r8 and that's why I was stuck with it until today but in 2.6.28 and 2.6.29, it just silently failed and I was left with no wireless interface at all.
|
Application Binary Interface (April 19, 2009, 14:03 UTC)
Following my earlier post about libtool archives, Jorge asked me how they relate to the numbers that come at the end of shared objects; mostly, they don’t, with the exception that the libtool archive keeps a list of all the symlinks with different suffix components for a given library.
I was, actually, already planning on writing something about shared object versioning since I did note about the problems with C++ libraries related to the “Ardour Problem”. Unfortunately it requires first some knowledge of what composes an ABI, and that requires me to write something before going deep in shared object versioning. And this hits on my main missing necessity right now: time. Since I have now more or less two jobs at hand, the time I can spare is dedicated more to Gentoo or my personal problems than writing in-depth articles for the blog. You can, anyway, always bribe me to write about a particular topic.
So let’s start with the basic of what the Application Binary Interface (ABI) is, in the smaller context that I’m going to care about, and how it relates to the shared object versioning topic I wanted to discuss. For simplicity, I’m not going to discuss issues like the various architecture-dependent calling conventions, and, for now, I’m also focusing on software written in C rather than C++; the ABI problems with the latter are an order of magnitude worse than the ones in C.
Basically, the ABI of a library is the interface between that and the software using it; it relates to the API of the interface, but you can maintain API-compatibility and break ABI-compatibility, since in the ABI, you have to count in many different factors:
- the callable functions, with their names; adding a function is a backward-compatible ABI change (although it also means that you cannot execute something built against the newer library on a system with an older one), removing or renaming a function breaks ABI;
- the parameters of the function, with their types; while restricting the parameters of a function (for instance taking a constant string rather than a non-constant string) is ABI-compatible, removing those restrictions is an ABI breakage; changing compound or primitive type of a parameter is also an ABI change, since you change their meaning; this is also why using parameters with types like
off_t is bad (it depends on the feature-selection macros used);
- the returned value of functions; this does not only mean the type of it, but also the actual meaning of the value;
- the size and content of the transparent structures (i.e.: the structures that are defined, and not just declared, in the public header files);
- any major API change also produces an ABI change (unless symbol versioning is used to keep backward-compatibility); it’s particularly important to note that changing how a dynamically-allocated returned value is allocated does change API and ABI if there is not a symmetrical function to free it; this is why, even for very simple data types, you should have a symmetrical alloc/free interface.
Now there are a few important notes about what I just wrote, and to explain them I want to use FFmpeg as an example; it is often said that FFmpeg has no warranties of ABI compatibility with the same shared object version (I’ll return to that at another time); this is false because FFmpeg developers do pay attention to keep the public ABI compatible between releases as long as the released shared object has the same version. What they don’t guarantee is the ABI-compatibility for internal symbols, and software like VLC, xine and GStreamer used to use the internal symbols without thinking about it twice.
This is why it’s important to use symbol visibility to hide the internal symbols: once you have hidden them you can do whatever you want with them, since no software can rely on them, and have subtle crashes or misbehaviour because of a change in them. But that’s a topic for another day.
|
April 18, 2009
Today, I’m going to write about the so-called “libtool archives” that you might have read about in posts like What about those .la files? or Again about .la files (anybody picking up the faint and vague citation here is enough of a TV geek).
Before starting I’m going to say that I’m not reading any public Gentoo mailing list lately which means that if I’m going to bring out points that have been brought up already, I don’t care. I’m just writing this for the sake of it and because Jorge asked me some clarification about what I did write some longish time ago. Indeed the first post is almost exactly one year ago. I do know that there has been more discussion about the need or not need of these libraries for ebuild-provided stuff, so I’m going to try to be as clear as possible.
First problem is to identify what these files are: they are simple text files, and they provide metadata about a library, or a pair of static and shared libraries; this metadata includes some obvious and non-obvious stuff like the names of the two type of libraries, the formal name (soname) of the shared library that can be used with dlopen() and a few more things included the directory the library is to be found in. The one piece of data that creates a problem for us is, though, the dependency list of libraries that needs to be linked against when linking against this library, but I’ll go back to that later. Just please note that it’s there.
Let’s go on with what these files are used for: libtool generates them, and libtool consumes them; they are used when linking with libtool to set the proper runpath if needed (by checking the library’s directory), to choose between the static or shared library version, and to bring in further dependency libraries. This latter thing is controversial and our main issue here: older operating systems had no way to define dependencies between libraries of any kind, and even nowadays on Linux we have no way to define the dependencies of static libraries (archives). So the dependency information is needed when using static link; unfortunately libtool does not ignore the dependencies with shared objects, which can manage their dependencies just fine (through the DT_NEEDED tag present in the .dynamic section), and pollutes the linking line causing problems that can be solved by --as-needed.
Another use for libtool archive files is to know how to load or preload modules (plugins). The idea is that when the operating system provides no way to dynamic load and link further shared objects (that is, a dlopen()-like interface), libtool can simulate that facility by linking together the static modules, using the libltdl library instead. Please note, though, that you don’t need the libtool archives to use libltdl if the operating systems does provide dynamic loading and linking.
This is all fine and dandy for theory, what about practicality? Do we need the .la files installed by ebuilds? And slightly related (as we’ll see later) do we need the static libraries? Unsurprisingly, the answer comes from the developer’s mantra: There is no Answer; it Depends.
To simplify my discussion here, I’m going to reduce the scope to the two official (or semi-official) operating systems supported by Gentoo: Linux and FreeBSD. The situation is likely to be different for some of the operating systems supported by Gentoo/Prefix, and while I don’t want to reduce their impact, the situation is likely to become much more complicated to explain by adding them to the picture.
Both Linux and FreeBSD use as primary executable and linkable format ELF (which stands exactly for “executable and linkable format”), they both support shared objects (libraries), the dlopen() interface, the DT_NEEDED tag, and they both use ar flat archives for static libraries. Most importantly, they use (for now, since FreeBSD is working toward changing this) the same toolchain for compile and link, GCC and GNU binutils.
In this situation, the libltdl “fake dlopen()@” is sincerely a huge waste of time, and almost nobody use it; which means that most people wouldn't want to use the .la@ files to open plugins (that is, with the exception of KDE 3), which makes installing libtool archives of, say, PulseAudio’s plugins, pointless. Since most software is likely not to use libltdl in the first place, like xine or PAM to cite two that I maintain somehow, their plugins also don’t need the libtool archive files to be installed. I already have reported some rogue pam modules that install pointless .la files (even worse, in the root fs). The rule of thumb here is that if the application is using plugins with standard dlopen() instead of libltdl (or an hacked libltdl like it’s the case for KDE 3), the libtool archives for these plugins are futile; this, as far as I know, includes glib’s GModule support (and you can see by using ls /usr/lib*/gnome-*/*.la that there are some installed for probably no good reason).
But this only provides a description of what to do with the libtool archive files for plugins (modules) and not with libraries; with libraries the situation is a bit more complicated, but not too much, since the rule is even simpler: you can drop all the libtool archives for libraries that are only ever shared (no static archive provided), and for those that have no dependency other than the C library itself (after making sure it does not simply forget to link the dependencies in). In those cases, the static library is enough to be listed by itself, and you don’t need any extra file to tell you what else is needed to be linked in. This already takes care of quite a bit of libtool files: grepping for the string “dependency_libs=''” (which is present in libraries that don’t have any further dependencies than the C library), provides 62 files in my system.
There is another issue that was brought up last year: libraries whose official discovery method is a -config script, or pkg-config; these libraries can ignore the need for providing dependencies for the static variant since they provide it themselves. Unfortunately this has two nasty issues: the first is that most likely someone is not using the correct scripts to find the stuff; I’ve read one blog post a week or two ago about a developer disgruntled because pkg-config was used for a library that didn’t provide it and suggested not to use pkg-config at all (which is quite silly actually). The other problem is that while pkg-config does provide a --static parameter to use different dependency lists between shared and static linking of a library (to avoid polluting the link line), I know of no way to tell autoconf to use that option during discovery at all. But there are also a few things that can be said, since there is enough space for binutils to just implement an extension to the static archives that can actually provide the needed dependency data, but that’s beside the point now I guess.
So let’s sidestep this issue for now and return to the three known cases when we can assert with a relative certainty that the libtool archives are unneeded: non-ltdl-fakeloaded plugins (xine, pam, GModule, ...), libraries with no other dependencies than the C library and libraries that only install shared objects. While the first two are pretty obvious, there is something else to say about that last one.
By Gentoo policy we’re supposed to always install both the static and shared object version of a library; unless, that is, upstream doesn’t think so. The reason for this policy is that static linking is preferred for some mission-critical software that might not allow the system to boot up if the library is somehow broken (think bash and libreadline), and because sometimes, well, you just have to leave the user with the option of static linking stuff. There have been proposals of adding an USE flag to allow enabling/disabling build of static libraries, but that’s nowhere to use, yet; one of the problems was to link up the static USE flag with the static-libs USE flag of its dependencies; EAPI 2 USE dependencies can solve that just fine. There are, though, a few cases where you might be better off not providing a static library at all, even if upstream doesn’t say something outright about it, since most likely they never cared.
This is the case for instance of libraries that use, in turn, the dlopen() interface to load their plugins (using static linking with those can produce nasty results); for instance you won’t find a static library for Linux-PAM. There are a few more cases where having static libraries is not suggested at all and we might actually decide to take it out entirely, with the due caution. In those cases you can remove the libtool archive file as well since shared objects do take care of themselves.
Now, case in point, Peter took lots of flames for changing libpcre; there are mixed flames related to, from one side, him removing the libtool archive, and from the other to him removing the static library. I haven’t been part of the flames, in any way, because I’m still minding my own health first of all (is there any point in having a sick me not working on Gentoo?), yet here is my opinion: Peter did one mistake, and that was to unconditionally remove the static library. Funnily enough, what probably most people shouted him at for is the removal of the libtool archive, which is just nothing useful since, you can guess, the library has no further dependency beside the C library (it’s different for what regards libpcreposix, though).
My suggestion at this point is for someone to actually finish cleaning up the script that I think I posted to the mailing lists some time ago, and almost surely can be recreated quite quickly, that takes care of fixing the libtool archive files in the system without requiring a full rebuild of everything. Or even better get a post-processing task for Portage that replaces the direct references to libtool archives in the new libtool archives with generic library references (so that /usr/lib/libpcre.la would become -lpcre straight away and so on for all libraries; the result would be that breakage for future libtool archives removal wouldn’t exist at all).
|
April 17, 2009
PolicyKit unmasked (April 17, 2009, 14:26 UTC)
Ladies and Gentlemen, PolicyKit has been unmasked. I've tested it, and it seems to work well enough, and to not be too intrusive in it's current default setup.
If you have issues, please file bugs. If there's missing policy, please file bugs. If something is too annoying, please file bugs. If something is horribly insecure, please file bugs. We want to get this right.
In the meantime, I'm going to be going through the policy installed by other Distros to see how it differs from what we're shipping by default. Probably packages that currently have policykit hard disabled will start adding USE flags to enable it.
It's unlikely at this point that PK will become required on Gentoo; we don't generally work that way, and the Gnome team, at least, has been patching the heck out of upstream packages to keep it optional. I don't see that changing for 2.26 at least.
*EDIT* s/packagekit/policykit/, thanks to MiKeL
|
Refreshing Gentoo Work (April 17, 2009, 13:05 UTC)
After a few months spent mostly working on lscube, I’ve been ignoring most of the non-basic Gentoo work for a while. Between last night (before going to sleep) and this morning, though, I started the catch-up work.
First of all, Tim released a new version of libarchive that required some testsuite fixing (and I haven’t noticed the first time around that it now wrongly uses -Werror since I have -Wno-error in my CFLAGS to avoid time wastes). Thankfully, Tim is a dream upstream to work with and the most important fix is already upstreamed.
Then I have been active in the Ruby area since I both needed to work on the new Typo and a few more packages are bundled with Typo’s code (you’re going to find a git branch with no third party code bundled in my git repositories when I’m done), and got some new tasks to work on.
The gems problem, which is hopefully going to be solved after the Summer of Code, is for now just being sidestepped; indeed, I’ve ended up adding the will_paginate library with a fake gemspec which actually works pretty nicely, without having the usual side effects of gems (no object files installed, no extra dependency on rake, no installed testsuite) and with the obvious advantages from the tarballs, including working testsuites (and tested), documentation built on request and installed, as well as examples. This, and probably a few more before end of the month, package will be tested directly here on the blog if you’re interested on the outcome.
I still have a few things that I’m supposed to have done in the past month among which figures updating calibre (I’ve been using an old version on OSX up to now), figuring out why libcdio-0.81 freezes down during install, and stuff like that. Hopefully I’ll also be able to find time for those now that my job is a bit more safe than it was before.
|
April 16, 2009
updates (April 16, 2009, 18:23 UTC)
i wrote my route survey final today, the last one. this semester was a lot rougher than the last one and i really had to work at it. after missing a week early in the year due to the worst flu i've had in ten years, and then my grandma dying a month or so later, i was perpetually a class or two behind. and when i'm stressed i don't sleep, so that meant missing more classes. in the end i think i did alright though. i think i passed at least, but my high eighties average is going to take a big hit. oh well, two more weeks of field camp and then i'm back to work in Yorkton.
gentoo-wise, due largely to the efforts of loki_val, darkside, and fauli, we got GCC 4.3 stable on the major archs. i've been running 4.4 on my laptop for a few months now and things are moving nicely. the gcc-porting overlay is filling out thanks to Daniel J, who keeps throwing patches at me.
i stopped reading g-dev around March-ish. i poke my nose in every once in a while but for the most part i just ignore it. it was just getting me frustrated and then i'd end up yelling at someone and feeling bad. i really have nothing to contribute besides arguments and bikeshedding so i figured i'd just leave it to the experts.
one thing i do want to work on now is getting maintainer-needed cleaned up. we have 750 orphaned packages in the tree, many of which look like they can be herded. once that's done i want to go through the remainders and kick anything redundant, broken, unmaintained, or old. it's amazing how much crap we have that hasn't been touched in years. flameeyes' tinderbox runs have turned up a bunch of broken junk that i've never even heard of before.
of course, the problem is knowing what to kick and what to keep. gentoo-stats would be awesome here, if it existed, to tell if anyone is actually using this stuff. right now the best we can do is mask it and wait til someone complains, which is painful for everyone involved. i guess we can wait another 3 years until someone implements it or we can buckle down and bear it.
other than that, business as usual. i still wish people would fix their damned testsuites, but i'm not holding my breath. i'm really looking forward to the git migration, not because i like git but because i really really hate CVS. EAPI 3 has some promising stuff in it, as long as it doesn't get debated into mediocrity by the gentoo development process(tm). etc etc..
|
Upgrading Typo (April 16, 2009, 15:53 UTC)
It’s again that time of the year when I get tired and decide to update Typo; although this is probably one of the most invasive changes since I started using this software (it moved from Subversion to GIT), it seems to have been the one with less issues to fix. Although some were quite nasty.
First problem is that the version you can find in git right now is broken and won’t start up… and to “blame” is our very own Hans (graaf)! I say “blame” because it’s not really his fault, and I just worked it around by removing the Dutch localisation, which I don’t need anyway. I had to fix up the theme to work with the new Typo code, but I also took the time to fix a few more obnoxious things in the theme so that it now looks nicer too.
There were just two main issues with the update: the easy one is that the users don’t get activated after migration, which means you cannot login, a psql call after and I’m back in; the other problem is that the Atom feed generated was invalid, because to replace the HTML entities like eacute for é and similar, it decoded all the entities… included the lt/gt used to avoid injecting tags into the posts; luckily for me I had one such “fake tag” right in my previous post so I have noticed this problem right away; I hacked it around for now, as soon as I have little more time I’m going to actually fix it properly.
I had to update the mod_security access restriction since now comments are posted through a single /comments URI, which actually makes it much nicer. I’m going to update it and post it ASAP. The live search support (which I already removed from the template a few days ago) now is optional in Typo itself, which is good; I have to port the Google custom search code to the new sidebar plugin interface, to make it blend better.
I’ll require a couple more packages to be added to portage to work too, but that can happen later, not today that I’m already swamped a bit. I like the new admin interface, although it increased the size of fonts (although not as much as WordPress) and I hate huge fonts (Firefox does not allow me to use smaller fonts it seems; the rest of my system is set to 75dpi – which is fake – but works fine, Firefox does not accept that).
|
April 14, 2009
http://www.linux-mips.org/archives/linux-mips/2009-04/msg00112.html
So I confirmed that this MIPS ftrace support is really working. Thanks to Wu Zhangjin (吴章金). However, I have no interest in finding out what kind of difference between my loongson2f patch and wu's caused wu's ftrace patch does not work on top of my loongson 2f patch. What I would like to see now is to get loongson2f patch merged into mainline.
Plus, I wish I could make loongson linux to be able to use 4k page(Now, loongson could only use 16k page in order to avoid d-cache aliasing). I have already started working on it now. Even if it turns out that I can't, I could tell others what I have done in order to achieve this goal. And by that time, I would've got a much deeper understanding of Linux's memory management subsystem.
|
April 12, 2009
Ignuit moved to portage (April 12, 2009, 05:53 UTC)
So for all of those waiting for ignuit to hit the portage tree, it has finally happened. After receiving some requests from users to add it to the tree, I decided to stop being lazy and actually move it to the tree. Ignuit should be hitting the sync mirrors shortly.
I await the massive surge of zomg you coded this ebuild completely wrong and/or bug reports
|
April 11, 2009
Recently, Luca made a post comparing the speed of CMake and autotools in which some timings were posted. I have to say that I am not sure I agreed with the conclusion and have had a very different experience with the projects I am involved in. As with anything your mileage may vary, and I have not looked at Wesnoth.
I think it is questionable at best to include the time it takes to build CMake, but not autotools. Seems like this is a one time cost and the build time is not that high for either. All tests were performed on my quad core Gentoo box at work. Each step is for the first cold run as would normally be the case when compiling Open Babel from source. The make step used `time make -j5` and I have listed the real time in each case.
The timings are shown in the table below. They seem somewhat similar to the experiences of the QGIS developers who made this move quite some time ago. All times shown are in seconds and are the real time reported by the time command.
| |
Autotools |
CMake |
| Configure time |
20.39 |
4.79 |
| Compile time |
116.45 |
102.23 |
| Install time |
28.39 |
4.19 |
| Total time |
165.23 |
111.21 |
For those interested, on this system the total CMake compilation/installation time (cmake-gui disabled) was 1 minute and 54 seconds. The compilation/installation time for automake, autoconf, libtool, m4 was 2 minute and 14 seconds. I am not sure how relevant either of those times are, other than to show neither of them take that long to compile and install. Gentoo users/developers may or may not have CMake installed, most other developers will install the binary packages for either one and are likely to be much more interested in how well it integrates with their development environment, compile and install times.
As a developer I prefer CMake, and have been using/maintaining the CMake based build system for Open Babel for over a year now. It was originally contributed by the KDE Windows porting team, but I found that I spent less time waiting for it to do things when I was working on code too. Add to that the extras CMake comes with, such as CTest, CDash and CPack I think it makes a very attractive option for many projects. I am also hoping that it will allow Open Babel to drop maintaining a totally separate build system for MSVC.
I am sure the Open Babel autotools build system could be optimized (I never tried), but when you add in the additional benefits mentioned above, support for multiple targets such as makefiles, XCode, MSVC, Eclipse etc, one shared language/syntax for all build files and an increasingly polished competitor to autotools, I honestly think it is a sensible choice for projects to move to CMake. There are a few less well known features such as Fortran module dependency parsing that I think are fairly unique and valuable, in scientific coding at least (and I have used the Fortran module dependency parsing at least once and was pleasantly surprised).
Full disclosure: I recently accepted a job offer with Kitware, and will start in the Fall assuming all the visa paperwork falls into place. The opinions expressed here are my own. I think it is great to discuss issues like this objectively, and hope to be a part of making CMake a better build system. As with most software - there are areas that need improving.
|
April 10, 2009
Dillo progress (April 10, 2009, 21:54 UTC)
For users of older hardware and fans of light-weight systems, Dillo is probably not an unknown name. It’s a very light-weight web browser. That comes with its limitations, of course. It used to have a GTK1 GUI, which no one in his right mind would use anymore today. But last year Dillo 2.0 was released, which was reimplemented using FLTK2. This sports modern features like anti-aliasing (smooth fonts) and unicode
Currently the Dillo developers are working on exciting new features, such as basic CSS and JavaScript support. I figured some people may want to try out this new code, so I added an ebuild for the “live” development version to portage today (or yesterday, depending on your timezone). There is definitely some progress to see, so this little browser may grow in popularity again. And they manage to keep it small. The binary is only 629K on my amd64 system.
|
Me in los diarios (April 10, 2009, 21:05 UTC)
The OLPC Paraguay project gets a lot of media attention here, especially in this important time. Word spread that an Englishman is in town, which has resulted in newspaper publicity:
First, an interview in La Nacion: Paraguay se convierte en foco regional del proyecto OLPC (Paraguay becomes the regional focus of the OLPC project). I’m not too proud of this one, there are numerous inaccuracies and I’m given far too much credit.
Secondly, two very good articles in the highly-popular ABC newspaper:
In print form, both of the ABC articles appeared on 1 page in the main section of the newspaper, occupying the whole page. And it was published on a Sunday, which is a day when seemingly everyone in Paraguay reads this newspaper. In addition to receiving emails from other parts of the country, various friends-of-friends have been in contact after seeing it, and seemingly everyone I visit now also knows about it!
|
April 09, 2009
Normally I only use open source software, but for some reason I'd like to try out Google Earth. However it refuses to start on my amd64 workstation with the generic error "Could not access graphics card" and when I click OK it crashes.
It's the same issue wether I use Google Earth 5.0.11337.1968_beta or the latest stable 4.2.205.5730.
I updated to latest masked emul-linux-x86-gtklibs-20081109 and got rid of some OpenGL warnings, but Google Earth still refuse to start. OpenGL and DRI (with vblank_mode 0) is working fine with KDE4 desktop effects. Glxgears yields around 500 FPS.
I'm using a Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller with the following X versions:
x11-base/xorg-server-1.5.3-r5
x11-libs/libdrm-2.4.5
media-libs/mesa-7.3-r1
x11-drivers/xf86-video-intel-2.6.3-r1
Oh the joy of proprietary software:-/
Update: Actually it works with a 32 bit chroot as described in 32Bit Chroot Guide for Gentoo/AMD64, emerging mesa glib libXrandr, then Google Earth actually runs. To remove graphics artefacts I had to disable Desktop effects in KDE4. See comments for further details.
|
|