Protocol & package independent draft 2 with code
zombie at i4free.co.nz
Mon Jun 30 20:51:45 PDT 2003
Attached is the second draft to my proposed binary update system.
There is some working code at:
with the md5 at
It uses libmd and libfetch for the checksums and fetching the files.
-------------- next part --------------
Package and Protocol independent binary update system.
This document will look at a proposed system to update remote computers in a network protocol and binary package independent way.
This document will only discuss getting the packages onto the client computer in a way the install script can predict.
This is the second draft.
All input will be considered.
Client - The computer being updated
Profile - A named list of packages to install on a computer.
Package - A file containing one or more files that can be read with the correct software
Server - The computer the client connects to to get the updates
Update - A binary package the client installs on the client.
When computers are distributed updating them can be problematic. Updating many computers takes time if it is not automated.
The server will have zero or more text files listing profiles in the root package directory. Each profile will be listed in the master profile file. The layout of the profile file will be described in the final version of this document. The server also contains a file with its last update date.
Each package will have a description contained within them.
The client will have a list of known servers.
The client follows this process:
1. The client connects to one at random.
2. It checks the updates are later then its local version.
3. If the computer was setup using a profile file it will download the appropriate profile. Otherwise go down to 4b.
4a. Download all the packages from the profiles file.
4b. Download all the packages in the local installed package list.
5. Run the package install script.
In steps 4a and 4b the packages can be incremental updates to reduce bandwith.
The packages directory structure will be as follows:
Note. all names in <> are variables.
<root> - The top of the package directorys, dosn't have to be the server root.
<root>/profile.list - A list of the profiles on the server (only if the server contains profiles).
<root>/all - All packages on the server are stored here.
<root>/all/<package>.<ext> - The package.
<root>/all/<package>.<ext>.sum - One or more checksums of the package, includes the version.
<root>/all/list - A list of all packages and a short (up to 72 characters) description.
<root>/<profile> - Packages and checksums only used in the profile are linked here (only if the server contains profile).
<root>/<profile>/<package>.<ext> - The package in the profile.
<root>/<profile>/<package>.<ext>.sum - The packages checksums.
<root>/<profile>/list - A list of packages in the profile.
Only the <root>/all/ directory and all files in it listed above are required.
Andrew Turner - zombie (at) i4free.co.nz
Colin Percival - colin.percival (at) wadham.ox.ac.uk
More information about the freebsd-binup