O que o apt-get install faz sob o capô?

60

O que o apt-get install ...comando faz?

Quando eu insiro o apt-get install ...comando, alguns textos aparecem na tela, mas isso não tem informações suficientes para mim. Quero saber se algum arquivo é criado / editado, qualquer serviço é iniciado e outras atividades ...

Existe algum .sharquivo executado quando a apt-get install ...execução? Se sim, como posso ver o conteúdo desse sharquivo?

O motivo desta pergunta é que recentemente tentei instalar o tomcat7 apt-get install tomcat7. Tudo funciona bem até eu instalar tomcat7-admin(aplicativo Web do gerente), o servidor não responde a nenhuma solicitação. Eu tentei isso muitas vezes, e isso sempre acontece.

TrungDQ
fonte
veja também: askubuntu.com/questions/110988/…
lesmana 24/10
Visite também askubuntu.com/questions/481241/…
Pandya
visite wiki.debian.org/Apt para obter mais detalhes
Pandya
2
A partir de 14.04, apt-getestá sendo substituído por apt. A substituição ainda não está completa, mas trabalha para install, upgradee dist-upgradeentre outros.
Paddy Landau
@PaddyLandau É um substituto adequado ou um utilitário extra / wrapper?
Muru

Respostas:

49

Principalmente, apt-getfaz o seguinte:

  • verifica dependências (e pede para instalá-las),
  • baixa o pacote, verifica e depois pede dpkgpara instalá-lo.

dpkg vai:

  • extraia o pacote e copie o conteúdo para o local correto e verifique se há arquivos e modificações pré-existentes neles,
  • Executar scripts de mantenedor de pacotes : preinst, postinst(e prerm, postrmantes que estes, se um pacote está sendo atualizado)
  • executar algumas ações baseadas em gatilhos

Você pode estar interessado nos scripts do mantenedor, que geralmente estão localizados em /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Estes são geralmente scripts shell, mas não há regra rígida. Por exemplo:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm
muru
fonte
30

Em resumo : apt-get installfaz tudo o que é necessário para que seu sistema possa executar com êxito o novo aplicativo de software instalado.

Mais longo:

Preliminares:

Na página de manual :

Todos os pacotes exigidos pelos pacotes especificados para instalação também serão recuperados e instalados.

Esses pacotes são armazenados em um repositório na rede. Portanto, apt-getbaixa todos os necessários em um diretório temporário ( /var/cache/apt/archives/). Eles serão baixados de um servidor Web ou FTP. Eles são especificados no chamado sources.list; uma lista de repositórios. A partir de então, eles são instalados um a um processualmente.

Os primeiros são os que não têm mais dependências; portanto, nenhum outro pacote precisa ser instalado para eles. Com isso, outros pacotes (que tinham dependências anteriormente) agora não têm mais dependências. O sistema continua repetindo esse processo até que os pacotes especificados sejam instalados.

Cada pacote passa por um procedimento de instalação.

Instalação do pacote:

Nas distribuições Linux baseadas no Debian, como o Ubuntu, esses pacotes estão em um formato padronizado especificado chamado: deb - O formato de pacote binário do Debian .

Esse pacote contém os arquivos a serem instalados no sistema. Também eles contêm um arquivo de controle . Esse arquivo contém scripts que o sistema de empacotamento deve executar em uma situação específica; os chamados scripts de manutenção . Esses scripts são divididos em:

  • preinst: antes da instalação dos arquivos na hierarquia de arquivos do sistema
  • postinst: após a instalação
  • prerm: antes da desinstalação
  • postrm: após a desinstalação

Há uma imagem interessante, mostrando o procedimento de instalação de um novo pacote:

instalação

Também há mais arquivos de controle, os mais importantes são os seguintes:

  • control: Uma lista das dependências e outras informações úteis para identificar o pacote
  • conffiles: Uma lista de arquivos de configuração (geralmente aqueles em /etc)
  • debian-binary: contém a versão do pacote deb, atualmente 2.0
  • md5sums: Uma lista de md5sums de cada arquivo no pacote para verificação
  • templates: Um arquivo com descrições de erro e diálogos durante a instalação
caos
fonte
11

Para o real sob o capô material, você precisa pegar a fonte Apt. Bastante simples se você tiver repositórios de origem ativados:

apt-get source apt

O apt-getcomando em si vive cmdline/apt-get.cc. É uma dor de ler, mas a maioria das apt-getações é explicada extensivamente por lá. A instalação, no entanto, é mapeada através de uma DoInstallfunção que reside apt-private/private-install.{cc,h}.

Você deve se lembrar que o apt-get é apenas um lado da moeda.
dpkgestá lidando com a instalação real, mas DoInstallnão sabe dpkgdiretamente. apt-geté realmente surpreendentemente independente de gerenciador de pacotes. Toda a funcionalidade é abstraída através deapt-pkg/package-manager.cc

Estou apenas olhando brevemente, mas mesmo lá não consigo ver onde isso realmente se liga aos dpkgsistemas. Parte disso parece ter sido configurada automaticamente, apt-pkg/aptconfiguration.ccmas esse é um poço profundo. Você pode passar dias descobrindo isso.

A documentação de origem é boa. Você pode fazer coisas piores do que analisar cada arquivo e ler o cabeçalho para descobrir o que realmente está acontecendo.

Oli
fonte
6

Existem algumas respostas fantásticas aqui que são melhores que essa curta, mas algo que você pode considerar para ajudá-lo a entender melhor as alterações feitas por um gerenciador de pacotes é o Docker . Você pode diferenciar as alterações feitas em um contêiner usando docker diff <container>e ele mostrará todas as alterações. Isso é especialmente útil para dar uma olhada por baixo do capô para ver o que apt-get installfaz com um sistema. Uma pesquisa rápida fornece vários recursos para ajudar a implementar isso.

L0j1k
fonte
11
Obrigado por dar seu ponto de vista. No contêiner do Docker, instalei o Firefox e em outra guia do terminal, monitorei de perto o diff do contêiner e aprendi o que todos os arquivos estão mudando no contêiner. Isso me ajudou a entender mais claramente.
abhy