apt-get 到底是如何工作的?

apt-get 到底是如何工作的?

好的,我了解如何使用apt-get {install|remove} mypackagesapt-get upgrade安装、升级或删除二进制文件及其配置数据文件和依赖项(实际上,remove除非提供其他标志,否则只会删除二进制文件)。

我不是在寻找它是如何使用的,正如所man描述的那样,而是在寻找它在做什么的高层次。我的最终目标是创建一种方法,让我在多台远程计算机上安装和管理一些自定义软件(由 make 文件创建),并且我需要了解有关该过程的更多信息。如果此问题的答案基于所使用的发行版,请针对 Debian 进行定制。

除了一般的工作原理之外,我还有以下具体问题:

  1. 访问 apt 存储库的客户端如何跟踪文件?
  2. 存储库必须托管在同一操作系统上(即 apt 存储库可以托管在 redhat 上)吗?
  3. 如何指定安装文件的位置?这是文件指定的吗.deb
  4. 远程计算机如何访问存储库?只是 ftp(s) 还是 http(s)?
  5. 托管存储库的机器是否运行特殊软件(例如 gitlab 用于 git 存储库),或者只是某种结构化文件系统?

答案1

你需要看看https://wiki.debian.org/Packaging— 那里的打包教程以及新维护者指南的部分内容将对您有很大帮助。

至于你的问题,按顺序:

  1. 存储库包含“列表”文件。例如。,http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xzapt-get update下载这些列表文件,并将它们存储在/var/lib/apt/lists.列表文件列出了所有包,包括一堆元数据和用于查找 .deb 的相对 URL。 (它们是人类可读的纯文本文件,因此您只需查看即可)。

  2. 操作系统并不重要。如果您愿意,您可以将其托管在 Windows 上。 (好吧,您可能会遇到 Windows 不喜欢的文件名的问题。)(另请参阅 #4 和 #5)。

  3. 是的,它在 deb 文件内。 deb 文件实际上是一个存档(使用ar)。里面是一些tar文件;其中之一(基本上)被提取到/.

  4. 它只是 HTTP(或者 HTTPS,或者 FTP,或者……apt-get 支持很多协议)。不过,没什么特别的。请注意,有一些使用 gpg 签名的发布文件,即使没有 HTTPS,也能保证完整性。 Debian 镜像主要使用 HTTP,而不是 HTTPs。 (为了保密,有些还支持 HTTPS)。

  5. 它只是一个结构化的文件系统。

apt-get 如何与包源交互的快速、高级概述:

  1. 您可以在sources.list 文件中配置要查看的源。考虑这样一行:

    deb http://http.us.debian.org/debian/ stretch main
    

    deb说这是获取 .deb(二进制)文件的来源;然后是 URL 前缀、套件/版本(“stretch”)和组件(“main”)。

  2. apt-get 有一个体系结构列表,它从 dpkg 获取。比方说dpkg --print-architectureamd64。 apt-get 现在可以通过组合 URL 前缀、单词“dists”、套件、组件和架构来构建实际要下载的 URL。然后它添加了一些固定的文件名,例如“Packages.xz”。这给出了上面的 URL(在 #1 中)。还有一些具有已定义名称/路径的文件,例如发布文件http://http.us.debian.org/debian/dists/stretch/Release及其签名(相同,附加 .gpg)。这些都是(可能是压缩的)纯文本文件。发布文件包含 apt-get 将要下载的其他文件的校验和,例如 Packages.xz。

  3. Packages.xz 文件列出了全部该套件/代号/架构中的包。它还给出了小路该文件所在的位置;例如pool/main/0/0ad/0ad_0.0.21-2_amd64.deb

  4. 当您要求 apt-get 下载软件包时,它会使用该位置 + 基本 URL 来下载软件包,因此该软件包位于http://http.us.debian.org/debian/pool/main/0/0ad/0ad_0.0.21-2_amd64.deb

  5. 另一个有趣的目录是source而不是binary-amd64.这用于您的deb-src条目;它包含有关源包的信息(并且在其他方​​面非常相似)。

  6. 还有一些其他东西(我相信它们都是可选的)可以成为存储库的一部分(即通过 HTTP 可用):Packages.xz 文件不同版本之间的差异;软件包描述的翻译、每个可安装文件的完整列表及其所属的软件包(Contents-amd64.gz,例如 apt-file 使用,而不是 apt-get 使用)等。这些可能与您无关,但你可以通过浏览来看到它们http://http.us.debian.org/debian/dists/stretch/;其中大多数是纯文本文件。

所有这些文件都是纯文本。理论上,它们可以手工创建。在实践中,每个人使用其中之一存储库生成工具。在这里——我警告说这是很久以前做出的选择,所以可能已经过时了——我们使用 mini-dinstall。这些工具的输出是普通文件,或者最坏的情况是符号链接。您可以将它们同步到您想要的任何网络服务器。

相关内容