在之前有关deb包制作的文章中,已经介绍过,如果debian目录下format文件中的格式设置为quilt,此时修改代码编译deb包会报错。很多开源的包都是此格式,因此这里介绍正确的流程是怎样的,如何使用quilt给包打上patch。
修改.cpp文件为(版本号修改为0.0.0-3):
#include <stdio.h>
int main(int argc, char*argv[])
{
printf("**********Hello World************\n");
printf("**********Hello MY World************\n");
return 0;
}
注意,在此之前,已经将格式改为了quilt,此时构建源码包(debuild -S -sa)会发生:
~/test/hello/hello-0.0.0$ debuild -S -sa
dpkg-buildpackage -us -uc -ui -S -sa
dpkg-buildpackage: info: 源码包 hello
dpkg-buildpackage: info: 源码版本 0.0.0-3
dpkg-buildpackage: info: source distribution UNRELEASED
dpkg-buildpackage: info: 源码修改者 XXX <>
dpkg-source --before-build .
fakeroot debian/rules clean
dh clean
dh_auto_clean
dh_clean
dpkg-source -b .
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building hello using existing ./hello_0.0.0.orig.tar.gz
dpkg-source: info: local changes detected, the modified files are:
hello-0.0.0/hello.cpp
dpkg-source: 错误: aborting due to unexpected upstream changes, see /tmp/hello_0.0.0-3.diff.tN1G4J
dpkg-source: info: you can integrate the local changes with dpkg-source --commit
dpkg-buildpackage: 错误: dpkg-source -b . subprocess returned exit status 2
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui -S -sa failed
构建源码包的意义是可以直接上传至launchpad平台进行编译,也可以起到压缩代码的作用,使用者只需要使用dpkg-source -x xxx.dsc即可解压出代码。
将代码回退之后,重新执行构建命令,仍然报错:
This package has a Debian revision number but there does not seem to be
an appropriate original tar file or .orig directory in the parent directory;
(expected one of hello_0.0.0.orig.tar.gz, hello_0.0.0.orig.tar.bz2,
hello_0.0.0.orig.tar.lzma, hello_0.0.0.orig.tar.xz or hello-0.0.0.orig)
continue anyway? (y/n) y
dpkg-buildpackage -us -uc -ui -S -sa
dpkg-buildpackage: info: 源码包 hello
dpkg-buildpackage: info: 源码版本 0.0.0-3
dpkg-buildpackage: info: source distribution UNRELEASED
dpkg-buildpackage: info: 源码修改者 XXXX <>
dpkg-source --before-build .
fakeroot debian/rules clean
dh clean
dh_clean
dpkg-source -b .
dpkg-source: 错误: can't build with source format '3.0 (quilt)': no upstream tarball found at ../hello_0.0.0.orig.tar.{bz2,gz,lzma,xz}
dpkg-buildpackage: 错误: dpkg-source -b . subprocess returned exit status 25
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui -S -sa failed
quilt表示上游包,native表示自建包,因此上游包在构建源码的时候,需要存在旧的源码包才行,之前我们将该压缩文件删除了,因此报错。先添加压缩文件即可:
tar zcvf hello_0.0.0.orig.tar.gz hello-0.0.0/
这时候即可正常构建了(未修改代码):
查看文件树已经生成了新的源码包:
此时如果直接修改代码然后再构建仍然会报错,正确的流程是:
如果是新工程,需要首先执行quilt init进行初始化,这样会在工程目录中生成.pc目录,修改里面的.quilt_patches文件,将patch的路径改为debian中的路径:
进入正题:
1、quilt series 查看已有的patch
2、quilt new 0.0.0-4.patch 创建一个新的patch
3、quilt add hello.cpp 添加需要修改的代码文件
4、修改代码:
#include <stdio.h>
int main(int argc, char*argv[])
{
printf("**********Hello World************\n");
printf("**********Hello World 222************\n");
return 0;
}
5、quilt diff 可以看到修改的内容
6、quilt refresh 将改动写入 patch 文件中
7、修改changelog版本为0.0.0-4(debian目录中的修改不会导致构建失败,不需要添加到patch中)。
8、构建成功:
其它文章链接: