如何制作/提取/修改包的源并重新打包?

如何制作/提取/修改包的源并重新打包?

我有一个包有 bug,我需要修改它,然后重新打包,这就是我的做法。还有其他快捷方法吗?

  1. 仅列表/查看(驱动程序文件或应用程序)

    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
    
  2. 提炼

    ar x DesktopVideo-8.0.1-amd64.deb
    control.tar.gz  data.tar.gz debian-binary
    
  3. 提取 tar.gz

    tar xvfz control.tar.gz
    tar xvfz data.tar.gz
    ;; modify my codes and updates
    
  4. 重新包装/重建

    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
    
  5. 立即制作 .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 -Rpcp -a作为 root)。

修改软件包的最佳方法是获取软件包源代码 ( apt-get source DesktopVideo)。修改源代码,然后在软件包变更日志中添加条目,更改版本号,以使您的版本与官方版本号不同。以下是所涉及步骤的示例(Debian 和 Ubuntu 在这方面的工作方式相同)。

如果你没有源代码或者不想重新编译,你可以安装该包,然后使用dpkg-divert将有缺陷的文件移开并用您自己的版本替换它。dpkg-divert告诉包管理器将给定包中的文件放在不同的位置。这里这是其用法的一个例子。

如果你没有软件包的源代码,而需要将修复程序部署到多台机器,则可以安装该软件包,然后修改有缺陷的文件,并使用以下命令构建新软件包:dpkg-repack。这更像是一种绝望之举,而不是一种管理软件包的强大方法;我建议尽可能修补源代码并部署您自己编译的软件包。

答案3

您应该能够使用 检索包源(您在那里只获得了二进制文件)apt-get -d source packagename。然后,您可以在其中进行修改,并使用debuild它再次构建它。

相关内容