Today I was very tempted to upgrade my Gnome desktop to version 2.20, which is in the Portage tree, but not yet marked stable. Then I thought to myself - remember what happened the last time you attempted something like this? I spent the entire day simply trying to figure out which packages to downgrade.
Gentoo's Portage package management system is excellent because of the fine-grained control provided to the administrator over which packages and which options (USE flags) are installed. Again, on the plus side, a local repository of binary packages can be created (with FEATURES=buildpkg) so that packages need only to be compiled from source at least once. I write 'at least once' is because a package will need to be recompiled whenever a version number changes (obviously) or whenever the USE flags are changed. None of us really like that, but it's a fact of life.
Now, taking a slightly deeper perspective into the concept of a local repository, there are a few different ways of organizing this. If you think of all of the variables involved with the instantaneous state of a portage-based system, ignoring overlays for now, the collection of all installed packages becomes a (lengthy) one-dimensional 'tuple' at any particular point in time.
Now, lets say that each binary package stores all of its dependency and USE flags when it is created. Then, theoretically, we could do a complete re-installation of all of the packages on a system with the binary packages alone.
In this repository, for the sake of sparing disk-space, we would likely just dump unique binary packages in a position that would be written down in a massive table. From the simplest perspective, we could simply duplicate the entire table (actually, a look up table) whenever a package or USE flag had changed.
That would probably end up being a horribly inefficient waste of space. But on the completely opposite end of the spectrum, if one was to account for each package, and create variable, off-shooting dimensions of each tuple element whenever a new version was introduced, or when a USE flag was changed,
When a USE flag is changed, then so do the dimensions of each of the elements in those tuples. In fact, what we would observe is a hyper-volume of data pointers where each element is of varying dimension and size. If one was to attempt to visualize this, it would look something like a fractal hyper-image, where the residuals of each change dieing off after some amount of forking.
The obvious trade-off is complexity versus storage space... although, think since this repository would only be storing tuples of locations on disk, then the storage space might not be so high. Although, the size of the hyper-volume would increase exponentially with each new package added. On the other hand, the 'fractal' approach would be much harder to navigate (there might be some way to organize it in a hashing system). I'm not sure if it would be faster or slower.
In any event, one would need to call a tuple out of this repository and then re-install the binary files. The recorded tuple would then be a restore point.
20071030
20071020
My Ideal Laptop
It's come to the point that I'm considering upgrading my laptop - but I haven't seen anything on the market that's ideal for me. If you know me personally, you would know that I have been a bit of an environmental nut since I was 10 years old, and that I am also an electrical engineer, embedded systems engineer, and completely obsessed with Linux. As such, I have some pretty interesting ideas of what the 'ideal laptop' would mean to me.
My ideal laptop would be one that is highly portable, environmentally friendly, and energy efficient but with a fair bit of number-crunching and graphics processing power. It should not be assembled or manufactured by poorly treated employees either. My final and least-likely-to-be-realized preference is that my ideal laptop would also be one that could be tracked if stolen[2]. It also goes without saying, that my ideal laptop would utilize hardware with open-source drivers so that one would not be stuck with any inferior, proprietary operating systems.
Throwing all of those ingredients into one pot makes for a fairly difficult main course. The question is, which company will possess the techno-culinary expertise to prepare the appetizers?
There has been much more debate and demand for environmentally friendly computing products than someone from an older generation would think[1]. However, many of the Y-Generation were brought up during the 80's when the environmental movements really began to boom and, therefore, have a much more intrinsic concern about environmental impacts.
On the other hand, the anti-theft system (ATS) is still a relatively new concept. I have personally taken it opon myself to design an personal area network (PAN) ATS for valuables such as electronics or cycles, but between my engineering job, my master's education, and now my baby on the way, I no longer have a plethora of free time for dreaming up gadgets and new designs.
If you can suggest a laptop that is currently on the market today that has similar specifications to those below, please let me know.
If you would like to see a company producing laptops with the specifications below, let your voice be heard & submit a comment.
Mechanical Specs:
If you have any suggestions of something that is currently on the market that closely matches these specifications, aside from the OLPC[4], please submit a comment.
Alternatively, if you would like to hire me as an engineer to design such a laptop please let me know.
[ Update: 20071118 ]
Here is some info from the IEEE regarding standards for greener consumer electronic devices.
List of Similar Laptops & Shortcomings
Dell Latitude D430:
If one navigates to the Dell site and selects the small business / notebook links, one would notice that there is a small image that says 'Windows XP Optional'. When the visitor proceeds to customize the notebook, Windows XP is, in fact, non-optional. Dell, take off whatever the price is of Windoze these days and offer an operating system free and / or Linux installation. Then I might consider buying this notebook.
Dell, I do very much respect the step forward by offering solid-state media instead of magnetic storage. Although the $1000 jack in price seems unfounded, especially when Transcend has such excellent deals on a solid state disk at the moment, like the ones here and here. At any rate, if I could purchase this notebook without Windows and without an internal optical drive, then it would be a done deal, and I would just buy the flash disk from Transcend.
Apple MacBook:
I really like the MacBook, although the case material is plastic and I've heard horrible things about the Nazi-esque factories where Apple assembles the iPods in China... of course that hasn't stopped thousands upon thousands of people from buying Apple products in the past. I bought my iPod used ;-)
The MacBook is good because it has a dual-core Intel chip running at 2GHz. The screen-size is also a modest 13", which makes for a very portable notebook computer. A few friends of mine have one of these babies, and I very rarely ever feel the machine get hot, and the fan is as quiet as a mouse. The MacBook has a very decent battery life and also has great power management.
Putting Gentoo Linux on a MacBook is also very possible, but can cause conflicts with the Mac OS X. What I would most likely do, is completely remove the Mac Hard disk, and add a Trancend SATA solid-state-disk of 32 GB in size instead. Then I would have the original Mac disk image available if I ever needed to use it and I could format the original magnetic SATA disk and use it externally. I think that I remember reading a rumor about Apple launching a product targeting at the Japanese market with an SDD and no optical drive. Hopefully that happens soon and they decide to expand to western markets as well.
Since I am attending a university in Germany, I would receive a 10% discount at the Apple.de Educational Store. The student discount in Germany is even more of a deal than that in Canada, after considering taxes.
[1] Some articles about environmentally friendly computing, going as far back as 1998:
Toshiba Satellite 2510, Asus U5, Wal-Mart & Toshiba, OLPC, Consumer Demands
[2] I claim prior art to some of these device specifications going back for several years if a patent lawsuit ever arises.
[3] In full awareness of the current anti-DRM movement, I still feel that artists should be able to protect their works in an open, but still technologically secure manner. My position on DRM is that publically free media should still function on a system that is DRM-compatible, as should DRM-impaired media.
[4] I am in no way knocking the OLPC project, and feel that it's a pioneering endeavor that all manufacturers should strive to match, in terms of energy efficiency. The plastic casing, on the other hand, is a bit of a minus.
My ideal laptop would be one that is highly portable, environmentally friendly, and energy efficient but with a fair bit of number-crunching and graphics processing power. It should not be assembled or manufactured by poorly treated employees either. My final and least-likely-to-be-realized preference is that my ideal laptop would also be one that could be tracked if stolen[2]. It also goes without saying, that my ideal laptop would utilize hardware with open-source drivers so that one would not be stuck with any inferior, proprietary operating systems.
Throwing all of those ingredients into one pot makes for a fairly difficult main course. The question is, which company will possess the techno-culinary expertise to prepare the appetizers?
There has been much more debate and demand for environmentally friendly computing products than someone from an older generation would think[1]. However, many of the Y-Generation were brought up during the 80's when the environmental movements really began to boom and, therefore, have a much more intrinsic concern about environmental impacts.
On the other hand, the anti-theft system (ATS) is still a relatively new concept. I have personally taken it opon myself to design an personal area network (PAN) ATS for valuables such as electronics or cycles, but between my engineering job, my master's education, and now my baby on the way, I no longer have a plethora of free time for dreaming up gadgets and new designs.
If you can suggest a laptop that is currently on the market today that has similar specifications to those below, please let me know.
If you would like to see a company producing laptops with the specifications below, let your voice be heard & submit a comment.
Mechanical Specs:
- 12 or 13" Display, ACPI-compliant, with multi-level dimming capabilities
- Light-weight, aluminum chassis
- Very quiet, as quite as a MacBook
- Overall maximum weight of 3.5 lbs ( without AC adapter)
- Magnetic AC power connector
- Light-weight, biodegradeable, non-plastic casing.
- Dual-Core Processor ~ anywhere from 1 to 2 GHz (frequency stepping is a must)
- 1GB of DDR SDRAM, expandable to perhaps 4GB
- A graphics chip w/ 64 MB of dedicated DDR SDRAM
- 32 GB sold state disk (perhaps this one from Transcend)
- 802.11 a/g Wireless
- 2.1 Bluetooth
- 10/100 Mbit or Gigabit Ethernet
- 4 USB 2.0 connections, with 2 having power distribution capabilities
- s-video (or something similar) for input / output
- audio input / output connections
- Built-in microphone
- Built-in 2 mega pixel camera
- GPS receiver
- Full ACPI Compliance and sleep states for all devices
- Longer battery life ( please, no optical or magnetic drives )
- Biodegradeable, non-plastic casing ( corn-based ?)
- Lead-free chipsets ( possibly free of other toxins as well )
- AC power adapter with auto-off capabilities and magnetic connector
- Built-in RFID chip for easy component identification during recycling
- Built-in biometric sensor (BMS) for secure user authentication (i.e. thumb print)
- Built-in RFID chip, for anti-theft-system (ATS) / tracking
- Built-in GPS receiver, for ATS and user application
- Built-in GPRS data-only transceiver for ATS and user application
- Secure-bus lines (internal PCB layer, covered vias) for ATS, DRM[3], BMS
If you have any suggestions of something that is currently on the market that closely matches these specifications, aside from the OLPC[4], please submit a comment.
Alternatively, if you would like to hire me as an engineer to design such a laptop please let me know.
[ Update: 20071118 ]
Here is some info from the IEEE regarding standards for greener consumer electronic devices.
List of Similar Laptops & Shortcomings
Dell Latitude D430:
If one navigates to the Dell site and selects the small business / notebook links, one would notice that there is a small image that says 'Windows XP Optional'. When the visitor proceeds to customize the notebook, Windows XP is, in fact, non-optional. Dell, take off whatever the price is of Windoze these days and offer an operating system free and / or Linux installation. Then I might consider buying this notebook.
Dell, I do very much respect the step forward by offering solid-state media instead of magnetic storage. Although the $1000 jack in price seems unfounded, especially when Transcend has such excellent deals on a solid state disk at the moment, like the ones here and here. At any rate, if I could purchase this notebook without Windows and without an internal optical drive, then it would be a done deal, and I would just buy the flash disk from Transcend.
Apple MacBook:
I really like the MacBook, although the case material is plastic and I've heard horrible things about the Nazi-esque factories where Apple assembles the iPods in China... of course that hasn't stopped thousands upon thousands of people from buying Apple products in the past. I bought my iPod used ;-)
The MacBook is good because it has a dual-core Intel chip running at 2GHz. The screen-size is also a modest 13", which makes for a very portable notebook computer. A few friends of mine have one of these babies, and I very rarely ever feel the machine get hot, and the fan is as quiet as a mouse. The MacBook has a very decent battery life and also has great power management.
Putting Gentoo Linux on a MacBook is also very possible, but can cause conflicts with the Mac OS X. What I would most likely do, is completely remove the Mac Hard disk, and add a Trancend SATA solid-state-disk of 32 GB in size instead. Then I would have the original Mac disk image available if I ever needed to use it and I could format the original magnetic SATA disk and use it externally. I think that I remember reading a rumor about Apple launching a product targeting at the Japanese market with an SDD and no optical drive. Hopefully that happens soon and they decide to expand to western markets as well.
Since I am attending a university in Germany, I would receive a 10% discount at the Apple.de Educational Store. The student discount in Germany is even more of a deal than that in Canada, after considering taxes.
[1] Some articles about environmentally friendly computing, going as far back as 1998:
Toshiba Satellite 2510, Asus U5, Wal-Mart & Toshiba, OLPC, Consumer Demands
[2] I claim prior art to some of these device specifications going back for several years if a patent lawsuit ever arises.
[3] In full awareness of the current anti-DRM movement, I still feel that artists should be able to protect their works in an open, but still technologically secure manner. My position on DRM is that publically free media should still function on a system that is DRM-compatible, as should DRM-impaired media.
[4] I am in no way knocking the OLPC project, and feel that it's a pioneering endeavor that all manufacturers should strive to match, in terms of energy efficiency. The plastic casing, on the other hand, is a bit of a minus.
Labels:
acpi,
anti-theft,
biometric,
drm,
electronics,
energy,
flash,
laptop,
linux,
olpc,
power,
solid-state-disk,
ssd
20070930
How? .. Who? .. What? ... Hippo
Hi everyone,
It's been a little while since I've written, so I thought I'd post something about this last month which has just come as an amazing and wonderful surprise.
In complete honesty, my very first reaction was that I was thrilled ... although Erin was under the impression that the world was going to end until I worked some more of my magic charm.
Actually, we're both incredibly excicted. Erin's mom was the first one in our respective families to hear, and then I told my dad, and then I told Jacob who is probably my closest friend that has already undergone the transition from 20-somthing-er to fatherhood.
Erin & I both put off telling one of our parents for some time - Erin her dad, and me, my mother - probably out of fear for being scolded. At least I don't have that fear as badly as a certain Jeff Murdock, and in case anyone didn't catch it, yes, I did steal the title of this post from Coupling.
In any event, my mom was completely ecstatic! I was so worried that she would make that wierd Marge Simpson noise when she disapproves of something politely, especially because Erin & I are not even engaged to be married. It's something we both want to put off for a while still, although we've been a pretty healthy couple for ... well... almost 5 years? It does not seem that long to tell you the truth, but I can't imagine spending the rest of my life with to anyone else.
Erin's dad was also really happy. We spoke only briefly over the thanksgiving weekend, but everything was well nevertheless.
In any event, I thought I'd change the tone of this blog for the better!! Not so much ranting about work ;-)
I still haven't told many of my friends, simply because I like the ability to pass on wicked news like this in person. Sometimes the surprise is ruined, especially if you have a Quinlan for a mother because they like to tell everyone on your behalf ( ahem, ahem ). So hopefully none of you guys in Toronto actually read my blog, LOL !!
Now I'm back in Kiel, and the next semester is starting for me. Again, it will be another first since I've made the transition from Informatik into Digital Communications, but I'm really looking forward to be studying engineering again. Some things just feel natural ;-)
This slightly changes the plan I have to take for finishing my master's degree. Ideally, I would like to be in Canada before the baby ( who we affectionately refer to as 'the chick pea') is born and for aproximately a year onward.
Ciao 4 Now
It's been a little while since I've written, so I thought I'd post something about this last month which has just come as an amazing and wonderful surprise.
I am going to be a dad !Yes, you have read the above sentence correctly ... but here it is again, just for clarification:
I am going to be a dad !It came as a complete surprise ( well not completely ) to Erin & I. She found out on the 1st of September as we were on our way back to Montreal from Toronto.
In complete honesty, my very first reaction was that I was thrilled ... although Erin was under the impression that the world was going to end until I worked some more of my magic charm.
Actually, we're both incredibly excicted. Erin's mom was the first one in our respective families to hear, and then I told my dad, and then I told Jacob who is probably my closest friend that has already undergone the transition from 20-somthing-er to fatherhood.
Erin & I both put off telling one of our parents for some time - Erin her dad, and me, my mother - probably out of fear for being scolded. At least I don't have that fear as badly as a certain Jeff Murdock, and in case anyone didn't catch it, yes, I did steal the title of this post from Coupling.
In any event, my mom was completely ecstatic! I was so worried that she would make that wierd Marge Simpson noise when she disapproves of something politely, especially because Erin & I are not even engaged to be married. It's something we both want to put off for a while still, although we've been a pretty healthy couple for ... well... almost 5 years? It does not seem that long to tell you the truth, but I can't imagine spending the rest of my life with to anyone else.
Erin's dad was also really happy. We spoke only briefly over the thanksgiving weekend, but everything was well nevertheless.
In any event, I thought I'd change the tone of this blog for the better!! Not so much ranting about work ;-)
I still haven't told many of my friends, simply because I like the ability to pass on wicked news like this in person. Sometimes the surprise is ruined, especially if you have a Quinlan for a mother because they like to tell everyone on your behalf ( ahem, ahem ). So hopefully none of you guys in Toronto actually read my blog, LOL !!
Now I'm back in Kiel, and the next semester is starting for me. Again, it will be another first since I've made the transition from Informatik into Digital Communications, but I'm really looking forward to be studying engineering again. Some things just feel natural ;-)
This slightly changes the plan I have to take for finishing my master's degree. Ideally, I would like to be in Canada before the baby ( who we affectionately refer to as 'the chick pea') is born and for aproximately a year onward.
Ciao 4 Now
20070808
Montréal: Hacking the Kernel
So I've been back in Canada for slightly longer than a week and I'm working full time for Visible Assets until the end of September.
I've decided to postpone my flight back to Hamburg until the end of September so that I can spend a bit more time with friends and also get a bit more done for work.
Right now, I'm sitting in Montréal at Erin's place. It's been nice to be back - actually, I think I'm suffering less culture shock in Montréal than I would be in Toronto. To tell you the truth, I think mon fronçais went straight down the garbage chute since October, as if German had totally displaced it in my brain. I really think that I'm going to have to work hard at it when I get back to Canada full time, and it would be nice to work towards some sort of bilingual certification or something.
A good friend of mine from the undergrad days, Ed Cote, is in Montréal at a conference presenting some of the work he's done at Queen's, in his master's program. He just finished this past semester (I'm jealous!). Today we're going to be meeting up for a 'cinque à sept', which basically means to have a few drinks at the end of the work day. I'm looking forward to getting out on a patio and having a couple of cold ones, especially in this heat!
For the next month and a half I will be porting much of the code that I've done in user space to kernel space - well, as much as possible, i suppose. Things that I won't be able to convert to kernel space are services and so on.
Particularly, one thing that I'm working on at the moment is a virtual block device that represents tracked / timed connections to the blaster device. What's particularly strange about this, is that I'm hijacking a serial device from within kernel space, albeit with a removeable module.
So far, it's going pretty well and I even have my module initializing the uart, but I've encountered a couple of segfaults. Luckily, I'm testing all of this using Qemu ;-)
Update (2007-08-09): I've managed to fix all segfault issues with serial hijacking by exporting a function init_tty_dev, which is just a wrapper for init_dev, in drivers/char/tty_io.c . Now the uart_driver->tty_driver->tty_struct array will contain a non-NULL pointer to a tty_struct which init_dev initializes. This must always be released with release_tty_dev( struct tty_struct * tty, int idx ) when the module unloads in order to return the refcount.
I've decided to postpone my flight back to Hamburg until the end of September so that I can spend a bit more time with friends and also get a bit more done for work.
Right now, I'm sitting in Montréal at Erin's place. It's been nice to be back - actually, I think I'm suffering less culture shock in Montréal than I would be in Toronto. To tell you the truth, I think mon fronçais went straight down the garbage chute since October, as if German had totally displaced it in my brain. I really think that I'm going to have to work hard at it when I get back to Canada full time, and it would be nice to work towards some sort of bilingual certification or something.
A good friend of mine from the undergrad days, Ed Cote, is in Montréal at a conference presenting some of the work he's done at Queen's, in his master's program. He just finished this past semester (I'm jealous!). Today we're going to be meeting up for a 'cinque à sept', which basically means to have a few drinks at the end of the work day. I'm looking forward to getting out on a patio and having a couple of cold ones, especially in this heat!
For the next month and a half I will be porting much of the code that I've done in user space to kernel space - well, as much as possible, i suppose. Things that I won't be able to convert to kernel space are services and so on.
Particularly, one thing that I'm working on at the moment is a virtual block device that represents tracked / timed connections to the blaster device. What's particularly strange about this, is that I'm hijacking a serial device from within kernel space, albeit with a removeable module.
So far, it's going pretty well and I even have my module initializing the uart, but I've encountered a couple of segfaults. Luckily, I'm testing all of this using Qemu ;-)
Update (2007-08-09): I've managed to fix all segfault issues with serial hijacking by exporting a function init_tty_dev, which is just a wrapper for init_dev, in drivers/char/tty_io.c . Now the uart_driver->tty_driver->tty_struct array will contain a non-NULL pointer to a tty_struct which init_dev initializes. This must always be released with release_tty_dev( struct tty_struct * tty, int idx ) when the module unloads in order to return the refcount.
Labels:
2.6 kernel,
blaster,
canada,
erin,
friends,
linux,
montreal,
serial,
visible assets
20070720
Done Exams!
I've finished my exams for the 2007 summer semester here in Kiel. Both of them went pretty well. The first was Computer Vision II: Stochastic and Topological Approaches to Image Processing, and the second one was Neuroinformatik. CVII went pretty well, although I was a bit pissed about the last question. Neuro went better actually, although I like CV a bit more. CVII is actually a fairly hard course, not as hard as CVI, but still.
I had a beer, as per tradition, as soon as I got out of the last exam, and then on the walk home, the air smelled fresher, the sun felt brighter, all of the music on my iPod seemed to fit perfectly with everything - a good sign ;-) Actually, having the ability to take time and walk home was a big change all by itself ;-) Usually I have no time what so ever, and am racing to catch the next bus too hand something in, or meet up with my study groups.
Now I can focus on my work a bit more, and get a couple of big projects out of the way. I'm excited to actually be able to concentrate on one 'job' for the summer, getting new toys to play with (i.e. embedded devices), and doing some electrical design / hacking too! I'm also planning on hacking a couple of open source apps like Banshee, iPodLinux, and writing more interesting code for my various embedded devices.
Finally, I can design some image processing hardware too, once I learn about the PCI bus and interface with the new TS-7800 boards ;-) Since I tore apart my old crappy 1.3 megapixel digital camera, I'm also hoping to put linux on it.
As of next semester I'm going to be registered in the M.Sc. in Digital Communications, which is taught in english, as opposed to Informatik, which is taught in german. That should lighten my load considerably, but also provide the same type of challenges that I'm used to in areas such as DSP, communication theory, analog & digital circuit design, and so on.
Digital Communications is an engineering program, which I like better. Not to say that I didn't like all of the experiences I had in Informatik - Professor Sommer's lectures are exactly what I was looking for by travelling halfway across the world, and I can't even put a price on some of the things I learned studying with him. The things that I have yet to develop will likely be some of the most advanced in my life.
I've also learned some very interesting things in CV, Neuro, Numerische Math., and yes, even Mathematical Logic!! Unfortunately, I have to give up my office, which is a bummer, but the change to Digital Communication will surely have plenty of benefits to make up for it ;-)
The best and most important part everything now, though, is enjoying the summer!!! I'm really looking forward to meeting up with all of my friends in Canada, seeing all of my family, and of course Erin too :) woohoo!
I had a beer, as per tradition, as soon as I got out of the last exam, and then on the walk home, the air smelled fresher, the sun felt brighter, all of the music on my iPod seemed to fit perfectly with everything - a good sign ;-) Actually, having the ability to take time and walk home was a big change all by itself ;-) Usually I have no time what so ever, and am racing to catch the next bus too hand something in, or meet up with my study groups.
I'm looking forward to coming home ____SO____ much!!!
Now I can focus on my work a bit more, and get a couple of big projects out of the way. I'm excited to actually be able to concentrate on one 'job' for the summer, getting new toys to play with (i.e. embedded devices), and doing some electrical design / hacking too! I'm also planning on hacking a couple of open source apps like Banshee, iPodLinux, and writing more interesting code for my various embedded devices.
Finally, I can design some image processing hardware too, once I learn about the PCI bus and interface with the new TS-7800 boards ;-) Since I tore apart my old crappy 1.3 megapixel digital camera, I'm also hoping to put linux on it.
As of next semester I'm going to be registered in the M.Sc. in Digital Communications, which is taught in english, as opposed to Informatik, which is taught in german. That should lighten my load considerably, but also provide the same type of challenges that I'm used to in areas such as DSP, communication theory, analog & digital circuit design, and so on.
Digital Communications is an engineering program, which I like better. Not to say that I didn't like all of the experiences I had in Informatik - Professor Sommer's lectures are exactly what I was looking for by travelling halfway across the world, and I can't even put a price on some of the things I learned studying with him. The things that I have yet to develop will likely be some of the most advanced in my life.
I've also learned some very interesting things in CV, Neuro, Numerische Math., and yes, even Mathematical Logic!! Unfortunately, I have to give up my office, which is a bummer, but the change to Digital Communication will surely have plenty of benefits to make up for it ;-)
The best and most important part everything now, though, is enjoying the summer!!! I'm really looking forward to meeting up with all of my friends in Canada, seeing all of my family, and of course Erin too :) woohoo!
20070612
RPM & YUM - and why they still suck
I used to use Redhat Linux quite a long time ago - maybe in 1996 - but I was soon after persuaded to switch to Slackware Linux. Why? Redhat's package management system, RPM, is a piece of crap.
What I used to hate about RPM a long, long, time ago:
Now though, I feel as though I can blame them. The complaints that I have, are still basically the same. After over 10 years, there has been no evolution with RPM aside from this lovely thing called yum which sorts out dependencies and retrieves files as necessary.
I'm currently packaging the sun jdk, naturally without source code so that i comply with Sun's BCL or whatever. When I built this RPM and tried to install it with RPM, i got an error saying:
After some amount of frustration and searching incoherent sites for documentation on .spec file creation (required for building RPM's) I found the following option, which I thought was like the heavens opening up. I now quote from http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html, which seems to be as authoritative a site on .spec file creation as any.
After inserting this magical line into my .spec file, and packaging the file without any issues, even installing the rpm file, without any issues, yum still provides me with the fantastic error code above, even when the rpm itself says that it has no dependencies.
Go team!!
What I used to hate about RPM a long, long, time ago:
- "Dependency Hell", as it is so dearly termed by many Redhat users, is when one is unable to install a package because of the exponential number of dependency packages that are necessary. The simplest way to avoid this is with the "nodep" option, but then missing dependencies become horribly difficult to trace.
- The inability to optimize or select which dependencies (--configure options) will actually be present on your system. For example, --without-alsa / --with-oss . The simple answer is - support everything, except what Redhat doesn't want to, and make the dependency tree static. This could easily be worked around by compiling all of your own sources from scratch and populating your own RPM repository, but then that defeats the purpose of RPM in the first place, unless you're intending on releasing a new distro or creating a kickstart script so that the Redhat install CD would pull rpm's from a specific location.
Now though, I feel as though I can blame them. The complaints that I have, are still basically the same. After over 10 years, there has been no evolution with RPM aside from this lovely thing called yum which sorts out dependencies and retrieves files as necessary.
I'm currently packaging the sun jdk, naturally without source code so that i comply with Sun's BCL or whatever. When I built this RPM and tried to install it with RPM, i got an error saying:
Error: Missing Dependency: libodbc.so is needed by package jdk
Error: Missing Dependency: libodbcinst.so is needed by package jdk
After some amount of frustration and searching incoherent sites for documentation on .spec file creation (required for building RPM's) I found the following option, which I thought was like the heavens opening up. I now quote from http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html, which seems to be as authoritative a site on .spec file creation as any.
The autoreqprov, autoreq, and autoprov Tags — Disable Automatic Dependency Processing
There may be times when RPM's automatic dependency processing is not desired. In these cases, the autoreqprov, autoreq, and autoprov tags may be used to disable it. This tag takes a yes/no or 0/1 value. For example, to disable automatic dependency processing, the following line may be used:
AutoReqProv: no
The autoreq and autoprov tags can be used to disable automatic processing of requirements or "provides" only, respectively.
Go team!!
20070531
My experiences with Qemu - Part II
So I've managed to get this far with Qemu:
It's looking fairly bright now ;-) All I have to do is figure out why (this has absolutely no real reason) Linux would start up as someone who isn't the superuser
... hmmf..
Weeee !!! I just added an init= option to the 'append' section of Qemu!!! sahweet!!! She's ready to roll ;-)
The option to enable 16-bit UID system calls must be selected as well, otherwise root (0) will get mapped to 0xffffffff (-1 in 2's compliment == -EPERM).
(qemu) Uncompressing Linux......................................................... done, booting the kernel.
Linux version 2.6.20.6 (cfriedt@sith) (gcc version 3.4.4) #35 Thu May 31 21:57:50 CEST 2007
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
Machine: ARM-Versatile PB
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-through cache
CPU0: I cache: 4096 bytes, associativity 4, 32 byte lines, 32 sets
CPU0: D cache: 65536 bytes, associativity 4, 32 byte lines, 512 sets
Built 1 zonelists. Total pages: 65024
Kernel command line: root=/dev/nfs nfsroot=192.168.7.1:/usr/gentoo_root,uid=0,gid=0,rsize=32768,wsize=32768,timeo=14,nfsvers=3,rw rw ip=192.168.7.2:192.168.7.1:192.168.7.1:255.255.255.0:qemu console=ttyAMA0,115200
PID hash table entries: 1024 (order: 10, 4096 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 258048KB available (1516K code, 174K data, 100K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
PCI core found (slot 11)
PCI: bus0: Fast back to back transfers disabled
PCI map irq: slot 0, pin 1, devslot 12, irq: 27
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 8192 bind 4096)
TCP reno registered
NetWinder Floating Point Emulator V0.97 (double precision)
CLCD: unknown LCD panel ID 0x00001000, using VGA
CLCD: Versatile hardware, VGA display
Clock CLCDCLK: setting VCO reg params: S=1 R=99 V=98
Console: switching to colour frame buffer device 80x30
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 12) is a AMBA/PL011
dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 13) is a AMBA/PL011
dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 14) is a AMBA/PL011
fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 38) is a AMBA/PL011
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre
eth0: SMC91C11xFD (rev 1) at d080a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mice: PS/2 mouse device common for all mice
TCP cubic registered
ieee80211: 802.11 data/management/control stack, git-1.1.13
ieee80211: Copyright (C) 2004-2005 Intel Corporation
input: AT Raw Set 2 keyboard as /class/input/input0
eth0: link up
input: ImExPS/2 Generic Explorer Mouse as /class/input/input1
IP-Config: Complete:
device=eth0, addr=192.168.7.2, mask=255.255.255.0, gw=192.168.7.1,
host=qemu, domain=, nis-domain=(none),
bootserver=192.168.7.1, rootserver=192.168.7.1, rootpath=
Root-NFS: unknown option: uid=0
Looking up port of RPC 100003/2 on 192.168.7.1
Looking up port of RPC 100005/1 on 192.168.7.1
VFS: Mounted root (nfs filesystem).
Freeing init memory: 100K
init: must be superuser.
Kernel panic - not syncing: Attempted to kill init!
It's looking fairly bright now ;-) All I have to do is figure out why (this has absolutely no real reason) Linux would start up as someone who isn't the superuser
... hmmf..
Weeee !!! I just added an init= option to the 'append' section of Qemu!!! sahweet!!! She's ready to roll ;-)
The option to enable 16-bit UID system calls must be selected as well, otherwise root (0) will get mapped to 0xffffffff (-1 in 2's compliment == -EPERM).
Labels:
arm,
gnu classpath,
jamvm,
java,
nfs root,
qemu,
swap,
ts-7000,
usb-storage,
work
My experiences with Qemu - part I ... was "Building GNU Classpath for the ARM (Cont'd)"
Ok, so it looks like the external USB hard disk idea was not as good as I was hoping. The problem is that the board just has too little RAM !!! (to compile such a package as the GNU Classpath)
What happens in either the NFS case or the USB HD case, is that eventually the swapd and the jikes process enter this vicious cycle, where jikes caches the first half of what it needs to compile, swaps it out, and then caches the second half of what it needs to compile - clearly if it doesn't have 100% of the things it needs to compile in RAM (this occurred even without using -pipe) then it will enter an infinite loop (it would be nice if that was detected by jikes - i think that's CRC32 or something?).
In any event, with the suggestion that my boss Dave gave me, I'm now working on emulating an appropriate kernel, and using the appropriate uclibc-softfloat userspace for the ARM, using Qemu. This should solve all of my compilation woes because I would then be able to have enough actual physical RAM to compile everything natively. I believe that the VersatilePB platform available in Qemu has a limit of 256MB RAM though. That should be enough (I assume).
Aside from the target having a different name, the main other differences between the TS-7xxx boards and the Versatile PB are:
http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC53
Now, a brief overview of the differences and what they will mean.
I'll keep you posted!
What happens in either the NFS case or the USB HD case, is that eventually the swapd and the jikes process enter this vicious cycle, where jikes caches the first half of what it needs to compile, swaps it out, and then caches the second half of what it needs to compile - clearly if it doesn't have 100% of the things it needs to compile in RAM (this occurred even without using -pipe) then it will enter an infinite loop (it would be nice if that was detected by jikes - i think that's CRC32 or something?).
In any event, with the suggestion that my boss Dave gave me, I'm now working on emulating an appropriate kernel, and using the appropriate uclibc-softfloat userspace for the ARM, using Qemu. This should solve all of my compilation woes because I would then be able to have enough actual physical RAM to compile everything natively. I believe that the VersatilePB platform available in Qemu has a limit of 256MB RAM though. That should be enough (I assume).
Aside from the target having a different name, the main other differences between the TS-7xxx boards and the Versatile PB are:
- The Versatile PB uses an ARM926T chip instead of an ARM920T
- The Versatile PB supports an SMC 91c111 ethernet device instead of the ep93xx device.
- The Versatile PB names its serial devices /dev/ttyAMA[0-n] instead of /dev/ttyAM[0-n]
http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC53
Now, a brief overview of the differences and what they will mean.
- The ARM926T chip vs the ARM920T chip. To quote from the linux kernel help page:
This is a variant of the ARM920. It has slightly different instruction sequences for cache and TLB operations. Curiously, there is no documentation on it at the ARM corporate website [EDIT: There is now].
Say Y if you want support for the ARM926T processor. Otherwise, say N.
I tried compiling for the Versatile PB without ARM926T support and that didn't even compile - it would be nice to have the ARM920T as an option here too. Anyways, that's not really a problem. As long as I can run Qemu with an ARM chip emulated and use an NFS root to compile, that's all that matters. - eth0 is eth0 ... I doubt it matters what hardware is underlying for my purposes.
- Some scripts and applications will have to be aware of the difference of platform, if i end up coding scripts and things of the like on the emulator. I just as soon wouldn't, but it could be quite beneficial. In any event, that's not a real issue, it's as simple as replacing a string from my perspective. The cool part about that is that we could end up simulating our hardware, including the EM noise model - cool ;-)
I'll keep you posted!
Labels:
arm,
gnu classpath,
jamvm,
java,
nfs root,
qemu,
swap,
ts-7000,
usb-storage,
work
20070527
Building GNU Classpath for the ARM (Cont'd ...)
I spontaneously decided to copy over the entire Gentoo stage3 filesystem to my external hard-disk, which is recognized as a general USB storage device under linux. NFS was taking waaaaay too long for this compilation. I had checked everything out with top, under linux, played with the swappiness parameter in /proc/sys/vm, and also attempted to renice the jikes processes' priority to a whopping 17! Non of those had a major effect on the cpu-usage of the jikes process. The highest that I'd seen it was 10% for a whole 2 seconds.
The problem lies with NFS root and the overhead associate not only with RPC, but also the fact that my swap was also on the NFS root, effectively squaring the complexity of the overhead. With my Gentoo stage 3 root filesystem located on a locally attached usb storage device, along with the swap file, the speed of compilation increased dramatically! The jikes process has just started and its already achieved 50% of the cpu time! That's up from an average of maybe 3% with the tweaking I mentioned previously.
I'd better mention this to Dave as well, so that he's not stuck ever repeating my stupid mistake of compiling on an NFS root!
The problem lies with NFS root and the overhead associate not only with RPC, but also the fact that my swap was also on the NFS root, effectively squaring the complexity of the overhead. With my Gentoo stage 3 root filesystem located on a locally attached usb storage device, along with the swap file, the speed of compilation increased dramatically! The jikes process has just started and its already achieved 50% of the cpu time! That's up from an average of maybe 3% with the tweaking I mentioned previously.
I'd better mention this to Dave as well, so that he's not stuck ever repeating my stupid mistake of compiling on an NFS root!
Labels:
arm,
gnu classpath,
jamvm,
java,
nfs root,
swap,
ts-7000,
usb-storage,
work
Building the GNU Classpath for ARM
My preferred method now for building packages on the TS-7xxx series of single board computers (SBC's) is to use the gentoo stage3 filesystem as an NFS root, which comes with a C/C++ compiler and most of the necessary utilities. It is much slower, but this way I don't have to work around any strange cross-compiling issues or annoying pkgconfig native-executable requirements which tend to pollute configure scripts for most higher level applications.
The target I'm building for is an ARM 920T processor from cirrus - the EP93xx series of processors - which have only recently acquired a decent level of support in the Linux kernel. Also, as of gcc-4.1.1 the Thumb instruction set is supported as well, although I don't really use it. The ARM EABI is quite useful for those that require floating point functionality, but most of what my company does requires integer math for the most part. For that reason, the stage3 filesystem I use for my NFS root is the arm-softfloat-linux-uclibc stage3 filesystem located here:
http://adelie.polymtl.ca/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2
However, please feel free to select any Gentoo mirror from this site:
http://www.gentoo.org/main/en/mirrors.xml
I've posted several sets of instructions for those that would also like to use the 2.6 kernel I've compiled for the TS-7xxx boards as well. If you're interested, please see the mailing list archives:
http://tech.groups.yahoo.com/group/ts-7000/message/6574
You can also download the kernel directly from here:
http://vaiprime.visibleassets.com/~cfriedt/zImage-2.6
and the config, here:
http://vaiprime.visibleassets.com/~cfriedt/linux-2.6.20.6.config
I recently changed my kernel configuration to include swap functionality, specifically because compiling the gnu classpath for the arm used over 3 times as much memory than was available on the board.
The tricky part though, is that Linux doesn't play very well with swap files on an NFS filesystem. But after doing a bit of googling, I found that there is 1 commonly used work-around.
In the above section, I've created a 256MB swap file for the linux kernel, and it is accessed by the kernel through a loop device, which offers some apparently greater level of control than simply using swapon /mnt/swapfile.
I'm still compiling the gnu classpath, and I'm not sure exactly how far along the process is, but here are some of the memory usage figures:
I'll continue to update this blog post as the compilation proceeds, but it's already been going for 2 hours steadily...
The target I'm building for is an ARM 920T processor from cirrus - the EP93xx series of processors - which have only recently acquired a decent level of support in the Linux kernel. Also, as of gcc-4.1.1 the Thumb instruction set is supported as well, although I don't really use it. The ARM EABI is quite useful for those that require floating point functionality, but most of what my company does requires integer math for the most part. For that reason, the stage3 filesystem I use for my NFS root is the arm-softfloat-linux-uclibc stage3 filesystem located here:
http://adelie.polymtl.ca/experimental/arm/embedded/stages/stage3-arm-uclibc-softfloat-20050811.tar.bz2
However, please feel free to select any Gentoo mirror from this site:
http://www.gentoo.org/main/en/mirrors.xml
I've posted several sets of instructions for those that would also like to use the 2.6 kernel I've compiled for the TS-7xxx boards as well. If you're interested, please see the mailing list archives:
http://tech.groups.yahoo.com/group/ts-7000/message/6574
You can also download the kernel directly from here:
http://vaiprime.visibleassets.com/~cfriedt/zImage-2.6
and the config, here:
http://vaiprime.visibleassets.com/~cfriedt/linux-2.6.20.6.config
I recently changed my kernel configuration to include swap functionality, specifically because compiling the gnu classpath for the arm used over 3 times as much memory than was available on the board.
The tricky part though, is that Linux doesn't play very well with swap files on an NFS filesystem. But after doing a bit of googling, I found that there is 1 commonly used work-around.
# dd if=/dev/zero of=/mnt/swapfile bs=1024 count=$((1024*256))
# losetup /dev/loop0 /mnt/swapfile
# mkswap /dev/loop0
# swapon /dev/loop0
In the above section, I've created a 256MB swap file for the linux kernel, and it is accessed by the kernel through a loop device, which offers some apparently greater level of control than simply using swapon /mnt/swapfile.
I'm still compiling the gnu classpath, and I'm not sure exactly how far along the process is, but here are some of the memory usage figures:
=========================
MemTotal: 62192 kB
MemFree: 2728 kB
SwapCached: 12172 kB
SwapTotal: 262136 kB
SwapFree: 127772 kB
=========================
I'll continue to update this blog post as the compilation proceeds, but it's already been going for 2 hours steadily...
Subscribe to:
Posts (Atom)