 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.
August 31, 2009
Gentoo Prefix/Windows (August 31, 2009, 16:02 UTC)
History
When I looked at the state of graphical IMAP e-mail clients several years ago,
I was not really impressed. KMail from then-current KDE3 did not do a proper
job for me (numerous IMAP bugs like its inability to work as about every other
IMAP client when deleting messages, bug 26986 -- there were
more issues than that, but years have left my memories washed out a bit),
Thunderbird would crash for me every once a week, at least, and I just
happened to like KDE applications more than Gnome stuff, so I did not spend
much time looking at Evolution. Many MUAs looked like a classic generic
e-mail clients designed with POP3 in mind with IMAP added late in the
development cycle, while others supported wide range of IMAP features, yet
lacked in the GUI part of the problem. In short, using none of these
applications made me feel happy.
A programmer not feeling happy is a receipt for disaster. I was about to
finish my high school, so I had plenty of time at hand. I was experimenting
with Python, so that seemed like a natural implementation language, too. In
the end, I started a project called trojita whose remnants could
still be seen in an abandoned SVN
repo.
Coding in Python was fun. I tried several different approaches to the design
of my pet program, I was playing with technologies I had no experience with, I
even showed my "IMAP library" at my final exam as an example of a project I
made. It did not have much functionality, in fact, only the IMAP parser had
been completed, but it was an educative experience nonetheless and I passed the
exam.
After some time, however, I discovered Qt and C++ and felt in love. I
joyfully returned to the realm of statically-typed languages and suddenly felt
a lot better. I began porting my Python library to Qt/C++. It was not really a
port, rather a first complete rewrite of my project. Anyway, it did not take
long and the C++ version suddenly offered more functions than the old Python
branch, with unit tests as a nice added bonus.
Qt's Interview architecture, the Model/View classes, seemed like a decent
implementation of the MVC patter I was poking around to use. Several months
have passed, and suddenly trojita was able to show a tree of
mailboxes stored on a remote IMAP server, listing messages contained therein
and showing message bodies. I choose to finish the program as a part of my
bachelor's thesis, and ultimately, I succeeded.
The Code
So, in a few blogposts starting with this one I'm going to introduce a new Qt
IMAP e-mail client to the world. I hope I will get some attention and folks
looking at the code and trying to run the application. I'd love to get some
feedback on program design, code quality and general usability as well.
The code is hosted at Gitorious, and
a bachelor thesis about
Trojitá (PDF) (mirror)
which explains its design and compares it against several alternatives is
available, too. Perhaps the most interesting part is Chapter 3 which describes
the architecture of the application, and Chapter 4 in which I compare Trojitá to
several other MUAs on the market. All information about Trojitá are also
aggregated on Trojitá's homepage (any
web designer listening? :) ). Here is the obligatory screenshot:
Trojitá's Features
Some highlights of Trojitá are:
- A pure Qt4 application with no additional dependencies
- Robust IMAP core implemented using Qt's Model-View framework
- Standards compliance is a design goal
- Support for bandwidth-saving mode aimed at mobile users with expensive
connection
- IMAP over SSH -- instead of going over an SSL socket, the server could be
accessed via SSH
- On-demand body part loading
- Offline IMAP support (you can access data you already have; there's no
complete "offline mail access" yet, though)
- Safe dealing with HTML mail (actually more robust than Thunderbird's)
The thesis was completed several months ago. Since that time, I've removed
the dependency on std::tr1::shared_ptr and switched to Qt's
QSharedPointer which in turn requires Qt-4.5 or newer. There
wasn't much more changes since then, as I enjoyed quite a long vacation, but I
guess I can tell the development is getting faster again.
How to Use it
It's a fairly standard CMake setup:
git clone git://gitorious.org/trojita/trojita.git
cd trojita
mkdir _build
cd _build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
make -j4
./trojita
Please do join the #trojita channel on Freenode and tell me how you
like this application. I'm open to any suggestions and would love to hear any
feedback, too.
As you can see, this blog is a static HTML page, so you can't post any comments
here. However, I'm eager to answer any questions sent to my mail, both via e-mail and in subsequent blog
posts.
|
August 28, 2009
While I should write it down on autotools mythbuster in a most generic fashion, since I found this today, I wanted to write down these notes for other developers. With autoconf-2.64 there can be a problem with “phantom macros” as in macros that are called, but seem not to produce any code.
In particular, I noticed a configure failure in recode today. The reported error out is the following:
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
checking for flex... (cached) flex
./configure: line 10866: syntax error near unexpected token `fi'
./configure: line 10866: `fi'
Looking at the actual configure code, you can easily see what the problem is around line 10866:
if test "$LEX" = missing; then
LEX="\$(top_srcdir)/$ac_aux_dir/missing flex"
LEX_OUTPUT_ROOT=lex.yy
else
fi
In sh, you probably know already, “else fi” is invalid syntax; but what is the code that produces this? Well, looking at configure.in is not enough, you need to also check an m4 file for the package:
# in configure.in:
ad_AC_PROG_FLEX
# in m4/flex.m4
## Replacement for AC_PROG_LEX and AC_DECL_YYTEXT
## by Alexandre Oliva <oliva@dcc.unicamp.br>
## Modified by Akim Demaille so that only flex is legal
# serial 2
dnl ad_AC_PROG_FLEX
dnl Look for flex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
AC_DEFUN(ad_AC_PROG_FLEX,
[AC_CHECK_PROGS(LEX, flex, missing)
if test "$LEX" = missing; then
LEX="\$(top_srcdir)/$ac_aux_dir/missing flex"
LEX_OUTPUT_ROOT=lex.yy
AC_SUBST(LEX_OUTPUT_ROOT)dnl
else
AC_PROG_LEX
AC_DECL_YYTEXT
fi])
So there are calls to AC_PROG_LEX and AC_DECL_YYTEXT macros, so there should be code in there. What’s happening? Well, maybe you remember a previous post where I listed some user-advantages in autoconf-2.64 :
Another interesting change in the 2.64 release which makes it particularly sweet to autotools fanatics like me is the change in AC_DEFUN_ONCE semantics that makes possible for macros to be defined that are executed exactly once. The usefulness of this is that often times you get people to write bad autoconf code, that instead of using AC_REQUIRE to make sure a particular macro has been expanded (which is usually the case for macros using $host and thus needing AC_CANONICAL_HOST), simply call it, which would mean the same check is repeated over and over (with obvious waste of time and increase in size of the generated configure file).
Thanks to the AC_DEFUN_ONCE macro, not only it’s possible to finally define macros that never gets executed more than once, but also most of the default macros that are supposed to work that way, like AC_CANONICAL_HOST and its siblings, are now defined with that, which means that hopefully even untouched configure files will be slimmed down.
Of course, this also means there are more catches with it, so I’ll have to write about them in the future. Sigh I wish I could find more time to write on the blog since there are so many important things I have to write about, but I have not enough time to expand them to a proper size since I’m currently working all day long.
Indeed the two macros above are both once-expanded macros, which means that autoconf expand them before the rest of the now-defined macro. Now, the solution for this is using M4sh properly (because autoconf scripts are not pure sh, they are M4sh, which is a language in the middle between sh and m4). Instead of using if/then/else, you should use AS_IF; indeed changing the above macro to this:
AC_DEFUN(ad_AC_PROG_FLEX,
[AC_CHECK_PROGS(LEX, flex, missing)
AS_IF([test "$LEX" = missing], [
LEX="\$(top_srcdir)/$ac_aux_dir/missing flex"
LEX_OUTPUT_ROOT=lex.yy
AC_SUBST(LEX_OUTPUT_ROOT)dnl
], [
AC_PROG_LEX
AC_DECL_YYTEXT
]])
allows autoconf to understand the flow of the code and produces the proper sh code (this is true sh code) in the final configure file:
checking for flex... flex
checking for flex... (cached) flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
(see how the two checks for flex are both up the list of checks?).
Unfortunately there are more problems with recode, but at least this documents the first problem, which I’m afraid is going to be a common one.
|
My podcast on LinuxCrazy (August 28, 2009, 13:02 UTC)
Hello all,
Yesterday (Thursday, 27 August 2009), David Abbott from LinuxCrazy, and Gentoo-PR interviewed me for his 62nd podcast. We discussed many aspects of Gentoo, including my involvement with the fora, documentation, project strengths, areas of concern, Openbox and LXDE, and more. This is a two-part podcast, and the first portion is an interview with Zachary (son of Gentoo user weirdedout) about one of his favourite Linux games, Warzone 2100. Thank you Zachary for your review of WZ2100! 
If you would like to listen to the podcast, it is available in Ogg format (preferred), or in MP3. The Ogg format is available here on the Z-Issue, while the Ogg and MP3 versions are both available on LinuxCrazy.
OGG format of the podcast (please right-click and hit "save as" to download a copy)
If you don't want to listen to the podcast, there is a transcription of most of it (not verbatim, but hits many of the key points) on the Gentoo Fora.
Thanks for the interview David!
|:| Zach |:|
|
August 27, 2009
All,
Many of you have, no doubt, learned of the recent loss to the Gentoo
community. Known fondly as fmccor, Mr. Ferris E. McCormick's death was tragic
and unexpected. His many contributions to the greater open source community
will always be remembered as well as his generous friendship. It is in due
honor to his life and good name that the Gentoo Foundation has donated a sum
of $500 to the Electronic Frontier Foundation (EFF). The board of trustees
believe that our donation is reflective of his wishes, given fmccor's
professional life as a lawyer, and that this gift will further the movements
he cared a great deal about, open source software and protecting our freedom.
The board would like to take this opportunity to encourage any and all
individuals that personally knew fmccor or were benefiting from his life long
contributions to donate, in kind and to the best of your ability, either to
the EFF, the Gentoo Foundation, or another organization that you feel
expresses these ideas.
|
August 26, 2009
Funtoo Halucinations (August 26, 2009, 11:02 UTC)
So I'm reading through my RSS feeds and stumble across this gem:
Ciaranm quoting something from the funtoo.org FAQ about how funtoo.org only works with Internet Explorer or something
So, like, I look at the Funtoo FAQ that is linked from that blog.
Read it.
Don't find any mention of Firefox
Do a fulltext search just in case
So now I'm wondering, wtf is happening?
Is this a fast edit from the funtoo people in under 30 minutes? I find that unlikely. Or is Ciaran hallucinating badly (as seen with
PMS and other works of fiction) and needs to have his medication adjusted?
I'd guess it's the usual FUD, and most likely ignoring it would be the "right" thing to do, but if you catch a kid urinating in the pool
you usually spank it in the hope of teaching it not to do it again.
|
August 25, 2009
common alsa issues (August 25, 2009, 17:18 UTC)
I started a thread on the Gentoo Forums the other week, trying to get users to post what are common issues that they run into collectively. I'm hoping to see if I can find some patterns and either update the documentation or write a FAQ. If you have anything to share, please do.
And for the record, here is my first line of defense that I will tell anyone when they have no sound / wrong driver issues:
- Use latest ALSA (and kernel) in the tree. In this case, it's 1.0.20, and we've cleaned up a lot of crap that was causing issues.
- Compile everything sound-related in the kernel as a module. Yes, everything. No, not just the stuff that you *think* you can statically compile in --- *ev-e-ry-thing.* Once you've done that, run alsaconf. If your card doesn't show up, it's either completely unsupported (unlikely) or you didn't pick the right drivers. Go back in and flip on more stuff. As modules.
- If the correct drivers are loaded (aplay -L works), and you have no sound, then your mixer levels are probably wrong.
Apologies for coming across so heavy-handed, but that's the approach that has always worked for me, and works for most everyone when I tell them to do that: latest kernel, latest ALSA, everything as modules, alsaconf, then mixer.
Edit: Just as a postscript, the reason for the bluntness is that I recently started taking a more active role in the ALSA herd. Normally, I would just do version bumps and leave it at that. But, I'm trying to get practical issues resolved, and the one common thread I see over and over and over again on the forums and IRC is people just going off on their own little path and stabbing in the dark to see if they can get their sound to work, and then acting surprised that some random configuration didn't work.
I want to very much find both the source of this disinformation and correct it, and make sure that setting up sound is a really simple process. The *problem* though, is that it's always been pretty extremely easy for me, and so I am having a really difficult time understanding *why* people are hitting these issues -- hence, the reason for the forum post asking people why they are running into problems, and what thoughts and conclusions lead to that direction. Once I figure that out, then I can go back and tweak the docs to clarify situations and attack the common confusion.
I keep getting the idea that we could use a really simplified version of the ALSA doc, one that is a quick basic howto get setup for people with one soundcard, and then include examples using the most popular hardware out there right now (intel-hda). Then, have a separate doc for more advanced issues, for people who need help and information on alsa plugins, or have multiple sound cards and things like that. I think that lumping them together into one, as it is now, makes it hard for people who just want to get up and running.
So, apologies if it feels like I'm browbeating here, but the reality is that I'm really motivated to streamline the process of getting sound in Linux. Nothing but love, yo.
|
I think I stumbled upon Linux Mint on DistroWatch, upon this screnshot:
Somehow I wanted to see that wallpaper on my desk. Finally I found the image and put it up my desk:
It didn’t take long to where I wanted a version without the mint logo on it. The logo is nice but I don’t like to look at logos all day long. So I contacted the wallpaper’s author Zwopper who sent me a no-logo version in both green and blue in no time also allowed me to share it with you under a CC-BY-SA-3.0 license here. As far as I understand they have not been published like that elsewhere before. Here they are.
Click the thumbnails for PNG downloads with 2560×1600 pixels size.
|
August 23, 2009
Long title, hopefully catchy enough so that both users and fellow developers can get to read this, since it’s half a rant, half an explanation on why the QA team can be quite anal when it comes to bugs that, for most developers, and especially for the maintainers of the packages involved, might look minor or not causing problems to the general population of users.
Today’s problem for instance was with packages that, for non-live (thus, snapshot or release) versions used the SCM eclasses, fetching directly from CVS, Subversion, GIT, Mercurial and so on. QA already have stated that the ebuilds using SCM eclasses should be masked (it’s in the devmanual if you wish to look at it), and that by extension should tell that using them for relesed code is bad. Among the various reasons for not using SCM eclasses for proper versions of the software, no matter whether upstream has or hasn’t made any serious release, there are safety involvements (you sidestep the Manifest in portage) and problems with proxy (not all SCMs use HTTP for fetching), but what creates quite a bit of a problem to me with the tinderbox: those ebuilds don’t abide the fetch command! When I run the tinderbox, I launch in parallel both a build sequence and a fetch sequence (I cannot use the parallel fetch feature because I launch each package one by one); when the packages using SCM hit, they spend time not building, which is bad for the tinderbox. And it gets even worse when you add stuff like the old, removed rubinius that spent time timing out because the server went away.
But the same class of problems involve using too big files in the tree: when you add a 100K patch for a package that just a few users are going to merge, you’re wasting bandwidth and disk space for a huge amount of people who just don’t care. That’s why we stress the need for making filesdir as lightweight as possible without messing with the development process, of course. Again, this is just another little task for the developer: package the patches and send them on the mirrors, then add them to the ebuild so that they are only downloaded by those who do need them.
And again it’s the same problem with packages ignoring compilers, compiler flags, linker flags, or prestripping when they shouldn’t. These are a problem because one of the selling points of Gentoo is the customisability of it all, at all different levels. So while they might be seen as minor points, these are all the little details that the QA team has to answer for. And it goes on and beyond this, making sure software builds, that it builds in parallel if it’s possible, that it doesn’t fail with new version of dependencies, that it builds with the correct kernel.
So please help us helping everybody, and don’t just ignore our requests, or start a pissing contest on why your package should be special, and not abide to the common rules and directions of the rest of Gentoo. Sorry, but unless it is really special, and that’s pretty rare, your software will have one way or another to abide to those rules, and if I have to piss you off by forcing the decision as QA, then I will. I hope I won’t have to, though.
|
The status of some deep roots (August 23, 2009, 16:41 UTC)
While there are quite a few packages that are know to be rotting in the tree, and thus are now being pruned away step by step, there are some more interesting facets in the status of Gentoo as a distribution nowadays.
While the more interesting and “experimental” areas seem to have enough people working on them (Ruby to a point, Python more or less, KDE 4, …), there are quite some deeper areas that are just left to rot as well, but cannot really be pruned away. This includes for instance Perl (for which we’re lagging behind a lot, mostly due to the fact that tove is left alone maintaining that huge piece of software), and SGML, which in turn includes all the DocBook support.
I’d like to focus a second on that latter part because I am partly involved in that; since I like using DocBook and I actually use the stylesheets to produce the online version of Autotools Mythbuster using the packages that are available in Portage. Now, when I wanted to make use of DocBook 5, the stylesheet for the namespaced version (very useful to write with emacs and nxml) weren’t available, so I added them, adding support for them to the build-docbook-catalog script. With time, I ended up maintaining the ebuilds for both versions of the stylesheets, and that hasn’t been always the cleanest thing given that upstream dropped the tests entirely in the newer versions (well, technically they are still there, but they don’t work, seems like they lack some extra stuff that is nowhere documented).
Now, I was quite good as I was with this; I just requested stable for the new ebuilds of the stylesheets (both variants) and I could have kept just doing that, but … yesterday I noticed that the list of examples in my guide had broken links, and after mistakenly opening a bug on the upstream tracker, I noticed that the bug is fixed already in the latest version. Which made me smell something: why nobody complained that the old stylesheets were broken? Looking at the list of bugs for the SGML team, you can see that lots of stuff was actually ignored for way too long a time. I tried cleaning up some stuff, duping bugs that were obviously the same, and fixing one in the b-d-c script, but this is one of the internal roots that is rotting, and we need help to save it.
For those interested in helping out, I have taken note of a few things that should probably be done with medium urgency:
- make sure that all the DTDs are available in the latest release, and that they are still available upstream; I had to seed an old distfile today because upstream dropped it;
- try to find a way to install the DocBook 5 schemas properly; right now the
nxml-docbook5-schemas package install its own copy of the Relax-NG Compact file; on Fedora 11, there is a package that installs more data about DocBook 5, we should probably use the same original sources; the nxml-docbook5-schemas package could then either be merged in with that package or simply use the already-installed copy;
- replace b-d-c, making it both more generic and using a framework that exists already (like eselect) instead of reinventing the wheel; the XML/DTD catalog can easily be used for more than just DocBook, while I know the Gentoo documentation team does not want for the Gentoo DTD to just be available as a package to install in the system (which would make it much easier to keep updated for the nxml schemas, but sigh), I would love to be able to make fsws available that way (once I’ll finish building the official schema for it and publish it, again more on that in the future);
- find out how one should be testing the DocBook XSL stylesheets, so that we can run tests for them; it would have probably avoided the problem I had with Autotools Mythbuster in the past months;
- package the stylesheets for Xalan and Saxon, which are different from the standard ones; b-d-c already has support for them to a point (although not having to explicit this kind of things in the b-d-c replacement is desirable), but I didn’t have reason to add them.
I don’t think I’ll have much time on working on them in the future, so user contributions are certainly welcome; if you do open any bug for these issue, please do CC me directly, since I don’t intend (yet) to add myself to the sgml alias.
|
Progress Update (August 23, 2009, 09:39 UTC)
Well… I’ve been busy getting the boxes into shape ready for new stagebuilds and a heap of other activities.
I have Firefox 3.5 going on mipsel… albeit a little shakey. I’ve got 99% of KDE 4.3 going also, again, a few glitches. I have turned my attention for the time being to the SGI machines here, since the kernels on all of them are out of date… and the userland is in a bit of a mess. Particularly on the Indy… which hasn’t been touched in a couple of years (e2fsck complained the disk wasn’t checked in over 1000 days).
The Indy (R4600SC) needs a new kernel, as its current one is too unstable to do anything useful. I remember kernel 2.6 being a royal bitch on this machine, hopefully things have improved. The IP28 is up and running… old kernel and userland, but it’s not quite as bad as the Indy… at least it’s stable. The O2 is similarly suffering an old kernel, but at least parts of its userland are in reasonable shape.
The two Fulongs are also getting an overhaul which is badly needed. The Yeeloong too, is undergoing further work to get things running.
Tonight, I managed to figure out battery monitoring within KDE 4.3… the trick was to unmask the apm USE-flag and re-merge hal with this feature enabled. Now the system displays the battery status as it should… if only I could get NetworkManager working properly, then everything would be sweet there.
I have a couple of tracker bugs relating to this work… bug 282264 is a tracking bug for KDE 4.x related tasks, and bug 282265 pertains to the changes needed for in-tree Lemote system support.
I intend to do a bit of work on both as I run between Brisbane and Laidley using the Yeeloong as a test platform, so hopefully we will have something for public release soon. In addition, I’ll be doing stagebuilds for the Gentoo/MIPS port generally, once my systems are back online.
|
August 21, 2009
A few days before leaving for my vacation (more on that later), I have noticed an identi.ca post from tante that related to XML parsers’ vulnerabilities from CERT-FI. Since I was leaving for vacation I didn’t want to pick it up myself, but I nudged our security team in that respect. Unfortunately this was a preamble to a multi-level fuck up.
When I first saw the advisories, it didn’t even name expat, not even in passing, but it referred to the Python parser, and I remembered that Python used an internal copy of expat by default. So I was worried; the worry seems to have been correct: the bug is in the expat code, rather than in the glue to Python, so the bug is present in all software using expat; Robert was able to reproduce the issue with a software that only used libexpat, and not Python; CERT-FI at the time of writing does not list standalone expat in the list of vulnerable software, though, just listing “Python’s libexpat”.
Indeed, the fix is present in the latest revision of expat in Gentoo’s tree, but that fix was escalated and pushed without going properly through security up to today which would have meant the fix wouldn’t have been scheduled for security stable.
But there is an even greater fuck-up in all this, and those who probably follow me from some time ago are already expecting it: bundled copies of libexpat ! Indeed the thing is not only bundled in a bunch of closed-source software but also in a lot of free software packages. The bundled libs bug is a good index for those things.
The problem now is to make sure the list is updated, and also make sure that the proprietary software that is vulnerable will be handled properly, hopefully. Unfortunately expat is probably the second most commonly bundled library after zlib, and that already made me shiver more than a few times at the thought of a vulnerability in it. Well, time has come.
Now, can somebody really find the unbundling effort still pointless? Seriously?
|
FROSCON (August 21, 2009, 09:48 UTC)
Hi y'all,
If you're unsure what to do this (22. and 23. of August) weekend and you're accidentally near Bonn or Cologne in Germania ...
FROSCON is happening again. And Gentoo will have a presence there.
So if you find the time, feel free to visit (and the 5Eur entrance fee are really worth it!) and meet us.
This year we have a booth and a dev room where we can demonstrate out superior slacking skills (and, of course,
the most awesome metadistribution ever!)
Experience from last years suggests a very nice, filled-with-fun, meeting of geeks, nerds and people that just like meeting other people.
There's a nice program filled with interesting speeches and discussion rounds,
lots 'o beer and quite likely some nice grilling or other kinds of food.
At the moment it looks like the weather will be good, so that'll make it even more fun. And if all that still doesn't convince you that you
have to be there ... well ... then you don't deserve it anyway!
Hope to see y'all there,
Patrick the bonsaikitten
|
August 20, 2009
I'm still trying to decide where I wanna go with my media browser/frontend solution -- if I'm going to write my own or keep hacking on MythVideo. I only have one really nagging issue left now, and that is that the file structure presented is static once you enter the "Watch Videos" menu. I'd like it to be dynamic (that is, upon entering a new folder, check the contents again) so that I can add stuff like symlinks to series that I'm currently watching, or whatever. Doing that is pretty tricky.
I spent a few hours last night digging through the code, trying to find out exactly how the code is operating and what it's doing. What I learned was that, well Myth was doing exactly what I thought it was -- it builds a file list upon first entering, and then it doesn't examine it at all until you re-enter the video browser through the main myth menu. (I wish I had a decent screenshot about now, it's a bit confusing if you don't know what I'm talking about.)
There's a couple of problems with this approach, in my mind. First of all, the time it takes to actually load the mythvideo plugin grows in relation to how much media you have that it needs to parse. That is, it iterates over *every* single file that is in your media storage, and adds it to one variable. It's essentially like running find on your filesystem, saving it into one variable, and then when browsing, just using that snapshot that you took.
The simpler way, in my opinion, would be to just refresh the directory structure and metadata for the directory you are in. While I was poking at it, one thing I tried was to get the directory scan to not go more than one level deep. That reduced the startup time from about 8 seconds to less than one. Nice.
Ideally, I'd like to change it so it just updates the directory scan as it enters a new one, progressively growing the variable as you jump around the directory tree, but I couldn't figure out how to do that in the code (and if someone wants to help, that'd be awesome). MythVideo calls fetchVideos() only when first entering, and not anytime after that. The real problem is that it in turn calls about eight other levels of functions that eventually get to scanning the directory tree. I could probably hack it together to pass the current directory I'm in and update the directory scan from there, but again, I'm so limited in my C++ skills, at this point it's just code and guess. So, I can find and explain the problem, but not fix it myself.
Fortunately, it's a minor wish list item of mine, and so it's not a show stopper. I can live with not being able to do it, and it's probably just a matter of me learning how to code a bit more that I could figure it out. On the plus side, I'm learning more about the internals of the code, and each time I go in there, I find a few small inefficiencies that I can cleanup myself, which is fun. Making progress, I suppose.
|
Just a short comparison after the initial report: The shipped Debian takes 60 seconds till the Gnome desktop appears, while the LXDE of my Gentoo installation needs 40 seconds. Of course less features (or cruft) is available with the latter, so no real benchmark. Also Ubuntu has formed a team to do a port to the Loongson CPU.
The kernel provided by Lemote is 2.6.31-rc5 and I used the attached configuration to succcessfully built and run the kernel on my Loongson 2F-based Yeeloong netbook.
CONFIG_MIPS=y CONFIG_MACH_LOONGSON=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_LEMOTE_YEELOONG2F=y CONFIG_CS5536=y CONFIG_SYS_HAS_MACH_PROM_INIT_CMDLINE=y CONFIG_CS5536_MFGPT=y CONFIG_UCA_SIZE=0x400000 CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_ARCH_SUPPORTS_OPROFILE=y CONFIG_GENERIC_FIND_NEXT_BIT=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_TIME=y CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_DMA_NONCOHERENT=y CONFIG_DMA_NEED_PCI_MAP_STATE=y CONFIG_EARLY_PRINTK=y CONFIG_SYS_HAS_EARLY_PRINTK=y CONFIG_SYS_SUPPORTS_HOTPLUG_CPU=y CONFIG_I8259=y CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y CONFIG_IRQ_CPU=y CONFIG_BOOT_ELF32=y CONFIG_MIPS_L1_CACHE_SHIFT=5 CONFIG_CPU_LOONGSON2F=y CONFIG_CPU_LOONGSON2=y CONFIG_SYS_HAS_CPU_LOONGSON2F=y CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y CONFIG_64BIT=y CONFIG_PAGE_SIZE_16KB=y CONFIG_BOARD_SCACHE=y CONFIG_MIPS_MT_DISABLED=y CONFIG_CPU_HAS_WB=y CONFIG_CPU_HAS_SYNC=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_SYS_SUPPORTS_HIGHMEM=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_SPARSEMEM_STATIC=y CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_ZONE_DMA_FLAG=0 CONFIG_VIRT_TO_BUS=y CONFIG_HAVE_MLOCK=y CONFIG_HAVE_MLOCKED_PAGE_BIT=y CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y CONFIG_HZ_1024=y CONFIG_SYS_SUPPORTS_ARBIT_HZ=y CONFIG_HZ=1024 CONFIG_PREEMPT=y CONFIG_SECCOMP=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=y CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="-fauli" CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_KERNEL_LZMA=y CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_TREE_RCU=y CONFIG_RCU_FANOUT=64 CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=15 CONFIG_GROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_RT_GROUP_SCHED=y CONFIG_USER_SCHED=y CONFIG_CGROUPS=y CONFIG_CGROUP_DEBUG=y CONFIG_CGROUP_NS=y CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_RESOURCE_COUNTERS=y CONFIG_CGROUP_MEM_RES_CTLR=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y CONFIG_MM_OWNER=y CONFIG_RELAY=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" CONFIG_RD_GZIP=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y CONFIG_SYSCTL_SYSCALL=y CONFIG_KALLSYMS=y CONFIG_HOTPLUG=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_PCSPKR_PLATFORM=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_VM_EVENT_COUNTERS=y CONFIG_PCI_QUIRKS=y CONFIG_COMPAT_BRK=y CONFIG_SLUB=y CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_SYSCALL_WRAPPERS=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_MODVERSIONS=y CONFIG_BLOCK=y CONFIG_BLOCK_COMPAT=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_CFQ=y CONFIG_DEFAULT_CFQ=y CONFIG_DEFAULT_IOSCHED="cfq" CONFIG_FREEZER=y CONFIG_HW_HAS_PCI=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_ISA=y CONFIG_MMU=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=y CONFIG_MIPS32_COMPAT=y CONFIG_COMPAT=y CONFIG_SYSVIPC_COMPAT=y CONFIG_MIPS32_O32=y CONFIG_MIPS32_N32=y CONFIG_BINFMT_ELF32=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_PM=y CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HIBERNATION_NVS=y CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="/dev/sda2" CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_LOONGSON2F_CPU_FREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_PACKET_MMAP=y CONFIG_UNIX=y CONFIG_XFRM=y CONFIG_XFRM_USER=y CONFIG_XFRM_IPCOMP=y CONFIG_NET_KEY=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y CONFIG_ASK_IP_FIB_HASH=y CONFIG_IP_FIB_HASH=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_MULTIPATH=y CONFIG_INET_AH=y CONFIG_INET_ESP=y CONFIG_INET_IPCOMP=y CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y CONFIG_INET_XFRM_MODE_TRANSPORT=y CONFIG_INET_XFRM_MODE_TUNNEL=y CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_LRO=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_CFG80211=y CONFIG_WIRELESS_OLD_REGULATORY=y CONFIG_WIRELESS_EXT=y CONFIG_WIRELESS_EXT_SYSFS=y CONFIG_LIB80211=y CONFIG_MAC80211=y CONFIG_MAC80211_DEFAULT_PS=y CONFIG_MAC80211_DEFAULT_PS_VALUE=1 CONFIG_MAC80211_RC_PID=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT_PID=y CONFIG_MAC80211_RC_DEFAULT="pid" CONFIG_MAC80211_LEDS=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=m CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="" CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y CONFIG_PNP=y CONFIG_BLK_DEV=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_EEPROM_93CX6=y CONFIG_HAVE_IDE=y CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SR=y CONFIG_CHR_DEV_SG=y CONFIG_SCSI_WAIT_SCAN=m CONFIG_ATA=y CONFIG_ATA_SFF=y CONFIG_PATA_AMD=y CONFIG_NETDEVICES=y CONFIG_NET_ETHERNET=y CONFIG_MII=y CONFIG_NET_PCI=y CONFIG_8139TOO=y CONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y CONFIG_WLAN_80211=y CONFIG_RTL8187B=y CONFIG_INPUT=y CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_INPUT_EVDEV=y CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y CONFIG_SERIO=y CONFIG_SERIO_I8042=y CONFIG_SERIO_LIBPS2=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y CONFIG_DEVKMEM=y CONFIG_SERIAL_NONSTANDARD=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_PNP=y CONFIG_SERIAL_8250_NR_UARTS=16 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_FOURPORT=m CONFIG_SERIAL_8250_ACCENT=m CONFIG_SERIAL_8250_BOCA=m CONFIG_SERIAL_8250_EXAR_ST16C554=m CONFIG_SERIAL_8250_HUB6=m CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=16 CONFIG_HW_RANDOM=y CONFIG_RTC=y CONFIG_RAW_DRIVER=m CONFIG_MAX_RAW_DEVS=256 CONFIG_DEVPORT=y CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_HELPER_AUTO=y CONFIG_HWMON=y CONFIG_SENSORS_PCF8591=y CONFIG_THERMAL=y CONFIG_THERMAL_HWMON=y CONFIG_SSB_POSSIBLE=y CONFIG_FB=y CONFIG_FIRMWARE_EDID=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_MODE_HELPERS=y CONFIG_FB_SM7XX=y CONFIG_FB_SM7XX_ACCEL=y CONFIG_FB_SM7XX_DUALHEAD=y CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_GENERIC=y CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y CONFIG_LOGO=y CONFIG_LOGO_LINUX_CLUT224=y CONFIG_SOUND=y CONFIG_SND=y CONFIG_SND_TIMER=y CONFIG_SND_PCM=y CONFIG_SND_HRTIMER=y CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VMASTER=y CONFIG_SND_AC97_CODEC=y CONFIG_SND_DRIVERS=y CONFIG_SND_AC97_POWER_SAVE=y CONFIG_SND_AC97_POWER_SAVE_DEFAULT=10 CONFIG_SND_PCI=y CONFIG_SND_CS5535AUDIO=y CONFIG_AC97_BUS=y CONFIG_HID_SUPPORT=y CONFIG_HID=y CONFIG_USB_HID=y CONFIG_USB_HIDDEV=y CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_DEVICEFS=y CONFIG_USB_SUSPEND=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_OHCI_HCD=m CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=m CONFIG_USB_STORAGE=y CONFIG_MMC=m CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_NEW_LEDS=y CONFIG_LEDS_TRIGGERS=y CONFIG_LOONGSON_PLATFORM_DEVICES=y CONFIG_EC_KB3310B=y CONFIG_EXT2_FS=m CONFIG_EXT3_FS=y CONFIG_EXT3_DEFAULTS_TO_ORDERED=y CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_EXT3_FS_SECURITY=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_XATTR=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_JBD=y CONFIG_JBD2=y CONFIG_FS_MBCACHE=y CONFIG_FS_POSIX_ACL=y CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY=y CONFIG_INOTIFY_USER=y CONFIG_FAT_FS=m CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="utf8" CONFIG_NTFS_FS=m CONFIG_NTFS_RW=y CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y CONFIG_SYSFS=y CONFIG_TMPFS=y CONFIG_CONFIGFS_FS=m CONFIG_NETWORK_FILESYSTEMS=y CONFIG_CIFS=m CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y CONFIG_MSDOS_PARTITION=y CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_850=y CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_15=y CONFIG_NLS_UTF8=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_FRAME_WARN=1024 CONFIG_TRACING_SUPPORT=y CONFIG_HAVE_ARCH_KGDB=y CONFIG_CMDLINE="" CONFIG_CRYPTO=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_BLKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_PCOMP=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_ECB=y CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_CRC32C=m CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_AES=y CONFIG_CRYPTO_ARC4=y CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_DEFLATE=y CONFIG_BITREVERSE=y CONFIG_GENERIC_FIND_LAST_BIT=y CONFIG_CRC_CCITT=m CONFIG_CRC16=y CONFIG_CRC_ITU_T=m CONFIG_CRC32=y CONFIG_LIBCRC32C=m CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_DECOMPRESS_GZIP=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y CONFIG_NLATTR=y
|
Every one of us dumb workhorses called architecture developers has its own way of scripting all the commands necessary to stabilise/test a package on its architecture, but I would like to describe how I do it, for the curious. The bug list of the architecture (x86 in my case) with all keywording and stabilisation requests is the starting point here.
Normally I install the packages in a chroot and I follow the never-uninstall-a-package policy to catch file collisions, while others keep the system lean to find missing dependencies (they probably use the buildpkg feature of Portage to keep compile times for dependencies down). To put all needed packages in the package.keywords file, I use the Gentoo Arch Testing Tool (app-portage/gatt) which does that automatically. Compile test includes up to three runs: With all USE flags enabled, then all disabled and then finally what make.conf and the profile defines. The last iteration is then tested, either by starting the program and using it for some time (games usually get a longer testing period) or by building packages that depend upon the package to be stabilised. I have a little script that extracts that information from the tinderbox' rindex and determines which package is in stable and needs to be rebuilt. Manual work includes a short glance if USE flags are needed to activate the support for that package. Installing as most depending packages as possible makes sure all reverse dependencies still build, this sometimes leads to other stabilisation requests or bug reports blocking the stabilisation of the initial package.
After everything went successfully I tell Gatt to create a script in the /tmp/ directory which is shared with my main system. From there I call that script which is quite capable and there is an extensive manual for it.
That's how your package hits stable on x86 usually. Big things like KDE or Gnome are handled differently, the script is shorter:
- Install it with the package list provided by the team (normally that's the case)
- Test it
- Keyword all packages and add ChangeLog entries (without commit)
- Run QA checks with repoman over the whole category
- Run commit with --force to disable QA checks to speed up process (it still takes hours for KDE)
|
August 18, 2009
Before the netbook-boom called 'mini notebook', Lemote now promotes it as netbook (what it really is). The specialty of that little thing is the hardware: Not an Intel Atom or some AMD CPU, but a 900Mhz Mips chip. Honestly, after my disaster with something ARM-based (NSLU2, it still is bricked and will never be revived I think), I wanted something more end-user friendly and the Lemote is just that. Equipped with a full-fledged desktop installation (the Debian mipsel variant) it allows installing Gentoo with few problems. Chrooting and installing the stage tarball from Zhang Le gets you off quite fast. The provided kernel did not boot, but Le gave me a newer one, which worked just fine after creating some missing device files (console, tty* and pty*, see man mknod). Meanwhile I have compiled my own kernel and the system just runs with LXDE...so finally a possibility to have the third Gtk-based destop installed. Gnome on sol (the big iron desktop), Xfce on the main lappy (called terra) and LXDE now on mars. Performance is good, for surfing and mailing it is more than sufficient, compile times are ok (even GNU Emacs runs), but the battery is way too small (1.5 hours only, but a peak of 14W consumption, while having 12W during normal surf sessions).
The Loongson processor seems to me as the future of the Gentoo Mips port. Supporting the old SGI machines is nice but they will eventually die out, while Lemote actively works on new machines and supports Linux as its main platform (they don't have any other choice apart from the BSDs anyway). Ordering is really simple: Either use Lemote directly (and handle all customs yourself), use KD85 (what I did, really pleasing experience, shipped from Belgium) or Tekmote from the Netherlands.
Zhang Le (r0bertz) and Stuart Longland (redhatter) wrote enough about the Loongson processor and the Gentoo support in various entries on their blogs, so I won't go into more details.
|
Introducing to Gentoo-Quebec (August 18, 2009, 10:09 UTC)

Gentoo-quebec is a project which aims to meet people around gentoo stuffs.
At the origin it was created on 1st December 2007 per 5 guys
-Laurent Duchesne
-Sylvain Alain
-Patrick Blanchard
-Éric Langlois
-Mathieu Bouchard
Providing great documentations as PDF format (generated using LaTeX ) and excellents wiki howtos pages, this is the right place to share and learn experiences.
There is also an useful and powerful forum for our community, to get feedbacks and ask all your questions, don't worry admins didn't forget an english section .
Actually I help them when I've time enough, my areas of responsability are mostly fix or write articles in the wiki, and share my experiences (and learn too) on the forum.
Gentoo-quebec always search great users with good gentoo skills, or developer who want to share their knowledges (like zmedico with portage, thanks to him).
so because you finished to read this entry don't wait and join gentoo-quebec ! 
|
August 16, 2009
Well… after much building by one of the older Lemote systems, I finally have a Gentoo desktop with KDE 4.3.0 on the Lemote Yeeloong.
I’m still working on the rest of the KDE suite… and will have to track down the necessary bits and pieces for battery monitoring and other goodies… but it seems everything is working. It also is slightly more responsive on Gentoo than Debian (which I still have in a chroot).
This post is being written in Konqueror 4.3.0 on the said installation… it passes the Acid 2 test, but has a few stability glitches here and there… so far both the Acid 3 test, and Google Groups crashes it. I’ll sort this out later.
In short, this does mean I’ll be coaxing my O2 into making the same journey and making the necessary tree modifications in order to allow KDE 4.3 on Gentoo/MIPS.
|
I always thought that writting documentation is much more difficult than coding. This is because, writting documenation and guides, is kinda boring(?), requires a lot of our free time and it is not as fun as coding. All of these arguments IMHO are true but is documentation really needed?
During my six month Gentoo journey I faced a common problem: “I want to write a python/gnome/qt ebuild. How on earth am I suppose to do it??”
Looking through Gentoo docs I ‘ve found some guides about writting games and python ebuilds. Maybe there are more, I haven’t checked. Those guides are quite handy for anybody who wants to write a quick ebuild without making serious mistakes.
Eclasses usage is another tricky thing. Based on my experiense, I believe that the most difficult part is to understand how they work and when they should be used on an ebuild. E.g., a Qt4 ebuild doesn’t always require to inherit qt4 eclass because it might wants cmake functions to build and install. In this case, despite the fact that it is a pure Qt4 package, you need to inherit the cmake-utils eclass. That was a simple example but I believe you got the point
This blog post is a kind request to all fellow developers, to make some time and write proper ebuild guides ( and keep them updated based according to eclasses’ latest changes ) for the sake of developers and users. People tend to believe that ebuild writting is quite hard because of all the e-* functions ( wrappers ) and ebuild phases. Prove them wrong
ps: A Qt4 ebuild guide, can be found here
|
August 14, 2009
August 13, 2009
After talking with Ben (yngwin), I found that there really wasn't anyone working on documentation related to LXDE inside of Gentoo. So, I decided that I would write a HOWTO for getting it installed and configured. I finished the document this morning, and uploaded it to my Developer webspace. You may see a working copy of the document there, and if you want to see the xml, you have two options. Firstly, when looking at the finished copy, you append the following to the end of the URL:
?passthru=1
making the full URL:
http://dev.gentoo.org/~nathanzachary/documentation/lxde_1.0.xml?passthru=1
and that will show you the XML. Secondly, you can view Bug 281345, and click on the attachment. Hopefully the documentation team will pick up the guide in the near future, and commit it. The only holdup that I can foresee is that LXDE is still available only through the testing (~arch) branch.
|:| Zach |:|
|
I have made several changes to the Openbox HOWTO. There were many typographical errors that I didn't catch the first time around, and package links that weren't added. Here's a full list of the updates for version 1.4:
- In code listing 2.5, changed the $ to # as the operation requires root actions.
- Added a note to the 2.5 listing about becoming root before the command.
- In code listing 2.6, fixed the typographical error (7gt; instead of gt;).
- In code listing 2.6, made the
- In code listing 2.8, fixed the typographical error (extra > in closing tag).
- In code listing 2.8, fixed the typographical error (missing closing ").
- Added a link to the package information for conky before code listing 2.10.
- Added a link to the package information for feh after code listing 2.10.
- Added a link to the package information for nitrogen after code listing 2.10.
- Removed the library dependency bug reference for nitrogen.
- In terminals section, changed "customized" to "customised" for consistency.
- In file managers, fixed typographical error for Nautilus (a "bit" heavy).
If you would like to see the new document revisions before it gets committed to the official documentation repository, it is available on my Developer webspace. You may also view the XML for version 1.4 via Gentoo Bug 256693.
|:| Zach |:|
|
August 12, 2009
It is with sadness that we as Trustees bring forward this news that we have
recently received. Ferris Ellsworth McCormick, better known as fmccor, has
passed away unexpectedly on the 5th of August. His family does not wish to be
contacted. We have expressed our gratitude for his contributions on behalf of
the Community.
Ferris studied mathematics in college at Indiana University, graduating in 1968
with a Bachelor of Arts. Later he entered into the Law school at the University
of Michigan, earning his Juris Doctor degree in 1991.
He passed the bar in Michigan that same year and has continued to be an
actively certified Lawyer with the State of Michigan since then. He was also a
member of the Association for Computing Machinery (ACM).
Ferris joined Gentoo on April 16th 2004 as part of the sparc team and improved
sparc support for the entire open source community. Within a year he also
joined the Developer Relations team to help with mediation of any issues that
might come up between people. As time went on Ferris continued to expand and
assist Gentoo in many ways including assisting with the User Relations team and
growing to become the Strategic Manager of the sparc project. Finally, he
became a trustee and the Vice President of the Foundation assisting in getting
the foundation back into good standing.
While it is too late to say in person, the Foundation would like to thank
Ferris once again for all that he did for both Gentoo and the Open source
community. He will be missed.
Please join the community in eulogizing Ferris in our forums here.
|
August 11, 2009
This is a quick note for anyone using compiz, that x11-wm/compiz-0.7.8-r3 will allow KDE-4.3.0 and that the KDE use flags were updated now that KDE-4 has become the "default" KDE version and that 3.5 is approaching its final days.
As such, the kde use flag will add support for KDE-4.X and the kde3 use flag will add support for KDE-3.5. So be sure to check your use flags for compiz.
I plan to move compiz-0.7.8-r3 from the overlay to the tree in a few hours.
Following my attempts to deal with bug 259715, I broke libcompizconfig again - bug 278146. Although I've masked libcompizconfig-0.8.2-r2 sometime ago, it was unmasked long enough to break the config files for enough users. If you still have ccsm / compiz failing for you, you need to downgrade to libcompizconfig-0.8.2 and to remove the contents of ~/.config/compiz/compizconfig/. I'm still working on removing the bundled iniparser from libcompizconfig.
|
August 10, 2009
LXappearance and icon themes (August 10, 2009, 23:24 UTC)
After having recently reinstalled Gentoo on my main production machine, I thought I would look into some theming to make things more aesthetically pleasing. I installed a bunch of GTK themes that I ended up not liking, so I got rid of them. I use Openbox with a bunch of LXDE applications installed to ease the process of customisation. One such application is LXappearance. Getting rid of the unwanted themes from the LXappearance menu wasn't all that difficult. I simply went to /usr/share/themes and removed the respective folders. However, I couldn't seem to get the unwanted icon themes to go away. If I'm not mistaken, icon themes are usually installed to /usr/share/icons. When I went to manually delete the icon theme folders, however, there were no such directories. Hmmmmmmmm...
Since searching the web didn't yield any significant results, I thought I would go to the source code and figure out just what happens when one installs an icon theme using LXappearance. In /usr/share/lxappearance there is a script called install-icon-theme.sh, and it contains the following line:
export XDG_DATA_HOME="$HOME/.local/share";
That lead me to check that respective directory. Bingo, there were my icon theme folders. I simply deleted the folders, and the respective icon theme choices were no longer present in LXappearance. I was simply excited as it was my first success of the day. 
|:| Zach |:|
|
I’ve been playing around more with Linux Containers after my post about init scripts and I start to think they are quite near being working for Gentoo. I hope once I come back from my vacations to get them in the tree together with Tiziano.
Right now the problems we have are:
- the standard stage3 needs to be heavily tweaked or it’ll be a massacre when started;
- if I do set ttys in the configuration, at start time it moves me to the real tty1, which causes a domino effect with X11 that is annoying, although not critical;
- OpenRC needs to be tweaked to add support for Linux-Containers; there are quite a few things that could be eased up by having a working OpenRC that ignores some init scripts when running in containers; the code seems to be in
src/librc/librc.c (look for openvz) and should be easy to check whether we’re running on containers, by checking the running cgroup (/proc/self/cgroup);
- the current ebuild in Tiziano’s overlay creates a
/var/lib/lib directory and installs the lxc- binaries in /usr/bin, both of which shouldn’t happen in Gentoo once installed;
- running
rc shutdown inside the container will stop all the services properly, but will not kill init and thus not kill the vserver, I’m not sure why; running kill 1 also seems not to work, I have yet to check whether sending the kill signal from outside will properly shut down the rc inside, if yes, then it’ll be a good way to shut down the container.
Once I’ll be back and I’ll be working on the init scripts, they’ll be in a separate package, kinda like mysql’s, since what I have for now is slightly more complex, will add a few more standard locations (for instance they’ll use a /var/log/lxc directory that is not part of the standard install of lxc) and will require a couple of packages that are not part of lxc.
|
August 09, 2009
The tree fasting has started (August 09, 2009, 19:25 UTC)
Today I finally went around writing a script that could help me with sending QA last rites, without using Evolution; this way, I was able to send out quite a few last rites before I went to have my vacations. It actually took me a bit of tinkering because my first try was using bash and sendmail to prepare the messages, and in particular to sign them. Since encoding my name properly is quite hard, I gave up and I now use mutt to send the stuff; unfortunately i was unable to find how to sign the messages with mutt and gpgme; if somebody can help me with that, it’s very welcome.
With the script at hand I then went on checking some of my older bugs to send some of them out; some bugs weren’t really correct before (caused by the older tinderbox attempts, which used --buildpkg) and I fixed them up, others were fixed with time, others were still valid. All the packages that failed to build for whatever reason the past October (or at least, most of those) have been last-rited, masked and ready for removal. There are other packages that have been masked and prepared for removal, for failures to build, QA concerns and other stuff.
Now, since these are last rites for QA reasons, they get a 60-days grace period (I usually just did two months, but since I’m now running it through the script, it’s easier to use a real 60-days time). If the package maintainers, other developers, or users, have interested in keeping these packages alive, they should have enough time to do so. Keeping them broken as they are now, though, is not an option, and just fixing them to build, and keep them rotting forever, is not an option either.
Now, while Samuli and Victor are going through to fix all the possible glibc 2.10 and gcc 4.4 failure for the tree, I’m trying to find the problems that are not related to those, and decide on a number of reasons whether to remove the packages or not. These include, but don’t limit to, build failures not stopping the ebuild, broken dependencies, old ebuild not touched for years (sometimes fixes are made but no major change is present, some of those have to go as well), and a sum of minor QA issues.
Since minor issues are, as the name imply, not big enough to call for a removal of a package, I don’t stop at one or two of those, but when I get a package that fails to build, for whatever reason, and then I find that it doesn’t respect flags, CC, and fails with --as-needed as well, then the package is as good as broken to me, and it’s deemed to go.
At the same time, spending eight months or so being broken, in ~arch, is enough for the package to be deemed broken, even if it works fine in stable. Why this? Because it’ll be keeping other packages from going stable, or it’ll break when they go, so it’s not something ignorable.
The date for the start of the final cleanup is October 8th 2009, that day, about 20 packages will be removed (probably even more); while this is just a minimal part of the tree, that keeps growing and growing with time (I also have quite a few packages to add myself), it is part of the standard maintenance that we have to do to make sure that the tree is healthy.
The added advantage is that the packages that are masked will not be rebuilt repeatedly by the tinderbox in the future, which reduces the amount of work and thus the time needed for a full rebuild (it’s already pretty long as it is running all the testsuites: some take hours to complete, some even freeze in the middle and require manual handling (which is why I won’t be leaving the tinderbox running while I’m in London). And on a related note, glib’s testsuite completely freezes Gentoo/FreeBSD to a stop. Scary!
|
SSDs and filesystems, part 2 (August 09, 2009, 10:07 UTC)
So, a couple days in, and I'm still trying to (re)install Gentoo. More on that in a bit. First, let's talk about speed.
It's hard to tell whether or not my new SSDs are really a speedy improvement over the old software RAID1 array of magnetic HDDs. Normally, a bare-bones commandline system feels much faster than an aging graphical desktop, even on the same hardware.
I notice that compile times are slightly faster, though I've also been using tmpfs for Portage and the usual tmp file locations, so putting it all on RAM will lead to a significant speedup anyway.
Boot times are indeed quite zippy; the longest wait is for my media HDD to finish mounting -- it's on ReiserFS, which is known to have very slow mounts.
Now, let's talk filesystems.
The critical showstopper that's made me reinstall two times (and counting) is ext4. So far, ext4 has completely corrupted a whole drive (/var and /usr/portage) and made the other drive (/ and /boot) almost unbootable.
ext4 has eaten my data, hosed my system, and ruined my life.
No amount of fscking has fixed /var and /usr/portage, both on the second SSD. Did you know that you shouldn't let fsck try to resize broken inodes? apparently the resize behavior is known to be broken in the latest versions. It's known to corrupt filesystems. I didn't know that, either. I'm sorry, but what part of "production-ready" applies to ext4? Yeah, it's a new kid on the block, but it's moved out of the "experimental" status into the kernel.
That does not make it ready for your system. The first and second Gentoo installs largely didn't work because (I think) there might have been an invalid mount option. Or something could not be found. Or a superblock was missing. Or the moon was wrong. #$#^#&@ shitty unintelligible error messages. (Here's a tip, developers: don't put every possible thing that could have gone wrong into an error message, then repeat that message for every different error.)
My mount options seemed to be good after double-checking the manpage and around the internet, including kernel.org. Here was my original fstab, from when I had only one partition for / (no separate /boot):
/dev/sda1 / ext4 noatime,data=writeback,commit=60,nobarrier 0 1
/dev/sdb1 /var ext4 noatime,data=writeback,commit=60,nobarrier 0 1
/dev/sdb2 /usr/portage ext4 noatime,data=writeback,commit=60,nobarrier 0 1
Livin' on the edge here. I figured I wouldn't need a separate /boot partition on my first drive, so I lumped it all into one. I did that back in 2005 and 2006 with no problems, right? Right. The rest of the options were designed to maximize SSD performance.
Unfortunately, I couldn't get the system to boot. Made it past grub, the kernel loaded, but when it came time to mount /, it couldn't mount the filesystem rw. No amount of changing options worked -- adding rw to grub.conf, to the fstab options, nothing.
So I figured it must be my one-partition setup, and wiped my disks. Reinstalled again, this time adding a /boot partition on sda. Same ext4 options for /boot as for the other partitions. Rebooted and . . . nope, same errors. Now I'm also seeing a message about a possible bad option or other variable, which I can only assume was in fstab, thanks to the aforementioned shitty nonspecific error messages.
Hit up Google. Not much help. I again backed off on some of the ext4 options, tried playing with Grub parameters, but got the same results. The filesystems mostly weren't mounting, and when a few of them did, it was all readonly.
Sigh. Time to reinstall again. Set up a similar fstab, but this time I changed an ext4 option for /boot to data=ordered, based on this blog post. Reboot and . . . hey, it works. /boot gets mounted. Nothing else does, but it's a start.
I quickly booted back into the LiveCD, changed the other fstab entries to data=ordered, and reboot again. This time, the system seems to boot just fine . . . until it tries to mount /var and /usr/portage from the second SSD. *bzzt*, these cannot be mounted! Something's gone wrong. One more reboot, just for luck, then . . . *bzzt*, now there are filesystem errors! Fsck wants to fix them, so I let it run. Except it completely hoses both partitions. They seem to be so badly scrambled that even running mkfs.ext4 on them from the liveCD results in errors, some of which seem to be emitted from the libata system, which makes me wonder if now the SSD itself has also been corrupted.
I'll have to completely reinitialize and repartition that disk, now. Thanks, ext4. Thanks for hosing my data. Up yours, ext4.
I'm done trying to figure out why ext4 doesn't work. I don't care that it's supposed to be a fast file system for SSDs. I don't care that it's 40 times faster than ReiserFS to mount at bootup. I don't care. ext4 has lost my data three times now. I think my fingers are sufficiently burned to know that "the oven is hot; don't touch."
Up yours, ext4. I'm going back to ReiserFS. At least it works. It's never failed me in more than four years.
Update: On top of the initial ext4 errors, fsck problems, and mount issues, the Mobi drive was also going bad. Now the motherboard BIOS can't see it, regardless of which SATA port or cable I plug in. So just a day or so after trying out the device, when it was initially working for the first install (though the filesystem was throwing ext4 errors, at least /var and /usr/portage worked okay), and it finally finished failing. F***. I contacted the seller to request an RMA; I have a feeling that I'll end up having to go through the manufacturer, which will take a long time. Meanwhile, I'm without a workstation for an indefinite time, so I've set my devaway on dev.gentoo.org. I did find a couple other reports on the internets that say that their Mobis also died shortly after they arrived, so maybe there was a batch of bad drives.
But don't get me wrong, the Mobi drive dying doesn't absolve ext4 of any guilt. The ext4 filesystem still completely f**ked itself repeatedly on the system drive, the UltraDrive ME. It still refuses to do what it's told to do. But rather than continue to investigate related LaunchPad bugs on mounting ext4 rw and fsck errors, I'm going to move back to ReiserFS for the UltraDrive, and just live with longer boots. The RMA process will take awhile, so I may have to reinstall everything on a single drive and just avoid syncing Portage for awhile.
On a good note, OCZ (the company that makes the Vertex, an identical drive with an Indilinx controller), has been experimenting with a homegrown beta firmware that lets the drive do online garbage collection in the background. This is important for keeping the performance of the drive as fresh as when it was first used, even after it gets filled up with files and repeated (re)writes. The firmware is still in testing, but I'm hopeful that it'll make it out the door soon. Hopefully the same firmware features will find their way to my Super Talent drive -- and hopefully the TRIM command will also be implemented in the firmware.
Of course, the only Linux filesystem I know of that supports TRIM is ext4 . . .
|
August 08, 2009
Against to avoid the problem of bus factor, I’m going to write down here what the plans are, for what concerns me, with PulseAudio and Gentoo for this end of Summer 2009, mostly related to what will happen when I’ll come back from my vacations in London, after mid August.
This actually is also out of candrews asking for it as I haven’t really thought about writing this before that.
So the first thing to say is that I am following PulseAudio pretty well; or rather I’m following Lennart pretty well (he’s also the one that suggested me to rewrite udev’s build system to use non-recursive automake — something I’ll write more about another day), so I’m not sleeping waiting.
Indeed, the 0.9.16 test releases are available in Gentoo already, although masked, and since recently they both support udev hotplug (preferring it over HAL), and also pass all the checks already. A note on the tests is needed though: the mix-test lacks a few entries, in particular regarding 24-in-32-bit samples, and is for this reason disabled in the current ebuild (Lennart should be working on it); at the same time, the ebuild is running test specifically in the source directory, because the intltool checks fail; badly. In theory the problem should be fixed in 0.41 series of intltool, but I am unsure whether that should be packaged or not by us.
In the next release, whether it’ll be another test release or the final release, there will also be a few differences in the handling of audio APIs. The OSS support will be restricted, masking the USE flag on Linux (leaving it enabled for FreeBSD obviously); this means that users wanting to use stuff like OSS4, which is not in Portage and if it’s for me will never be, will have to go a slightly longer way to get it to work with PulseAudio. The reason for this is that Lennart really don’t want to support that, and I can agree with him. Now, if you know the package well, you’ll probably be wondering “what about the OSS-compatibility wrapper?” this is solved already: in GIT the OSS output and wrapper supports are split in two different options, the former will be tied to the oss USE flag, the latter will be left in “auto-mode”, which will create the padsp rapper on all Gentoo Linux and FreeBSD systems. And this should fix your problem Luca!
As for some of the new features, like for instance Rygel UPnP support, well, I’ll probably be working on the sometime in the future; I do want to get Rygel in portage, especially if that will allow me to look at my vacation’s photos directly on my Sony Bravia networked TV.
|
August 07, 2009
So in the past few days the new apr version marked stable in Gentoo for a series of security problems and all the stable users are suggested to upgrade. Pay attention if you do.
I went updating it today on this server, and found out that Apache failed to start afterward, lamenting inability to open the listening socket; after finding this in the change log for apr itself, I found the problem:
Set CLOEXEC flags where appropriate. Either use new O_CLOEXEC flag and associated functions, such as dup3(), accept4(), epoll_create1() etc., or simply set CLOEXEC flag using fcntl(). PR 46425. [Stefan Fritsch, Arkadiusz Miskiewicz]
Checking the configure.in file, this came out, as well:
AC_CACHE_CHECK([for SOCK_CLOEXEC support], [apr_cv_sock_cloexec],
[AC_TRY_RUN([
#include <sys/types.h>
#include <sys/socket.h>
int main()
{
return socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, 0) == -1;
}], [apr_cv_sock_cloexec=yes], [apr_cv_sock_cloexec=no], [apr_cv_sock_cloexec=no])])
if test "$apr_cv_sock_cloexec" = "yes"; then
AC_DEFINE([HAVE_SOCK_CLOEXEC], 1, [Define if the SOCK_CLOEXEC flag is supported])
fi
It’s testing if the build system supports CLOEXEC to forcefully enable it on the host system without fallback. This is failing for me because the build system is Yamato and the host sytsem is Vanguard; the former supports CLOEXEC, the latter doesn’t. Just forcing cloexec to be turned off (by setting apr_cv_sock_cloexec=no before merging, fooling the cache system) stops it from requesting CLOEXEC and thus let Apache listen to the socket.
Unfortunately this doesn’t really fix the issue entirely: after that, Apache starts but all its children segfault; since I don’t have enough debug information on Vanguard, I stopped debugging here; I’m not happy about this happening just before my vacation, I guess I’ll have to spend this weekend debugging the issue…
Update!
After thinking about it a bit, I noticed that the code also checks for epoll_create1() even if CLOEXEC is not found (quite foolish); as it turns out, that is what makes Apache children’s crash. So if you are crossbuilding like I am (quite common for servers), you want to set these two variables in your make.conf until apr upstream solves the issue:
apr_cv_sock_cloexec=no
apr_cv_epoll_create1=no
Update #2!
I’ve reported this upstream with a tentative solution proposal, but I probably won’t work on it before my vacation.
|
August 05, 2009
While preparing for my first vacation ever next week, I’ve been trying to write up more content on my guide so that at least my fellow developers in LScube have a references of what I’ve been doing, and Gentoo developers as well, as lately I’ve been asked quite a few interesting questions (and not just them).
So, first of all, thanks to David (user99) who cleaned up the introduction chapter, and to Gilles (eva) who gave me the new stylesheet (so that it doesn’t look as rough as it did before, it also narrows the lines so that it reads better. It might not be the final style, but it really is an improvement now.
As for my changes, I’ve been trying to change slightly the whole take of the guide, trying to write up complete working examples for the readers to use, that are listed in the main page. At the same time, I’m trying to cover the most important, or less known, topics, with particular attention to what people asked me, or what I’ve been using on projects which is not very well known. The list of topics added include:
- using
AC_CHECK_HEADERS to get one out of a prioritised list of headers;
- using
AC_ARG_* macros (enable, with and environment variables);
- using
AS_HELP_STRING to document the arguments;
- using
AC_ARG_WITH to set up automatic but not automagic dependencies;
- using automake with non-recursive makefiles (including some of the catches);
- improved automake silent-rules documentation;
- using external macro files with autoconf (work in progress, for now only autoconf with no extras is documented).
I’m considering the idea of merging in some of the For A Paralllel World articles, at least those dealing with automake, to complete the documentation. The alternative would be to document all these kind of problems and writing something along the lines of “A Distributor’s Bible”… the problem with that idea is that almost surely somebody will complain if I use the name “Bible” (warning: I’m not a Catholic, I’m an atheist!)… and if I am to call it “The Sacred Book of Distributors” I’ll just be having to dig up all the possible mocks and puns over various religions, ‘cause I’ll be almost surely writing the ten commandments for upstream projects (“Thou shall not ignore flags”, “Thou shall version your packages”), and that also will enter a politically correctness problem.
Oh well, remember that I do accept gifts (and I tried not putting there the stuff that I’ll be buying next week… I already told my friends not to let me enter too many shops, but I’ll be following them and that’s not going to be a totally safe tour anyway…).
|
KDE 4.3 has arrived
Lots of behind-the-scenes fixes, a new pretty (debatable) default plasma theme and various new stuff across the board make kde 4.3 an exciting release!
Gentoo ebuilds were available the moment tarballs were released, thanks to the hard work of our Gentoo KDE team
However, since 4.3 brings some new packages (and dependencies), we’ve hard masked the ebuilds until everything gets the proper keywords.
You can follow the keywording progress in bug 280312.
Instructions on how to unmask kde 4.3 after the screenshot

unmasking & installing kde 4.3
kde 4.3 might be masked but it works fine on x86 and amd64 (for other archs check the bug above).
to install it, you can easily unmask it using the unmask file provided in the kde-testing overlay, [kde-testing]/Documentation/package.unmask/kde-4.3
if you don’t have / don’t want the overlay, you can grab the file here.
you can also use a command similar to
# unmasking kde 4.3
wget -O /etc/portage/package.unmask/kde-4.3 'http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=blob_plain;f=Documentation/package.unmask/kde-4.3'
to automatically save the unmask file to your unmask folder (if you use folders)
for those using stable gentoo, there’s a similar keywords file
# adding kde 4.3 in package.keywords/
wget -O /etc/portage/package.keywords/kde-4.3 'http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=blob_plain;f=Documentation/package.keywords/kde-4.3.keywords'
troubleshooting
if you’re trying to upgrade from kde 4.2, but portage gives you nice little blocks, there are a few things you can check:
- make sure you’ve synced the tree and kde-testing overlay (if using it) :p
- make sure the unmask/keyword files are correct and up-to-date
- check that you don’t have any 4.2 versioned kde-base/* items in /var/lib/portage/world
- check that you don’t have any 4.2 versioned sets in /var/lib/portage/world_sets
emerge -avDuN world — you’ll probably get some messy output but all blocks should be automatically resolved
if you hit any issues feel free to leave a comment, check the gentoo kde 4 guide (should be up-to-date soon) or visit us @ #gentoo-kde (freenode).
enjoy your shiny new kde!
share this post:
|
My take on amending GLEP 39 (August 05, 2009, 05:43 UTC)
Earlier today Calchan blogged about amending GLEP 39 here. During the council meeting I voted against council being able to change the document and on deciding a process for changing it. Why? First I think as the developer population voted the GLEP I think they should decide about the changes as well. Secondly I think we don't need to decide on a process because we already have one. Using the existing elections team and votify is enough when needed. If council members think we are wrongly skipping items in meetings, I challenge them to step up and take chair in the next meeting making sure items are properly handled.
|
Amending GLEP 39 (August 05, 2009, 02:53 UTC)
I'm going to go ahead and assume you have all read the summary of the last council meeting. It can be summarized even further.
- We decided the #gentoo-council channel would be moderated during meetings. Developers and users have plenty of opportunities to tell us what their opinion is prior to and during the meetings.
- We confirmed Thomas Anderson as the council secretary and clarified that the role of the secretary is limited to posting the logs and summaries of council meetings.
- The council decided it wasn't competent to decide how GLEP 39 should be amended.
Some would say that it isn't much. And I wouldn't disagree. I wished this council could be someday called the council that slacked less but we're apparently not taking that direction. Let's see if we can change that. By the way I encourage everybody, anybody, to post discussion topics to the gentoo-council mailing list and debate there.
What I really wanted to discuss today is amending GLEP 39, and more exactly how to proceed. This GLEP serves in certain ways as our constitution and is more critical than any others. It was written almost 4 years ago and as such relects the situation as it was back then. It has been criticized a lot, many want or wanted to replace it at some point in time, some even went as far as writing replacements for it (count me as one of them), but I have yet to see something that is worth discussing in public.
Now, I'm not going to say that it's perfect. No text of that kind can be even close to perfect. My point today isn't about discussing what should be kept in it and what should be changed (don't worry though, I'll discuss that soon), but to make sure we agree on the fact that we need a mechanism to modify it. And by extension replace it if we decide so someday. Not that it wasn't ever amended in the past, it was, but in a way that I can't imagine satisfies the whole developer community. Don't extrapolate from what I just wrote that I disagree with the changes or how they happened, quite the contrary actually. But I talk to a lot of you and many tell me they believe that since GLEP 39 was the result of the vote of all developers, any change to it needs to be again voted by all developers. I disagree with that simply because GLEP 39 itself has provisions that would imply the contrary. However, all opinions need to be taken into account, especially when the same one comes back often.
So, what happened during that last council meeting? One of the questions was whether the council could decide on a process to amend GLEP 39. The vote ended up saying no. The next item on the agenda was then to organize a vote of the whole developer community to decide, since the council declared itself incompetent. Strangely enough this item was skipped. How can that be interpreted? Frankly, I'm not sure.
Someone argued that there was no point bothering with how to amend GLEP 39 since we could always organize a quick vote of all developers. I see two issues with that. One is that we had just voted that we couldn't decide on a process, but arguing that we can always use an all-developer vote is precisely deciding on a process, and it's inconsistent. The second one is that GLEP 39 was already amended a few times, and each time without an all developer vote. I don't seem to remember anybody complaining about that. So there must be at least a significant part of the developer population which is happy with not having to vote on changes of GLEP39, and is comfortable with the "vote out the bums" clause.
Most probably what happened is that we were running late with the meeting and the item was skipped because it didn't seem important to your new council. Yep, you heard me. Your new council doesn't really care about what you think on amending GLEP 39. If you think your council should care more then let it be known.
|
August 04, 2009
LXDE updates (August 04, 2009, 21:30 UTC)
Lately we updated some of the LXDE packages in Gentoo, and tonight I added a few more. We have now a practically complete LXDE desktop on Gentoo. So if you feel like trying the most lightweight desktop environment, consider to emerge lxde-meta. If you come across any bugs or other issues, please let us know. Bugs should be reported at bugs.gentoo.org. Support questions are welcome in the #gentoo and #gentoo-desktop IRC channels on Freenode, or #lxde on OFTC. You can also go to the forums.
The current version, lxde-meta-0.4.2 and its dependencies, is considered our stable candidate, so we’d like to straighten out any issues there may exist. Also, some documentation would be welcome. So if you want to contribute a “How to configure and use LXDE on Gentoo” guide, we’d be very thankful. Or if you want to help maintaining LXDE in portage, we could always use more people. So contact me if you’re interested in a herd tester or developer position.
We also have an overlay with live ebuilds, but it is basically unmaintained. So I cannot recommend you use it, unless you want to test and update the ebuilds. If you’re on bitbucket, send me a pull request. We used to have several user contributors, but I guess they are too busy with other things now — as am I. Currently my focus for LXDE (whenever I have time for it) is to get the packages up-to-date with the latest released versions and get what we have now tested and marked stable.
So have you tried LXDE yet? What are your thoughts? And are you willing to contribute?
|
helping out planet gentoo (August 04, 2009, 04:43 UTC)
I'm looking for a someone to help out with Planet Gentoo if they are interested. Specifically, we host a deployment of b2evolution and use it for the developer blogs. As a maintainer of planet services for Gentoo, that's part of my job to take care of it ... but it drives me a bit nuts and I'd like to rip it out and tell people to use something else.
But, people do like it, and I'm losing interest in taking care of it, so what I'd like to do is give the opportunity to someone else if they are interested. If you wanna help out with Gentoo a bit as a staffer (not a developer), I can help you take the quiz and get started. Email me at beandog@gentoo.org and lemme know why you're interested, etc. Main responsibilities would initially just tweaking our b2evolution install, getting some things cleaned up, maybe helping out with documentation, small patches. Nothing major or stressful, just minor tasks that need to get done.
|
On ELOG (August 04, 2009, 00:45 UTC)
Figured I'd visit forums today, seen at least 4 topics about lost menus while updating gnome-menus to 2.26.2, banged head 4 times because of users not reading elog messages and doing random fixes instead of searching the real cause of the change (in changelog, ebuild, elog, bugzilla). Good thing I have added that to the migration guide that will be up for stable users.
For those of you who still don't know about elog, man make.conf.
Update: fix typo.
|
August 03, 2009
Okay for tonight I’ll post something quite personal, rather than a technical post (don’t worry guys tomorrow you’ll get to learn what happened after pam_mktemp I have the post written already).
I’m posting it here, after telling about it to a few people so I can actually find the courage to go on with the plan (you have no idea how much I have to force myself to overcome the fear of planes): next week I’m going, with a few friends, to London. And that means boarding a plane.
Preparations are already ongoing, luckily my cellphone is already set (thanks 3 for the free roaming among branches!), although I have some problems with my debit and credit cards (I haven’t learned the PIN code of the credit card since we don’t use it in Italy, and I’m afraid it won’t work in UK without it; the debit card has some limits for foreign operations, I’ve requested for them to be unlocked now).
What does this mean for you who are reading my blog? Well not really much; I’ll probably post one thing either before going, or while I’m there (thanks to the E75 phone), which is going to be up on August 12th, deadlined. For the rest of the week the blog is going to be silent, since I’m not bringing my laptop with me. It wouldn’t be able to connect either because I cannot seem to get the bluetooth tethering working on Fedora 11 (although wifi still would work). Gentoo work will all be postponed till I come back, given that yamato is going to stay off for a few days (off and detached so my mother can also clean my office, likely). Since I have some removal scheduled for the time, I’ve shoved the tasks back to Luca, who’s also going to take care of anything I might have to do in that timeframe for what concerns my packages.
Why the rushed decision? Well… it’s the only way I can make such a decision: if I were to postpone, or if I have more than a day or two to decide, I would probably look back and find a way to drop out. This way, I really cannot. Thus also why I’m repeating it here. I’m going to be there, one way or another, next week, whatever it takes me to do! And if I can get rid of my fear, you’re probably going to find me at conferences here and there from time to time, finally.
And just to convince my subconscious further, I’m seeing the fact that I ordered an USB hub from Amazon, that has a British power supply (I guess I’ll have to get some converters, both ways), as a sign. I don’t believe in signs usually (I do believe in Murphy’s law though!), but I know the power they have. Not in the usual “new agey” sense of power, but rather in the way they can help trick the mind. And since my fear is mind-created (if I ever boarded a plane before, it would have been different), I’ll just have to trick it long enough till it stops tricking me.
So anyway, trying to tie down the loose ends this week so I can be relaxed for the vacation week, and come back rested, and ready to do more work without risking burning out.
|
VME bus support for Linux (August 03, 2009, 21:25 UTC)
Today another nice thing for the Linux kernel happened, we got working
VME bus drivers and infrastructure submitted to the kernel tree.
Now, I don't expect it to generate as much press as the
Microsoft kernel driver thing did, but it should, as I feel it's more
important in a way.
The VME bus code has lived outside of the kernel for many years, and there was
at least three different implementations at the same time floating around.
Martyn Welch from GE Faunc took the time, merged all of them together,
and rounded up the different copyright holders of the code and got legal
approval from all of them to properly release the code under the GPLv2.
Now as someone who has tried to do this kind of thing, I know how thankless
and how difficult it can be. So here's a great big thank you to Martyn and
his employer for getting this work done, and taking the time to work
toward getting it merged into the main kernel tree.
The patches are here, here, here, here, and a good
readme for the api is here.
|
Some more stuff that has happened recently with cleaning up ALSA ebuilds. We (as in me, mostly) decided to drop support for the optional MIDI support in the alsa-lib and alsa-utils packages. It originally was implemented as a hack on our end, always caused headaches when disabled, and a whole lot of ebuilds required that it be implemented anyway, so it wasn't so optional to start with.
With alsa-1.0.20, I ripped out the midi use flag completely, but instead of fixing the reverse dependencies to check for an either/or scenario, instead it was decided to just go back and change all versions of the alsa-lib/utils ebuilds and to force it on, and then drop the check on those using it. Thanks to Samuli (ssuominen) for fixing all the applications that were using it.
If you run into any ebuilds that are failing to merge because of the dependency, that are in the main portage tree (sorry, I can't take responsibility for overlays), try syncing your tree again -- it's possible your last one was during the transition. If you still find one that isn't working, feel free to file a bug report at bugs.gentoo.org and assign it to alsa-bugs@gentoo.org.
Another change that has needed to happen for a while, though not nearly as dramatic, is that I ripped out the really old config options in the alsasound init script: KILLPROC_ON_STOP and UNLOAD_ON_STOP which would kill process using ALSA, and unload its modules, respectively. Like before, they caused more problems than they solved (both of which, I might suggest, could be implemented in local.stop if you really needed something like that), and I'm glad to say they are gone.
That's about all the major growing pains for now -- that is, I certainly don't have anything else on my plate for ALSA or its related applications, other than getting 1.0.20 stable and everything previous to that version removed from the tree.
As always, we appreciate any help people would like to give. There's still old bugs open, and it'd be good to know if they are solved or not in the latest release.
I realize some of these changes may be minor bumps for users, and if so, I apologize ... but Gentoo is always changing goals and directions, and I'm quite glad that we have the flexibility to change things, instead of being stuck with one method. Part of growth is just shedding the stuff that doesn't work.
|
August 02, 2009
SSDs and filesystems (August 02, 2009, 22:31 UTC)
So, in between being super busy with Gentoo yet not having enough time to keep up with all the bugs, document updates, and project commitments . . . I've added yet another item to my plate: a fresh install of Gentoo onto a pair of SSDs.
I've never reinstalled Gentoo on this workstation; this is the original install from October 2006. I had thought about just finding some stage4/stage5 backup scripts and tips from the Gentoo Forums, but it seems to be more cumbersome and time-consuming than reinstalling. Besides, installing Gentoo from scratch gives me a chance to create an even more lean, minimal system. No more accumulated packages and cruft that I don't use, just the essentials.
And it'll let me see how good these SSDs really are for compilation times. 
I purchased two: a 32GB Super Talent UltraDrive ME for /, and a 16GB Mobi 3000 for /var and /usr/portage.
The Super Talent is a new-generation MLC drive with an Indilinx controller. It's not as good in some areas as Intel's controller for the X-25, but it's better than everything else out there, and it doesn't have the chronic stuttering problems that all cheaper JMicron-based controllers suffer.
The Mobi is an older drive, "only" SATA-150. But it is an SLC drive, so I'll use it for the partitions that see the highest write activity, as SLC is more resilient than MLC. Plus, the contents of the drive are more or less throwaway, so if any corruption does develop, I can just replace it with no issues. /var sees log frequent writes, and there may be some Portage compilation in the tempfiles. I've been using a tmpfs on RAM for /var/tmp/portage for some time now, so I don't really think it will hit up the drive much, not with 4GB of RAM installed:
none /var/tmp/portage tmpfs noauto,nr_inodes=1M,size=2000M 0 0
See? A dynamic Portage compilation space, ready to occupy 2GB RAM if need be. During compiles, the only time I ever really see the HDDs light up is during the src_unpack (to RAM) and src_install phases.
So I've figured out my drive and partition usage, but the things that are causing the most headaches, and occupying the majority of my research time, are:
1. Which filesystems
2. Which mount options
3. Which schedulers
4. Partition alignment schemes
See, I will have two SSDs in there with Gentoo installed on 'em, but I'll also have a separate magnetic HDD for media storage, so that means a different for each drive.
For 1, ext4 is looking increasingly attractive for the SSDs. I may continue to use ReiserFS for the media drive, as it's worked very well for a few years now. But, given that the Portage tree is just lots and lots of tiny files, perhaps I could continue using ReiserFS on it? Though I would need to deactivate the journal. The Mobi drive should not have any journaling on it -- too many writes.
NILFS2 is another interesting filesystem, but it seems immature. BtrFS also has potential, especially after reading Val's excellent article, but its developers warn against using it for anything other than testing. So I'll stick with something a little more mainstream, yet not so old and cranky as ext3/ext2.
Which brings me to 2: mount options. I've only just begun to read up on suggested options for ext4. data=writeback seems to be one of the more popular suggestions. noatime is a necessity; I've used this option on every single Gentoo install I've ever had. There are several other options I need to investigate, including the dir_index variations.
If I go with ReiserFS, I'd need to research the performance differences between notail and tail. In theory, the latter option could be more efficient for packing more data into fewer blocks, resulting in fewer writes/rewrites. This is at the expense of slightly more CPU usage. notail may result in more speed, but I haven't found many detailed reports of ReiserFS usage on SSDs. One last thing to look up would be the difference between ReiserFS with the journal and without.
The next piece of the puzzle is 3, schedulers. Most of the schedulers in the kernel are designed to keep spinning magnetic disks happy. But since there aren't any moving heads or rotating disks to spin up, the algorithms that are designed for efficient, minimal motion aren't very helpful for SSDs.
The usual solution proposed is to bypass the traditional HDD seek layer overhead by just using the noop scheduler. It's a very simple FIFO-based scheduler. System requests a file, it gets it. No complex queuing up done in the kernel. It lets the extremely fast drive controller do all the work, since it's capable of getting the data where it's needed without stuttering or delays.
However, the deadline scheduler may be as good as noop, as deadline does a certain amount of prioritizing. My understanding is that it's similar to NCQ in this regard, and that using deadline doesn't have any overhead costs. Still doing the research on this.
These two schedulers may be all well and good for the SSDs, but since I'll have two SSDs, a magnetic hard drive, and an optical drive in my box, I can't use the same scheduler for all of 'em. noop would be a poor choice for the HDD, so I may use deadline or stick with the tried-and-true CFQ scheduler.
Fortunately, using different schedulers for different drives is fairly easy:
# echo deadline > /sys/block/sda/queue/scheduler
# echo noop > /sys/block/sdb/queue/scheduler
# echo cfq > /sys/block/sdc/queue/scheduler
It's just a matter of putting these commands into an initscript to be run at boot.
The last puzzle piece (so far) is 4, partition alignment schemes. This is the most confusing one. The most headache-inducing. The most worrisome one, in that if I screw it up, I could completely hose the performance of the drives, and severely impact the wear and tear on the drive.
The OCZ Vertex is functionally identical to the Super Talent UltraDrive. Same controller and firmware, so Vertex tips will apply to my drive. The OCZ forums have proven rather useful. There's a fair amount of material at the OCZ forums, and even some suggestions by Gentoo users. Unfortunately, some of the threads are rather old, so I'm unsure how much still applies. Given that there have been new hardware revisions, new firmware shipped with the drives, and improvements to the Linux kernel stack (schedulers, libata, etc.).
Ted Ts'o has a pretty good explanation, but it differs from some of the other suggested block sizes. Also, some guides have a radically different approach.
* * *
So, four pieces to the Gentoo installation on an SSD puzzle. Lots of notes so far, and despite four months' research, I feel like I've barely gotten started. I've been thinking and planning to move to an SSD for quite awhile now; it's mostly been a matter of waiting for prices to fall. Now all the components are here, so I'll just have to dive right in and see what I find. Results will, of course, wind up here. 
|
Looking at Smolt (August 02, 2009, 06:57 UTC)
Since release 1.3.2 Smolt comes with a tab “Distribution” to show distribution-specific information:
(The new Qt-based GUI client was introduced somewhere after Smolt 1.2 by Carlos Gonçalves, see here for details.) The currently quasi-empty tab is shown no matter what distro you run Smolt on. However, on my “gentoo” branch it looks slightly different:
I have also been working on simple extractors for dpkg and rpm to better understand the distribution specific interface that I’m introducing on code level. After all one of the long term goals is to feed Smolt statistics with PackageMapped installation data from across distros, not just Gentoo.
So if you read this and feel like bringing support for another distro (say Arch) to Smolt now is a great time to contact me.
PS: Check my “sping” overlay for a Smolt 1.3.2 ebuild.
|
August 01, 2009
We are cleaning up the XFCE ebuilds via a new eclass. The current eclasses do not make maintenance any easier, like they should. Some other things on the TODO list include:
- Remove xfce-4.4 from the tree. 4.6.1 has long since been stable. Caveats: We promised mips that they could have a ~month to keyword 4.6.1. Gentoo Prefix can't easily use 4.6.1 due to the xorg-server dependency.
- Rename plugins to match what upstream calls them. For example, what Gentoo calls
xfce-extra/xfce4-cpu-freq, upstream calls xfce4-cpufreq-plugin This is true of all plugins.
- Remove the meta extras package,
xfce-base/xfce4-extras.
The last bullet point is where I would like to gain input on how to provide the best user experience for xfce users on Gentoo. We are contemplating on removing the meta package because: it is tricky to add new plugins to it (requires more arch team work via rev bumps). Renaming plugins will require more work because of the meta package. And finally, what is the point of this meta package (some would ask) - outdated, etc.
So some possible options:
- Remove the meta package completely and let the user emerge what they want. We are leaning towards this one.
- Provide an USE flag for
xfce-base/xfce4 to emerge all these extras, since it is a meta package anyway. This allows arch teams to mask the use flag if they don't want to deal with all the plugins. Not a good option though, in my opinion.
- Revbump the meta package everytime there is a new plugin added to the tree.
- Other option that I haven't thought of?
So, what is it? What would provide the best XFCE experience on Gentoo?
|
Update: as reported by Fai Wong, -O1 is actually fine. Obviously, it must be some flag(s) which is(are) enabled at -O2 but not at -O1 caused this problem. However, it is not a priority ATM. Anyone who is interested in it is welcome to investigate it further.
As I have mentioned earlier, sqlite compiled with -O2 may cause xulrunner to segfault in N32 userland on Loongson. Well, I almost forget it.
So to remove the -O2 from CFLAGS once and for all, I adopted the technique described here.
zhangle@2f env $ pwd /etc/portage/env zhangle@2f env $ find . ./dev-db ./dev-db/sqlite ./O2-removal zhangle@2f env $ cat O2-removal pre_pkg_setup() { elog "bashrc is removing \"-O2\" from CFLAGS for $PN" CFLAGS="${CFLAGS/-O2/}" } zhangle@2f env $ ls -l dev-db/sqlite lrwxrwxrwx 1 zhangle zhangle 13 2009-08-01 16:10 dev-db/sqlite -> ../O2-removal
|
Developer Robin H. Johnson, who is a trustee board member, infrastructure team lead, spoke with
David Abbott.
Robin is the backbone of the Gentoo infrastructure team which includes the
forums, bugzilla, and most important, the Gentoo Portage tree.
He describes his first open source project, phpMyadmin, how he became a Gentoo
developer, and the layout of the infrastructure.
"Nearly 50 percent of the infrastructure hardware is taken up by web
applications, because we have a lot of separation between web applications that
have a high security exposure. Admittedly some of the web services are a very
big deal for Gentoo, like our Bugzilla service, running on 4 machines sponsored
by the Dutch social network, Hyves. Very recently we've gotten new hardware for
Forums, sponsored by Gossamer Threads. The next largest slice after that is the
machines that provides rsync.gentoo.org service. Only then do we get down to
individual machines for purposes. There's some cases where having more hardware
as fail-over in case we lose a machine would be nice, but I think the place
that'd we would benefit the most presently would be a newer mail server
infrastructure, so that we can deploy heavier spam filtering."
Robin H. Johnson
Interview
|
For the lulz (August 01, 2009, 00:15 UTC)
Recently one of our developers decided he would raise hell in one of our irc channels. "For the lulz" he said. What ensued was a rather large number of kicks which ended in a ban. I contacted him and tried to talk to him. He wouldn't agree at first, then stopped answering, and went on in another channel. I spent a good amount of time trying to reason him at around midnight my local time knowing I had an early meeting at the office the day after. He stopped and apologized a few seconds before I hit the button to suspend him.
He didn't have any really bad intentions but he still created a shitstorm. In his mind everybody overreacted but there was one thing that he didn't understand. Him behaving like this made a few people unhappy. Whether they were right or wrong to be unhappy, they were, and they showed it. In return they started filling some of your fellow devs' maiboxes, and irc queries started popping faster than it is humanly possible to answer. In short after a few minutes some of us had their screen blinking like Christmas trees.
So, kids: don't make an ass of yourselves in public, whether on irc or elsewhere. And if you absolutely have to do so don't do it in a #gentoo- channel, and preferably not with your gentoo irc cloak. If you don't do it for yourself do it out of respect for those whose task it is to try and maintain a semblance of peace on irc or on our mailing-lists. And think of all those traces you're leaving behind for the next time you'll look for a job. Think also of the image you're projecting for the whole Gentoo community. You're a developer, so if you care show yourself and your distro in good light.
And remember that we're a large project with all kinds of different cultures. Something that may seem totally insignificant and/or funny to you may (and will probably) be seen as abrasive by others. We have to operate on a lowest common denominator. That's unfortunate but there's no way around it.
Thanks for your attention.
|
July 31, 2009
alsa cleanup (July 31, 2009, 22:30 UTC)
I've just punted all the old ALSA ebuilds from the tree. Tah tah. I thought they needed to be in there for old kernel compatiblity, but it turns out I was wrong. Ah well. The less versions to worry about, the better (from a support point-of-view).
We're going to look at getting 1.0.20 stable here pretty quickly, and then remove *all* the old versions after that.
Oh, and if you are interested in helping out with ALSA bugs, that'd be nicely appreciated as well.
One other note -- I added media-sound/alsa-driver, which is the external modules for the ALSA drivers, into package.mask. The concept is simply to add a hurdle to users wanting to use it, and to make it clear it won't be landing in stable-ville anytime soon. However, there are no plans to remove it from the tree, either. I know some people like to use it, so there ya go.
|
So i bumped dev-libs/cloog-ppl to a newer version just now. cloog-ppl (and it's buddy PPL) are new dependencies of the new Graphite framework in GCC 4.4 (still masked). They're optional dependencies, and on a whim I wanted to see if configure would fail if they were missing or just detect it and continue on. So I did this:
emerge -C cloog-ppl Oops. configure: error: C compiler cannot create executables Every Gentoo user has seen this at some point. It's a very general error that can range in meaning from "you mispelled a CFLAG" to "wow you're screwed". I knew what the error here would be without looking, but for those following along at home: /usr/libexec/gcc/x86_64-unknown-linux-gnu/4.4.1/cc1: error while loading shared libraries:
libcloog.so.0: cannot open shared object file: No such file or directory (usually you would find this in the config.log of the package being compiled) Ok, so I just hosed the compiler. Dumb mistake. Now, here's how we fix it. halo ~ # gcc-config -l
[1] x86_64-unknown-linux-gnu-4.3.3
[2] x86_64-unknown-linux-gnu-4.4.1 *
[3] x86_64-unknown-linux-gnu-4.4.2-pre9999
[4] x86_64-unknown-linux-gnu-4.5.0-pre9999 Usually I would have three or four more versions here (3.4, 4.0, 4.1, 4.2) but this is a relatively new install. As luck would have it though, I have exactly one version that will work here. 4.3.3 doesn't have graphite support and therefore won't be linked against libcloog. So, gcc-config 1, etc. emerge -av1 cloog-ppl. libtool: link: x86_64-unknown-linux-gnu-gcc -Wall -fomit-frame-pointer -O2 -g -march=core2
-msse4.1 -fomit-frame-pointer -pipe -Wl,--hash-style=gnu -o .libs/cloog cloog.o -Wl,--as-needed
./.libs/libcloog.so -L/usr/lib64 /usr/lib64/libppl_c.so /usr/lib64/libppl.so /usr/lib64
/libgmpxx.so /usr/lib64/libgmp.so
/usr/lib64/libppl_c.so: undefined reference to `std::ctype::_M_widen_init() const@GLIBCXX_3.4.11' Or not. Yay, symbol versioning. Another thing every Gentoo user has run into when switching GCC versions. To make a long story short, libppl_c.so (PPL) is looking for a versioned symbol in libstdc++.so.6 from GCC 4.4. When we switched to GCC 4.3, that symbol version (here GLIBCXX_3.4.11) no longer exists. Solution? Rebuild PPL. But, this results in a similar error: libtool: link: x86_64-unknown-linux-gnu-g++ -frounding-math -O2 -g -march=core2 -msse4.1 -fomit-
frame-pointer -pipe -W -Wall -Wl,--as-needed -Wl,--hash-style=gnu -o .libs/ppl-config BUGS.o
COPYING.o CREDITS.o ppl-config.o ./.libs/libppl.so -L/usr/lib64 /usr/lib64/libgmpxx.so
/usr/lib64/libgmp.so
/usr/lib64/libgmpxx.so: undefined reference to `std::ctype::_M_widen_init() const@GLIBCXX_3.4.11' As you can see, downgrading GCC versions with gcc-config breaks the linking of a lot of C++ libraries. (this is why I hate testing unstable GCC versions on KDE). So just keep going down the line, attempting to rebuild whatever breaks next, until you actually manage to fix something. If you don't know what package a library belongs to, use one of the many utilities that may be installed on your system, like `equery b` or `qfile`, that maps a filename to package. In this particular case, dev-libs/gmp was the last package needing to be rebuilt. Next, go back up the chain - rebuild ppl, and finally cloog-ppl should build successfully. Switch back to your original GCC version, do a little dance, and go about your day.
|
|