Eli*_*ias 41 package-management packaging software-installation
我最近了解到获取任何给定包的源代码是多么容易,apt-get source这样我就可以获取源代码、进行更改并安装我自己的任何包的修改版本。这很棒!
直到今天,我一直假设每个包都有自己的源代码,不同的包会有不同的源代码。
但是,现在我刚刚发现不同的包可以具有相同的源代码。下面是一个例子:
以下 4 个包似乎具有相同的源代码:
gir1.2-mutter-4
libmutter-4-0
mutter
mutter-common
Run Code Online (Sandbox Code Playgroud)
所有四个都安装在我的 Ubuntu 19.04 计算机上。这样做apt-get source gir1.2-mutter-4的结果与apt-get source libmutter-4-0, 以及mutter和mutter-common包的结果完全相同。
这是我检查它的方法:
mkdir a
cd a
apt-get source gir1.2-mutter-4
cd ..
mkdir b
cd b
apt-get source libmutter-4-0
cd ..
diff -r a b
Run Code Online (Sandbox Code Playgroud)
上面最后一行的递归差异没有给出任何输出,表明目录具有相同的内容。
现在我的问题是:不同的包如何具有相同的源代码?
假设这是故意的而不是某种错误,包之间有什么区别,我如何才能看到这种区别?
可能是这些包在配置和编译源代码的方式上有所不同,例如代码的不同部分包含在不同的包中吗?如果是这样,我在哪里可以找到有关如何配置每个包的信息?
编辑:忘了补充一点,如果你想测试这个,为了使其apt-get source正常工作,你可能首先需要software-properties-gtk按照这里的描述启用它:https : //askubuntu.com/a/857433/874649
编辑2:感谢您的出色回答!我还发现这很有帮助https://askubuntu.com/a/246721/874649 - 关于非常有用的apt-get build-dep和dpkg-buildpackage命令。修改源包的源代码后,dpkg-buildpackage -us -uc可用于构建可用于安装修改后的程序的新 .deb 文件。
Tho*_*ard 44
您将构建的二进制包与构建包的底层源代码/包混淆了。
您所指的包都是从相同的源代码/包构建的mutter。您可以通过转到packages.ubuntu.com,搜索您正在查看的包,然后参考它所指的“源包”来轻松找到它。在这种情况下是mutter:
但是,从那里,我们可以检查Launchpad 页面上的 Mutter 源包,并看到它构建了大量二进制包(构建编译源代码等用于安装):
这些描述描述了每个包包含/安装的内容。重点关注您指出的 4 个包,并使用以下描述:
gir1.2-mutter-4- Mutter 的 GObject 内省数据(被girGObject 用作 Mutter 和 GObject 交互的库/数据)libmutter-4-0- Mutter 窗口管理器的底层库。(通常用于插件开发、开发和编译 Mutter 集成等)mutter - 使用 GNOME 的窗口管理器库的实际 Mutter 窗口管理器(这就是需要 GObject 的原因)mutter-common- Mutter 的共享文件 - 通常是默认配置选项或项目,这些选项或项目对于从源包构建的所有包都是通用的。您在包列表中看到的是源自相同源代码的构建包- 每个包都是在构建/编译后安装的不同项目,用于不同的东西。您可以通过下载单个包,然后使用 p7zip 或 Ubuntu 中的内置存档管理器访问它们来查看包本身中的内容,并以这种方式查看每个包包含的内容的差异。 也就是说,它们都来自相同的源代码——它们只是包含正在安装到系统的不同项目。
Eli*_*gan 13
源包和二进制包分开存在。每个源包可能有多个与之关联的二进制包。这就是说可以从同一个源包构建多个二进制包。
发生这种情况的一种常见方式是,您有一个程序、一个程序用来完成其大部分工作的库、用于编译它的头文件以及使用该库的其他(可能是未来的)程序。它们都是在同一个源代码树中开发和维护的,无论是否有 Debian 或 Ubuntu 补丁,都可以用来生成源包。然后,该源包用于为程序、库和头文件构建单独的二进制包。
这就是你在这里拥有的(还有其他一些二进制包)。您在apt source命令中指定了不同的二进制包,但该命令正在下载和解压相同的源包。
发生这种情况是因为,当您将包名称传递给apt source但没有具有该名称的源包时,它会将其视为二进制包的名称,并假设您需要该二进制包的相应源包。
在Launchpad 的主 Ubuntu 页面上,您可以搜索软件包。Launchpad 显示有关源包的信息(而Ubuntu Packages Search显示有关二进制包的信息)。如果您搜索mutter,那么正如 Thomas Ward 所说,您将在 Ubuntu 中找到源包的 Launchpad 页面mutter。这是查看哪些二进制包对应于源包的一种好方法。在该页面的顶部附近,它说:
Ubuntu 中的 mutter 包
gir1.2-mutter-4:Mutter 的 GObject 内省数据
libmutter-4-0:来自 Mutter 窗口管理器的窗口管理器库
libmutter-4-0-dbgsym:在 ubuntu eoan 中没有可用于 libmutter-4-0-dbgsym 的摘要。
libmutter-4-dev:Mutter 窗口管理器的开发文件
mutter:使用 GNOME 的窗口管理器库的示例窗口管理器
mutter-common:Mutter 窗口管理器的共享文件
mutter-dbgsym:mutter 的调试符号
即使二进制包与构建它的源包的名称不同,您通常也可以通过在 Launchpad 上搜索二进制包来找到该源包。
您通常可以通过检查二进制包的名称来了解二进制包与用于构建它的源包之间的关系:
以 开头的二进制包名称lib通常提供可供多个程序(包括未来程序)使用的代码库。
以 结尾的那些-dev提供头文件,这有助于编译使用这些库的源代码。
以调试符号结尾-dbg或-dbgsym提供调试符号的那些(因此即使libmutter-4-0-dbgsym当前没有显示摘要,我们知道它是调试符号包)。
以 结尾的-common往往提供驻留在/usr/share. 这些文件有时是有效的代码,只是静态和声明性的形式,但它们也可以提供接口翻译成自然(即人类)语言。对于这样一个包中可以包含的内容并没有太多限制。
对于mutter,-common二进制包(在最新版本中)包含模式、键绑定和文档。-common包的一个好处是,因为它们通常不包含任何本地机器代码,所以相同的包文件通常适用于所有架构。(严格来说,这是放置在/usr/share. 中的文件的一个关键要求。)
| 归档时间: |
|
| 查看次数: |
7760 次 |
| 最近记录: |