tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Introducing the patchadd binary patch toolchain
On 4/27/09, Tonnerre Lombard <tonnerre%netbsd.org@localhost> wrote:
> Salut,
>
> Since we're currently releasing NetBSD 5.0, I would like to give a
> short introduction to the patchadd binary patch toolchain I am
> currently developing. It is far from finished, but I have a working
> prototype which can be deployed for the upcoming release already.
>
> The tools
> =========
>
> The tools, which have been added to pkgsrc/sysutils/patchadd recently,
> consist of the following tools:
>
> - patch_add, a tool to apply binary patches,
> - patch_delete, a tool to back out a patch added without -r, and
> - patch_info, a tool to display the list of installed patches.
>
> Still missing are the tools:
>
> - patch_tool, a tool to figure out which patches still need to be
> applied, and optionally install them, and
> - mkpatchdir, a tool to generate a directory index in a directory full
> of patches.
> - Potentially even a tool to generate patch sets from two directories
> or such.
>
> I'm working on them and I'm consequently going to rewrite the other
> tools. Until then, use the existing tools. The future tools will be
> compatible with the current file format. (And syntax.)
>
> The patch format
> ================
>
> The second important part about patchadd is how to create a binary
> patch set to be applied. The format basically follows the instructions
> laid down in http://github.com/tonnerre/patchadd-tests/
>
> The patch file itself is basically a tar file. The file contains:
>
> - Arbitrarily named bsdiff(1) patches lifting the file from old to new.
> - A file called +INFO, containing pure metadata about the patch one
> information per line, such as:
> * ABI: the OS ABI (e.g. ABI=NetBSD)
> * OS_VERSION: the OS version (e.g. OS_VERSION=5.0)
> * MACHINE_ARCH: the machine architecture (e.g. MACHINE_ARCH=vax)
> * PATCHTOOLS: the file format version (e.g. PATCHTOOLS=0.1)
> * NAME: The name of the patch, frequently the file name. A form for
> this would have to be agreed on; I would suggest the pullup
> request ID (e.g. NAME=4123). Can be free form though, and does not
> have to be the same as the file name.
> * VERSION: The version of the patch. A patch can be re-released in a
> new version if appropriate, and would be suggested as an upgrade
> by patch_tool.
> * COMMENT: A punchline describing the text. This should be a short
> description which is shown in patch_infos overview output.
> * DEPENDS: The name of a different patch file to depend on. This
> line may appear as many times as required, but please only add one
> dependent patch per line.
> * CONFLICTS: The name of a different patch which cannot coexist with
> this patch. The same rules as for DEPENDS apply.
> - A file called +COMMENT containing a longer description (optional).
> - A file called +CONTENTS, containing information about each contained
> binary diff (one line per file, tab separated):
> * The name of the file in the system to be patched, e.g. /bin/ksh
> * The name of the patch file in the diff, free form file name
> * The SHA-1 sum the file is expected to be in before patching, and
> * the SHA-1 sum the file is supposed to have after patching.
>
> The tar file is not distributed as-is but as a bzip2 compressed OpenSSL
> binary file (.tbz) with detached signature (.tbz.sig). The command
>
> openssl smime -sign -binary -outform PEM -signer signingkey.pem -in
> patchname.tbz -out patchname.tbz.sig
>
> shall be used to produce the detached signature.
>
> The patch index
> ===============
>
> The patches shall be kept in a directory called
> ftp://ftp.netbsd.org/${path}/${arch}/${vers}/, e.g.
> ftp://ftp.netbsd.org/pub/NetBSD/misc/tonnerre/binpatches/amd64/5.0/
>
> The directory shall contain a file named patchindex. This file starts
> with a version statement:
>
> Version 0.1
>
> to indicate that the patch file format version 0.1 is used. This
> statement is followed by a list of all patch metadata for each patch,
> starting with the Patch keyword and ending with the EndPatch keyword.
> Multiple consecutive words in a value have to be quoted. For example:
>
> Patch 4123
> ABI=NetBSD
> OS_VERSION=4.0
> [...]
> COMMENT="A patch to add a funny hat to stargazer"
> EndPatch
>
> The patch index is then amended with an OpenSSL s/mime inline text
> signature executed with the patch signing key.
>
> This index file is used solely for the patch_tool utility. Even without
> this patch index, people can still safely run patch_add 4123 to add the
> patch.
Do you have some working examples? 5.0_RC3 -> 5.0_RC4 would be great.
Home |
Main Index |
Thread Index |
Old Index