Ubuntu 存储库中的文件是如何组织的?存储库中有哪些重要文件?当存储库不一致、损坏或正在同步时会发生什么?
答案1
Joao 回答了我的问题的后半部分,所以我自己调查了前半部分。在根级别,有四个目录和一个文件。
root
| -- dists
| -- pool
| -- indices
| -- project
| -- ls-lr.gz
(此外,在我的大学存储库中,只有前两个条目。因此,最后三个条目对于存储库的运行似乎不是必不可少的。)
该文件包含在存储库根目录上运行的命令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
目录包含许多文件,其中大多数是空的。非空文件似乎为软件包提供了一些额外的元数据。
答案2
根据你的 apt 源上的 deb 行,apt 将获取:
- http://archive.ubuntu.com/ubuntu/dists/release/Release
- http://archive.ubuntu.com/ubuntu/dists/release/Release.gpg
- http://archive.ubuntu.com/ubuntu/dists/maverick/COMPONENT/binary-ARCH/Packages.gz
它验证 Release.gpg 是否为 Release 文件的有效签名,以及 Packages.gz 内容是否与 Release 文件中的完整性校验和匹配。如果不匹配,则报告存储库签名完整性失败。
所请求软件包的软件包文件名是根据先前检索到的 Packages.gz 内容确定的。下载后,其内容校验和必须与 Packages.gz 校验和内容匹配,否则会报告完整性失败。
您的最后一个问题与镜像结构本身无关,而是与镜像同步有关,这取决于镜像过程。可以使用临时位置进行同步,而不会在同步期间破坏存档完整性。我不确定所有 Ubuntu 镜像是否都这样做。