Jak pakiety Snap radzą sobie z współdzielonymi zależnościami?


30

Format opakowania przystawkowego w końcu uwalnia nas od piekła zależności, umożliwiając każdemu pakietowi posiadanie własnej kopii zależności. Interesują mnie szczegóły techniczne, w jaki sposób to robi. Jak to obsługuje:

  • przystawki w zależności od wersji biblioteki już zainstalowanej za pośrednictwem pakietów deb dla bieżącej wersji? Czy ignoruje zainstalowaną bibliotekę?
  • różne przystawki określające tę samą wersję tej samej biblioteki? Czy w jakiś sposób robi to deduplikację?
  • aktualizacje bibliotek podstawowych, które prawdopodobnie będą używane przez wiele przystawek? OpenSSL przychodzi na myśl jako ogromny problem.

Aplikacja xdg ma coś, co nazywa się „środowiskiem wykonawczym” :

Podstawową koncepcją aplikacji xdg jest podział środowiska wykonawczego / aplikacji. Każda aplikacja zależy od środowiska wykonawczego, który dostarcza podstawowe biblioteki, na których aplikacja się opiera. Środowiska wykonawcze są zwykle współużytkowane przez wiele aplikacji, ale użytkownik może mieć zainstalowanych wiele środowisk wykonawczych jednocześnie.

Wygląda na to, że w przypadku OpenSSL byłby on częścią środowiska wykonawczego w aplikacjach xdg, więc aktualizacja OpenSSL powinna w przejrzysty sposób wpływać na wszystkie aplikacje xdg korzystające z tego samego środowiska wykonawczego.

Odpowiedzi:


9

Dwie pierwsze sytuacje są obsługiwane w sprytny sposób.

Jedną z interesujących omawianych funkcji jest obsługa deduplikacji treści w pakietach Snap. Przyciągania byłyby automatycznie deduplikowane dla wspólnych plików udostępnianych między przyciąganiami na podstawie ich skrótów plików. Nastąpiłaby de-duplikacja na warstwie systemu plików, de-duplikacja podczas pobierania plików Snap (z obsługą serwera) i być może de-duplikacja mapowanych bibliotek z linkera. Deduplikacja jest dużym przedmiotem pracy i prawdopodobnie zajmie trochę czasu, aby ją w pełni wdrożyć, ale jest to jednak interesujący cel.

Źródło: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

Jeśli chodzi o trzecią sytuację, mają one coś podobnego do wspomnianych przez ciebie środowisk uruchomieniowych:

Istnieją trzy warstwy, które składają się na zgrabną maszynę: warstwa systemowa, dostarczana przez Canonical, warstwa ram, które rozszerzają system podstawowy produkowany przez dostawców we współpracy z Canonical, oraz zestaw zgrabnych aplikacji, dostarczanych bezpośrednio przez dostawców. Aktualizacja dowolnego elementu oznacza po prostu użycie nowej wersji obrazu tylko do odczytu. Powrót do poprzedniej wersji jest równie łatwy.

Źródło: http://www.ubuntu.com/cloud/snappy

Nie ma jeszcze dobrej dokumentacji opisującej frameworki, przede wszystkim dlatego, że wydają się one nadal wykraczać poza granice frameworku. Oto fragment ich listy mailingowej, który może pomóc w wyjaśnieniu.

Eksperymentuję z Frameworkami, aby zasadniczo rozszerzyć system podstawowy Snappy o oprogramowanie i usługi, które wymagają wielu snapów, ale nie powinny być dołączane do żadnej przystawki ze względu na problemy z aktualizacją i rozmiar. Najlepszy przykład, jaki mam na to, to plik binarny openssl. Wiele przystawek potrzebuje tego do generowania i sprawdzania poprawności kluczy i certyfikatów.

Inną kwestią, którą rozwiązałem za pomocą frameworka, jest dostęp do zasobów całego systemu, zwłaszcza portów. Np. Platforma serwera WWW zapewniłaby innym aplikacjom możliwość wstrzykiwania interfejsu API i punktów końcowych usługi sieci Web za pośrednictwem zwrotnego serwera proxy do struktury obsługującej serwer WWW.

W IRC powiedziano mi, że w pewnym sensie nadużywam koncepcji frameworka, ale te dwa problemy często pojawiają się na moim biurku.

Źródło: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html


1
Aby wyjaśnić, żadne z nich obecnie nie istnieje, prawda? To są plany i prawdopodobnie chciałeś powiedzieć w pierwszym wierszu „zostanie obsłużony” zamiast „zostanie obsłużony”?
muru

Technicznie oba istnieją. Wiem, że istnieje już przynajmniej struktura dokowania i że istnieją już linki do niektórych bibliotek dołączonych do ubuntu-core, z których korzystają zainstalowane aplikacje. Nie mam jednak pojęcia, jak daleko jest dalej; Po prostu wyjaśniam szczegóły techniczne rozwiązań.
cynikista

1
Nie są to sprytnie obsługiwane sposoby, tylko rzekomo sprytne pomysły. Na przykład wciąż nie ma oficjalnej dokumentacji dotyczącej sposobu pierwszego wdrożenia, tylko artykuł Phoronix wskazujący na rozmowę, która jest martwym linkiem.
bviktor

3

Nie sądzę, że przyciągania sprawdzają, jakie zależności są już zainstalowane. Zawiera tylko wszystkie swoje zależności i środowisko uruchomieniowe (częściowo dlatego przystawka LibreOffice wynosi 287 MB, a flatpak około 200 MB).

Snap zawiera prawie wszystko, co oprogramowanie musi uruchomić. Nie sądzę, żeby cokolwiek zostało udostępnione między snapami.

Gdy snap jest aktualizowany, pobiera tylko nowe zależności, a nie całą snap.


2

Dodatkowe wyjaśnienia dotyczą sposobu, w jaki opakowanie typu snap obsługuje współdzielone zależności.

Snap zawiera prawie wszystko, co oprogramowanie musi uruchomić. Nie sądzę, żeby cokolwiek zostało udostępnione między snapami.

To stwierdzenie w jednej z odpowiedzi jest częściowo prawdziwe, jednak wszystkie zainstalowane pakiety przyciągania, z wyjątkiem przyciągania rdzenia, zależą od dwóch pakietów, z których jeden jest przyciąganiem rdzenia.

  1. snapd - który jest instalowany domyślnie w wersji 16.04 i nowszej, a także może być zainstalowany w wersji 14.04.

  2. core    - (podstawowa przystawka), która jest automatycznie pobierana i instalowana po zainstalowaniu pierwszego zainstalowanego pakietu przystawek

Wszystkie pakiety przystawek oprócz samego rdzenia zależą od przystawki rdzenia. Jeśli coś jest nie tak z przyciąganiem rdzenia, niektóre lub wszystkie inne przyciągania nie będą działać. Problem z zatrzaskiem rdzenia można rozwiązać na dwa następujące sposoby.

  1. Zaktualizuj podstawową przystawkę. Nawet jeśli to nie zadziała, wyniki uruchomienia następującego polecenia dostarczą dodatkowych informacji, które pomogą rozwiązać problem.

    sudo snap refresh core  
    
  2. Odinstaluj przystawkę podstawową i wszystkie pakiety przystawek, a następnie zainstaluj je ponownie.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.