Como o apt-get realmente funciona?

25

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

Eu não estou procurando como é usado como o man descreve isso, mas alto nível o que está fazendo. Meu objetivo final é criar um meio para instalar e gerenciar alguns softwares personalizados (criados por um arquivo make) em várias máquinas remotas, e preciso aprender mais sobre o processo. Se as respostas a esta pergunta são baseadas em qual distribuição é usada, por favor adapte ao Debian.

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

  1. Como o cliente que está acessando o repositório apt acompanha 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 os locais para instalar arquivos são especificados? Isso é especificado pelo arquivo .deb ?
  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?
por user1032531 11.07.2017 / 17:13

1 resposta

39

Você precisa dar uma olhada no link - o tutorial de empacotamento irá ajudá-lo muito, bem como partes do guia do novo mantenedor.

Em relação às suas perguntas, na ordem:

  1. O repositório contém arquivos "list". Por exemplo, link . apt-get update baixa esses arquivos de lista e os armazena em /var/lib/apt/lists . Os arquivos de lista listam todos os pacotes, incluindo um monte de metadados e uma URL relativa para encontrar o .deb em. (Eles são arquivos de texto simples legíveis por humanos, então você pode apenas olhar para ele).

  2. O SO não importa. Você poderia hospedá-lo no Windows, se quisesse. (Bem, você talvez tenha problemas com nomes de arquivos que o Windows não gosta.) (Veja também # 4 e # 5).

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

  4. É apenas HTTP (ou HTTPS, ou FTP, ou ... o apt-get suporta muitos protocolos). Nada de especial, no entanto. Note que existem arquivos Release, assinados com gpg, que garantem a integridade mesmo sem HTTPS. Espelhos Debian usam principalmente HTTP, não HTTPs. (Alguns apoiam HTTPS também para 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 pacotes:

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

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

    deb diz que esta é uma fonte para arquivos .deb (binários) de gettings; em seguida, há o prefixo de URL, suite / release ("stretch") e componente ("main").

  2. O apt-get tem uma lista de arquiteturas, ele obtém isso do dpkg. Digamos que dpkg --print-architecture seja amd64 . O apt-get agora pode construir as URLs das quais vai realmente fazer o download, combinando o prefixo da URL, a palavra "dists", o conjunto, o componente e a arquitetura. Em seguida, ele cria alguns nomes de arquivos fixos, como "Packages.xz". Isso dá o URL acima (em # 1). Existem mais alguns arquivos com nomes / caminhos definidos, como o arquivo de lançamento link e sua assinatura (mesmo, com .gpg acrescentado). 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 naquele conjunto / codinome / 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ê solicita ao apt-get para baixar um pacote, ele usa esse local + o URL base para baixar o pacote, de modo que o pacote esteja em link

  5. O outro diretório interessante é source em vez de binary-amd64 . Isso é usado para suas entradas deb-src ; contém informações sobre pacotes de fontes (e é bastante semelhante).

  6. Existem algumas outras coisas (todas elas opcionais, acredito) que podem fazer parte do repositório (isto é, disponível via HTTP): diffs entre diferentes versões do arquivo Packages.xz; traduções de descrições de pacotes, uma lista completa de cada arquivo instalável e a qual pacote ele pertence (Contents-amd64.gz, usado por exemplo, apt-file, não pelo apt-get) etc. Estes provavelmente não são relevantes para você, mas você pode ver todos navegando pelo link ; 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, todos usa uma dessas ferramentas de geração de repositórios . Aqui - e eu aviso que essa foi uma escolha feita há muito tempo, então pode estar desatualizada - usamos mini-dinstall. A saída dessas ferramentas são arquivos comuns ou, na pior das hipóteses, links simbólicos. Você pode rsync-los para qualquer servidor web que você deseja.

    
por 11.07.2017 / 17:35