pup – package update protocol

Pup was designed as a replacement for the aging CMU sup application. Sup has a number of limitations (not to mention bugs) but is useful because it performs file-level replication to multiple hosts. It existed a long time before rsync and is similar in concept but has a different focus (such as delivering files to multiple clients).

Pup has a number of features including an audit trail back to the master (gold) server. Packages are essentially tamper proof because of checksums and optional file/package signatures.

Pre-install package dependencies and Post-install verification are performed by the kpkg package management tools rather than pup itself.

Whilst pup does support arbitrary script execution this was deliberately downplayed as a feature because (in our experience) a random install script tends to assume things about the destination environment that, even in a supposedly controlled environment, are often untrue. This means that the install state of a package cannot always reliably be determined.
Remember pup was not designed for power-user desktops where individuals are prepared to spend time resolving install problems on their system. Pup was designed to reliably install software on hundreds of individualised servers with minimal support staff.
Instead we analysed the common tasks that any package typically wants to perform and produced a set of standard tools based around the concept of "file snippets" to address 99% of requirements. Refer to kpkg? for details.

Pup is currently designed to work with “kpackages” (kpkg) but could be changed to work with other package systems especially if each package can be unpacked into its own directory tree.

Pup works but is defined to be alpha quality because it a) probably cannot update itself, b) has limited network security (ie use in a secure environment).

Pup user guide

If you're interested drop me an email: kim @ domain_name.

  • + : A leading plus sign indicates that this word must be present in every object returned.
  • - : A leading minus sign indicates that this word must not be present in any row returned.
  • By default (when neither plus nor minus is specified) the word is optional, but the object that contain it will be rated higher.
  • < > : These two operators are used to change a word's contribution to the relevance value that is assigned to a row.
  • ( ) : Parentheses are used to group words into subexpressions.
  • ~ : A leading tilde acts as a negation operator, causing the word's contribution to the object relevance to be negative. It's useful for marking noise words. An object that contains such a word will be rated lower than others, but will not be excluded altogether, as it would be with the - operator.
  • * : An asterisk is the truncation operator. Unlike the other operators, it should be appended to the word, not prepended.
  • " : The phrase, that is enclosed in double quotes ", matches only objects that contain this phrase literally, as it was typed.


Related Sites