Como o apt-get realmente funciona?


34

Ok, eu entendo como posso usar apt-get {install|upgrade|remove} mypackagespara instalar, atualizar ou remover binários, bem como seus arquivos e dependências de dados de configuração (na verdade, removeapenas os removeremos, a menos que sejam fornecidos sinalizadores adicionais).

Eu não estou procurando como é usado como o mandescreve isso, mas alto nível o que está fazendo. Meu objetivo final é criar um meio para eu instalar e gerenciar algum software personalizado (criado por um arquivo make) em várias máquinas remotas, e preciso aprender mais sobre o processo. Se as respostas a esta pergunta se basearem em qual distribuição é usada, por favor, costure no Debian.

Além de como geralmente funciona, tenho as seguintes perguntas específicas:

  1. Como o cliente que está acessando o repositório apt controla os arquivos?
  2. O repositório deve estar hospedado no mesmo sistema operacional (ou seja, o repositório apt pode ser hospedado no redhat)?
  3. Como são especificados os locais para instalar os arquivos? Isso é especificado pelo .debarquivo?
  4. Como uma máquina remota está acessando o repositório? É apenas ftp (s) ou http (s)?
  5. A máquina que hospeda o repositório está executando um software especial (como o gitlab para um repositório git) ou é apenas um sistema de arquivos estruturado?

Respostas:


47

Você precisa dar uma olhada em https://wiki.debian.org/Packaging - o tutorial de empacotamento irá ajudá-lo muito, bem como partes do novo guia do mantenedor.

Quanto às suas perguntas, em ordem:

  1. O repositório contém arquivos "lista". Por exemplo, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatebaixa esses arquivos da lista e os armazena /var/lib/apt/lists. Os arquivos de lista listam todos os pacotes, incluindo vários metadados e uma URL relativa para encontrar o .deb em. (Eles são arquivos de texto simples legíveis por humanos, para que você possa ver).

  2. OS não importa. Você pode hospedá-lo no Windows, se quiser. (Bem, você talvez tenha problemas com nomes de arquivos que o Windows não gosta.) (Veja também os itens 4 e 5).

  3. Sim, está dentro do arquivo deb. Um arquivo deb é na verdade um arquivo morto (usando ar). Dentro estão alguns arquivos tar; um deles é (essencialmente) extraído para /.

  4. É apenas HTTP (ou HTTPS, FTP, ou ... o apt-get suporta muitos protocolos). Nada de especial, no entanto. Observe que existem arquivos de versão assinados com gpg, que garantem integridade mesmo sem HTTPS. Os espelhos Debian usam principalmente HTTP, não HTTPs. (Alguns também suportam HTTPS por confidencialidade).

  5. É apenas um sistema de arquivos estruturado.

Uma visão geral rápida e de alto nível de como o apt-get interage com uma fonte de pacote:

  1. Você configura quais fontes procurar no seu arquivo sources.list. Considere uma linha como:

    deb http://http.us.debian.org/debian/ stretch main
    

    debdiz que esta é uma fonte para os arquivos getdeb (binário); depois, há o prefixo da URL, suite / release ("stretch") e componente ("main").

  2. O apt-get tem uma lista de arquiteturas, obtém isso do dpkg. Digamos que dpkg --print-architectureé amd64. O apt-get agora pode criar os URLs dos quais realmente será baixado, combinando o prefixo do URL, a palavra "dists", a suíte, o componente e a arquitetura. Depois, ele seleciona alguns nomes de arquivos fixos, como "Packages.xz". Isso fornece o URL acima (no # 1). Existem mais alguns arquivos com nomes / caminhos definidos, como o arquivo Release http://http.us.debian.org/debian/dists/stretch/Release e sua assinatura (o mesmo, com .gpg anexado). Esses são todos os arquivos de texto simples (possivelmente compactados). O arquivo de lançamento contém somas de verificação para outros arquivos que o apt-get irá baixar, como o Packages.xz.

  3. O arquivo Packages.xz lista todos os pacotes desse conjunto / nome de código / arquitetura. Também fornece o caminho onde esse arquivo está localizado; por exemplo pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Quando você pede ao apt-get para baixar um pacote, ele usa esse local + o URL base para baixar o pacote, para que o pacote esteja em http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. O outro diretório interessante é em sourcevez de binary-amd64. Isso é usado para suas deb-srcentradas; ele contém informações sobre pacotes de origem (e é bastante semelhante).

  6. Existem outras coisas (todas opcionais, acredito) que podem fazer parte do repositório (ou seja, disponível via HTTP): difere entre diferentes versões do arquivo Packages.xz; traduções de descrições de pacotes, uma lista completa de todos os arquivos instaláveis ​​e a que pacote pertence (Conteúdo-amd64.gz, usado por, por exemplo, apt-file, não pelo apt-get) etc. Isso provavelmente não é relevante para você, mas você pode vê-los todos navegando em http://http.us.debian.org/debian/dists/stretch/ ; a maioria deles são arquivos de texto simples.

Todos esses arquivos são texto simples. Eles podem, em teoria, ser criados à mão. Na prática, todo mundo usa uma dessas ferramentas de geração de repositório . Aqui - e eu aviso que essa foi uma escolha feita há muito tempo, então pode estar desatualizada - usamos o mini-dinstall. A saída dessas ferramentas são arquivos comuns ou, na pior das hipóteses, links simbólicos. Você pode sincronizá-los novamente com o servidor da web que desejar.


Bata em mim ;-). unix.stackexchange.com/q/285635/86440 aborda o aspecto de integridade das coisas (ponto 4). O suporte ao FTP no lado do espelho foi desativado recentemente no IIRC.
Stephen Kitt

Em relação ao item 2, debian.org/doc/manuals/distribute-deb/… afirma diferentemente. Graças
user1032531

Em relação a # 5, qual é o objetivo de wiki.debian.org/DebianRepository/…
user1032531

1
@ user1032531 # 2. A criação de pacotes é melhor feita no Debian. Mas seu servidor web pode ser qualquer coisa. (Geralmente, você cria o pacote em seu host de construção, possivelmente até toda a estrutura do repositório, e depois faz o upload para o servidor da web.) # 5. Essas ferramentas ajudam a construir o sistema de arquivos estruturado, incluindo todos os arquivos de listas, arquivos de versões assinadas etc. (Eles também são provavelmente mais fáceis de executar no Debian).
derobert 11/07

2
O pacote @FaheemMitha (de alguma compactação, o apt moderno prefere .xz) é definitivamente baixado e acaba /var/lib/apt/lists/. O conteúdo é baixado por apt-file e auto-apt.
derobert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.