Ubuntu 存储库的结构是什么?

apo*_*020 34 repository

Ubuntu 存储库中的文件是如何组织的?存储库中有哪些重要文件?当存储库变得不一致、损坏或正在同步时会发生什么?

apo*_*020 22

Joao 回答了我的后半部分问题,所以我自己调查了前半部分。在根级别,有四个目录和一个文件。

root
| -- dists
| -- pool
| -- indices
| -- project
| -- ls-lr.gz
Run Code Online (Sandbox Code Playgroud)

(同样在我的大学回购中,只有前两个条目在那里。所以最后三个似乎对回购的功能无关紧要。)

该文件ls-lr.gz包含在ls -lr存储库根目录上运行的命令的输出。

dists目录似乎包含大部分元数据,包括所有的 packages.gz 文件(其中包含一个包列表)和对包进行签名的 Release.gpg/Release。(感谢 Joao 提供的信息)

pool目录包含实际的 .deb 文件。该组织是/pool/[section]/[letter]/[group]/packagename.deb. 因此python-subversion包的实际位置是/pool/main/s/subversion/python-subversion_1.3.2-3ubuntu2%7edapper1_amd64.deb,因为subversion是python-subversion包的组,s是subversion的第一个字母。

projects目录似乎包含一些详细说明镜像如何同步到原始存储库的文件。

indices目录包含许多文件,其中大部分是空的。非空文件似乎为包提供了一些额外的元数据。

  • 如何在sources.list文件中使用池文件? (2认同)

Joã*_*nto 20

根据 apt 源代码中的 deb 行,apt 将获取:

它验证 Release.gpg 是否是 Release 文件的有效签名,以及 Packages.gz 内容是否与 Release 文件中存在的完整性校验和匹配。如果存在不匹配,则报告存储库签名完整性失败。

所请求包的包文件名由先前检索到的 Packages.gz 内容确定。它被下载,其内容校验和必须与 Packages.gz 校验和内容匹配,否则报告完整性失败。

你最后一个问题不是关于镜像结构本身,而是关于镜像同步,这取决于镜像过程。可以使用临时位置进行同步,而不会在同步期间破坏存档完整性。我不确定是否所有 Ubuntu 镜像都这样做。