我有一个包有 bug,我需要修改它,然后重新打包,这就是我的做法。还有其他快捷方法吗?
仅列表/查看(驱动程序文件或应用程序)
ar tv DesktopVideo-8.0.1-amd64.deb rw-r--r-- 0/0 4 Sep 25 07:35 2011 debian-binary rw-r--r-- 0/0 14942208 Sep 25 07:35 2011 control.tar.gz rw-r--r-- 0/0 102 Sep 25 07:35 2011 data.tar.gz
提炼
ar x DesktopVideo-8.0.1-amd64.deb control.tar.gz data.tar.gz debian-binary
提取 tar.gz
tar xvfz control.tar.gz tar xvfz data.tar.gz ;; modify my codes and updates
重新包装/重建
mkdir -p debian/DEBIAN ; step 1 cp -R ./debian-binary debina/DEBIAN cp -R ./control debian/DEBIAN cp -R ./control debian/DEBIAN cp -R ./control debian/DEBIAN ; step 2 cp -R ./etc debian/DEBIAN cp -R ./usr debian/DEBIAN
立即制作 .DEB
; this is how the skeleton look like before applying --build root@desktop:~/Downloads/test# ls control.tar.gz data.tar.gz debian debian-binary etc usr root@desktop:~/Downloads/test# dpkg-deb --build debian dpkg-deb: building package `desktopvideo' in `debian.deb'.
- 失败的
# dpkg -i DesktopVideo-8.0.1-amd64.deb
dpkg: error processing DesktopVideo-8.0.1-amd64.deb (--install):
unable to open file '/var/lib/dpkg/tmp.ci//etc': Is a directory
Errors were encountered while processing:
DesktopVideo-8.0.1-amd64.deb
答案1
如果尚未安装,请安装构建工具:sudo apt-get install build-essential
你可以使用apt-get source DesktopVideo
命令将源代码、差异和与该 deb 相关的所有其他打包文件拉到当前目录中。从那里应用补丁,在日志文件中添加新条目dch -i
,然后使用 fakeroot 和 dpkg 创建包dpkg-buildpackage -rfakeroot -us -uc
答案2
从技术上讲,您可以做您想做的事情,但您需要比您看起来更加小心。很难知道您做错了什么,因为您没有复制粘贴您输入的所有内容。我确实发现了一个拼写错误(cp -R ./debian-binary debina/DEBIAN
,您显然没有准确报告所做的操作),以及一个错误(cp -R
不保留所有权和权限,您需要cp -Rp
或cp -a
作为 root)。
修改软件包的最佳方法是获取软件包源代码 ( apt-get source DesktopVideo
)。修改源代码,然后在软件包变更日志中添加条目,更改版本号,以使您的版本与官方版本号不同。以下是所涉及步骤的示例(Debian 和 Ubuntu 在这方面的工作方式相同)。
如果你没有源代码或者不想重新编译,你可以安装该包,然后使用dpkg-divert
将有缺陷的文件移开并用您自己的版本替换它。dpkg-divert
告诉包管理器将给定包中的文件放在不同的位置。这里这是其用法的一个例子。
如果你没有软件包的源代码,而需要将修复程序部署到多台机器,则可以安装该软件包,然后修改有缺陷的文件,并使用以下命令构建新软件包:dpkg-repack
。这更像是一种绝望之举,而不是一种管理软件包的强大方法;我建议尽可能修补源代码并部署您自己编译的软件包。
答案3
您应该能够使用 检索包源(您在那里只获得了二进制文件)apt-get -d source packagename
。然后,您可以在其中进行修改,并使用debuild
它再次构建它。