[RPM打包学习-SPEC文件]——%patch相关问题

今天在软件包编译时,需要给其制作patch修改部分问题。根据相关diff指令制作patch,并在本地使用patch命令验证均成功,下面实战进入spec编写。


将相关SOURCE放入指定目录,根据以往经验,在source字段加入自己的patch,随后在%prep阶段添加%patch -p1 (这里p1是因为解压source0后会自动cd进入第一级目录,所以忽略)。

所有准备工作已经完成,开始编译。

这时,发现在%prep阶段报错,提示生成了一个.rej文件,这是patch打失败的一个表现。根据网上相关的资料,我对比了.rej和我自己制作的.patch,发现并没有任何区别。但是为什么会提示报错呢,而且编译过程在prep这一阶段给到的日志比较少,没有什么可以参考的有价值信息,于是我开始从头看prep阶段,果然,上来第一个字段就是%autosetup。


%autosetup字段会自动为你解压缩前面列出来的source,同时,也会自动执行你前面所列出的patch。这就导致了我的patch已经执行成功,但是我又执行了一遍,所以会报错。

所以,如果在prep阶段使用了%autosetup,就不需要你再使用%patch去一个一个打patch了;如果你解压源码包source0使用的是%setup字段,那么后续的patch,则需要你通过%patch去一个一个执行


再次记录一下,autosetup后的-n参数,并不是把tar解压成指定的名字,而是在包名与解压后的目录名不一致的情况下,重新指定目录名方便CD进去,而不会修改目录名。

你可能感兴趣的:(学习,linux,运维开发)