.comment: Something for Everybody II
Seek and Ye Shall Find
Amazing. Just amazing.
Yesterday I wrote about the need for a unified package handler for Linux that would not just reconcile RPM, DEB, and TGZ packages but would include in the database of installed applications (along with dependencies and the like) those things you build yourself from source.
Konstantin Malakhanov must have had his note pre-written, so quick was he to email a response to my plea. He clued me in on something called "CheckInstall." It is the coolest utility I've ever seen. If you run Slackware or any RPM-based distribution and if you ever compile your own applications, libraries, anything, it is a must-have, a really essential application.
What does it do? Well, I can tell you some things, but I bet that I leave a lot out, because when I think I've figured out everything important about this deceptively small utility (the source download is less than 60k), I happen upon something even neater that it also does. In my explorations so far, I've learned that it:
- Tracks the activities of "make install" and enters the package you've built in your Slackware tarball or RPM-based distribution RPM database.
- Makes your choice of a binary tarball or RPM of whatever it is you've just built.
- Includes in the binary package docs, license, and everything else, not just the binaries themselves.
- Allows for a clean uninstall, because you can use your distribution's regular package uninstall command to get rid of it.
- Allows for a really clean uninstall, because it backs up anything that was changed when you installed the new package you compiled.
Indeed, when you compile it -- and it is the easiest compile since "Hello, World" -- it makes a tarball or RPM of itself!
The imagination swims with thoughts of just how useful this thing could be. Everything you build is automagically backed up in a binary package. While that binary might not work on every machine in the world, chances are that unless you have really weird hardware or some compiler Red Hat decided to loose on an unsuspecting world it will run on other machines, making deployment over a network or mailing to a friend a very easy thing. And, as I said, I haven't fully explored it yet. But just keeping track of the stuff you've built makes it one of the most useful utilities I've ever seen.
The current version is 1.4-beta1. Its developers (and we can give thanks that they are putting their talents to work for Good, because these guys know their stuff) say they're working on adding DEB support.
Please don't think I'm complaining when I consider where things could go from here.
A Grand Solution to the Package Problem
The most difficult part of my idea for a Master Package Manager -- trapping "make install" and entering it into the database -- is solved by CheckInstall. The next part is deciding upon and establishing a grand master database. CheckInstall handles the RPM database and the one of binary tarballs that Slackware maintains, and soon will ride herd on Debian, too. Debian's alien program allows incorporation and back-and-forth conversion of RPMs, SLP's, .tgz's and .tar.gz's. So the makings of the master database are largely there.
Now all that's needed is bringing it all together. Debian seems to have the best way of importing other packages, and there's little reason to re-invent the wheel. With a little work (or maybe none), it would be possible to forego the RPM database entirely, and the one for tarballs, and fold it all into a Debian or modified-Debian database. There would need to be a little utility that would read the existing distribution-specific database into the master database.
Then, one could compile, could install RPMs, could build from SRPMs, could apt-get DEBs and source via apt-get, could use binary tarballs, and could keep it all straight. Users would not be tied to any specific distribution, and in an era when distributions are popping up, disappearing, repositioning themselves, and in other ways proving unreliable for the mere user, this is important.
But why stop there?