[PC-BSD Dev] Binary patch support for updates.

Kris Moore kris at pcbsd.com
Wed Apr 22 07:10:43 PDT 2009


Dylan Cochran wrote:
> I was looking into adding support for bsdiff to the system updates and
> PBIs, however, I am missing two bits of information.
> 
> 1): I can find no definition of the current PBI file format, other
> then it is the concantenation of the pbistart binary, a header, a png
> file, a header, and two tarballs. To do binary updating properly, you
> need to first decompress any of the input files, as compressed input
> yields patches of the same size as the output file (which defeats the
> purpose). So I have to start by writing a PBI file format unpacker to
> break it into uncompressed components, and then update those. If there
> is any information about querying for the size of each element, and
> the 'proper' way to parse the input file, it would be a great help.

Dylan,

I don't really have any docs on how to query the elements, but this is 
how pbistart does it:

strcpy(awkcmd, "awk '/^__PBI_ARCHIVE__/ { print NR + 1; exit 0; }' '");

We first fine the __PBI_ARCHIVE__ flag, which indicates that we've found 
the first small tarbal, which contains the PBI details / configuration.

Then to extract this data we use tar

# tail +<offset as found above> <file> | head -n <lengh of tar ball> 
tar xvf -C <tmp dir> -f -

During the PBI installation, we then do the same type process for 
__PBI_ARCHIVE2__, which is the flag that indicates we're at the tar / 
lzma compressed file.


http://trac.pcbsd.org/browser/pbibuild/pbi-source/PBCsource/pbistart.c


> 2): I am unable to find any program or script that generates the .upd
> files and the update tarballs. The system updates look to be the
> simplest ones to get started on, as they are guarenteed to have an
> existing reference point, they are simple collections of files, and
> use an extensible metadata format that are simpler to add the extra
> information to. I want to get started on that, but I need the update
> generation and pushing script/programs.

Sadly, there isn't any auto-generator for .upd files yet :( I'm writing 
them by hand, when we need to issue an update, which isn't all that bad, 
since they are fairly easy to make, only a few lines.

The update tarbals are also rolled by hand, we simply put the data we 
want into a patch, and create the update.sh script, which actually 
performs the update, notifies users, etc. Then to make it, I use this 
command:

# tar cvf - . | lzma e -si ../patch-<date>-<name>.lzma

I guess the first thing to do would be to write some sort of generation 
program, correct? I think it'll still need some manual input though, for 
cases when we are updating files which we need to notify the user about, 
or prompt for some reason?


-- 

Kris Moore
PC-BSD Software
http://www.pcbsd.com


More information about the Dev mailing list