apt-get如何真正起作用?


34

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

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

除了一般的工作方式外,我还有以下一些具体问题:

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

Answers:


47

您需要看一下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签名的Release文件,即使没有HTTPS也可以保证完整性。Debian镜像大多数使用HTTP,而不使用HTTP。(一些也支持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中)。还有其他一些具有定义的名称/路径的文件,例如Release文件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。这些工具的输出是普通文件,或者更糟的是符号链接。您可以将它们重新同步到所需的任何Web服务器。


击败我吧;-)。unix.stackexchange.com/q/285635/86440涵盖了事物的完整性方面(第4点)。镜像端的FTP支持最近已被IIRC停用。
史蒂芬·基特

关于#2,debian.org / doc / manuals / distribute-deb /…的状态有所不同。谢谢
user1032531'7


1
@ user1032531#2。创建软件包最好在Debian上完成。但是您的Web服务器可以是任何东西。(通常,您在构建主机(甚至可能是整个存储库结构)上创建软件包,然后将其上传到Web服务器。)#5。这些工具可帮助您构建结构化的文件系统,包括所有列表文件,签名的发行文件等(它们也可能最容易在Debian上运行)。
derobert

2
肯定会下载@FaheemMitha软件包(有些压缩,现代apt更喜欢.xz),最终在中下载/var/lib/apt/lists/。内容通过apt-file和自动apt下载。
derobert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.