quilt打patch

        在之前有关deb包制作的文章中,已经介绍过,如果debian目录下format文件中的格式设置为quilt,此时修改代码编译deb包会报错。很多开源的包都是此格式,因此这里介绍正确的流程是怎样的,如何使用quilt给包打上patch。

deb包制作简易流程

修改.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、构建成功:

 

其它文章链接:

使用quilt工具制作补丁(patch)文件

在OpenWrt 中,Quilt 是一个用于管理源码补丁的工具,常用于开源软件的维护。以下是使用 Quilt 添加新patch的基本步骤以及一些例子: 1. **下载新patch**: 首先,你需要从GitHub或其他地方获取你要提交的补丁文件,通常是一个`.diff` 或 `.patch` 文件。 2. **确认补丁格式**: 确保补丁是标准的git diff格式或是Quilt接受的格式,这通常是添加、删除或修改行的记录。 3. **进入OpenWrt项目的目录**: 使用终端,导航到OpenWrt的`scripts`目录下,这里通常包含了Quilt的配置。 4. **初始化Quilt仓库**: 如果还没有,运行 `quilt init` 初始化一个新的Quilt仓库,如果已经存在,可以跳过此步骤。 5. **应用补丁**: 使用 `quilt import patch_file_name.diff` 来导入补丁。例如,如果你有一个名为`my_patch.diff`的补丁文件,命令会像这样: ``` quilt import my_patch.diff ``` 6. **查看补丁状态**: 要查看所有已导入的补丁,可以使用 `quilt status` 命令,如: ``` quilt status ``` 7. **测试补丁**: 在本地构建系统中测试补丁是否按预期工作。如果一切正常,你可以继续下一步。 8. **提交补丁**: 当你对补丁满意,并确定它不会引入任何问题后,你可以创建一个新的commit将这个补丁包含进去。假设补丁ID是`patch-0001`,你可以这样操作: ``` quilt commit -m "Add new feature [PATCH 1/1]" ``` 接下来,按照Quilt提示交互式地选择补丁,然后生成一个新的commit。 9. **提交到OpenWrt仓库**: 最后,将这些更改推送到OpenWrt的git仓库。确保遵守项目贡献指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值