如果我错了请纠正我
据我所知,Debian/Ubuntu/Fedora 等发行版通常会在创建软件包之前修改 vanilla 源代码。这些更改背后的原因是什么?原始源代码有问题吗?如何获取更改列表以及对特定软件包进行这些更改的原因?
谢谢您的帮助!
答案1
apt-get source package
您将获得两个或三个文件:“原始”tarball(有时会修改,但很少……唯一的变化通常是文件名)——名为 *.orig.tar.gz,debian 更改以 *.diff.gz 文件的形式出现,以及一些元数据。有时缺少 .diff.gz 文件:这意味着该软件包仅为 debian/ubuntu 构建,以处理一些非常具体的发行版工作……例如dak
管理 debian 存档上传。然后所有代码都在原始 tarball 中。
原因有很多:修复软件错误(当上游不想这样做时),使软件适应 Debian(fe 调整文件路径)。Debian 希望所有软件包都符合文件系统层次标准,这是一个非常常见的调整。
由于打包问题,原始 tarball 有时与上游创建的 tarball 不同。我记得看到过一个程序分布在几个 tarball 中,而它们只生成一个可执行文件——debian 维护者决定制作自己的“原始”tarball,其中包含打包的上游 tarball。另一个原因是有时 debian 维护者决定向软件包中添加一些二进制文件。很难将二进制文件放入 .diff.gz 文件中,因此原始 tarball 被修改(这通常在软件包文档中有明确描述)。
有时(非常罕见)许可是问题所在。上游可能不理解或不想理解某些许可的含义。Debian 希望解决所有许可问题,因此 Debian 补丁会执行某些特定操作,或者原始 tarball 会从非法分发的文件中删除。
也有可能某些内容是经过授权的,因此您可以使用但不能分发。通常(例如msttcorefonts
,flashplugin-nonfree
)debian 软件包只是某种软件包的安装程序,软件包中没有原始内容。
pine
这个包也很有趣,因为许可证禁止分发编译后的形式。因此没有pine
二进制包,但有pine
源码包。你可以使用上面的命令下载它并编译成你自己的 debian 包。
答案2
原因可能与维护者和软件包一样多种多样。我猜他们通常会修改软件,以便更好地与发行版中的其他软件集成,或者添加“官方”版本中没有的功能。
您可以通过在命令行中输入来获取源代码(以及特定于 ubuntu 的差异)
sudo apt-get source PACKAGENAME
。它会将 vanilla 源代码和软件包的差异下载到当前目录。它们通常还会在源代码中包含一些注释。
答案3
可以这样想。如果您通过 从原始源码包 安装了该程序./configure; make; make install
,那么您还有一些工作要做。您必须创建菜单条目、设置配置文件等。您可能必须给出./configure
。--prefix
发行版维护人员所做的更改通常只不过是将这些单调乏味的任务自动化而已。