Package management tools

The following is all out of date. Please see FreePKG and the sourceforge page.

I have been rewriting the package management tools to provide a number of new features:

The latest patch implements all of these, although there are some rought edges still, and as a side effect, there is also a new taget for which can check to ensure that a port does not overwrite existing files. However, this does not work for ports with dynamically generated plists. To make this work, we would have to move all plist munging into a make-plist target, which would get called after post-build.

The code has been almost completely rewritten, to make it much more flexible, and to provide all of the functionality from within a shared library (although this is not built yet). The design uses a 'Pacakge Manager', which keeps track of all of the packages installed on the system. The pkg_* utilities use the pkg_mgr API to interact with the pacakge manager, which does all of the work. The package manager manages packages as package entries. These are structures which contain the system specific information about the package (like it's playpen/tmpdir location). These are a state machine, which keeps track of the current state of a package and move it from one state to another. The non-system information is stored in the package structure, which now contains the name, and some other one-to-one mapped data in it's head, and also has three lists - the packaging list, the dependency list and the required by list. All of the list managment is done with macros which implement a singly linked list with a managed tail pointer, and can contain information in the head.

At the moment I'm testing this code. It will very likely crash on you in very unexpected ways, because of some stupid thing that I've done. I began from a CVS copy of pkg_install from a number of years ago, and so there are a large number of changes to pkg_install which need to be merged in so that the new version has the same (or equivalent) functionality as the existing code base.

The '@option preserve' functionality is no longer provided. I plan on reimplementing it entrirely, using a backup package, created before package installation of all of the files which would be overwritten. The REQUIRED_BY and @pkfdep lists now only contains those packages which directly require us, not all of the packages which we depend on or which require us. I need to add pkg_info functions to list these. Otherwise, things should behave fairly similarly.

Things to do are still:

Some thoughts on package signing. The +CONTENTS file in it's current form contains MD5 checksums for all of our files, including scripts. We can just plaintext sign the +CONTENTS file with pgp/openssl, and then append the signature to the file in a new @signature entry. To check, we just pipe out the file up to this entry to pgp/openssl and check it. We don't have to play with tarballs, or any other mechanisms.

Tarball of pkg_install (warning: installs into /root/bin) and necessay Patch to

I also wrote a design spec for a new package format

Patches to the Ports collection

Patches to to add optional dependencies, multiple packages from one port, and the patches above.

Download the patch

XFree86-4 on -CURRENT Patch

This fixes building XFree86-4 on -CURRENT. It's not really right, but it does work... I'm working on trying to prevent it from building the libraries three times during the build.

Download the patch

Libtool Patch

This updates ports to use libtool. Some of these are left over from merged patches.

Download the patch

Misc Patch

This fixes things with various ports. Some of these are left over from merged patches.

Download the patch

Updated Patch

These are new ports I'm working on or updated ports.

Download the patch

SVG in Mozilla

The following tarball contains an initial implementation of SVG in Mozilla. To use it, extract it in your top level mozilla source directory, then 'patch -I < layout/svg/svg.diff'.

Download the tarball.

Unfortunately real life is hunting me down at the moment and I've been unable to do much work on this recently. It's currently broken because the inline styles are not being used. Also, I'm too stupid to figure out how Mozilla's style system works, so I've been unable to figure out how to add support for SVG's style directives.

I had started on the implementation of <PATH>, but it's only half designed at the moment. Also, this only compiles on FreeBSD at the moment. Below is an old screenshot.

Created: [2000/01/06]
Updated: [2004/04/07]