The pilgrimage to Rudy's has been made! Beth and Fade and Mark were along. (Stu couldn't make it, his back is acting up and he's zoned out on painkillers today.)
Now at Epoch, fighting glibc again. I'm trying to build the thing from the normal Ubuntu command line, to have a baseline to compare against. It's not working. First I hit this bug. (Yes, glibc uses perl _and_ awk to configure itself. Apparently nobody ever asked "is this complexity really needed"?) Now I'm having some variant of this problem. Which is silly.
I note that complaining about symbol "libc_multiple_libcs" being included more than once is ironic enough, but that bug report being EIGHT YEARS OLD gets it well into "silly". I'm trying to build a stock glibc 2.5.1 using Linux From Scratch 6.3 instructions on Ubuntu 7.10. This isn't my hand-rolled custom setup, this is relatively current versions of stock components all the way and you'd think it would work out of the box. It does not. That's kind of sad.
I _really_ don't like glibc.
I suppose I could grab glibc 2.7 and try to build that instead. (That's what the development version of LFS is using.) Or I could try to build a new /tools directory following the chapter 5 instructions. But trying that under mini-native gives '../nptl/sysdeps/x86_64/tls.h:63:3: error: #error "TLS support is required."' which is yet another fun little detail to track down. (It breaks in so many different ways. This is one of the most brittle pieces of software I think I've ever encountered.)
Beth is in town. Promised her the sacred pilgrimage to Rudy's but we wound up going to the Texas Land and Cattle company instead, because it was on the other side of her hotel's parking lot and it was rush hour.
Didn't turn my laptop on all day.
Breakfast at Einstein's bagels. A little bit of banging on Linux From Scratch. (Building glibc is a flaming pain.) Mostly offline, re-reading the Amber novels and such.
Went back to say hi to the T-mobile guys, but they couldn't get their internet to work with either my or Fade's laptops, and their tech support guy on the phone seemed to be confused by somebody wanting to use their internet through a USB cable. Promised to email me information if he found it. Still using my dying Sprint cell phone for the moment...
Found one of my old wristwatches while unpacking boxes. Battery's not dead yet. The last one I bought gave me a rash, and I've been doing without since. (Using your cell phone to tell time isn't fun at the best of times, and when it switches itself off when hit or squeezed too hard, and then takes 45 seconds to boot back up... Yeah.)
A day away from computers. No programming today.
Fade and I had planned to go to Star Ranch, but wound up going to highland mall instead. (We still went to sheep for dinner, though, even though it wasn't on the way back. Took Mark out. A good time was had by all.)
Talked to a T-mobile guy at the mall about new phones. My old sprint phone is dying (if you close it too hard, instant-off. It takes about 45 seconds to boot back up to usability, once I notice). And sprint is just _stupid_, wanting $70/person for internet access with no discount for having their cell phone service. Getting internet for my laptop through one of T-mobile's cell phones is only $20/month on top of a family plan for me and Fade that's cheaper than what Sprint's charging now. Fade and I need to go back tomorrow with our laptops to make sure said internet _works_ on Linux and MacOS X, but it's looking good...
Saw The Plague Dogs, from the people who did Watership Down. Gee, I wonder why this one didn't have the same theatrical success? It's bad goth poetry, filmed. The anvilicious "laboratory testing is evil" stuff was merely clumsy and obvious. The way the authors had it in for the dogs (the one who'd had brain surgery racks up a _body_count_ of accidentally killed owners he blames himself for) crashed my suspension of disbelief about halfway through. Calling out the army with helicopters for animal control was probably deeply symbolic, although of what doesn't matter. The downer ending where everybody dies by having their worst fears come to pass was pretty much predictable by that point. But then going to gospel music as the credits roll?
Fade liked it, and it doesn't displace the worst movie I've ever seen, which was "Seven", and so far the only time I've wanted my money back. (The most incompetently made movie I've ever seen was "Manos, the Hands of Fate", but I saw the MST3K version of that which was outright enjoyable).
Took it out to the mailbox immediately to get it out of the house. The netflix queue is unblocked! (Still need to get two of those set-top boxes. One to play movies with, one to take apart...)
Attempting to build Linux From Scratch 6.3 under FWL mini-native images. I've already got a /tools directory, which is enough to rebuilt FWL, so it's pretty powerful.
Unfortunately, Linux From Scratch is based on glibc, and build that needs (shudder) perl. So I'm trying to add perl to the /tools directory according to the LFS chapter 5 instructions... and the perl build is breaking in toke.c:
toke.c: In function 'S_scan_formline': toke.c:10542: error: invalid operands to binary + toke.c:10542: error: invalid lvalue in unary '&' toke.c:10542: error: invalid lvalue in unary '&'
The problem is the preprocessor doesn't seem to be substituting PL_bufend, which is only #defined if the macro MULTIPLICITY is set, which means threading support. So attemps to build perl without threading support break...?
Google time. Somebody who hit this error said that having a file named "test" in the path screws up the perl ./configure step, which is just weak. But removing busybox "test" from /tools/bin didn't fix it... Ah, it's actualy a Linux From Scratch plus uClibc issue, with a patch. (One of the most powerful techniques in a modern system integrator's arsenal is checking to see who else hit this before. I dunno anything about the guts of the perl implementation, and tracing that back to first causes myself could easily have taken a couple days...) Now, do I still need to remove /tools/bin/test or not... Nope, just the uClibc change, which I can do with sed. Ok, that's reassuring.
Hmmm, grinding through LFS chapter 6 and I need to reorganize some stuff. I need a temporary working directory to download/extract/build packages in, meaning I need the second partition mounted under qemu because the root filesystem hasn't got 100+ megs free space (to keep the image sizes down). But the script that mounts that also does lots of setup creating symlinks and such in the root directory, and LFS wants the top level pristine...
Ah, easy fix: chroot! I can assume root access inside qemu, so doing a chroot in there isn't verboten.
Almost reported a toybox bug to the busybox list. (That would have been embarassing, so naturally I blog it! Chroot isn't stopping option parsing at the first non-option argument, it's a one character fix but I hadn't specified that yet.)
ARGH! The busybox vi command ate my script! (Memo to self: hardlinking the script in two places makes the updates automatically show up in the chroot, but the busybox vi command should NEVER BE TRUSTED WITH YOUR DATA. It truncated the file to zero bytes. I have no idea why it did this, but it did it.)
Darn it, that cost me something like three hours' work. Grumble, grumble. Luckily, I remember the annoying parts...
Wow mame is frustrating to play when it decides "shift" is one of the buttons. (Hit shift five times and KDE decides to enable "sticky keys", doing a pop-up dialog. Not in the mood to track that down and rip it out of the system right now.)
When I get around to writing toybox umount, I need to add an option to tell it "unmount everything beneath this mount point". It's annoying trying to play whack-a-mole cleaning up all the proc, sysfs, tmpfs, and bind mounts from an interrupted LFS build script. (Admittedly the kernel guys added per-process mounts to make this suck somewhat less, but allowing umount -a to take an argument would accomplish it more easily.)
Sigh. And the glibc build broke because it says "forced unwind support" is missing and required. What the heck is forced unwind support, and why on earth would a C library need it? I'd google for this, but once again the wireless access point is out. Time to go home where there's no air conditioning and cats pestering me every 30 seconds nonstop... (I am a cat person. We have too many cats.)
Hmmm... Whatever it is, it's in libgcc_s.so.1 on Kubuntu. But not in libgcc.a. (So if you build your compiler with --disable-shared, you can't build glibc with it. Wheee... Except the mini-native compiler _isn't_ using --disable-shared, because of exactly that kind of gcc insanity...?)
Ok, dig the failing program out of config.log (because of course it deleted the program it compiled after the failure, thanks autoconf) and try to compile it... Yup, failed. Try with DEBUG_WRAPPER=1 and... Huh. I think it's the wrapper script...? Let's see, gcc -v is doing --as-needed -lgcc_s --no-as-needed right after each -lgcc, so I think the wrapper script needs to add that. Except it's arguments to the _linker_, not to the compiler, so I think it actually needs to be "-Wl,--as-needed,-lgcc_s,--no-as-needed" which is an _ugly_ mouthful but maybe it'll be passed through correctly if put in the right position?
Have I mentioned recently how much I hate gcc?
There's video online of the Linux Compiler BOF I hosted at OLS. Apparently free-electrons decided it was worth recording, not sure why. It's mostly me talking, which seems a waste of a good BOF if you ask me, but oh well. (I tried to wander away from the front of the room, but people kept asking me questions and the camera followed me...) The directory has lots more interesting videos in it. (Why the ones where I'm exhausted and semi-incoherent always get recorded... Then again it could just be that I'm always like that.)
Re-inserted toybox into the FWL build. (It never quite went away, I've needed the toybox patch command and oneit all along. But now $USE_TOYBOX switches back on all the toybox commands in defconfig. I took a quick look at busybox defconfig to see if I could pare it down a bit, but of the 255 commands (yup, nice round number... from a certain point of view) only a dozen or so actually seem useless (ed, mt, fdflush, everything in the runit directory... that sort of thing). I thought of switching off the toybox applets too, but then I'd need two codepaths in host-tools.sh and mini-native.sh. (One to build defconfig and one to build based on a miniconfig. Or else I'd need two miniconfigs.)
I'm vaguely pondering renaming the prebuilt binary mini-native tarball to "native-root-filesystem.tar.bz2". Except I'd need both a -dev and a non-dev version, for the BUILD_SMALL stuff. Not quite sure the least messy way to do that yet. Right now the build is producing certain names, based on the script that produces them... Although package-mini-native.sh isn't called system-image.sh (although its non-UML successor probably will be...)
Slept 15 hours. Woke up feeling terrible. And tired. Sigh.
Stu says that adding decss support to ubuntu dvd playback can be done by running "/usr/share/doc/libdvdread3/install-css.sh" as root. Good to know. (At the laundromat at the moment, I'll have to try one of the netflix DVDs when I get home.)
Every time I hear about Russia attacking Georgia on the news (or even CNN) I try to remember whether Denys Vlasenko is from Georgia or the Ukraine. (Either way, I'm fairly certain he moved out of Russia's sphere of influence. I should just ask him, but one of the side effects of my sinus infection is I don't want to bother anybody. It's just too much work...)
Working on FWL documentation. My problem at the moment is that it's repetitive. I've finished updating the README and the new summary page, and now I'm working on about.html and it's all the same stuff. It's the same stuff in more detail, but there's a lot of repetition. When I change things in future, that would make it hard to track down everywhere it needs updating. Huh...
Another page I'm working on (which isn't linked in yet) is the history page. The project's around 7 years old, it's got backstory. I'm not sure how relevant it is to anybody but me, but I might as well right it down. I also need to do a FAQ, especially since the questions I get asked tend to be asked to _me_ (in email, in irc, or in person at places like CELF and OLS) rather than on the mailing list.
I need to update the "why cross compiling sucks" document and link that in to the mess as well. Suck material from my intro to cross compiling tutorial and get it up on the FWL web page...
I keep getting headaches, right where Fade bonked me on the head at sword camp. (Top right part of the head.) I dunno if this is an aftereffect of the bonking, or some strange symptom of my sinus infection reoccuring. I know it makes me really tired when it happens. (Want nap now.).
I should probably go back to the doctor for yet more antibiotics, but I've had _five_courses_ over the past year, and the last one went for three weeks. What exactly do I exect them to do about it? Not much at this point... (I'm starting to lose faith in the medical profession, at least for anything short of surgery to correct this.) I feel much better while I'm _on_ the antibiotics, but they never give me along enough course, and by the time I convinced them I _did_ need a longer course than they were giving me it was resistant to just about everything. Sigh...
Huh, there's a new POSIX spec. But it's not freely available on the web, so it doesn't count yet.
Working on a uClibc 0.9.29.1. Cloned the uClibc repository (one of them, anyway) and going through looking for interesting bug fixes. I'll probably break down and make sparc work in FWL while I'm at it, I found some old uClibc/sparc patches to test, but dunno whether or not they're in the repository. (I think I got them off the mailing list, not sure. It's been a while.)
Heh, remember when I said that the biggest competitor to blu-ray was internet video? Looks like it's playing out that way already.
There's a race to replace DVD between youtube and blu-ray. I expect youtube to win. Customers stay with what they've got for a surprisingly long time out of sheer inertia, and they have yet to replace the lowly CD over in the audio world (despite DVD becoming ubiquitious and holding audio just fine).
The move from VHS to DVD paralleled the move from casette to CD in the audio world. The convenience of never having to rewind was a significant factor in that, and the move from analog to digital so the output didn't gradually degrade (it was either perfect or it didn't work and you got it fixed). VHS had issues with "tracking" and similar that could produce surprisingly bad images even when the tape didn't get crinkled or full of dust; the real comparison wasn't between perfect VHS output and perfect DVD output, it was between what users normally saw out of each.
You can now get television through the internet. Not just hulu, but on the cbs/nbc/abc web sites. (Go look, their programs are viewable off the network's own website. Legally.) Netflix has its set-top box for movies, although hulu's got plenty of those too.
Podcasts forced the audio guys to abandon streaming and just give you the darn mp3, video should go the same way eventually. Dunno when. Oh well.
Out at Epoch, doing programming stuff. Having trouble concentrating.
For a while now, I've meant to break up the FWL sources/configs/$ARCH files. Each one contains two "here" documents (for miniconfig-linux and miniconfig-uClibc) which is an awkward way to go about it, and a better approach is to put them in a subdirectory instead.
The three things standing in the way of this were the size of my todo list and two fiddly technical issues about the transition. Well, I've worked down my todo list until this is at the top, but the fiddly technical issues are being outright annoying.
The first is that in convincing mercurial that you want to delete a file, put a directory of the same name where that file was, and add files to that directory... all in one checkin... It got Confused. Decided to just punt and make a sources/targets directory. One down.
The other is that I can't figure out what to call the first file. It's a small issue, but my brain's just not working well right now. (It's been really hot all day, I think I gave myself a mild case of heatstroke cooking dinner. (I recognize the "tired, headachey, listless" aftereffects. I've done this before.) Sigh, I think August in Texas is the time to break down and use the air conditioning no matter how many cats you've got.
It's always the little things I get stuck on. Right now, the name of the file _is_ the name of the architecture. (And unless the file defines CROSS_TARGET, include.sh uses it to tell binutils and gcc what architecture to produce code for.) Now the directory does that. Once the two miniconfig files are split out, what's left is mostly a series of variable declarations that get . included to tell the build various things it needs to know...
Ok, I'm calling it "details". Moving on...
Spoke to Milton Miller about the linking problem with powerpc on 2.6.26. It turns out the linker script is triggering a bug in binutils 2.17 with gcc 4.1, and the easy fix is to grab arch/powerpc/kernel/vmlinux.lds.S out of 2.6.27-rc2. (The diff actually starts with a big long description of what's actually going wrong, and then #ifdefs to work around it.)
The less easy fix is that there's a binutils 2.18 out, which I can presumably use without upgrading gcc. (Remember, upgrading gcc means I have to figure out a new way to glue the soft-float stuff into libgcc.a, which is a pain.) Except that their ./configure is very brittle, and broken in two ways I've found so far. All of them having to do with its insane autoconf and complicated recursive makefile.
The first failure is that if I force it to always think it's cross compiling (remember, glibc->ulibc, plus I want to use the same code path on every architecture so it behaves as consistently as possible, so I want it to treat _everything_ as if it's cross compiling), then I have to override every utility it uses on the command line. LD=ld AR=ar AS=as and so on. (It autodetects some, like gcc, but for others it wants to add a prefix to the name. Configure it in an unexpected way and the whole brittle edifice comes crashing down.)
The second problem is that I haven't installed the "info" package (an obsolete documentation format from the days of Gopher, but which the FSF invented and won't admit is dead). And the ./configure state detects that I haven't got info. And it records a "/big/long/path/to/missing info" in the config log. Yes, it decides the name of the executable to use is "missing info", and when bfd/doc tries to call it, and dies.
It turns out that "missing" is a shell script binutils contains, which
outputs a big warning block about make deciding to update something and
maybe you should have specified _bud_ lite used GNU
make instead of whatever came with AIX. Except Ubuntu is using gnu make,
and it's what's going "boing". Sigh.
The fix: quick patch to comment out a one line test that was returning failure.
Did I mention I hate autoconf?
Today's entry is entirely moping, feel free to skip it. I'm working on an rss feed topic filter so you can select an rss feed based on the "span" tags I've been dropping into posts, but that's not ready yet.Need to find a decent place to work from. At home I get mobbed by cats, and it's too hot to want a warm laptop next to me anyway. (We have central air, but 4 indoor cats in a 2 bedroom condo with no place to put the catboxes that isn't near an air intake vent. So the windows are open a lot. Yay ceiling fans.)
Metro is closed now. This is sad. Mojo's is gone, Little city is gone... I think spider house is still there but the last time I visited the couch I sat on had fleas.
The bubble tea place on Guadalupe has wireless but doesn't seem to have air conditioning (or sets it at 85 if they do, indoors in a place where cooking happens and humidity is high), yet does not have free refills on any of its drinks. Schlotzky's also has wireless but and free soda refills, but the food there is "eh" and the wireless is not consistent enough for me to log onto freenode while I'm there.
Epoch's too far to bike until the sun's gone down, so when I'm not on a day schedule I'd have to drive there. With gas at $4/gallon, whether or not I can afford it I'm _disturbed_ by the idea of moving the car unnecessarily. It's not just the gas bill: it's a 13 year old car that's showing its age. If it breaks I have to get a new one, but I don't _want_ another one that runs on gasoline. Biodiesel is nice but just the tiny amounts they're making (diesel is still $5/gallon and most of it's fossil) have driven the price of food up noticeably; that's not likely to scale. No fully electric cars currently seem serious about it. What does that leave, hybrids? Which ones are good? The decent-seeming ones I've seen (which are too new to find a used one, and how well do they age anyway) costs more than the payoff figure on my condo... I don't want to deal with any of that right now, and find it easiest to just avoid the issue altogether and simply not drive when I don't have to.
I need an outlet when I'm out because my laptop battery is down to about half an hour. (Sad, but I use this thing a lot.) There are plenty of places to go with electricity but no internet (the zillion starbucks locations top this list), or places with internet that close at 10pm (I generally get started around 5 and work until 2 or 3 am)...
I should drag the chair from Ikea up into Fade's office and see about using the desk next to her. That room at least has a door that closes...
Met Stu at Epoch, we'll probably meet at the Holiday Inn next week and see what kind of deal they're willing to offer.
Saw The Dark Night at the Bob's Bollocks IMAX theatre on MLK. It was ok. WALL-E was better, and I think Iron man was better. (Yeah, Heath Ledger was convincing as the joker but I went to a public high school in New Jersey that had a half dozen people like that. Just without the magic ability to attract an infinite supply of flunkies and never get caught.)
Errands. New debit card, catboxes cleaned, brought some stuff in from the cars, tickets to see The Dark Night in Imax ($12/person, and all today's showings and the evening ones for tomorrow were already sold out)...
Did some preliminary location scouting for Austicon. (We might move it back up to October 2009, might not. But up in Michigan, talking to Sal and Garrett and Marcus and John Guest, I found that I really miss SMOFfing.)
I checked in with the renamed Red Lion from Linucon 1 (what's it now, Crown Plaza?), and the "way too small" Holiday Inn at Mopac and 183. At the first Linucon we got somewhere over 300 people. (Penguicon 1.0 had 500, but that's with Terry Pratchett as an anchor guest, plus looting the about 3-year-old corpse of ConTraption for concom and attendee mailing lists. Plus Tracy had chaired ConFusion 19100 in Y2K, and could pull in resources from there too. All that together, plus all the marketing I could do remotely, got us a little over 500 people.)
So 300-500 attendees seems a good range to expect the first year. It's psychologically far better to crowd your space to the gills (jam packed, exciting, everybody wants to be here) than to have your attendees rattling around in too much space and feeling empty and abandoned. (A show floor with 1500 people in it can seem deserted if it's big enough; I've seen this happen.) So get _space_ for 300 people, and be prepared to buy extra con suite materials and attendee baggies at the last minute if more show up.
A good rule of thumb is 1/5 to 1/4 of your attendees get hotel rooms. (Depends on the event, but for SF cons with locals and more than one per room that's the ballpark.) There are two main nights (friday and saturday), so 1/4 of 300 people is 75 rooms, times 2 nights is 150 room nights. (There are a few more on thursday night and a very small number sunday night, but friday and saturday are the big ones. Pretty much any weekend con runs for 2 days straight: from 4pm friday through around 4pm sunday. Scheduling stuff Friday during the day depends on people skipping work for your con, and scheduling Sunday evening cuts into travel arrangements, packing, and cleanup time. A really _nice_ thing to do is negotiate with the hotel for extended checkout time on sunday, but 3pm is about as late as you're likely to get there without them being totally unable to sell the room to someone else for the evening.)
Science Fiction conventions trade off a room block for function space. Instead of paying cash to rent the space, we promise to fill up their hotel rooms and they give us the space for free in exchange. (This is why SF cons are generally at a hotel instead of a convention center; those only take cash. This is _also_ the main reason we can function on a small fraction of the budget of technical conferences, and charge $50 for the weekend instead of several hundred. We're staffed by volunteers, and barter as much as possible to keep the rest of the budget down,)
If our hotel only _had_ 75 rooms we could own the facility, but the Holiday Inn has 194 and the Red Lion has even more. (The Holiday Inn has far more rooms than function space. The Red Lion has three times as much space, but only a few dozen more rooms.) The Red Lion is actually excellently balanced for an SF con of about 1200 people; we'd own the hotel and could pretty much do what we wanted (loud parties at 3am, hall costumes, nerf guns in the halls, skinny dipping in the pool, you name it) without worrying about complaints from other guests.
But with 300 people we'd only be going for about 1/3 of the Red Lion's space this year (both in function space and hotel rooms), so we'd be sharing with somebody. And some groups (evangelical conservatives, straight laced business types, some weddings... it's hard to predict, really) just don't mix well with science fiction conventions. (Note that you never own the _whole_ hotel because you're always sharing with airline people. Most hotels reserve about 10% of their rooms permanently for airlines, as part of a big annual prepaid contracts. This is both for pilots and flight attendants who spend the night away from home, but is also why they can give you a free room if your flight is delayed overnight; it doesn't actually cost them extra to do so. That said, I've never heard of pilots or flight attendants complaining about anything. They'll either sleep through it or join in, especially when alcohol is involved.)
So trading off a room block of 150 nights for function space, we aren't getting the Red Lion's entire function space without forking out a lot of cash. (Linucon 1, which was in the Red Lion and had all their function space, cost me $7000 after everything was settled.) And we aren't expecting enough attendees to make proper use of it if we did.
The main advantage of the Holiday Inn is we can fill up all their function space, and not share with another organized group on that front. We'd still share the upper floors with other hotel guests, but we can have a "quiet floor" (sleeping rooms only, no room parties) separating them from the con. The main disadvantage is no room for growth; above about 500 people we need to move to a bigger hotel, and moving is disruptive to conventions. (Not too bad, but a bit of a pain. Continuity is nice in many small ways, both for the attendees and the convention staff.) A secondary disadvantage is the layout of their space isn't the greatest; they have a ballroom (divisible into thirds) and then two more rooms on another floor, plus an open meeting area in the restaurant. (We could cope with signs. A convention can never have too much signage. But it's not as good as just having a nice compact layout in the first place.)
The main advantage of the Red Lion/Crown Plaza is growth potential. It could handle about 1200 people before we had to look for somewhere bigger. (That's big enough we might just decide to cap attendance instead, but it would be years before it even came up.) Their function space is also well laid out and easily divisible: we could get the 3 longhorn rooms and the 3 rooms on the other side of the hall, and they'd still over half their space (the two big center ballroom sections, and three more rooms on the far side of that) to rent out to other groups.
Crown Plaza's space is also in more demand; the function space is what distinguishes them. Holiday Inn's space was empty when I went to look at it, Red Lion's was 2/3 full (on a Thursday). Red Lion is right up the road from the Airport (183 to 290 to I35, right as you hit the edge of downtown there's the Red Lion) and has what was once (and may still be) the largest ballroom in Austin. Holiday Inn is on the far side of town from the airport, in a fairly residential area (still at a junction of big roads and near the businesses in the Arboretum and that Domain thing, but not quite as centrally located), and the function space seems like a sideline to its main business of overnight stays. When I asked about the last two wekeends in September 2009 and the first three in October, the Crown Plaza wanted to get back to me about availability more than a year in advance. Holiday Inn has all of those still free, their bookings only run about ten months in advance.
This implies we might be able to negotiate a better deal from the Holiday Inn. There are a zillion variables in "what's a good deal", but that's a matter for another day.
At starbucks, banging on FWL. Can't get konversation to stay connected to freenode here, seems like I'd need a keepalive ping of about 45 seconds which is just _rude_.
Found my first Brown Paper Bag bug for the 0.9.0 release: the armv5l distcc directory in the cross compiler needs a link to "as". (Because gcc is calling out to it, that's why.) I built "make" on x86 and x86-64, I don't know if this is an arm thing or because I didn't previously try to build dropbear under mini-native with distcc. Either way, it's easy enough to fix (make the symlink), but I'll need a 0.9.1 release soonish. I think I'll hold off telling the uClibc/busybox/qemu/linux-embedded lists about my new "you can build Linux from scratch with this!" release until 0.9.1, when that may actually be true. (Note to self: try to build Linux from Scratch under each architecture. Yes, with all the crappy gnu packages. It's a great workout.)
Also looking at the 2.6.26 kernel. The UML thing seems to be a known "this fixes gcc 4.3.0 and breaks gcc 4.1.2, and we dunno why" issue. Sigh. Need to stop using UML.
I also need to find a way to set up distccd so it uses different ports for different architectures. I suppose I could break down and add another field to each sources/configs file, but that's darn silly. There should be a way to handle this automatically. (And there is, but distccd isn't giving me the information I need. I need two pieces of info from the daemon: the port it attached to and the PID so I can kill it when the script exits. I'm getting the first by supplying it on the command line, meaning it can't randomly attach to a free port. I'm getting the second by telling it not to daemonize and backgrounding it myself with & so it shows up in the jobs list.
Should I write my own distcc (probably extending the gcc-uClibc wrapper script), or should I try to extend the existing one to the point I'm probably almost rewriting it? Decisions, decisions. I know the big timesink of the second approach would be learning what the existing one does in enough detail my changes don't break it; this is a big enough modification (and what it does is simple enough) that starting over is almost certainly faster. Probably not the right way to go in the "be a good boy and eat your broccoli" sense. Sigh.
Tried to run Michael Kerrisk's math_test program under uClibc 0.9.29 so it could be included in the man pages, but it turns out that #include <fenv.h> isn't available under uClibc 0.9.29. Since the uClibc guys seem determined never to have another stable release, I haven't bothered with whatever's in svn. (Or in the nptl fork. Or Peter Mazinger's fork. Or the fork the gentoo guys are using. And I can't even get a copy of the Blackfin one current maintainer Michael Frysinger reportedly maintains as part of his day job.
Huh, then again the uClibc about page still lists Erik Andersen as the maintainer, and his email is still the one at the bottom fo the page...
My talk at OLS spawned enough interest in http://kernel.org/doc that I'm being shamed into doing something about the dreadful state of that page...
Also banging on the FWL 0.9.0 release. Added one more patch (to make busybox mdev _shut_up_) and of course this requires a rebuild of all targets...
And it's out. I have released a FWL version that can rebuild itself under itself. Dinner time, I think.
I'm really starting to hate User Mode Linux. Apparently something about the new "./forkbomb.sh --fork 3" thing has made UML go all boing, possibly having multiple processes writing out to the same pty. And now I have to re-run the build to get the system-image files to work right. Argh.
Home late. Collapsed. Cats are being very clingy. Fade's glued to her iMac, but my laptop holds very little interest for me at the moment. Everything needs to be cleaned.
Step 1: Make tea.
Deal with everything else tomorrow...
Checkout time at the hotel came and went, now we're at a McDonald's waiting for the mechanic to call. (They're waiting for the part.)
Obama is giving a speech on Faux News, can't quite hear it over the three old women in the next booth. Eh, it's on youtube. No internet here (choice of Wayport or AT&T branded lack of internet.) Now the speech is over and Faux has various cute blonde women attacking Obama. One of whom is McCain's communications director, according to the writing at the bottom of the screen. Sigh. And now they've cut away because Morgan Freeman has broken his arm. (Really.)
Very conflicted about Obama these days. Voting for retroactive immunity for phone companies that cooperated with warantless wiretaps was a serious betrayal as far as I'm concerned. I'm not sure if he's lost my vote or not, but he's lost my money. Sure he can still win my vote back if he just refrains from doing anything else _that_stupid_, and I'm not voting for McCain no matter how many times he appears on the Daily Show. But I'm not donating a dime to Obama after the immunity thing. That was deeply uncool, and he knew it.
Banging on the rss feed generator, in hoping to eventually get it to parse the span tags I've been sprinkling in over the past few weeks. (I can has topics. With paragraph granularity. Woot.
Step 1 is turning Christian's programming style into something more like mine (if I'm going to be extensively modifying and maintaining the thing...). It's too small to need a class, lots of functions are called only once and could just as easily be inlined, at least one indent used tabs while the rest used spaces... Nice little program in general, though.
Breakfast with Sal and the Aegis crew (and Eric and Cathy and Garrett). Then we hit the road back to Austin, and made it as far as northern Kentucky before I discovered that my car has power steering. (Ok, the escort had rack and pinion, the pontiac has a power steering pump that leaks Squinchers and makes a growling noise when offended. Now I know.) So we're at a hotel until morning.
I'm tired. Sword camp was marvelous. FWL release later this week, I'm just not with it today.
I have 50 megabytes of accumulated email. Eek.
Neither of us are inclined to leave the hotel room. (Fade has internet. She says she wants to hug it.)
Ow.
It is the day after sword campp, and I am in pain. I finally completed Basic, after three years of meaning to. (In 2006, sword camp occurred while we were moving from place to place in Pittsburgh, so Fade went but I stayed behind to pack stuff and haul boxes. In 2007, we were moving back to Austin and neither of us got to go, which is why Fade went through Basic again this year since she not only missed a year of training, but didn't have anybody to practice with in between.)
We're hanging out on the Aegis Compound for a day to recover, and then hit the road Monday morning. (We're welcome to stay in an "the only food left is bagels and the camp showers are out of propane" sort of way. The tent we're in was still up from the last event anyway. I'm all for it if it means I don't have to move much right now. Ow.)
Poking at the next Firmware Linux release. I think I'm holding off on the 2.6.26 kernel for now; it seems kind of craptacular. The build produces obvious warnings even on x86, when I was showing Tim Bird how to fire up a 2.6.26 kernel he'd built under qemu it encountered numerous DMA timeout errors (again on x86 with an IDE hard drive), the powerpc patch no longer applying is understandable (same for the perl removal patch) but the 3.2 gigabyte kernel strip produced is just _weird_, and I really shouldn't need to apply a patch to UML just to get it to _boot_... I suppose I'll machette through it all after the release, and hope the 2.6.26 dot-releases can incorporate some patches to get the obvious breakage fixed.
That said, I'm accumulating a largeish number of patches needed for 2.6.26 that don't work with 2.6.25. Currently the .25 stuff works and has lots of build infrastructure changes unrelated to the kernel, and the easiest thing for me to do is push out a release of the .25 stuff so I can break everything by checking in the .26 stuff, and debug it at my leisure.
Speaking of .26 stuff, I've missed another merge window thanks to OLS and sword camp, and Grelber being down between the two. Sigh. At least I have an updated perl removal patch for the linux-embedded list to ignore when I get back to civilization, defined as "some place that has internet".
Sal, the head of Aegis, used to run a software business and is quite clueful, but the compound is over a mile away from the closest town. Running a land line would cost several thousand dollars and involve negotiating right of way with a couple dozen land owners (apparently even along the roads). Yagi antennas to bridge with wireless need a line of sight, which is great if they want to try to get internet from a national park but heading uphill towards civilization (or at least Pickney) involves two hills and a _lot_ of trees. The current plan is to try cellular internet, but unfortunately this is Michigan so even that's nontrivial...)
Sword camp. Day four. Ow.
Day three of sword camp. No internet access here, not a lot of time to use my laptop. Fun campfires every night, only managed to land a flaming log on my foot once so far and the burn was smaller than you'd think. Stiff. Sore. Yesterday they woke us up by playing fight music on the PA system really loud (and the fight music includes several varieties of dance music, hip-hop, the theme from the movie "Mortal Combat", etc...) Today they woke us up with bagpipes, which didn't work in my case because I had no incentive to move _towards_ the bagpipes...
Got to poke at the 2.6.26 build a bit last night. The sparc and sh4 builds have wandered into the "failed" category due an undefined reference to sched_getaffinity() in busybox "taskset" (I can just yank that). Powerpc broke because even though I updated the patch to apply to 2.6.26 the kernel build is erroring with 'ppc_ide_md' undeclared. Need to track down what that changed to, but right now I haven't got time. I should be stretching...
In the evening, poking at powerpc. Removing the ppc_ide_md stuff (just to get it to build, IDE won't work until I figure out how to fix it but I have no internet right now), then the build did a powerpc-strip to produce the zImage file, and it took a full minute. The _reason_ it did this was it output a 3.2 gigabyte file. This is not a good thing.
I'm told that Eric's sister rebooted Grelber. I can't get online here so I have to take his word for it, but hopefully my website's back up and email is accumulating for me.
Grelber still down.
As long as I've got a gap before I can make a release anyway, upgraded to 2.6.26. The -noperl patch broke, of course, but I've been meaning to redo it anyway. Did so in the gap after the cluster migration panel. (It looks like this might finally have addressed most of this, although it's hard to tell because I missed the first half hour and he wrapped up the presentation right as I was coming in.
The powerpc-qemu patch from Milton Miller isn't applying anymore either, but it looks like a fairly simple fixup. I live in dread of that patch breaking, although I attended a nice device tree BOF yesterday where Grant Likely walked me through some of what I need to know to understand that area a bit better and maybe get an _unpatched_ linux kernel to boot under qemu. Maybe. Still supplying my own boot rom and using something other than open hackware to boot QEMU with.
Speaking of other boot thingies, the uboot BOF was interesting. People have gotten uboot for mips to boot under qemu, but not PowerPC yet...
In general the BOFs have been better than the panels this year. Not because the BOFs are better than average, but because the panels seem weak. There have been 2 consecutive panel slots where I wasn't particularly interested in any of the panel options, more than once already. (The hall track is still good, but Linus isn't here anymore, Alan Cox isn't here, Andrew Morton, Thomas Gliexner, Al Viro, Christoph Hellwig, Matt Mackall... I think CELF had more people I recognized, and most the people I _do_ recognize here were at CELF earlier this year anyway.
Ugh, 2.6.26 is totally horked. User Mode Linux doesn't work at all, git bisect tracked it down to this commit which seems completely innocuous, but that's what git bsect pointed to. Huh. (And yes, reverting that fixes it. Weird.)
Got to meet Mark Shuttleworth after his talk. Cool guy. (He still couldn't pick me out of a police lineup, but I got to ask him some questions, mostly about Linux on the desktop and the 64 bit transition and such. In an alternate universe I'm sure I invited him to Penguicon, but in this one that's not my job anymore.)
At the CELF BOF. I need to go grab Fade and hit the road to go to Michigan. I was goign to look uo the driving directions, but the Westin (where the BOF is being held) doesn't seem to have working internet access. Sigh...
Grelber is down again. It was down last night. It goes down a lot. And right now I'm in canada where my cell phone doesn't work, at the Rideau Centre where the internet doesn't work for me either...
Yay internet working. Hugh... (um, Hugh. The Power PC guy. Darn it, blanking on his last name.) helped me get it to work. It requires wpa_supplicant, which seems somewhat overcomplicated but works (as long as I re-run dhclient every 2 minutes). Alas, Grelber still down.
It's evening, and I'm totally fried. Had my talk on documentation this morning, and they gave me a much bigger room than I expected. Managed to be only mildly incoherent and only leave out about 80% of the material I'd hoped to cover. (The paper left out around 50%, so that's not as bad as it sounds. Summarizing 7 months of full time work into a 45 minute talk and a dozen page paper is _going_ to leave a lot out, no matter what you do...)
The compiler BOF went pretty well too. I spent more of it talking than I'd meant to, but people kept asking me questions and expecting me to be some kind of authority on the subject. Dunno why. Michael Opendacker of Free Electrons taped said BOF. Might get a URL to that when Grelber goes back online. (I'm told Eric's sister may be able to go over and reboot it on Saturday. Wheee. If you can read this, it happened.)
Got lost for 2 hours wandering home, of course. It turns out the hostel is 2 blocks away from the Ricoh center thingy where OLS occurs, but 2 blocks in _which_direction_ was a bit unclear. Spiraling out from the starting point doesn't work well when there's a river involved. Looking for things I recognize isn't very helpful when 2 years ago I was at a hotel in the opposite direction from the hostel. Stopping to ask directions from someone so drunk he could barely stand didn't really speed matters along either. Eventually got directions from a security guard who suggested getting on a bus "to get back downtown" might be a good idea. (I'm generally in favor of long walks, but in a city I don't know while it's raining in a country where my cell phone doesn't work, less so.)
I fall over now.
Yay OLS. Long day, very tired. Got to see lots of people and attend panels. Missed the embedded Linux BOF because I was hanging out with David Mandala and a nice guy named Art Cannon at a bar in the mall attached to the convention center thingy.
Back at the hostel. I need to work on my slides but I'm too fried, I'll set my laptop to go off at 7am and do them in the morning...
Arrived in Ottawa. Very tired.
Software suspend does something funky to inodes (or perhaps dentries) that are busy during the suspend, which tends to happen when I suspend while compiling something. On resume, any attempt to mess with that file causes the program to segfault, and dmesg shows a non-fatal kernel panic with register dump and everything. And trying to delete the horked file counts as messing with it. The only cure is to reboot. Sigh. (On the brighth side, the _rest_ of the filesystem seems ok. I think.) Yes, this is the same problem I encountered back in January, it's just happened enough times since then to be somewhat predictable now. Hopefully, the upgrade to 8.04 will make it go away, if I ever get around to doing that.
It also means I have to restart my forkbomb build from scratch, so that's another 5 hours before I can do a FWL release. Might leave it running overnight and try for a release tomorrow at OLS...
After weeding out the spam and mailing list posts, I have about 2 dozen actually important looking emails accumulated since I left Austin. Probably about 3 hours of replying, altogether. I don't currently have 3 hours of awake left, so I think I'm going to just punt on the whole pile until morning...
Mercurial 1.0 is producing corrupted tarballs. The gnu tar command complains (and eventually exits with an error), but makes it through skipping just the one bad header. The busybox one aborts halfway through. This is why I've spent days not being able to get the thing to rebuild under itself. Sigh.
It also means I can't cut a release until I get mercurial to emit a non-corrupted tarball. (All the _files_ are there, and I could tar them up myself, but the release tarball won't match the tagged version...)
Got a fix from Denys Vlasenko, it turns out mercurial is setting the "length" field nonzero for symlink entries. It souldn't be doing that, but it's easy enough to work around.
Ok, FWL revision 373 is probably what will become the 0.5.0 release, but it takes several hours to build all the targets and I have to hit the road for OLS now. Maybe I'll cut a release from Ottawa...
I take it back. It was not a nice mammoth.
So, preparing to go to OLS and then sword camp. Possibly leaving this evening, depends whether we want to make the tuesday mini-summits or not. The virtualization mini-summit looks vaguely interesting, but the only really interesting presentation in that is the mini-VM one (extending KVM towards embedded systems) from 2-3pm. Not quite enough to worry about arriving a whole day early for, and there might be some weird extra registration requirement like they're doing for tutorials this year anyway. *shrug*
I still need to get a Nail board HOWTO to Andrew Morton. He doesn't seem to be speaking at OLS this year, he might not actually be attending, but it's a decent excuse to get something done I should have finished months ago...
Somebody who is scheduled to present is Ubuntu founder and space tourist Mark Shuttleworth, specifically delivering the Friday night keynote. My ex-boss Dave Mandala (who's known Shuttleworth since before he was rich and famous) will also be there, so there's an unlikely but technically nonzero chance Dave might take me out to dinner with him even if I didn't try to say hi. (That's how I met Thomas Gleixner at a previous OLS, Dave knows all the fun people...) Except that I have to leave Friday to go to sword camp (missing saturday entirely), because the two overlap and Google says it's an 8 hour drive. Might be able to stay for the keynote, but not after. Oh well.
Naturally, my first response to noticing Shuttleworth's keynote was "perfect convention guest". There's never any guarantee someone would say yes, but it's the perfect opportunity to invite him, and I think he'd probably really enjoy being a guest of honor at a combination SF convention and Linux expo. I'd have to find out his favorite flavor of LN2 ice cream and who his favorite SF authors are (and whether they're good GoH material too), but that's not to hard to find out. (Among other things, I could just ask...)
Except I'm no longer involved with Penguicon thanks to this year's con chair. (I'm not even attending his year.) Linucon ended when I moved to Pittsburgh, and the new one Stu and I are starting up got bumped back to 2010. So currently, I have no context in which to SMOF. Strange feeling, that. Oh well.
I think the most boggle-worthy OLS panel this year is probably SyngergyFS: A Stackable File System Creating Synergies Between Heterogeneous Storage Devices. In the speaker's defense, I suspect English is not his first language, but still. Nothing aimed at "Creating Synergies" belongs anywhere near the Linux VFS layer, nor should "Quality" initiatives or any other pointy-haired-boss speak straight out of Dilbert.
Oddly for something that pointy-haired, there's no mention of Xen. But the winner of this year's "giving oneself a hernia straining to emit an acronym" award goes to VESPER, which _does_ mention Xen. Again, english not a first language I'd guess. (Can we just let Xen die already? Even Red Hat switched to KVM, which is partially based on qemu. Xen is simultaneously more complicated and less capable, and if you really need to run emulated Windows on a system without the special memory management bits KVM depends on there's always kqemu. Even VMWare is finally rolling to a stop.)
It's somehow reassuring that new horizons in memory management still comes down to competing approaches from Rik van Riel and Andrea Arcangeli. (Not that I could make a saturday panel anyway, or would go to that instead of building a multimedia embedded linux system from scratch. But there's probably a paper in the proceedings...)
Went to Epoch in the wee hours of the morning, planning to tackle my svn to hg converter so I could bang on the uClibc bug. Found a fix for it waiting in my email, thanks to Joe Soroka. Tested it and it works. (Yay!)
Found that Roberto Foglietta posted a bunch of messages in the toybox list going back to Tuesday. Tried to catch up a bit there.
I should put out a FWL release tomorrowish...
Also transplanted a gig of ram from the 64 bit desktop that doesn't work into the 32 bit system that does, so I have something I can just leave running when I go out to build all architectures. It's noticeably slower than my laptop, but I feel better about leaving it going overnight.
Another day offline. This week I've gotten the car poked at, gone grocery shopping, made a hotel reservation in Ottawa (at the hostel from last year), scheduled the Lethal Chemicals Man to come dissuade the ants so the cat food dishes will be safe while we're gone, confirmed Mark can feed said kiggies, assembled more bookshelves and unpacked more boxes onto them... Still haven't gotten the laundry out of the car.
But mostly, I've spent this week reading Tamora Pierce books. I have now run _out_ of Tamora Pierce books. Bloodhound apparently got bumped to 2009, and there's no sequel to Will of the Empress yet either...
Now re-reading Roger Ebert's "Your Movie Sucks", which is more a bathroom book than anything else...
I need to prepare for OLS, so naturally my only use of my computer today was reading the Casey and Andy archives and playing Desktop Tower Defense. (There are youtube videos of people playing the challenge modes.)
I should really upgrade Ubuntu, the flash plugin keeps leaking some kind of resource until flash stops showing up in web pages, and then I have to do "killall nspluginviewer; killall npviewer.bin" in another window. Nope, killing just one isn't always enough, and yes individual pages can have enough flash in 'em to drive the plugin to exhaustion so you sometimes have to do it after _every_page_. Yes, this is the kind of thing desktop Linux users need to know, which is why we're so rare.
I remember now why I don't hang out at Jimmy John's much, even though they're open until 3am and have a table next to an outlet. That table is under a very loud speaker, which is sometimes playing absolute crap. (In this case, the C is silent.) Somebody is literally singing about vandalizing mailboxes, for a definition of "singing" that involves monotone chant in front of a drum machine. About every third word is unprintable by newspaper standards. (I don't get it: "I'm bad, let me prove it by singing! Fear my three note range!")
The really _sad_ part is that all three people working behind the counter are "lilly-white". Listening to a recording of somebody screaming about killing whitey. Voluntarily. (With police whistles and vinyl record scratching, neither of which have existed _outside_ of rap for many years.)
Reading "Terrier" by Tamora Pierce, not doing any real programming today.
Today's way to crash Konqueror is to tell a tab to load a new page, have the "some piece of javascript is taking too long and we think the page is frozen" window pop up from the old window before it can connect to the new site, have the new page load behind the pop-up, and then dismiss the pop up window telling it _not_ to kill the javascript. Instant segfault.
Sigh, lost a ton of tabs. (Most recently, I was watching a marvelous bbc show (from 2003) called "Posh Nosh", which was hilarious. Top Gear turns out to be surprisingly entertaining too, David Tenant's two appearances on the Friday Night Project... He's such a remarkably good sport.) I also had zero punctuation open, which is probablly the best _actual_ use of multimedia to convey information I've encountered so far. (The audio and video tracks reinforce each other, neither would be complete without the other. Most things don't do that very well. Plus I'm a sucker for well done british sarcastic rage.)
Poking around with mini-native-i686 in a chroot, trying to figure out the uClibc static build problem. Decided to use the RECORD_COMMANDS wrapper to snapshot the commands actually being run (to find the ./configure step that's dying). Found 3 bugs in the wrapper so far, and checked 'em in.
Great. Here's the problem:
main(){return 0;}
That program, statically linked against uClibc, segfaults. If you dynamically link it, it works. If you add a function call before the return (such as a printf()), it works.
I have two or three guesses about what might be going wrong, but somehow I foresee single stepping through the assembly to see what it's doing, and that sucks.
Ah yes, this issue. And the recipe from there still mostly works, although "show r" doesn't seem to be recognized. Ah, it's "info r". (Fixed the old blog entry so I have the right recipe recorded somewhere.)
Ok, so it starts in _start, I step through all that and it matches, and then it calls __uClibc_main which is long and complicated. And it's dying somewhere in __uClibc_main, I _think_ near the "Pull stuff from the ELF header when possible" comment. There's a loop right after that which looks promising. It seems to be before the call to __uClibc_init (which got inlined)...
Ok, back up and try a more comfortable debugging approach. Rebuild uClibc (based on what cross-compiler.sh is doing) using the source in build/sources (which is correctly extracted and patched, and won't get rebuild until we re-reun setupfor), reinstall it, and build "../../cross-compiler-i686/bin/i686-gcc -static test.c" to make sure problem is reproducing there. Yup. Ok, now edit libc/misc/internals/__uClibc_main.c and insert write(2,"narf\n",5) just before where I think it's crashing, rebuilt test.c, run a.out, and... It says "narf", then crashes.
This is a debugging approach I can get results with: stick printfs into the source code (or in this case write() because it boils down to a system call and is less likely to screw up early init). I know gdb has its adherents, but it's a tool of last resort around here...
The call to _stdio_init() is failing...? (It's making it to __uClibc_init() almost to the end of that, but the last if() statement with the call to _stdio_init() is unhappy. It's not making it _into_ _stdio_init(). If I take "attribute_hidden" off it at least doesn't segfault there, but it still segfaults somewhere after the return and it's not calling the contents of _stdio_init().
Hmmm...
Went to see Hellboy. It was very well done in a lot of ways; excellent acting and excellent effects. It managed to include a Barry Manilow song in a _good_ way, which is an Epic Feat right there. But the writing triggered more than one of my pet peeves.
Here's a paragraph break so you can stop reading. (No programming today, just movie spoilers.)
I despise the "disposable girlfriend" trope, am not a fan of the "heroic suicide", and am annoyed at any writer who sets up a Bad Thing early and obviously in the movie and then DOESN'T FIX IT, instead letting it hang over the story for most of the movie and finally playing through to a predictably tragic conclusion. (She was as Obviously Doomed as King Redshirt from the stereo nosebleeds in the throne room; going on to set up a love story between her and one of the protagonists making her _into_ the disposable girlfriend was just torturing the audience.)
I kept hoping they'd subvert such an obvious setup, the way the first movie did with its iteration of the "Disposable Girlfriend" thing, but no. Having a bad guy and a good guy share wounds so the good guy could commit suicide to take out the bad guy at the climax was the plot of the movie "Dragonheart", which despite being voiced by Sean Connery is really not worth copying from. This was a much better movie than that.
That's what really annoyed me, the rest of the movie was substantially better than that. It was both wasted potential and made this particular plot thread look unworthy in comparison. Sure it was a summer action popcorn blockbuster, making it a bit predictable in places, but going "I know, let's ditch the happy ending to break the mold a bit, and yet telegraph this move for an hour and a half" is not an improvement.
There are a dozen other ways it could have ended. If Abe Sapien caught his girlfriend's arm as she tried to stab herself and instead suggested that Hellboy use the crown to order the golden army to imprison her brother while they left, taking the crown with them. (They even commented he was the brains of the outfit earlier, but gave him no real problem to _solve_ during the entire movie. Guessing where a large lump of metal is hidden doesn't count when you have a single room to search, 20 agents to do it with, and a time limit measured in hours. And possibly metal detectors.) Or Liz could have done it, since all the guys were blind and her contribution to the final fight scene was to stand there instead of her usual job of being the cavalry (or at least the team's tactical nuke). Or the german dead guy could have done something, giving him a reason to have actually come along at all and making him a useful part of the team instead of some tangential sidekick along for the ride. (Ok, he fights well, but that's what Red's for, and usually Liz.)
Alas, expressing my disappointment in the movie upset Fade, leading to an argument. Didn't feel like programming afterwards.
At the laundromat. Really annoyed by money falling out of my pocket. (For some reason, over the past year, cash does not stay in the pockets of my shorts anymore. I've probably lost $200 that way. I see why people have money clips now.)
Some fat guy is holding forth about how the government's a secret cabal. "It's obvious, that's what's happened. The guy was on the internet. That's totally suspicious. It's a cabalic action of a dark force that's kinda so much of the guy who tried to kill treaty oaks, but..." These are direct quotes. "Skull and bones, or even darker action... That was a ritualistic sacrifice, metaphorically, it's like killing little babies...") Five minutes ago he transitioned seamlessly from the bee crisis (them all dying off, and they pollinate all our food, and how much he respects Jerry Seinfeld for tackling this issue head on in The Bee Movie.) Now he's talking about alternative energy ("unlimited hydrogen") technology existing but being suppressed... now J.P. Morgan is the largest bank and they "killed Tesla"... Out of context quote "It's the watermelon that does it"...
I'm having a hard time keeping a straight face while typing this.I honestly couldn't make this stuff up. I know sturgeon's law apparently applies everywhere, but wow...
Digging through old computers, figuring out which ones to goodwill, and hoping to find a server I can set up to run overnight builds on.
The most meorable was the one that made a very loud _bang_ noise when I turned it on, and a distinct burned smell. Turned it off again despite the fact it seemed to be booting up just fine. (I think it was just enough dust had collected in the power supply to conduct electricity, and it burned off almost immediately, but still...)
I found the first 64 bit machine I got, an AMD Sempron that that was slow and unstable. No interesting data on it, but several interesting parts (2 gigs fairly fast memory, 250 meg sata hard drive, cd burner). Can't use that as a server because it panics if you try to do anything CPU-intensive with it, probably something to do with the CPU fan but I could never jiggle it to work right. It's also VERY SLOW.
I found another Sempron (a 32 bit one, yeah AMD switched from 32 to 64 bit without renaming the processor line) that was the desktop system I limped along with between my previous (Pentium M) laptop and this one. I'm tempted to set it up as a server and run overnight builds on it, but it only has 384 megs of ram and 70 gigs of hard drive space. (Maybe I can transplant the 2 gigs from the panicky 64 bit system into this one, but I'm not sure it's compatible. Worth a try. Can't move the hard drive over, SATA vs IDE. And I never _could_ stabilize the 64 bit motherboard so it didn't panic after a few hours...)
The ironic part is that the two Semprons are the exact same MHZ and have the same amount of L2 cache (256k), but the 32 bit one runs twice the speed off the 64 bit one. Making a 64 bit processor with only 256k of cache brings back memories of the original cacheless celeron...
So now that the system's building under itself, and I've got the cross compiler building static, I want to build every cross compiler target from every host target. This is harder than it sounds. Just tried it on arm host and not _one_ of the targets built to completion. (Trying i686 now to see if it's something wrong with the environment, or just nobody ever having tested arm as a host...)
Ok, i686 went "boing" the same way. But it built a few days ago. What's going on? Hmmm... (Ah, one thing that's wrong is that distccd isn't getting killed when the script exits. Why is that?) Right, kill the old distccd by hand and re-run emulator-build.sh to make sure the client and server match, and then inside qemu rerun ./cross-compiler.sh with CPUS=1 so the error message is actually at the end of the build...
And it reproduces. The problem here is that BUILD_STATIC is producing an unusable binutils, the output of which segfaults immedately. The dynamic build doesn't have that problem. Great.
Ok, killall distccd to eliminate that as a variable, and rerun the build... Which confirms that's not the problem. Single processor, fully native build, and it dies trying to ./configure gcc using the binutils it just built. Why is that?
Reading Cory Doctrow's "Little Brother" (via the free creative commons PDF I'd link to if this whataburger had internet access). I like the world "exfiltrate". :)
Teaching the cross compiler to build static binaries if I tell it to. (I've meant to do this for a while, I'm just finally getting around to it.) That should make them a bit more portable, and it means if I rebuild the system under itself (linked against uClibc), I can distribute those versions as the release tarballs for the cross compiler.
The next release may have 100 or so cross compiler tarballs, because I hope to build each target on each host. Currently that's 8 squared (64), but if I get sparc working that becomes 9 squared (81). If I can beat sh4 into working (it builds, but qemu hasn't got a target board that'll run it), or m68k (darn gcc internal compiler error, but maybe I can work arond that?), or armv4b or armv5l-eabi... Anyway, one more and I'd have an even 100.
This isn't necessarily _useful_, but it's cool. :)
I've been trying for two hours to make the binutils build static. (No, I can't look it up, I don't have internet access at this whataburger and the LFS version I cached is new enough that the /tools section isn't tatic anymore.)
I want to find whoever created the stupidly overcomplicated binutls and beat them about the head and shoulders until the apologize. I've set LDFLAGS, BOOT_LDFLAGS, LDFLAGS_FOR_TARGET, LDADD, and CFLAGS equal to "-static". (From reading the Makefiles, the build uses all of those at various points.) I've set them as environment variables, and as make commandline overrides. I modified the top level makefile so that instead of stupidly blanking LDFLAGS it sets it to "-static". And it's STILL creating dynamic executables.
This is why I hate all software ever written by the FSF: it's smug bloated crap written by people who assume everyone knows (or is interested in) what they think, because it's the universal One True Way. (And this whole "libiberty" thing stopped being funny in 1992.) They're a political organization, not programmers.
Time to pull out the chainsaw...
Ok, the flag "-O2" is being passed down to cxxfilt (the last executable built in the build, easiest one to scroll up to). Grepping the top level makefile, five different variables are set to include "-O2": CFLAGS_FOR_BUILD, BOOT_CFLAGS, CFLAGS, CXXFLAGS, and CFLAGS_FOR_TARGET. (Yes, this repetition is just sad. They don't know what they're doing, so they have to repeat themselves. Moving on...) Set each one to a different -O number starting at 3 (everything above -O3 is equivalent to -O3 anyway, so it's an easy way to insert information without breaking the build). And... The build broke.
*Blink* *blink*
"Warnings being treated as errors" (where did that come from?), and "size" is used uninitialized in binutils/wrstabs.c. What the...? Yes, -Werror is being passed in (I didn't touch it, apparently it was already doing that), and the different optimization level throws a warning that breaks the build. Right, so what I need to do is use _lower_ levels, -O1, -O, and -Os. And -O -O should work too. (I want to change -O2 because I want to prove it _is_ one of these, and not somewhere else I've missed.)
P.S. Don't ask me why it's building cxxfilt when I told it "--enable-languages=c" and did _not_ include C++. I believe the british would say "Gnu software is totally pants".
Ok, when I took -j3 out of the build and just did a single non-parallel build, the last executable built isn't cxxfilt anymore, it's "ld-new" (whatever that is). Think I'll stick with looking at cxxfilt, since I'm fairly certain that winds up in the final system and I haven't got a _clue_ what ld-new is).
Ok, cxxfilt.c is being compiled with "-O -O -O", and on the next line being linked with -O -O -O, and that's... CFLAGS. Alright, what happens if I stick -static in CFLAGS?
Well, the build didn't break. It created a 2.4 megabyte binutils/cxxfilt file. And according to ldd, it's _still_ linked against the dynamic libc.so.6. How?
Ok, the command line that's creating cxxfilt looks like:
/bin/sh ./libtool --mode=link gcc -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -static -o cxxfilt cxxfilt.o bucomm.o version.o filemode.o ../bfd/libbfd.la ../libiberty/libiberty.a
Yes, -static is getting passed in. What the heck is...
Sigh. Ok, this command line works to create a static cxxfilt:
gcc -W -g -O2 -static -o cxxfilt cxxfilt.o bucomm.o version.o filemode.o ../bfd/libbfd.a ../libiberty/libiberty.a
The difference? Yanking libtool. Once again, the Gnu project's stupid pointless shell script that should be a NOP on ELF is screwing up something simple. It fails at being a NOP. What the heck is wrong with these people? (And I'm not going to try to debug it because it's over 5000 lines long. It shouldn't _be_ there, but it's built into the binutils source tarball.)
HA! Guess what? Both gcc and ld recognize both "-static" and "--static". On a hunch, I tried the one with two dashes, and it worked. Four hours of debugging, and I wind up fixing it by playing a hunch totally unrelated to all the source I've read and all the tests I've done.
At this point, I want to swear at the FSF for being MIND_BOGGLINGLY_STUPID. None of this was necessary, it was due to a bug in libtool, something that SHOULD NOT EXIST ON LINUX BECAUSE IT DOES NOTHING HERE. They wrapped so many layers of redundant crud on top of each other that you can't figure out what it's doing without a major archaeological expedition, and every one of those layers is brittle and easily broken.
As soon as I find decent replacements for all off their software, I want it off my computer. (I should check llvm and see what kind of progress it's making.) THESE PEOPLE FAIL AT SOFTWARE DEVELOPMENT.
Grrr.
Ok, so that's binutils building static, now to get gcc to do it. Try setting CFLAGS="-O2 --static" as a make command line override and... it didn't work. Of course. The way to make binutils build static does not work for gcc. Never do anything the same thing twice, every single action is a special case. Sigh.
Poring through the binutils code for _four_hours_ didn't really produce much in the way of useful results, so I'm just going to start _guessing_. (And trying to remember how Linux From Scratch 3.0 used to do this, years ago...) Set LDFLAGS=--static as an environment variable... Nope. Set it as a make command line override... Ha! That worked.
I am _loving_ little brother. (Ok, some of the early chapters were hard to get throguh, but "Operation False Positive" is just such a marvelous name...)
[Much later...]
"Here in Germany, we have much experience with what happens with a government that gets out of control." Marvelous line, delivered totally dry...
Good grief, when did it become 8am?
Now 8:43, and I _really_ need to go home. And use the bathroom. But... Book! (Right, I can read book at home, it's only a 20 minute bike ride, suspending laptop now...)
I have now finished reading Little Brother. It's noon. I've been on a night schedule. I fall over now.
Went to the pool for another 4am swim, but it's kind of filthy. (Yesterday I noticed it didn't smell that great and didn't put my head underwater. Today it's _cloudy_. I think the power failure a few days ago knocked the pump and filter offline. Hope they fix it soon...)
My laptop's learned a new trick: fail to come back from software suspend with a black screen, not even responding to the power button (which I made re-suspend it when it comes back from software suspend with the keyboard and mouse paralyzed) unless I hold it down for the 10 seconds or so that makes the hardware yank the power out from under it.
Oh yeah, "ready for the desktop". Right.
The Daily Show broke its website again. (They seem to have a full time staff of MCSEs devoted to finding new ways to screw up fairly simple tasks.) They used to use a flash applet to navigate to old videos, which was stupid but at least worked. A month or two back they put all the old episodes of the daily show online (back to John Stewart's first appearance). Now the same navigation page lost the flash applet, and instead they show videos by page going back 25 pages, which just makes it to the end of October. So I _was_ going back to 1999, now I can go back 8 months. Big improvement, guys.
Ran memtest86 for a while after the dozenth crash of the flash plugin (considering the two resume failures when it didn't _used_ to do that, thought it was worth a check). Didn't find anything. Bit of a relief, after spending almost $1000 on medical stuff this week, having to buy a new laptop would make me nervous about burn rate. I'm living off my savings until I get the consulting business started, and I need to get FWL 1.0 out before I expect anybody to want to pay me to support or extend it....
I have a fedex tracking thingy for my 6 cases of Splenda mini-packs. They were last seen in Pennsylvania.
Checking /proc/cpuinfo for the string "qemu" is not a reliable indicator; armv4l doesn't contain it. So I need to have multiple names for the script, which means I want to check a symlink into Mercurial. It didn't used to be able to do that, but I'm told that was one of the things Sun paid Matt to implement, and it was a criteria for the 1.0 release...
The internet remains the internet. Today's installment: The Ukelele Orchestra of Great Britain performing "Smells like Teen Spirit". (British people, performing in suits and ties, playing grunge rock on ukeleles.)
Not nearly as impressive as Jake Shimabukuro's Ukelele rendition of While my Guitar Gently Weeps, but let's face it: not much is. (I'm particularly amused by the way the mpeg encoder just breaks down trying to follow his hands moving. The frame rate simply isn't fast enough...)
Now that I've updated to the current busybox, the only package left that can't do a parallel build is uClibc. (The current stable release intermittently dies during the build if you give it -j 2 or higher.)
Went skinny dipping in the pool at 4am, then biked to Epoch for more exercise. (Obviously got dressed between those. Still damp even after the bike ride, despite toweling off fairly thoroughly. when did Austin get so darn humid?) Epoch's internet is down, and the note at the counter A) says it'll be down for a couple of days, B) blames file sharing. How...? (Did they tick off their ISP? This _is_ a coffee shop, I'd think all sorts of weird virus infected laptops come in spewing spam. Ok, currently every laptop I can see in this room other than mine is a macintosh, but still...) Luckily, this being Austin, there's another random wireless access point in a neighboring building somewhere... :)
I'm trying to figure out which is more disgusting, teaching the uClibc header rebuild (for readelf and ldd) to look in /tools/include if /usr/include doesn't exist, or making a /usr symlink to /tools from qemu-setup.sh just for that. (I already checked in the latter, but I'm not happy with it.)
The fundamental problem is hardwiring in the /usr/include path. The uClibc build wants to know where the kernel headers are, and I know where I installed the _target_ kernel headers, but this is the _host_ kernel headers. Yes, /usr/include is a standard location, but our toolchain is relocatable and in the system I'm building it's at a nonstandard location (to conform to what Linux From Scratch does)... I'm relying on a standard in one place and violating it in another, and that's just _icky_.
On a semi-unrelated note, it occurs to me that I can have every target rebuilt itself and test the result via _chroot_, without having the packaging step working. I need to bang up a new build.sh variant for this, but that's not too hard. I can probably even use "uname -m" to autodetect the host, and feed it into qemu via the smoketest.sh script...
Splitting up qemu-setup.sh so there's a separate chroot-setup.sh turns out to have too many sequencing issues. (Can't mount /dev/hdb until mdev -s gets run, but chroot-setup.sh does an exec so it can't return to to qemu-setup.sh...) Pretty much I need one script that _detects_ whether it's running under qemu or not. I could grep /proc/cpuinfo to see if it contains the (case insensitive) string "qemu", although I'm not sure if that's going to work for all targets. I could also give the script two different names hard/symlinked together and do a test on $0...
Yay doctor's appointment. I'm not happy about spending $700 on a cat scan (although it was a new experience to see the inside of my own head), but I _am_ happy that the doctor confirmed I have a chronic sinus infection (showing me the pictures, I hadn't known I had sinuses near my spine but those were the ones full of grey on one side and black on the other), and prescribed me three weeks of such a high dose of antibiotics that the pharmacist A) had to tell me to take two pills each day rather than just one because they didn't have 500 miligrams in one pill, even the 250 milligram ones are pretty darn big), B) only had 13 days worth on hand rather than the full 21, so I have to come back in a few days once she's ordered more. (Plus a steroid nasal spray despite my nose being fine, but apparently it helps anyway).
This is somewhere between the double-barreled shotgun approach and "I say we take off and nuke the entire site from orbit, only way to be sure". I've been pretty much guaranteed it'll kill all the symbiotic bacteria in my digestive tract so I'll need to eat lots of yogurt. They also warned me about a metallic taste, which I can confirm but am happy to put up with for a few weeks.
I'm already feeling better. My hands have gone back to normal already, and typing is no longer a chore. I think the sinus infection was starting to trigger auto-immune responses. I've had it ever since Pittsburgh, where I thought being miserable was just part of pittsburgh and that I was probably allergic to something making my lungs congested so much. After almost two years, my immune system was getting frustrated and a little trigger happy. (Several other weird random symptoms may be attributable to having a chronic infection right in the middle of my skull, near my spine and brain stem. Bad thing. Very happy to finally get rid of that...)
Banging on the "building FWL under itself" thing some more, this time using the i686 mini-native directory as a chroot, rather than messing with qemu. (It's faster, and once I get it working under i686 the rest should be easier. Plus I don't have to preallocate space in a block device, and I can just copy files into the chroot directory from another window. (Yeah, if I set up a network share on an nfs or smb server I could do that with qemu through the virtual network, but I haven't done that yet...))
Ah! Hmmm... The breakage is that after I build uClibc, I need to build a host version of uClibc's readelf and ldd for the cross compiler toolchain. So I do a make distclean, make allnoconfig, and make headers in the uClibc source. Making headers needs to know where the kernel headers are under, so I tell it /usr/include since this is the host... and the system FWL built doesn't have a /usr directory because everything still lives in /tools. Right.
I'm already creating /bin and /lib symlinks to tools (so things that use absolute paths ala /bin/bash and /lib/ld-uClibc.so.0 work). This is a third that qemu-setup.sh needs to do before we have a working build environment, I think. (This is a Linux From Scratch issue more than a FWL issue, having a blank root directory with just /tools is great if you want to create a new system from scratch first thing, but if you want to do anything else you have to do lots of fixups to get a working build environment for arbitrary packages. Hence the qemu-setup.sh script...)
But with that fixed up, it's building the cross-compiler.sh stage under itself. Yay!
In theory, the entire FWL build should run under itself up to the packaging stage. That part's been problematic all along, of course. The two main problems with it right now are 1) User Mode Linux only runs on x86 and x86-64 hosts, not arm or mips, so loopback mounts without root access are out. 2) mke2fs and tune2fs aren't in busybox anymore, so creating a filesystem image is missing a tool. Both of these problems can be fixed by putting gene2fs into toybox.
The other short term todo item is to put toybox back as an optional overlay replacing the appropriate busybox tools...
It needs more testing, but I can pretty much do a 0.9.0 release any time now. I want to do the expontential bootstrap thing of building each cross compiler from each host (which is likely to result in about 100 packages), and I should probably bite the bullet and make sparc work...
Hmmm, the uClibc breakage turns out not to be while actually building uClibc, but during the "make headers" phase afterwards. Unfortunately debugging it got interrupted because my laptop locked solid and I had to reboot it.
Sigh. Suspend to ram mostly works, but every once in a while it damages some kernel data structure somewhere, some time after which it either gets a null pointer dereference trying to poke at the filesystem (a non-fatal oops which means some file somewhere becomes inaccessable and undeletable until I reboot, which is a real pain no matter where it is), or it just hangs.
Need to upgrade to 8.04 and see what that breaks...
After the reboot I tackled documentation for a couple hours. (Specifically, the FWL project history page, which is pretty much a big blog entry. Link to it when it's finished, I'm up to about 2003...)
Feeling outright terrible. My fingers hurt enough to slightly interfere with typing. My joints seem swollen, and are popping. I would _hate_ to develop arthritis in my 30's. Doctor's appointment in the morning...
The FWL build-under-itself seems to be going fairly well so far. Lots of "serial8250: too much work for irq4" messages, which the Linux kernel guys (specifically Peter Anvin) blamed on qemu, even though it's their spurious message getting repeated over and over. But at least their blame came with a patch attached, although I'm using the most recent unmodified qemu release, and judging by the year that elapsed between their last two releases, the next one can be expected around January. Building one from svn to play with right now is a bit questionable due to the ongoing change to a new code generator. I really need to catch up on the list and see how that worked out...
Anyway, that's a cosmetic problem. The build progresses. (I don't care if the right place to fix it _is_ in qemu, as long as I'm stuck using 0.9.1 and my userbase is likely to as well, I should patch the kernel to shut it up.)
I'm really looking forward to my doctor's appointment monday morning. My right hand feels like I pinched a nerve, and has felt that way for two days. Alternates between pins and needles and not-exactly-numbness. Ye Olde Sinus Infection seems to have found fresh nerves to annoy. And the right side of my neck has a muscle that's gone all stiff and hurty. Plus the stuffed up ear, mild headache, and congestion in my throat are all back. And this time it's presumably resistant to _another_ antibiotic they didn't have me on long enough...
Hmmm, building armv4l cross compiler under the i686 mini-native seemed to work until it got to uClibc. At the end of the configure stage of that, it went:
./extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h:1:24: error: no include path in which to search for asm/unistd.h distcc[8410] ERROR: compile (NULL) on localhost failed :1:24: error: no include path in which to search for asm/unistd.h distcc[8412] ERROR: compile (NULL) on localhost failed
Hmmm, FWL command logging missed tee. (Because only forkbomb.sh needs this, build.sh doesn't. Skip it for now...) And it missed the commands run in the packaging stage because the script sets the $PATH for the UML instance by hand. (The biggies there are mke2fs and tune2fs I think, neither of which current busybox provides anyway.)
Bzip2 compression support went in to busybox? Hmmm... Denys broke up Julian Seward's code, not the cleaned up stuff I did. Not surprising. (That said, his version is over 60k of source code.) Oh well, that was one of the blocking commands and it's in now...
What's calling _mercurial_? Rummage, rummage (I have logs!)... It's linux again, on sh4 right after git fails to identify the current repository it calls "hg id". Right, that's similarly useless. (I like mercurial, but doing a "./configure;make;make install" should not invoke source control. That's evil.)
Ok, the only command left after enabling all the busybox stuff and playing whack-a-mole with the other commands (shuffling flex into yesterday's lists and such) is "dnsdomainname". That's called by the Linux build from scripts/mkcompile.h... in a stupid way. If /bin/dnsdomainname exists, it assumes it's in the $PATH. Why not check the _path_? Sigh... Anyway, it shouldn't cause a problem for that to fail in context, it leaves a blank #define LINUX_COMPILE_DOMAIN which is the fallback anyway if it can't find dnsdomainname or domainname. (Oddly, I _can_ put domainname in the $PATH, but it won't fall back to use it because it'll still still dnsdomainname at the absolute path.)
Ok, disable toybox building in host-tools, swap in the new busybox with the new config file... Explicitly add a "make busybox.links" step because apparently I have to do that now... (They sucked in kbuild? Really? Isn't that _massive_ overkill for what they're doing? What exactly does modules_install mean in the context of busybox, anyway?)
Try the build, and... it didn't even make it out of host-tools.sh. Sigh. The busybox 1.11.0 "patch" command failed trying to setupfor linux:
Applying /home/landley/firmware/firmware/sources/patches/linux-2.6.13-cmdline.patch patching file init/main.c patch: hunk #1 FAILED at 286 patch: 1 out of 1 hunk FAILED Exiting due to errors
That's a command I already implemented in toybox due to the busybox 1.2.2 patch command failing in the same way. However, for the moment let's just borrow the host patch from Kubuntu to see how far the build makes it with the rest of the new busybox...
Next the gcc build died with:
awk: /home/landley/firmware/firmware/build/temp-i686/gcc-core/gcc/optc-gen.awk:45: Call to undefined function
But this is actually a known bug. Busybox's current maintainer Denys Vlasenko has been poking at FWL over the past week, and he found that awk in 1.11.0 doesn't understand multiple -f options. (Which is a regression; in 1.2.2 it did.) He gave me a patch, slot that in and restart the build...
Busybox needs xargs to build itself. Add that to the list. (I edited yesterday's "Busybox needs to provide" list so I have the full list of necessary commands written down somewhere.)
And the busybox build no longer accepts CROSS=, it now wants CROSS_COMPILE (and not CROSS_COMPILER as I initially gave it). And without CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY busybox tar can't unpack the make 3.81 source tarball. (The FSF continues to suck at this whole "development" thing.)
Phoned Eric to see why viewing some of the web pages on landley.net was giving me 2k/second. Eric has a 5 megabit FIOS connection through Verizon, there's _no_ excuse for it being that slow. It turns out that when Eric uses bittorrent on any of the machines in his house, Verizon detects this and throttles "the hell out of" his outgoing internet traffic.
That's not just evil and stupid: that's a class action lawsuit waiting to happen. Also, Eric's paying for bulk bandwidth. If Verizon can tell him what he can and can't do with it, at what point do they lose common carrier status and become liable for the things their users transmit and receive?
Sigh. I was pondering getting FIOS, but this has turned me off. I don't even _use_ bittorrent but a company _that_stupid_ is not something I want to entangle myself with.
Doing a "./forkbomb.sh --fork" build for the first time in a while. Poor little laptop, churning away, with 30 second latency spikes as I try to catch up on my livejournal friends list or type here. (And when all the genattrtab calls in the gcc build sync up, the laptop gets DEEPLY unhappy. As in "mouse pointer doesn't move for 45 seconds" unhappy. Yeah, still a brilliant idea to have X11 be a normal userspace process, just like a microkernel would do it. Sigh. At least it sucks _less_ these days, after 20 years of figuring out workarounds...)
I _think_ busybox 1.11.0 is now in and working for all architectures. Patch remains broken, and I had to add a half-dozen things to the list of commands to get something _useful_ (wget, mount, mdev, ifconfig, route..). But I might be able to actually use emulator-build.sh $ARCH to wget http://landley.net/hg/firmware/archive/tip.tar.bz2 and then build that under itself.
Fingers crossed...
Happy blowing things up day. (I'm aware that England does this on November 5 instead. They also have a cool mask that goes with it, the incarnation of the God of Smugness. We have barbecue to make up for it.)
Found out that the Splenda Quick Pack thingies (which the stores in Michigan and Texas seem to have stopped carrying) are available online, so I just ordered 5 cases. That should last me a month or so.
Hint to stores: shelving these with the other splenda products, so people could find them, might have been smart. Shelving them next to the kool-aid packs in another aisle entirely, when the splenda packet costs 6 times as much as the corresponding kool-aid packet you shelved it next to, was not smart.
I've been putting span tags into the html source I write for a while now, but have yet to update the python rss converter thingy (which Christian wrote, although I've banged on it a bit since) to be aware of said span tags. Presumably I should be able to do rss feeds for each tag or combination of tags, more or less live. Some kind of "rss.py?tags=programming,entertainment,links" that would give you just those sections (and no entry for days without any of that)
Once again, I have biked to Epoch without the power cord for my laptop. (It has a nice battery, but a year in it's lost maybe half its original capacity. It's a Dell.)
I checked in the working command line recording code, and a script to generate a report from it, but the report I actually needed was a simple "echo $(cat build/cmdlines-*/* | awk '{print $1}' | sort -u)" which produced:
ar as awk basename bison bzip2 cat cc chmod chown cmp cp cut date dd diff dirname dnsdomainname echo egrep env expr find flex gcc git grep gzip hg hostname id install install-info ld ldconfig linux ln ls m4 make mawk mkdir mke2fs mktemp msgfmt msgmerge mv nm od patch perl pod2html pod2man pod2text pwd qemu-arm qemu-i386 qemu-mips qemu-mipsel qemu-sparc ranlib readlink rm rmdir sed sha1sum sleep sort strip tail tar touch tr true tune2fs uname uniq wc which whoami xgettext yes
So that's the full list of commands the build used when I gave it access to the full host environment. (It does not include /bin/bash or /bin/sh which are accessed via absolute paths and thus not caught by the $PATH wrapper.) That's our starting point.
That list can be trimmed down a bit. The ./configure scripts notice lots of optional stuff, which the build won't use if it isn't there. Yanking perl zaps pod2*. The results of bison and flex are usually cached, m4 and mawk are optional, along with internationalization stuff like msg* and xgettext. The "info" file format is obsolete (html won over gopher) so install-info can go. The qemu* files are used as an optional smoke test at the end of each cross-compiler.sh build, pretty much for development when I'm trying to make sure the cross-compiler I'm building will generate code qemu can run. I'm guessing the linux kernel build is calling "git", which is stupid and _clearly_ optional.
I addition, some stuff is provided by packages other than toybox/busybox. The toolchain stuff from binutils/gcc is ar, as, cc, gcc, nm, and ld. (Plus ranlib and strip, which are apparently optional in the host toolchain.) User Mode Linux provides linux, uClibc provides ldconfig, make is its own package...
That leaves us with busybox having to provide:
awk basename bzip2 cat chmod chown cmp cp cut date dd diff dirname echo egrep env expr find grep gzip hostname id install ln ls mkdir mktemp mv od patch pwd readlink rm rmdir sed sha1sum sleep sort tail tar touch tr true uname uniq wc which whoami xargs yes
Configuring busybox: tar compression type autodetect and after needs to be indented...
Can't do anything cpu-intensive without draining the battery quickly, so banging on the perl removal patch. Alas, it no longer applies to current hg, so the first step is examining the perl to see what changed. (I hate trying to read perl...)
Fade and I went and saw Wall-E today, along with Mark. I think it's the best movie Pixar's made so far. _WOW_ was that a good movie. Half the movie had no dialog (neither of the robot leads speaks more than a few individual words), and it was _brilliant_. You don't miss it. The storytelling was superb, the characterization and "acting" were flawless. They made a _roach_ sympathetic, without being anthropomorphic. (The roach never broke character, except for a few squeaks and a bit more intelligence, it was a _roach_.) The captain got to be sufficiently heroic to warrant the position. They had conflict without needing an actual villain to be actually evil, and without any "Moment of Stupidity" to drive the plot at any point. Everybody's motives _made_sense_, all the way through.
I don't remember a single glitch in the movie where I had to just gloss over some flaw and keep watching, and I can't even remember the last movie that was true for. For the entire movie, they didn't noticeably screw up once. They even managed to do foreshadowing without it being even slightly obvious. (Not the fire extinguisher thing, that was spoiled for me by the trailers, but the reason to go back to earth _now_. It just... flowed. Well of course. Brilliant.)
The bit at the end where so much personality is expresed just by tilting the little eye lens thingies... (Nice interview with the director where he talks about those lenses, by the way.)
It's got layers of doing stuff right. Yes the characters were great, yes the visuals were great, yes the plot was tight and seamless, but there's more. They managed to have a fairly hard science fiction plot and setting without a single instance of technobabble _or_ an obvious scientific lapse. (The worst was probably the plant being in hard vacuum for a few seconds and surviving. I dunno what species of plant it is.) Mostly they just didn't explain things, but set it up so it's explicable in context if you care to try. (The robots being able to hear each other in space could be radio, the liner dumps garbage and hasn't run out of mass after 700 years but they _are_ in an asteroid belt the service robots could be mining for raw materials... Stuff like that.)
An example of how good this movie is: 1) They integrated live actors with the CGI ones and it _didn't_look_obvious_. 2) That's _not_ the most impressive or memorable thing about the movie, it's just something they nailed _in_passing_. Really.
Steve Jobs' fingerprints are all over this movie, by the way. I don't know if it's direct or an homage from people who work for him, but Wall-E makes the classic macintosh startup sound when he finishes charging, Eva was designed by the guy who designed the iPod and current macs (and it shows), the autopilot's voice is the macintosh "speak" command...
I need to go see it again. Yes, in the theater. (Fade's already decided to buy the DVD, not just netflix it.)
Good movie.
And now I'm remembering why replacing the command line utilities out of Ubuntu is so vital to getting a reliable build:
tee: standard output: Resource temporarily unavailable tee: write error
The forkbomb script pipes the output of the build through "tee". If the xterm it's writing to ever gets scheduled slowly enough for the output pipe to fill up and cause a short write, tee _exits_. The busybox version of tee IS NOT THAT STUPID.
Grrrr.
Also, User Mode Linux has developed strange new bugs circa 2.6.25, and if you run it from a shell script and it gets a kernel panic, it sends a kill signal to every process in it session, which takes down the shell script running it. Meaning without toybox's oneit (to shut it down cleanly), I have to run UML under setsid (and then reset the tty afterwards) or else the shell script aborts when UML exits. (Even if I run it in a subshell.)
Implemented tee in toybox and added that to the start of my $PATH while doing the RECORD_COMMANDS forkbomb. (Yeah, I could have just used the busybox version, but it was an excuse to add a small simple command to toybox. I still need to add a test suite for tee.)
Sigh. The cats have acquired fleas. (And thus Fade and I have acquired, and deployed, Very Expensive Cat Annoyance Drops.) Also got a new doctor's appointment (the third round of antibiotics didn't knock out the sinus infection either, 2 days after the last pill symptoms started up again), although the earliest appointment they could get me is monday morning, by which time the thing will probably have reestablished itself as strongly as if I hadn't had this last round of antibiotics at all. (Look, I need _twice_ the normal length of antibiotics to make this thing go away. I've always needed two consecutive rounds of antibiotics to make sinus infections go away, that's just the way my body works. I know you're trying to avoid overmedicating, but what you've managed to do is make the infection I've currently got antibiotic resistant. Congratulations. But no, don't listen to me, I'm just a patient, what do I know? It's not like I'm at all familiar with my own responses to medication...)
And I got an appointment to have the car professionally frowned at in preparation for the big long drive to OLS and sword camp.
The FWL command line logging is working, although I'm still tweaking before checking it in. When you set RECORD_COMMANDS=1 the build creates files in the build directory named "cmdlines.$STAGE.$PACKAGE" (with commands run by the script itself outside a package build being attributed to "setupfor").
So if you want to know exactly which commands a given package needs in order to build, you go:
echo $(awk '{print $1}' build/cmdlines.host-tools.distcc | sort -u)
(Which is one of those command lines that has non-shell people going "well of course, obviously, I should have guessed". The awk chops out just the command name from each line, the sort -u removes duplicate entries, and the echo $(blah) takes the output that's got each entry on a separate line and puts it all on one line. Now you know. Insert GI Joe joke here.)
If you want to know _every_ command needed (which I need to know to configure busybox 1.11.0, which is how I got on this tangent in the first place), cat all the cmdlines.* files together once the build's done. Hopefully other variants are obvious. :)
What this shows is what the build is using given a full distro environment. That doesn't mean it needs all that stuff. Lots of things like pod2man, mawk, and all the internationalization stuff are probed for by ./configure, and won't be used if they're not available. You can trim commands out of this and the build will still work, this just gives you the starting point.
And it's checked in. Currently running a forkbomb to record the logs for all architectures, because I'd like to compare them and see if any require commands that the others don't. I may also need to move the log writing into a subdirectory, so "./forkbomb.sh --fork" works with RECORD_COMMANDS. (Right now the logs would commingle if multiple builds happened in parallel. I need to bump my laptop up to 4 gigs so I can do a proper fork bomb again; there are now enough architectures that building them all in parallel in 2 gigs goes swap-crazy. Of course having six desktops full of multi-tab windows doesn't help there.)
My next major upcoming todo item is to enable all the commands the build uses that busybox 1.11.0 can provide, and seeing where it breaks. (And it will, I've already gotten one patch from Denis. Apparently awk lost the ability to understand multiple -f, it's fixed in svn.) I should try it first without toybox, I expect. And document what's wrong...
I should re-clone the busybox svn repository to mercurial and keep that up to date. I have a python script to do the clone, but I never did finish teaching it how to keep an existing cloned repository up to date when more stuff gets added to svn. I suppose I could try mercurial's built-in svn->hg converter, but the uClibc and busybox repositories live in the same svn and thus each one's commit numbers are intermittent, and that drives most clone scripts I've tried _bonkers_...
I still want to complete toybox, but commingling toybox and FWL slows down both projects. I need to complete FWL and then move _on_ to other projects like toybox and tinycc. If I focus on getting FWL implemented around busybox, then there's only a few more months of work before FWL gets to a 1.0 state. (And then it's the perfect test environment for toybox. The same "one command at a time" approach, but based on something that's known working...)
Hmmm. Pondering the distcc trick, I wonder what it would take to make tinycc provide the native compiler distcc needs? Distcc calls the native compiler with -E to preprocess header files, then calls the native compiler again to do linking. (Right now it's also calling it to create .o files in situations it doesn't understand, but I can teach it about that and probably _always_ make it marshall source across the network to be compiled into object code.) It would certainly make the host environment smaller, and faster, although by how much is an open question and what you lose by using tinycc as the linker is another unfinished question. (I'm thinking of the -gc-sections stuff, I wonder how hard that is to implement in tinycc's linker?)
But first, make it work...
Heh. _Slight_ problem, package-mini-native.sh uses "oneit", which is in toybox, which doesn't get built in RECORD_COMMANDS mode. Uh-huh. Ok, yank that for now. (It does mean you can't interrupt the copy stage with ctrl-c, but oh well...)
Another fun little detail is that the logger doesn't show calls to the cross compiler when logging mini-native package builds. That's because the host-tools.sh script takes a snapshot of the host environment, but the cross compiler gets built _after_ that, and added to $PATH. For the moment, I don't mind, but at some point I should probably add that just for the sake of completeness. (Probably just have build.sh and forkbomb.sh re-run host-tools.sh after cross-compiler.sh but before mini-native.sh. That way it'll take a fresh snapshot of the $PATH for the wrapper directory. I think the dependencies are right that it won't rebuild anything else, except recompling the wrapper which should take less than a second.)
Going through the busybox 1.11.0 config. Wincing a bit.
So I set the "busybox settings" I wanted, built a busybox with no applets enabled (because I have to recreate my list of what command line utilities actually get used by each package build), and the resulting busybox binary is 14k. Implementing _no_ applets. Huh? (Ok, nm --size-sort implies it's the compressed help support. Disabling both verbose and terse help messages brings it down to 10.7k. Circa 1.2.2, it was around 5k. Something's wierd. (Let's see, an allnoconfig build is 6.5k. I guess moving to x86_64 is responsible for some of that, I need to measure...)
Digging up my old wrappy.c script and integrating it into the toybox build, so it can automatically record the commands run by each build. This is, of course, yet another config option controlled by a magic environment variable, and rather than add a config.sh script I've decided to put comments about these variables at the start of include.sh, and move most of the other environment variable setting from include.sh to the start of that file.
I _really_ need to update the documentation, but doing that right is a big job...
Testing the build under PCLi~xOS. (Don't ask me why they put a cutesy swirl in the middle of that name, I don't know. I guess their name is "PCLiruxOS".) Got a bug report that the build is breaking, and I'd like to figure out why.
The PCLiruxOS livecd prompts me for my keyboard type. (It's prompting me in english.) Now time zone, now it's walking me through network setup. That's just _sad_. Knoppix managed to boot straight to the desktop 5 years ago, Ubuntu does it more or less right today, but these guys still can't figure it out. Why am I caring about this distro again? Oh right, a bug manifests here that doesn't happen under the other distros I've tried. What a surprise...
PCLiruxOS showed me a dozen config options, and for each one hitting "enter" was a sufficient answer. It ended with a "congratulations, network configuration is finished" dialog that provided NO information, it was just one more pointless dialog standing between me and getting a desktop. It didn't have to show me ANY of that. To add insult to injury, their motto (displayed during bootup) is "radically simple".
Why does its desktop look like a corrugated metal floor plate during bootup? What's the difference between "control center" and "administration center", so far neither of them seems to let me change the resolution down to something that won't go off the bottom of my screen when run in a qemu (unless I minimize my KDE task bar, which I don't like to do)... And I hung the thing. The control center icon gave me no indication it was coming up, so after about 15 seconds I clicked it again, and then each one wanted me to type in the password to become root so it brought up _two_ of whatever those dialogs are called (not "atomic", the ones that block your display unless you deal with them. The ones that the Macintosh UI guidelines say you should never ever use), and the one in front is blocked by the one behind it, so I can't type into either of them. Brilliant!
The _sad_ part is that preferred screen resolution was _not_ one of the dozen thing it prompted for on the way up...
I think I'm ready to write off pclinuxos as "too stupid to live" and move on, but there's still the possibility their stupidity is triggering a real bug in my code, so I've got to deal with it long enough to track down what's breaking. Time to kill qemu and try again...
I posted a patch to the busybox mailing list a couple days ago (fixing an already-fixed bug in some of my old code in a slightly more elegant way, because Denys had cc'd me on the bug report). It's a bit like an alcoholic taking a drink, now I'm pondering poking at BusyBox again. (No I don't want to be maintainer again, Denys is doing a marvelous job and I happily defer to his authority. But it's coming up on 2 years and I haven't _looked_ at anything since 1.2.2, and in any other embedded developer I'd say that makes them out of touch...)
Bruce #*%(&# Perens cost that project my services, but I'm starting to get over it. He's just not important enough to care about. A quick check of my busybox folder (yes I'm still subscribed, but it's currently accumulated 5818 unread messages) shows he hasn't posted to that list since before I left. So his _only_ contribution to the project in the past _12_years_ was to troll on the losing side of a licensing flamewar.
I find it particularly ironic that BFP insisted he was going to fork the project if other people didn't give him his way, but I'm the one who actually did a fresh implementation from scratch (and have already implemented more commands than he ever did). That's not why I did it, but I must admit him thinking it was a good idea is one of the stronger arguments against it.
The problem with toybox is that one programmer, no matter how talented, is unlikely to make up for a 10 year headstart by a team of a dozen programmers (one of whom was said programmer putting several years into the other project). Especially when I don't _want_ to render the old project irrelevant. I put good work into it and left it in the hands of the best maintainer I could find. I don't talk up toybox both because it's unfinished and becaue I don't _want_ to undermine busybox. Erik laid a marvelous foundation, Denys is doing a great job today, and I'm proud of the years I put into it as well. (Heck, I did a forensic analysis to show there _is_ no Bruce in the project, even the idea of a multi-call binary came from gzip, one of the first applets merged into the thing which was using gunzip as a synonym for gzip -d back in the early 90's.)
Yeah, BFP took all the fun out of it for a while: but he just doesn't _matter_.
More to the point, I just haven't got enough time for all my projects. The toybox command shell is a full time project in itself, which I haven't touched for a year due to lack of time/energy. Doing mke2fs right also requires several uninterrupted weeks of focusing on that and nothing else, because spending an hour here and there results in zero progress. It takes a couple hours of concentration just to refamiliarize myself with the details of the problem I'm trying to solve. Firmware Linux should really come first, it's potentially the most _useful_ project I work on and the one that nobody else is doing in quite the same way. But right now FWL is blocked on toybox missing six commands. Yeah, I'm focusing on adding them to toybox, but five of those six reimplementing commands busybox already has. With wget busybox was just missing missing two command line options that would have taken five minutes to add. Yeah, doing this helps toybox but it's not the best way to get FWL moved forward as rapidly as possible.
For the sake of completeness: the only reason I don't work on the main branch of tinycc is I just can't take a CVS archive seriously anymore. If they just switched to mercurial (or git, or even subversion) I'd happily queue up patches against that, even LGPL 'em. Just not until CVS _dies_.
And I haven't had _any_ time to poke at the kernel documentation stuff, and I have to give a talk on it at OLS next month so I need to _find_ some time...
All that said, I prefer lots of things about the toybox infrastructure. When starting over, I had the opportunity to avoid a _lot_ of things I didn't like about busybox. The two do _not_ work alike, and porting my old code from busybox to toybox can take a week to turn a single busybox command (that I wrote every line of!) into a working toybox applet. Going the other way isn't likely to be much easier, and some of it can only be described as regressions. I _like_ being able to add a command as a single file, not having to worry about cryptic makefiles, I _much_ prefer my command parsing infrastructure (unifinished in places as it is)... There would have to be some design discussions.
On the other hand, I suggested several similar improvements to busybox before I left, and they've had 2 years to work on it (and confront similar problems of their own; Denys is a clever guy). I should look at what they've done...
(Also, I must admit that saying "7 packages: busybox, uClibc, linux, make, binutils, gcc, bash" is the minimal environment to rebuild itself under itself is kind of fuzzed by the fact that I'm using a combination of busybox and toybox, and toybox won't be ready to replace busybox entirely for another couple years at this rate.)
(Also also: Denys has been poking at FWL a bit recently, and it's only fair that I reciprocate... :)
No firm decisions yet, but I am poking around...
Still feeling terrible. Not sure if this is a side effect of the antibiotic or a sign the antibiotic isn't working, but I just can't concentrate. Bashing through the server mode of wget anyway. (I've decided that -l means listen for an incoming connection, -ll means persistent server listening for incoming connections and forking off a child to handle each one, -e means exec a child process and -ee means exec a child process with a pty. Making it _work_ requires being able to think straight enough to keep the four cases distinct. (No, what's not right. Um, no opts, l only, e only, le, ll only, ee only, lle, lee, llee) nine cases. Nine cases? Nine cases distinct. (And figure out if I want to insert a config option to allow a smaller version to build.)
See "not thinking clearly", above. Tired and cranky, and I've only been up for 8 hours. (Admittedly, I woke up at 3pm and it's now 11pm, but still.)
Thought some exercise might help, so I biked out to Whataburger. Of course I got caught in a downpour on the way back, and am huddling under the awning of a trophy shop on Lamar, running my laptop on battery. (Fade's plane should be getting in any time. I look forward to this, and would like to clean up the condo a bit before she gets home. See "downpour", above.)
I really shouldn't be surprised that my huddling place is within range of 13 wireless access points. This _is_ Austin, after all...
Fade's plane was delayed just enough to miss the last bus home, so I needed to go pick her up. Luckily I had a plastic bag in my backpack. (The nail board was in it, and that seemed more likely to dry out intact than my laptop did.)
Banging on toybox wget. I've narrowed down the option set I want. (Once you decide that recursive fetching is somebody else's problem -- if they want that, they can build gnu wget -- things simplify tremendously.) It's mostly the same as the busybox 1.2.2 option set, although I need -t and -T, and a -v that shows headers exchanged with the server is all sorts of useful. I don't need -Y (it's 2008, I no longer care about socks/proxy). I'm tempted to support --bind-address (because I needed it once back in 2002) but I think I'll wait for somebody to ask for it first. (Mostly because writing up the help entry for that one sucks, it makes the usage line too long to fit and I have to explain that you need to give it a dotted quad IPv4 address.
There are still many future possible additions. I suppose I should care about ipv6 at some point, but it's not a priority. Maybe I can punt on --user and --password handling (the options are synonyms for specifying the same info in the URL, and exactly as insecure. Even xargs can't run a command without its command line being visible to ps. I could add an option to take the url from stdin, but that would be a non-standard extension...) I'm not planning to handle cookies at all right now, and the --no-cache option might be better specified as "--extra-header 'Pragma: no-cache'" so you could specify _any_ arbitrary extra header you wanted. But since I'm not supporting proxies right now anyway...
Still trying to figure out what to do about passive ftp transfers. (Make all ftp passive? Have a command line option? Ignore it and just implement the one there's a standard for?