Como os pacotes de snap manipulam as dependências compartilhadas?

24

O formato de empacotamento de snap finalmente nos libera do inferno de dependência, permitindo que cada pacote tenha sua própria cópia de dependências. Estou interessado nos detalhes técnicos de como isso acontece. Como isso funciona:

  • se encaixa dependendo da versão de uma biblioteca já instalada via pacotes deb para a versão atual? Ignora a biblioteca instalada?
  • snaps diferentes especificando a mesma versão da mesma biblioteca? Isso desduplica de alguma forma?
  • atualizações para bibliotecas principais que provavelmente serão usadas por muitos snaps? O OpenSSL vem à mente como um enorme ponto de dor.

O xdg-app tem algo chamado um "runtime" :

  

Um conceito fundamental no xdg-app é a divisão em tempo de execução / aplicativo.   Cada aplicativo depende de um tempo de execução, que fornece as bibliotecas principais que   o aplicativo depende. Os tempos de execução são normalmente compartilhados por muitos aplicativos,   mas um usuário pode ter vários tempos de execução instalados ao mesmo tempo.

Parece que, no caso do OpenSSL, ele faria parte do tempo de execução no xdg-apps, portanto, uma atualização do OpenSSL deve afetar de maneira transparente todos os aplicativos do xdg usando o mesmo tempo de execução.

    
por muru 15.06.2016 / 05:46

3 respostas

7

As duas primeiras situações são tratadas de maneira inteligente.

  

Um dos recursos interessantes mencionados é o suporte à deduplicação   para conteúdo nos pacotes Snap. Snaps seria automaticamente   desduplicado de arquivos comuns compartilhados entre snaps com base em seus   hashes de arquivos. Haveria desduplicação na camada do sistema de arquivos,   desduplicação em downloads de snap (com suporte de servidor) e talvez   desduplicação de bibliotecas mapeadas do linker. A desduplicação é uma   item de trabalho grande e provavelmente vai demorar um pouco para implementar totalmente, mas   é um objetivo interessante, no entanto.

Fonte: link

Quanto à terceira situação, eles têm algo parecido com os tempos de execução que você mencionou:

  

Existem três camadas que formam uma máquina rápida: o sistema   camada, fornecida pela Canonical, uma camada de frameworks que estende a   sistema de base produzido por fornecedores em colaboração com a Canonical, e um   conjunto de aplicativos rápidos, fornecidos diretamente pelos fornecedores. Atualizando qualquer   peça significa apenas usar a nova versão de uma imagem somente leitura. Revertendo   para uma versão anterior é igualmente fácil.

Fonte: link

Ainda não existe uma boa documentação descrevendo frameworks, principalmente porque eles ainda parecem estar elaborando os limites do que é um framework. Aqui está um trecho de sua lista de discussão que pode ajudar a esclarecer as coisas.

  

Eu estou experimentando com Frameworks para estender essencialmente o Snappy   sistema de base por software e serviços que muitos snapshots exigem, mas   não deve ser incluído em nenhum e em cada snap devido a problemas de atualização e   Tamanho. O melhor exemplo que tenho para isso é o binário openssl. Muitos   snaps precisam disso para gerar e validar chaves e certificados.

     

A outra questão que eu resolvi resolver com um framework é o acesso a   recursos do sistema, principalmente os portos. Por exemplo, uma estrutura de servidor da web   forneceria maneiras para outros snapps injetarem sua API de serviço da web   e endpoints via proxy reverso no framework executando a web   servidor.

     

Foi-me dito no IRC que estou abusando do conceito de framework, mas   ainda estas duas questões surgem na minha mesa frequentemente.

Fonte: link

    
por cynicist 17.06.2016 / 07:09
3

Eu não acho que os snaps verificam quais dependências já estão instaladas. Ele apenas inclui todas as suas dependências e tempo de execução (que é em parte porque o snap ao LibreOffice tem 287 MB e o flatpak tem cerca de 200 MB).

Os snaps incluem praticamente tudo que o software precisa executar. Eu não acho que nada é compartilhado entre snaps.

Quando um snap é atualizado, ele só faz o download das dependências que são novas, e não do snap inteiro.

    
por smurfendrek123 15.06.2016 / 10:43
1

Esclarecimentos adicionais estão em ordem sobre o modo como o empacotamento instantâneo lida com dependências compartilhadas.

  

Os snaps incluem praticamente tudo que o software precisa executar. Eu não acho que nada é compartilhado entre snaps.

Esta declaração em uma das respostas é parcialmente verdadeira, no entanto, todos os pacotes snap instalados, exceto o snap do núcleo, dependem de dois pacotes, um dos quais é o snap ao núcleo.

  1. snapd - que é instalado por padrão em 16.04 e em diante e também pode ser instalado em 14.04.

  2. core - (o snap principal) que é baixado e instalado automaticamente quando o primeiro pacote snap instalado é instalado

Todos os pacotes de encaixe, exceto o próprio núcleo, dependem do encaixe do núcleo. Se houver algo errado com o snap do núcleo, alguns ou todos os outros snaps não funcionarão. Um problema com o snap do núcleo pode ser corrigido das duas maneiras a seguir.

  1. Atualize o snap do core. Mesmo que isso não funcione, os resultados da execução do comando a seguir fornecerão informações adicionais que ajudarão a solucionar o problema.

    sudo snap refresh core  
    
  2. Desinstale o snap do núcleo e todos os pacotes de snap e, em seguida, reinstale-os.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
por karel 18.01.2017 / 12:14