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

我有一个有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
    ;; 修改我的代码并更新
    
  4. 重新打包/重建

    mkdir -p debian/DEBIAN
    ; 步骤1
    cp -R ./debian-binary debina/DEBIAN
    cp -R ./control debian/DEBIAN
    cp -R ./control debian/DEBIAN
    cp -R ./control debian/DEBIAN
    ; 步骤2
    cp -R ./etc debian/DEBIAN
    cp -R ./usr debian/DEBIAN
    
  5. 现在制作 .DEB 文件

    ; 这是应用 --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: 正在构建软件包 `desktopvideo',输出到 `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
3个回答

如果你还没有安装构建工具,请执行以下命令:sudo apt-get install build-essential 你可以使用apt-get source DesktopVideo命令将源代码、差异文件和与deb包相关的所有打包文件拉取到当前目录。然后,在此基础上应用你的补丁,在日志文件中添加新条目dch -i,最后使用fakeroot和dpkg创建软件包dpkg-buildpackage -rfakeroot -us -uc

技术上来说,你想做的是可行的,但你需要比你看起来更加小心。很难知道你做错了什么,因为你没有复制粘贴你输入的所有内容。我发现了一个拼写错误(cp -R ./debian-binary debina/DEBIAN,显然你没有准确地报告你到底做了什么),还有一个错误(cp -R不会保留所有权和权限,你需要以root身份使用cp -Rpcp -a)。
修改软件包的最佳方法是获取软件包源代码(apt-get source DesktopVideo)。修改源代码,然后在软件包更改日志中添加一个条目,将版本号更改为与官方版本号不同的值。这里是涉及的步骤示例(Debian和Ubuntu在这方面的工作方式完全相同)。
如果您没有源代码或不想重新编译,您可以安装该软件包,然后使用dpkg-divert将有问题的文件移出,并用您自己的版本替换它。这里是一个使用示例。
如果您没有软件包的源代码并且需要在多台机器上部署修复程序,您可以安装该软件包,然后修改有问题的文件,并使用dpkg-repack构建一个新的软件包。这更像是一种绝望的行为,而不是一种强大的软件包管理方式;我建议尽可能地修补源代码并部署您自己编译的软件包。

你应该能够使用 apt-get -d source packagename 命令获取软件包的源代码(你只有二进制文件)。然后你可以在其中进行调整,并使用 debuild 命令重新构建它。