Respostas:
De acordo com a linha deb na sua fonte apt, o apt buscará:
Ele valida se o Release.gpg é uma assinatura válida para o arquivo Release e se o conteúdo Packages.gz corresponde à soma de verificação de integridade presente no arquivo Release. Se houver uma incompatibilidade, uma falha de integridade da assinatura do repositório será relatada.
O nome do arquivo do pacote solicitado é determinado a partir do conteúdo de Packages.gz recuperado anteriormente. Ele é baixado e sua soma de verificação de conteúdo deve corresponder ao conteúdo da soma de verificação Packages.gz ou uma falha de integridade é relatada.
Sua última pergunta não é sobre a estrutura do espelho em si, é sobre a sincronização do espelho, que depende do processo de espelhamento. É possível sincronizar usando um local temporário sem interromper a integridade do arquivo durante a sincronização. Não tenho certeza se todos os espelhos do Ubuntu fazem isso.
João respondeu a segunda metade da minha pergunta, então eu investiguei a primeira metade por conta própria. No nível raiz, existem quatro diretórios e um arquivo.
root
| -- dists
| -- pool
| -- indices
| -- project
| -- ls-lr.gz
(Também no repo da faculdade, apenas as duas primeiras entradas estavam lá. Portanto, as três últimas parecem não ser essenciais para o funcionamento do repo.)
O arquivo ls-lr.gz
contém a saída do ls -lr
comando conforme executado no diretório raiz do repositório.
O dists
diretório parece conter a maioria dos metadados, incluindo todos os arquivos packages.gz (que contém uma lista de pacotes) e Release.gpg / Release, que assina o pacote. (Obrigado a João pela informação)
O pool
diretório contém os arquivos .deb reais. A organização é /pool/[section]/[letter]/[group]/packagename.deb
. Portanto, a localização real do pacote python-subversion é /pool/main/s/subversion/python-subversion_1.3.2-3ubuntu2%7edapper1_amd64.deb
, porque subversion é o grupo do pacote python-subversion, e s é a primeira letra do subversion.
O projects
diretório parece conter alguns arquivos detalhando como o espelho foi sincronizado com o repositório original.
O indices
diretório contém muitos arquivos, a maioria vazios. Os arquivos não vazios parecem fornecer alguns metadados extras para pacotes.