rpmbuild编译一个软件时如何加入自己的补丁patch
场景有许些时候,服务源没有平台的软件,需下载一个SRC的源码包,重新制作,但有时在制作的过程中涉及修改src的源码,怎么办?直接修改BUILD下的源码显然是不可以的,因为每次执行 rpmbuild -ba xxx.spec的时候,会自动解压源码将你修改的文价覆盖,始终是达不到效果,此时,只能打补丁patch例子本帖以 编译mips平台 docker.spec 其中一个错误为例
场景
有许些时候,服务源没有平台的软件,需下载一个SRC的源码包,重新制作,但有时在制作的过程中涉及修改src的源码,怎么办?直接修改BUILD下的源码显然是不可以的,因为每次执行 rpmbuild -ba xxx.spec的时候,会自动解压源码将你修改的文价覆盖,始终是达不到效果,此时,只能打补丁patch例子
本帖以 编译mips平台 docker.spec 其中一个错误为例1.下载src包
$wget https://mirrors.ustc.edu.cn/fedora/updates/25/SRPMS/d/docker-1.12.6-6.gitae7d637.fc25.src.rpm
2. 安装软件包
$rpm -ivh docker-1.12.6-6.gitae7d637.fc25.src.rpm
3.进入rpmbuild目录
$cd ~/rpmbuild/SPECS
$rpmbuild -ba docker.spec
+ pushd /home/xzy/rpmbuild/BUILD/docker-ae7d637fcad9be396e75af430405446f9e6ab099/_build/srcRPM 构建错误:
~/rpmbuild/BUILD/docker-ae7d637fcad9be396e75af430405446f9e6ab099/_build/src ~/rpmbuild/BUILD/docker-ae7d637fcad9be396e75af4304
05446f9e6ab099
++ head -c20 /dev/urandom
++ od -An -tx1
++ tr -d ' \n'
+ go build -ldflags '-B 0xb05016bd8f940b62e889d083ae0027cc4c98c546' github.com/projectatomic/docker-novolume-plugin
# github.com/docker/docker/pkg/system
../../docker-novolume-plugin-c5212546ab01b4b7b62caba888d298ab63f53984/Godeps/_workspace/src/github.com/docker/docker/pkg/system/ stat_linux.go:13: cannot use s.Rdev (type uint32) as type uint64 in field value
错误:/var/tmp/rpm-tmp.C2EuCl (%build) 退出状态不好
/var/tmp/rpm-tmp.C2EuCl (%build) 退出状态不好5.为了省事,我将BUILD下的 docker-ae7d637fcad9be396e75af430405446f9e6ab099拷贝一份在用户工作目录~,然后创建git
$cp docker-ae7d637fcad9be396e75af430405446f9e6ab099 ~6.修改第四步中的指定文件,修改代码,打出一个patch,补丁名字随意,但最好是与当前编译的包的名字相关,以便识别,将其放在~/rpmbuild/SOURCES目录下
$cd docker-ae7d637fcad9be396e75af430405446f9e6ab099
$git init
$git add .
$git commit
$vim docker-novolume-plugin-c5212546ab01b4b7b62caba888d298ab63f53984/Godeps/_workspace/src/github.com/docker/docker/pkg/system/stat_linux.go7.修改docker.spec文件(很重要的两步)
$git diff>~/rpmbuild/SOURCES//0001-docker-1.12.6-6.gitae7d637-add-mips64le-support.patch
$cd ~/rpmbuild/SPECS
$vim docker.spec
在Sourcexx结束和Buildrequires之前加入patch,一般未使用补丁号按递增命名
Source15: v1.10-migrator-helper
Source16: %{repo}-common.sh
Source17: README-%{repo}-common
# for mips64el
Patch0: 0001-docker-1.12.6-6.gitae7d637-add-mips64le-support.patch
BuildRequires: git
在setup后build之前加入使用patch
%setup -q -n %{repo}-%{commit0}
%ifarch mips64el
%patch0 -p1
%endif
%build
8.再次编译就可以通过这个错误了
+ cp /home/xzy/rpmbuild/SOURCES/README-docker-common .
+ echo 'Patch #1 (0001-docker-1.12.6-6.gitae7d637-add-mips64le-support.patch):'
Patch #1 (0001-docker-1.12.6-6.gitae7d637-add-mips64le-support.patch):
+ /usr/bin/patch --no-backup-if-mismatch -p1 --fuzz=0
patching file docker-novolume-plugin-c5212546ab01b4b7b62caba888d298ab63f53984/Godeps/_workspace/src/github.com/
docker/docker/pkg/system/stat_linux.go
+ exit 0
执行(%build): /bin/sh -e /var/tmp/rpm-tmp.yXkHTK
+ umask 022
+ cd /home/xzy/rpmbuild/BUILD
+ cd docker-ae7d637fcad9be396e75af430405446f9e6ab099
+ mkdir _build
疑惑:
docke.spec安装之后,在~/SOURCES/docker-xxxxx目录下会有个 _build目录,这个目录的子目录src/github.com/docker下面的两个文件
是链接文件,链接到docker-xxxxx目录,这样做是为啥呢,干嘛还要这么折腾呢?实在费解。这个问题也是在我git管理这个文件夹,想最终导出patch时才遇到
修改docker-xxxxx/src/github.com/docker/pkg/signal/signal_linux.go 后在git status的时候没有显示更改,git add docker-xxxxx/src/github.com/docker 会报一个
fatal: 路径规格 '_build/src/github.com/docker/containerd/' 位于符号链接中 错误
更多推荐
所有评论(0)