At work, we have a bit of a vested interest in the Puppet and Facter packages
that are in Debian, because we ultimately consume them in Ubuntu.
We noticed that what was in Debian unstable was lagging a bit behind what
was released upstream, and when one of my co-workers tried getting in
contact with the Debian developers that were maintaining the Puppet package
and got no response, I got involved.
I got in touch with Micah Anderson and got myself and Nigel Kersten added to the Alioth project for
Puppet.
Despite Jamie Wilkinson being
listed as the maintainer of the facter package in Debian, he
claimed this was news to him, and Matt Palmer, who was listed
as an uploader, didn't really claim much knowledge of maintaining the
package either, so we took that as blessing to take over that package as
well.
This is where the fun begins.
I've been meaning to try out Git ever
since Debconf 7, where all the
cool kids were using it and raving about it.
I've been meaning to make the Debian DHCP package
collaboratively-maintained, and use Git for the revision control, but I
haven't quite gotten off my good intentions and done it yet. Part of the
problem is not knowing exactly what workflow I should use, and suffering
from paralysis by analysis, reluctant to experiment, because I don't want to
go down the wrong path.
Anyway, this is about Puppet, not DHCP. The Puppet package, as it turns out,
is already
maintained in Git on Alioth, so the problem here was more one of
figuring out what the current workflow was, and trying to follow it.
This is where Nigel came in. Conveniently, the upstream Puppet development
is done in Git also, and Nigel is a contributor to Puppet upstream, so he
had some Git-fu. So between the instructions
on how to get started with Git on Alioth and what he knew, we could
start fumbling around.
It seems like the Alioth Git repository was also tracking the upstream
Puppet repository, as there were commits in the Alioth one by Luke Kanies,
and we didn't really imagine that he was doing Debian-specific stuff.
Here's what we ended up doing to try and get what was in the Alioth
repository up to the upstream version 0.24.8 of Puppet:
git clone ssh://apollock@git.debian.org/git/pkg-puppet/puppet.gitThis part was fairly straight forward. Clone what's in Alioth locally.
git remote add reductive git://reductivelabs.com/puppet git remote update git fetch --tags reductiveNext, we added a remote branch that tracked upstream. We called it "reductive", and we updated it. The bit that took some fiddling with was fetching the tags. Nigel later figured out that tags are inherently private to a repository, and normally stay that way. So if I have a local clone of say the upstream Puppet repository, I can tag it to my heart's content, and normally those tags would stay in my local repository, because they're probably only meaningful to me.
git checkout -b upstream/0.24.8 0.24.8This bit took a bit of work to arrive at as well. What we wanted to do was create a new branch called upstream/0.24.8, which was at what was tagged 0.24.8 in the reductive repository. Nigel pondered what would happen if you already had a tag or a branch called "0.24.8" before you added the remote repository. This is also why we had to fetch the tags from the remote repository, so we had something to check out.
git checkout master git merge upstream/0.24.8Next, we switched back to the master branch and merged the contents of our local upstream/0.24.8 branch that we just created. This now got the Puppet source in the master branch up to what was released as version 0.24.8. (and this is better than just running uupdate?) We did some fiddling with the debian/control file and debian/changelog and fixed up a few things that Lintian was bitching about, and were done. I'd set up a sid chroot with cowdancer previously, and had to do some faffing around with git-buildpackage to convince it to use pbuilder. I ended up using
git-buildpackage --git-builder="pdebuild --debbuildopts '-i\.git -I.git' --basepath /var/cache/pbuilder/base-unstable.cow"So now we've got most of what we want to ship checked into Git on Alioth. I have no idea if we've done it "right", I suspect we may have done something wrong by operating on the master branch. Looking at the revision history in the Git repository on Alioth, it looks like previously things have been done a few different ways. I certainly want to write up a definitive workflow once we've figured one out. We haven't uploaded the new package to unstable yet, because we're still trying to give it a modicum of testing, and we'd like to sort out the Facter package as well. The Facter package was a more greenfield exercise, as while there was already a Git repository on Alioth for it, it was empty. So Nigel had to do some futzing around to get it checked in the right way to make git-buildpackage want to build it. He did this by himself, so I'm not sure exactly what he did. I've since discovered that it's probably lacking some dependencies it needs, so that'll need to get fixed before it gets uploaded. I look forward to reading blog posts from the smart people who actually know how to use Git properly, telling me how we should have done it. I'm still very interested in coming up with a proper workflow for preparing packages and committing the changes, and for doing code review.
apt_pkg.GetCache().Packages. I defined the slots tp_getattro and tp_methods. In Python 3.1, tp_getattro seems to be ignored.
If you want to help,
sed and regular expressions:
Host *+*
ProxyCommand ssh $(echo %h sed 's/+[^+]*$//;/+/! s/%%/@/;s/:/ -p / ;s/\([^+%%]*\)%%\([^+]*\)$/\2 -l \1/ ) PATH=.:\$PATH nc -w1 $(echo %h sed s/^.*+//;/:/!s/$/ %p/;s/:/ / )
The syntax you can use to connect through jump hosts is the following:
ssh login1%host1:port1+login2%host2:port2+host3:port3 -l login3
We ll see further down why we can t put a login for the final destination host. Or if you want to skip the boring implementation details, you can also skip to the end, where a slightly more compact version lies: while writing this post, I got some optimization ideas.
Let me try to split the sed syntax to make it a little more understandable:
The seconds/+[^+]*$//;# Remove all characters starting from the last + in the string (i.e. keep the n - 1 first hops)
/+/!# If the string doesn t contain a + after the previous command (i.e. there is only one hop remaining), do the following, otherwise, skip until the closing curly brace
s/%%/@/;# Replace % with @ (% is doubled because of theProxyCommand)
s/:/ -p /# Replace : with -p . Combined with the previous command, we rewrite login%host:port as login@host -p port
;
s/\([^+%%]*\)%%\([^+]*\)$/\2 -l \1/# Rewrite hop1+hop2+login%lasthop as hop1+hop2+lasthop -l login
sed goes like this:
Let s see what thes/^.*+//;# Remove everything up to the last occurrence of + in the string (i.e. only keep the last hop)
/:/!# If there is no : in the string, do the following, otherwise, skip the next statement
s/$/ %p/;# Add %p at the end of the line
s/:/ /# Replace : with . These last three instructions prepare a host port combination for use withnc.
ProxyCommand looks like for some examples, skipping PATH setting and nc option for better readability:
host1+host2ssh host1 nc host2 %plogin1%host1+host2:port2ssh login1@host1 nc host2 port2login1%host1:port1+host2:port2ssh login1@host1 -p port1 nc host2 port2ssh process that runs the ProxyCommand and will actually talk to the remote host won t have any knowledge of it.
From the above examples, it also appears obvious why we replace login%host:port with login@host -p port : so that the ssh command in the ProxyCommand gets the proper arguments for login and port. Note we could also replace with host -p port -l login for the same effect.
With even more hops, this is what happens:
host1+host2+host3ssh host1+host2 nc host3 %plogin1%host1:port1+host2:port2+host3ssh login1%host1:port1+host2:port2 nc host3 %pProxyCommands will trigger another ProxyCommand quite looking like our first few examples.
In the first hops, if we d just replace all % with @ , in cases where logins are given everywhere, we d end up with a ProxyCommand like the following:
ssh login%host1+login%host2 nc host3 %p
As we saw above, we can t use a login on the last hop, which means this ProxyCommand wouldn t work as expected and is why we have to rewrite login1%host1+login2%hop2 as login%host1+host2 -l login2 with the last instruction in the first sed.
In the end, this is what happens:
ProxyCommand ssh login1%host1:port1+host2 -p port2 -l login2 would itself have ssh login1@host1 -p port1 nc host2 %p as ProxyCommand, in which %p would be replaced by port2, given as argument to -p.
Based on this and with further small optimizations, we can slightly shorten our ProxyCommand to the following :
Host *+*
ProxyCommand ssh $(echo %h sed 's/+[^+]*$//;s/\([^+%%]*\)%%\([^+]*\)$/\2 -l \1/;s/:/ -p / ) PATH=.:\$PATH nc -w1 $(echo %h sed s/^.*+//;/:/!s/$/ %p/;s/:/ / )
sed instructions decryption is left as an exercise to the reader ;).
Update : modified the shortened version to fix the issue spotted in the comments.
Hmm, this is a little story of how to break Xorg in Sid and then use Squeeze to fix it.
Yeah, proprietary software is bad, but let's at least install it the Debian way. The following walkthrough assumes Debian lenny.
Install some prerequisites:
$ sudo apt-get install mysql-server-5.0 apache2-mpm-prefork libapache2-mod-php5 php5-mysql php5-curl php-pear mono-gmcs php5-imap curl dh-make-php dpkg-dev fakeroot build-essential cdbs php-http-request php-mail php-net-smtp php-db php-auth
Download and extract FogBugz:
$ cp ~/Downloads/fogbugz-setup-php-6.1.44.tar.gz . $ tar xvfz fogbugz-setup-php-6.1.44.tar.gz $ cd fogbugz
If you do not wish to install FogBugz to /opt/fogbugz, modify INSTALL_DIR at the top of install.sh to point to your intended target (e.g. /srv/bugs.example.com).
Create Debian packages of the missing PEAR libraries. For some reason, the php-mail-mime package in lenny is not recognised by FogBugz's install.sh, so we create a replacement.
#!/bin/sh set -e for PEAR_PKG in Auth_SASL HTTP_Client Mail_Mime XML_Tree do PKG_TEMP=$(mktemp -d) cd $ PKG_TEMP pear download $ PEAR_PKG dh-make-pear $ PEAR_PKG *.tgz cd $(find -mindepth 1 -type d head -n1) dpkg-buildpackage -uc -us -rfakeroot sudo dpkg -i ../*.deb rm -rf $ PKG_TEMP done
$ sudo ./install.sh /***************************************\ * FogBugz 6 Setup \***************************************/ -- Checking for required tools + found mono 1.9.1 [..]
FogBugz will offer to mangle your Apache configuration. Choose no and run the following, replacing /srv/bugs.example.com where appropriate:
$ sudo ln -s /srv/bugs.example.com/Accessories/fogbugz.conf /etc/apache2/sites-available/fogbugz $ sudo a2ensite fogbugz
FogBugz will then offer to mangle your PHP configuration. Choose yes; but move the last handful of lines from (e.g. /etc/php5/apache2) into /etc/conf.d/fogbugz.ini.
After restarting Apache, you should be able to visit http://bugs.example.com/fogbugz/install1.php to continue installation.
On first run, FogBugz will "warn" about the lack of missing eAccelerator, a PHP JIT. Unfortunately, whilst eAccelerator is "open-source", useful distribution of it is illegal. Alternatives available in lenny would include php-apc and php-xcache.
I finally more or less completed my switch to KDE4. Thanks the great great KDE maintenance team we have.
Simultaneously, X.org packages were updated so possible problems may have ben triggerred by it more than KDE, though.
At first glance, this new KDE is nice and has great improvements but generally speaking painfully slow..:-)
So, I began deactivating again all visual effects so that my poor old Dell X1 survives the upgrade.
I was also greatly annoyed by losing the "Terminal sessions" which I was very actively using with Konsole. No more "Terminal Sessions" menu in my task bar to connect to various hosts over the network. Bleh. I have to redo everything with Konsole's "profiles".
Also sucking a lot is the default setting for fonts in Konsole (antialiased fonts). It makes scrolling painfully slooooooow. I just deactivated this and it's much much much better.
I also lost my old mail notification utility (Korn). It is still working but having it running leaves a kio_mbox process eating all my CPU. Actually, korn is still something from KDE3, so I might expect it to be rebuilt for KDE4, hopefully. I never found anything as good as it in the gazillion of mail notification utilities we have. Maybe my dear Lazyweb will help.
I'm still left with weird keyboard behaviour which is hard to identify. Apparently the delay before key repetition starts when one leaves a finger on a key has changed in some way and despite my attempts to restore this in the adequate KDE thing, it doesn't change that much. I suspect some weird interaction with X.org stuff. Such "minor" details are very annoying as they interfere with year of (bad) typing habits.
In general, as a very old KDE user (I adopted it back in 2001 or so because of Kbabel), I'm somewhat happy with that upgrade but it will take time to be used to all the new concepts (ah, these "Plasmoids" thing...) and also restore the overall speed of my machine...:-)
Going for a run--or a race--almost always meant grabbing the GPS and
often also meant setting a target pace and distance. For the last four and a
half years, this was measured by a Garmin Forerunner
201. That's the large rectangular model in the original "brick" form factor.
I've come to love the device. Training is great because the distance log, as
well as the pacing, keeps you honest. Racing is probably better because it
helps a lot with the pacing (but then I also had PRs in race where I had
forgotten the GPS at home). But there is a downside. This model sometimes
takes forever to find tracking, and has interference / weak signal problems
when it is cloudy or moist. But worst of all, it just bonks out in the 'urban
jungle' downtown where it drops signals too easily. And now after all these
years the display had some minor damage, the strap didn't really hold
anymore, and it was generally time for something new. On Tuesday it even lost
a quarter mile when we were going for a short but really fast three miler.
But then a few days prior I had followed fellow Debian
marathoner Christian and used my birthday at the end of this month (as
well as the upcoming Boston
Marathon) as an excuse for conspicuous comsumption. After some price
comparison, I ordered a factory reconditioned Garmin Forerunner 405 from this web discounter at a nice rebate to
the regular price. It arrived this afternoon, seemingly shining new and I
have been fiddling with it for the last little while.
This device features wireless data transfer to a usbstick. This meant
booting the laptop in windoze for the first time in years to load the 'client
software' after which data transfer proceeded. The Garmin Connect site has very slick
presentation and aggregation of the data. The trouble is of course how to
get the data there when running Linux... Christian had mentioned the garmin-forerunner-tools
package. Unfortunately, this seems to really be written for the Forerunner
305 models as it doesn't see the device at all. Some more googling lead to
this
page and the gant
tarball. All still fairly raw, but with some prodding in the settings of
the 405 ('pairing' set to 'on', 'force send' set to 'yes'; which may have to be
reset each time ?) I got my two xml files off the gps watch. Yay. We'll see
what mode I will settle one. With the 201 and its ancient serial port, I
basically just dropped the run and training histories which their fairly
limited data collections.
Last but not least, fellow Oak Park runner Peter Sagal had a humorous
Runner's World column on the whole GPS geekyness. If he'd only known how
to pair it with programming geekyness...
While I did not think I would continue hacking on VoiDroid after achieving a semi-broken proof-of-concept implementation, it seems that I can t get out of it easily :-). I spent today trying to implement a solution which would allow the native C++ code to call into Java - for example, if we have a call in progress, and want to update the call status displayed to the user when it changes. The JNI library has some native callbacks which are getting called on call state changes, but getting the information to Java turned out to be a quite an experience, which, I thought, would be amusing to document, and, hopefully, save someone some quality bang-head-on-desk time.
1. Some of the threads calling native callbacks were initiated in Java (and thus known to JVM), and some where not, they were started in the native code. As JVM did not know anything about them, JNI calls would fail without too much explanation. Eventually I figured that out, and started attaching them as appropriate (JNI provides facilities for that).
2. Even after attaching, I could not resolve references to my classes from the native code, until I found a mysterious line in JNI docs: When a thread is attached to the VM, the context class loader is the bootstrap loader.. Basically, it means that when you attach a native thread, it is only capable of resolving built-in Java classes.
3. I later found a reference to a technique, suggesting to cache a good classloader from a Java-initiated thread, and later set the classloader for the attached thread to it. I implemented that, only to find out that Android s JVM is not your regular JVM, so things are slightly different here, and this technique does not work.
4. Luckily, there is an incredibly useful post describing the problem, and suggesting a workaround: caching an instance of needed class globally in native code, after calling NewGlobalRef on it, to avoid garbage collection on exit from a native function. I did that, however I only had access to the class, and Android JNI only supports calling NewGlobalRef on an object, so I had to create a dummy object in the native code (JNI_OnLoad() function, actually) and cache that.
5. That finally enabled me to call into Java from native, attached threads (w00t!). Unfortunately, you are not allowed to modify the UI (exactly what I wanted to do from my Java callback!) from a non-UI thread, which brought me right back to the drawing board.
6. As callbacks initiated from native code would not work for this reason, it was suggested to me to use a classic producer-consumer mechanism, getting Java call into the native library block until new information gets delivered by a native thread. Easily done with some pthread mutexes, and the goal is close, right?
7. Wrong! Now the problem was that if I started a UI Java thread, which would call the native function in a loop to retrieve the data (it would not actually spin, as the native function blocks until new data is available), then it would be declared not responding by the UI framework in a few seconds. I could start a non-UI thread for that, but you guessed it a non-UI thread is not allowed to update UI! Instead of resolving the problem we just shifted it into the Java land.
8. While I was simply thinking about stuffing the result into a class variable and passing it to the UI thread this way, this tutorial, showing how to display a progress indicator while doing some heavy calculations in the background, provided a more elegant idea. One can use Android s android.os.Handler class to pass messages (with arbitrary payload) between threads.
That was the last piece of the puzzle, which allowed me to finally achieve a working implementation (some 10 hours or so later :-).
I devoured
Racing the Beam
last night. It does a great job at getting inside the Atari 3600 platform and
explaining how it affected the early games that ran on it. Full of great
examples, like Yars Revenge displaying its own code onscreen as a visual
effect, to avoid needing a random number generator. Teaches how to analyse
screenshots of 3600 games and see how the crazily limited hardware was coaxed
into drawing them. Highly recommended, just wish it were twice as long.
(I also enjoyed that the book itself is a nice recursive hack. Its
(fairly cheap) printing process didn't allow reproducing the detailed color
photos of the games needed for reference. So they printed them on the
inside of the dust jacket instead.)
![]() |
Sound Juicer "Bonnie and Clyde" 2.26.1 has been
released. Tarballs are
available on
burtonini.com, or from
the GNOME
FTP servers. Some crashes have been fixes:
Ok, so at work, pretty much the whole company uses Windows, of some sort. The web team, however, are pretty adamant that they use the best tools available for them, and we use Ubuntu because of this (because it s the easiest option that we all have the same distro, and as long as it s Linux, we don t mind)
Anyway, at the moment we re working through the process of moving all our internal business applications from Visual Basic.NET (urgh!) to PHP + a web based app. The Product Owner for this is one of the bosses, who currently uses Windows Vista.
He has, however, seen us all using Ubuntu and it s got him interested in using it. He s said that he wants to try using Ubuntu, and see whether he can get his work done on that, and slowly transition to it, as obviously, he needs to be able to use Windows for the .NET stuff (which sadly, doesn t work well under WINE).
So, we set him up a Virtual Machine, and he got to grips with what he was doing, great. Except for the fact that he had to allocate memory to it, switching back and forth between windows and Ubuntu was a pain. He eventually gave up on this idea, and got a spare machine, a spare monitor, and set it up next to his machine.
Still, however, it was a bit of a pain, he d have to switch position on his desk, start using a different keyboard and mouse, and i was all a bit of hassle.
Recently, we ve gotten a big screen (which isn t actually that big!) for the Web Team to monitor the servers, our order download service, etc etc. We were showing our manager some of the stuff we could do with it, and he asked the question So, how do you control it - to which my response was to move my mouse off of the edge of my screen, and onto the big screen. So is that a third monitor? he asked. No I replied, it s another machine.
Enter Synergy
So this is the point where I explained to our manager exactly what synergy is. Trying to explain it however, is a bit of a hassle, so I ll try my best here. Synergy is an application that allows you to control another machine s keyboard and mouse from your own PC. It s a bit of a mix between a KVM switch, and Remote Desktop, but it doesn t require extra hardware, and you dont have to relay the video across the network to show it on your screen too.
At this point, our boss got a glint in his eye
Does it work in Windows? he asked. At this point, I didn t realise that he had a seperate machine for Ubuntu. I told him it did anyway, but I wasn t too sure whether it worked with Vista
Lets give it a go anyway
So we went over to his machine, and I installed quicksynergy on his ubuntu box, while he downloaded the Windows installer for Synergy. 5 minutes later, he was grinning like a maniac as he moved his mouse from one machine to another.
Now he s happily using Ubuntu without any hassle, it s just a third screen to him - with different stuff on it.
I think the moral here is, there are different ways to get people to be able to use Linux, and Synergy is one of those great tools that enable people to use Linux without having all the hassle that comes with switching over.
I think also, a quote from m manager sums it up.
This is one of the best things I ve seen all year. I thought it d take forever to setup, but it was so quick. I can be so much more productive nowI hope that this will be one of the turning points for my manager, and we ll have another convert by the end of the year
From the Bits from the Debian Installer team mail to d-d-a:
It has been decided that, in order to not slow down the development processes, D-I SVN should be branched when the work on preparing a release starts. Even if SVN doesn t make the process very easy, changing the VCS we use is currently not an option we prefer.SVN, branching, d-i. There s no word to describe how painful it is to work on d-i using SVN. d-i is big, SVN is slow in about everything it does. Now add branches to the mix. That mail left me very disappointed; first because I thought switching to git was sort-of planned for after the release of Lenny, and now it s off the table, second because some things in this mail are just wrong. Oh well. No d-i for me, I guess, then.
Many people in the western world are completely unaware that in the Moldavian Republic there is an ongoing protest against the current Communist Party which is at power after the parliamentary elections held on Sunday. The protestants accuse the Communists of election fraud and there are numerous reports of dead people being recorded as voters, people which, by religion, chose not to vote, and other several people which couldn't have voted.
I just wanted to make an USB stick bootable and wondered why mkdiskimage -4 /dev/sda 0 32 64 complained about the disk
having too many cylinders. After a few moments, it ocurred to me that since libata, the system hard disk has become sda
and that the stick was sdb or sdc. One ctrl-C later, fdisk confirmed both counts: That I accidentally started
mkdiskimaging my main system hard disk and that the partition table was already gone.
A few hours later, the notebook is back in business without too much data loss. Lucky me.
My notebook has an alibi installation of Windows XP in its first primary partition sized 4 GB. Since I
aborted the mkdiskimage process early enough, I hoped that only the windows installation was hosed. The Linux system is
entirely in LVM (with crypted LVs), and LVM hadn t noticed yet that its PV was gone. I reckoned that I still had a
chance to rescue my data if I didn t reboot.
So I hastily commandeered an USB hard disk (thanks, $CUSTOMER, for quickly supplying one), fdisked, pvcreated and
vgextended it and started the pvmove. While this was happening, I theoretically was able to continue working, which I
didn t because I was afraid of losing. About half an hour into the copy process, the USB disk chose to deregister
itself and the pvmove aborted. Rebooting the disk made it reappear as sde (it was sdd before), and miraculously, a new
pvmove call just worked. However, a good fraction of actions on the shell resulted in a lot of input/output errors on
the screen. I guessed that this was the first sign of my data finally dying, but I let the pvmove continue.
After the pvmove was finished (which was rather fast since the move of the crypted LV means that the
crypted data is moved and not de- and recrypted), I had to recreate a /dev/sda2 partition with type 8e before the LVM
tools allowed me to vgreduce the VG.
I then zeroed out the first 10 GB of the internal disk and spent a few hours reinstalling and patching XP from scratch
before I finally went through the pvcreate, vgextend, pvmove routine in the other direction. Then the big moment
arrived: fsck of all LVs.
I guess that the reason for the input/output errors was that /usr was completely hosed (no single file outside
lost+found), but /home and all other file systems holding data where the way back to the (a week old) backup would have
been quite painful were ok. I pulled /, /usr and /var from the backup to be consistent again, updated to current sid
(avoiding KDE 4 for the time being) and could start working again.
The only real loss was a few hours of work that were stored in /usr/local which died along with /usr, so the result of
my stupidity was not very catastrophic but still a good lesson. And I have learned that LVM is a robust and resilient
beast. Good work. Now I d like to know what happened to my /usr - I always had the impression that pvmove should
not break data even when the target disk suddenly goes away...
The workshop I went to recently and the ICT Champions in general ( Website Under Development - release early, anyone?) seem to be funded by public and charity money. As I mentioned, the worst thing was all the needless promotion of certain companies products, so why are they promoting private products instead of being neutral and open?
That s bad for Britain, bad for the competing products that are co-produced by the Voluntary and Community Sector and bad for the VCS workers because it trains them in single-tool methods instead of transferable skills. Let the private sector pay for their own adverts! Why can t we stop making this mistake?
Which brings me to the other problem with that ICT advice: well-meaning common-sector businesses like ours can t update it autonomously, for two reasons:
I live in a 55 year old house. That's not something to be worried about, of course, but it does mean that my house needs major maintenance works to continue to be in good shape.
This week, said major maintenance jobs began. We are in the process of replacing all of the windows - It might sound a bit scary by today standards... But if you have ever been here... Well, this house was built in a very different era, when the newly built University City lied several kilometers South of the city border and land was cheap here. Most houses in the area were built for University teachers (this particular house was for twenty years home to Marcos Moshinsky, Mexico's most important Physicist who, coincidentially, passed away last week; Dr. Moshinsky was my father's teacher and mentor).
Anyway, we just started the window teardown process. The workers are going quite faster than I expected. Still, I am worried about the waitfor(). As anybody who has come to this house will know, we live on a very busy avenue. Even 30 years ago, when my parents moved here, they installed double glasses on every window - But did some mistakes (i.e. we have some broken glasses which are unchangeable for practical purposes). This time we decided to buy from an established vendor for this kind of windows.
Double-glass windows are common in colder regions - But here, they are quite rare. Strange, being this a noisy city... So we researched a bit, and found a vendor with good quality - Multivi, in Puebla. What we didn't count on... Is that they were so informal. We paid in late December and were told delivery would take around two months... And we are still waiting, this time pressing them for a commitment. After all, we are already lacking several windows, and... Well, around May we start having rains. We DEFINITIVELY don't want to be stuck without windows by May!
Anyway... I recently sent out a semi-VAC anouncement to debian-private. And this is extensive to any project I am related to: The next days I will be paying more attention to whatever needs to be done at home. Please don't expect prompt replies to mail from me (yes, as if I usually replied promptly...) I do have network access, but not much computer time.
A few hours ago, a new version of kernel-package was uploaded to
experimental. This is a major change,and I would
appreciate it if folks took it out for a spin, kicked the tires,
and provide feedback about where this version is lacking.
This is only part of the way along in this development cycle. I
would like to add a debug-info separation, either in a different
directory than / in the image packages, or a separate package by
itself. I would also like to create an overlay directory for
/usr/share/kernel-package/, so people can inject code
or override the defaults for kernel-package easily. I am also
willing to make any changes to standardize the handling of hook
scripts for kernel packages in Debian.
./debian/ is ephemeral
make-kpkg removes and re-creates
./debian on every invocation. This started as an
exercise to protect ourselves from the upstream builddep
functionality, that randomly cleaned out ./debian
whether or not it had created it, effectively making it impossible
to run dpkg-buildpackage easily (which is ok, if all
you care about is the image package)
This does make the kernel-package far more nimble;
we now offer less surprise to users who did not expect stampts that
the kernel-packagge used to not do duplicate work. Now, if you edit
a couple of files in the kernel source, and run
make-kpkg, the kernel will build as expected. There
are no more version mismatch errors, and the kernel version can
be modified using localconfig as one desires. With
this, kernel-package can routinely be used to build kernels out of
the git tree.
The con is that we no longer cater to official kernels, or to
anyone who expected content in ./debian to persist. At some point,
there are plans to implement an overlay directory that will shadow
/usr/share/kernel-package/ruleset, but that is not yet
implemented. In any case, the kernel team in Debian regards
kernel-package to be broken, and have been bad
mouthing it and deprecating it for a few years now, so this will
not be a loss for them.
--added-patches option of make-kpkg is
gone, the work-around is to prepare the kernel sources before calling
make-kpkg.
kernel-package has
carried specal case code for official images. This has caused some
problems, recently, since the need to preserve
./debian has caused no end of problems when the
version changed out from under ./debian, or when
people wanted to edit a file and expected kernel-package to do a
minimal recompile.
However, sometime in the Etch release cycle, the kernel team
deprecated kernel-package as the means of building
official kernels. They have recently started saying they think
kernel-package is broken, and have their own
recommendation for how to build kernel packages. Therefore, a full
release cycle later, we can get rid of the special case rules used
for official packages. Also, this allows us to drop
./debian at the drop of a hat, and recreate it with an
version that reflects the current state of the kernel sources.
/usr/src
/etc/kernel/*.d directories.
Firstly, modern boot loaders scan the boot directory for kernel
images, and the user no longer has to code in the path to the
symbolic links that the kernel image package used to
manipulate.
Secondly, hardcoding the behaviour into the postinst made for a
very rigid policy; and user wanted more flexibility than that.
There is an example shipped with the package that shows a more
flexible scheme that kept two symbolic links for version 2.4
kernels, and two symbolic links for 2.6 kernels; it can be easily
modified to keep two links for 2.9 kernels and two links for 2.8
kernels, or one of each, or whatever the user wants.
make-kpkg images as well as the official images, and
are thus better than the script shipped with
initramfs-tools themselves, as they offer a super set
of functionality.
This also demonstrates how the posts install script communicates
with the initramfs creation scripts so that no initramfs is
generated in case you do not want it.
Next.