bsdiff差分工具包的安装和测试使用

bsdiff是一个差分工具包,可用于减少升级app或者替换资源的体积。

下载

bsdiff 和依赖的bzip2下载
https://sourceware.org/pub/bzip2/
https://src.fedoraproject.org/lookaside/pkgs/bsdiff/

官网说明:https://www.daemonology.net/bsdiff/

先解压 bsdiff.4.3.0.tar.gz,然后进入cd bsdiff.4.3.0/ 解压bzip2

编译

Linux环境下需要修改几个文件后,再执行make编译。

修改Makefile,.ifndef和.endif增加tab空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CFLAGS          +=      -O3 -lbz2

PREFIX ?= /usr/local
INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444

all: bsdiff bspatch
bsdiff: bsdiff.c
bspatch: bspatch.c

install:
${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN
${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endif

修改bsdiff.c ,引入bzip2的头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <sys/types.h>

#include <bzlib.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

/** 导入bzip2的引用*/
#include "bzip2/bzlib.c"
#include "bzip2/crctable.c"
#include "bzip2/compress.c"
#include "bzip2/decompress.c"
#include "bzip2/randtable.c"
#include "bzip2/blocksort.c"
#include "bzip2/huffman.c"

修改bspatch.c ,引入bzip2的头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bzlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <err.h>
#include <unistd.h>
#include <fcntl.h>

/** 导入bzip2的引用*/
#include "bzip2/bzlib.c"
#include "bzip2/crctable.c"
#include "bzip2/compress.c"
#include "bzip2/decompress.c"
#include "bzip2/randtable.c"
#include "bzip2/blocksort.c"
#include "bzip2/huffman.c"

修改完毕后,再执行make编译,生成两个可执行文件 bsdiffbspatch

测试

bsdiff 用来生成差分包
bspatch用来合并差分包

1
2
3
4
5
6
[root@sf106074 bsdiff-4.3]# ./bsdiff
bsdiff: usage: ./bsdiff oldfile newfile patchfile
旧文件 存在的新文件 新生成的差分包名称
[root@sf106074 bsdiff-4.3]# ./bspatch
bspatch: usage: ./bspatch oldfile newfile patchfile
旧文件 新合并的文件名称 存在的差分包

可以使用md5sum 命令来验证差分文件和差分后合并新文件的正确性