Skip to content

Latest commit

 

History

History
211 lines (145 loc) · 5.54 KB

05-snapcraft.md

File metadata and controls

211 lines (145 loc) · 5.54 KB

class: center, middle name: snapcraft

Snapcraft


Snapcraft

.left-column75[

  • 2014 von Canonical vorgestellt
  • Fokus auf Desktop-Anwendungen, Serverdienste und Drucker-Stack
    • ursprünglich für IoT entwickelt
    • nutzt systemd-Features wie Socket Activation
  • Runtime benötigt, Installation notwendig
    • Hintergrunddienst snapd aktualisiert Snaps automatisch
    • lässt sich nicht deaktivieren, maximal um 60 Tage verzögern

]

.right-column25[

:img Snap Logo, 100%

]


Snapcraft

.left-column75[

  • Apps werden in Sandbox ausgeführt
    • Rechte via XDG Desktop Portals und AppArmor
    • kein SELinux-Support bisher.red[*]
    • auch Themes müssen dediziert verteilt werden
  • viele Anwendungen im proprietären Snap Store

.footnote[.red[*] EPEL bietet snapd-selinux]

]

.right-column25[

:img Snap Logo, 100%

]


Snapcraft

.left-column75[

  • SquashFS-Image mit .snap-Dateiendung
    • enthält Anwendung und benötigte Bibliotheken
    • Image wird eingehängt, Dateien on-demand entpackt
    • unterstützt XZ (Standard, geringere Größe) und LZO (größer aber schneller zu entpacken)
  • nicht nur für Ubuntu, auch für RHEL- und Debian-artig, sowie Fedora, openSUSE, Solus und ArchLinux
  • bietet transaktionale Updates

]

.right-column25[

:img Snap Logo, 100%

]


Snap! - Marketing is a dancer

  • Snap - Anwendung + Abhängigkeiten, damit diese ohne Anpassungen auf verschiedenen Plattformen läuft
  • snapd - Hintergrunddienst, verwaltet Snaps automatisch
  • Snap Store - Online-Store, zentral, proprietär
  • Snapcraft - Framework/Anwendung zum Bauen von Anwendungen
  • Channel - Veröffentlichungskanal: <track>/<risk>/<branch>
    • track: ein unterstütztes Release, z.B. latest, insider
    • risk: Stabilität; stable, candidate, beta oder edge
    • branch: Entwicklungszweig; z.B. fix-bug-1337
    • Beispiele: latest/stable, insider/edge

Neverending Story: Snap + Firefox

  • ab Ubuntu 21.10 liefert Ubuntu Firefox primär als Snap anzubieten

    • seit Ubuntu 22.04 wird Firefox ausschließlich als Snap angeboten
  • Vorteil: Mozilla paketiert Firefox, weniger Verantwortung für Canonical --

  • Nachteil: deutlich langsamere Firefox-Startzeiten.red[*]

    • Kaltstart: 21s vs. 8s
    • Normaler Start: 8.5s vs 2.9s
    • Jetstream2-Benchmark: 64.804 vs 67.563
    • inzwischen (2023) etwas besser geworden

.footnote[.red[*] getestet auf i7-8850H @ 2 vCPUs, 2 GB RAM; siehe auch Blogpost]

???

  • Tests auf potenter Hardware, ältere/schwächere Hardware deutlich langsamer (~45 Sekunden auf i3-Geräten)
  • Feedback in Community eindeutig sehr negativ

Neverending Story: Snap + Firefox

.left-column75[

  • Canonical rechtfertigte die Entscheidung
    • zusätzliche Sicherheit durch weitere Sandbox
  • Paket entpackt beim ersten Start alle 98 verfügbaren Sprachpakete
  • Es wurde die XZ-Kompression verwendet
  • Das Firefox 100.0-Snap aktivierte die Compilerflags PGO und LTO aktiviert
    • leicht schnellere Lauf-/Startzeiten
  • Bei RPi/AMD wurden die falschen GPU-Treiber erkannt ==> ineffizientes Software rendering

]

.right-column25[

:img Yo dawg, 100%

]

???

  • Profile-Guided Optimization
  • Link Time Optimzation

Neverending Story: Snap + Firefox

  • Canonical und Mozilla haben Snaps überarbeitet

    • Firefox lädt nur noch benötigte Übersetzungen herunter
    • GTK-Snaps nutzen nun LZO statt XZ.red[*]
  • ==> 50% schnellere Kaltstarts auf RPi, 29-42% auf x86 --

  • Weitere geplante Optimierungen:

    • SquashFS Dekomprimierung ist unter Ubuntu single-threaded
    • Anpassung der Kernelmodul-Konfiguration notwendig
    • Pre-Caching für GTK-Anwendungen geplant

.footnote[.red[*] auch andere Snaps sollten dadurch profitieren]


Snap-Pakete erstellen

  • Metadaten werden in YAML-Datei definiert
    • Name des Pakets
    • Version und Beschriebung
    • Berechtigungsmodell (strict, devmode, classic)
  • Erfordert installiertes Multipass.red[*]
    • erstellt Ubuntu VMs unter Linux, macOS und Windows
  • Erstellt eine .snap-Datei

.footnote[.red[*] Poor man's Vagrant?]


class: small

Beispiel

name: test-offlineimap-dummy
version: '1.0'
summary: OfflineIMAP
description: |
  OfflineIMAP is software that downloads your email mailbox(es) as local
  Maildirs. OfflineIMAP will synchronize both sides via IMAP.
confinement: devmode
base: core18
parts:
  test-offlineimap-dummy:
    plugin: python
    python-version: python2
    source: https://github.com/snapcraft-docs/offlineimap.git
    stage-packages:
      - python-six
apps:
  test-offlineimap-dummy:
    command: bin/offlineimap

Beispiel

Zur Erstellung muss die Datei snapcraft.yaml in einen sinnvoll benannten Unterordner liegen:

$ cd test-offlineimap-dummy
$ snapcraft

Hierbei wird eine Ubuntu-Instanz via LXD gestartet.

Die fertige Datei kann dann auf Systemen installiert werden:

# snap install --devmode --dangerous *.snap