好的,我了解如何使用apt-get {install|remove} mypackages
和apt-get upgrade
安装、升级或删除二进制文件及其配置数据文件和依赖项(实际上,remove
除非提供其他标志,否则只会删除二进制文件)。
我不是在寻找它是如何使用的,正如所man
描述的那样,而是在寻找它在做什么的高层次。我的最终目标是创建一种方法,让我在多台远程计算机上安装和管理一些自定义软件(由 make 文件创建),并且我需要了解有关该过程的更多信息。如果此问题的答案基于所使用的发行版,请针对 Debian 进行定制。
除了一般的工作原理之外,我还有以下具体问题:
- 访问 apt 存储库的客户端如何跟踪文件?
- 存储库必须托管在同一操作系统上(即 apt 存储库可以托管在 redhat 上)吗?
- 如何指定安装文件的位置?这是文件指定的吗
.deb
? - 远程计算机如何访问存储库?只是 ftp(s) 还是 http(s)?
- 托管存储库的机器是否运行特殊软件(例如 gitlab 用于 git 存储库),或者只是某种结构化文件系统?
答案1
你需要看看https://wiki.debian.org/Packaging— 那里的打包教程以及新维护者指南的部分内容将对您有很大帮助。
至于你的问题,按顺序:
存储库包含“列表”文件。例如。,http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz。
apt-get update
下载这些列表文件,并将它们存储在/var/lib/apt/lists
.列表文件列出了所有包,包括一堆元数据和用于查找 .deb 的相对 URL。 (它们是人类可读的纯文本文件,因此您只需查看即可)。操作系统并不重要。如果您愿意,您可以将其托管在 Windows 上。 (好吧,您可能会遇到 Windows 不喜欢的文件名的问题。)(另请参阅 #4 和 #5)。
是的,它在 deb 文件内。 deb 文件实际上是一个存档(使用
ar
)。里面是一些tar文件;其中之一(基本上)被提取到/
.它只是 HTTP(或者 HTTPS,或者 FTP,或者……apt-get 支持很多协议)。不过,没什么特别的。请注意,有一些使用 gpg 签名的发布文件,即使没有 HTTPS,也能保证完整性。 Debian 镜像主要使用 HTTP,而不是 HTTPs。 (为了保密,有些还支持 HTTPS)。
它只是一个结构化的文件系统。
apt-get 如何与包源交互的快速、高级概述:
您可以在sources.list 文件中配置要查看的源。考虑这样一行:
deb http://http.us.debian.org/debian/ stretch main
deb
说这是获取 .deb(二进制)文件的来源;然后是 URL 前缀、套件/版本(“stretch”)和组件(“main”)。apt-get 有一个体系结构列表,它从 dpkg 获取。比方说
dpkg --print-architecture
是amd64
。 apt-get 现在可以通过组合 URL 前缀、单词“dists”、套件、组件和架构来构建实际要下载的 URL。然后它添加了一些固定的文件名,例如“Packages.xz”。这给出了上面的 URL(在 #1 中)。还有一些具有已定义名称/路径的文件,例如发布文件http://http.us.debian.org/debian/dists/stretch/Release及其签名(相同,附加 .gpg)。这些都是(可能是压缩的)纯文本文件。发布文件包含 apt-get 将要下载的其他文件的校验和,例如 Packages.xz。Packages.xz 文件列出了全部该套件/代号/架构中的包。它还给出了小路该文件所在的位置;例如
pool/main/0/0ad/0ad_0.0.21-2_amd64.deb
。当您要求 apt-get 下载软件包时,它会使用该位置 + 基本 URL 来下载软件包,因此该软件包位于http://http.us.debian.org/debian/pool/main/0/0ad/0ad_0.0.21-2_amd64.deb
另一个有趣的目录是
source
而不是binary-amd64
.这用于您的deb-src
条目;它包含有关源包的信息(并且在其他方面非常相似)。还有一些其他东西(我相信它们都是可选的)可以成为存储库的一部分(即通过 HTTP 可用):Packages.xz 文件不同版本之间的差异;软件包描述的翻译、每个可安装文件的完整列表及其所属的软件包(Contents-amd64.gz,例如 apt-file 使用,而不是 apt-get 使用)等。这些可能与您无关,但你可以通过浏览来看到它们http://http.us.debian.org/debian/dists/stretch/;其中大多数是纯文本文件。
所有这些文件都是纯文本。理论上,它们可以手工创建。在实践中,每个人使用其中之一存储库生成工具。在这里——我警告说这是很久以前做出的选择,所以可能已经过时了——我们使用 mini-dinstall。这些工具的输出是普通文件,或者最坏的情况是符号链接。您可以将它们同步到您想要的任何网络服务器。