Como os pacotes snap lidam com dependências compartilhadas?

30

O formato de empacotamento instantâneo finalmente nos liberta do inferno das dependências, permitindo que cada pacote tenha sua própria cópia das dependências. Estou interessado nos detalhes técnicos de como isso acontece. Como ele lida com:

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

O xdg-app tem algo chamado "tempo de execução" :

Um conceito fundamental no xdg-app é a divisão de tempo de execução / aplicativo. Todo aplicativo depende de um tempo de execução, que fornece as principais bibliotecas nas quais o aplicativo depende. Normalmente, os tempos de execução são 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, isso faria parte do tempo de execução no xdg-apps; portanto, uma atualização no OpenSSL deve afetar de maneira transparente todos os aplicativos xdg-apps usando o mesmo tempo de execução.

muru
fonte

Respostas:

9

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

Um dos recursos interessantes mencionados é o suporte à desduplicação de conteúdo nos pacotes Snap. Os snapshots seriam deduplicados automaticamente de arquivos comuns compartilhados entre snapsings com base em seus hashes de arquivo. Haveria desduplicação na camada do sistema de arquivos, desduplicação em downloads de snap (com suporte ao servidor) e talvez desduplicação de bibliotecas mapeadas do vinculador. A desduplicação é um grande item de trabalho e provavelmente levará um tempo para ser implementada completamente, mas é um objetivo interessante.

Fonte: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

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

Existem três camadas que compõem uma máquina rápida: a camada do sistema, fornecida pela Canonical, uma camada de estruturas que estendem o sistema básico produzido pelos fornecedores em colaboração com a Canonical e um conjunto de aplicativos rápidos, fornecidos diretamente pelos fornecedores. Atualizar qualquer peça significa apenas usar a nova versão de uma imagem somente leitura. A reversão para uma versão anterior é igualmente fácil.

Fonte: http://www.ubuntu.com/cloud/snappy

Ainda não existe uma boa documentação descrevendo estruturas, principalmente porque elas ainda parecem estar definindo os limites do que é uma estrutura. Aqui está um trecho da lista de discussão que pode ajudar a esclarecer as coisas.

Estou experimentando o Frameworks para estender essencialmente o sistema básico do Snappy por software e serviços que muitos snaps exigem, mas não devem ser incluídos em nenhum e em nenhum snap devido a problemas e tamanho da atualização. 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 resolvi resolver com uma estrutura é o acesso a recursos gerais do sistema, principalmente portos. Por exemplo, uma estrutura de servidor da web forneceria maneiras para outros snapps injetarem sua API de serviço da Web e pontos finais por meio de proxy reverso na estrutura que executa o servidor da web.

Disseram-me no IRC que estou meio que abusando do conceito de estrutura, mas esses dois problemas ainda aparecem na minha mesa com frequência.

Fonte: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html

cinista
fonte
1
Para esclarecer, nada disso realmente existe agora, certo? Estes são planos e você provavelmente quis dizer "será tratado" em vez de "será tratado" na primeira linha?
Muru
Tecnicamente, ambos existem. Eu sei que já existe pelo menos uma estrutura de encaixe e que já existem links para algumas bibliotecas incluídas no ubuntu-core das quais os aplicativos instalados se beneficiam. Eu não tenho idéia de quão longe está; Estou simplesmente explicando os detalhes técnicos das soluções.
Cynicist
1
Essas não são formas inteligentes de lidar, apenas idéias supostamente inteligentes. Por exemplo, ainda não há documentação oficial sobre como o primeiro é realmente implementado, apenas um artigo do Phoronix apontando para uma palestra, que é um link morto entre.
bviktor 15/07
3

Eu não acho que os snaps verifique quais dependências já estão instaladas. Ele inclui apenas todas as suas dependências e tempo de execução (o que é parcialmente o motivo pelo qual o snap do LibreOffice tem 287 MB e o flatpak tem cerca de 200 MB).

Os snaps incluem praticamente tudo o que o software precisa para executar. Acho que nada é compartilhado entre snaps.

Quando um snap é atualizado, no entanto, ele baixa apenas as dependências novas, e não o snap inteiro.

Frederik Baetens
fonte
2

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

Os snaps incluem praticamente tudo o que o software precisa para executar. Acho que nada é compartilhado entre snaps.

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

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

  2. core    - (o snap ao núcleo), que é baixado e instalado automaticamente quando o primeiro pacote de snap instalado é instalado

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

  1. Atualize o snap ao núcleo. Mesmo se isso não funcionar, os resultados da execução do comando a seguir fornecerão informações adicionais que ajudarão a resolver o problema.

    sudo snap refresh core  
    
  2. Desinstale o snap ao núcleo e todos os pacotes de snap e reinstale-os.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
karel
fonte