Snap er en teknologi udviklet af Canonical for at gøre det nemmere at installere software i Ubuntu-distributionen. Det er en relativt ny udvikling. Udviklingen af Snap foregik over flere år, men først med udgivelsen af Ubuntu 16.04 kom den i en tilstand, hvor den er klar til at blive brugt af masserne.
Den største fordel ved Snap er muligheden for at installere programmer uden afhængigheder. Alle de nødvendige biblioteker er allerede i pakken med programmet, og der kræves ikke noget af systemet for at køre det. Ved opdatering skal brugeren opdatere en snap-pakke uden at foretage ændringer i systemet, og i tilfælde af fejl og mangler kan pakken rulles tilbage til den tidligere version. På nettet kan man ofte støde på diskussioner blandt brugerne om, hvorvidt snap-teknologien virkelig er god, eller om den bør opgives til fordel for deb-pakker
. Men det vil tiden og testning vise. I den næste artikel vil vi se på processen med at oprette snap-pakker
. Det er lidt nemmere at oprette dem end de samme deb-pakker
.
For at oprette snap-pakker
bruger vi et særligt værktøj kaldet Snapcraft. Det er det officielle værktøj til at lave snap-pakker, som giver udvikleren mulighed for at pakke programmer, så de nødvendige filer kan bygges i hele systemet. Med Snapcraft kan man ikke kun kopiere filer, men også downloade kildekoden og bygge programmet.
Lad os nu se, hvordan man opretter snap-pakker
ved at bruge programmet Samplenote som eksempel.
Først skal du installere Snapcraft. For at få den nyeste version skal du tilføje en PPA til vores system:
$ sudo add-apt-repository ppa:snappy-dev/tools
Opdater nu pakkelisten, og installer programmet:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Når installationen af Snapcraft er færdig, kan vi gå videre til at hente kildekoden til programmet. Først skal du downloade kilderne fra GitHub og pakke dem ud:
$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz
Da programmet ikke behøver at blive kompileret, er vores opgave lidt lettere. Gå til mappen med programmet, og initialiser Snapcraft-byggemiljøet der:
$ cd Simplenote-linux-x64
$ snapcraft init
Når du har udført den sidste kommando, vises filen snapcraft.yml
i mappen. Ved at redigere filen kan vi konfigurere processen med at oprette vores snap-pakke. Vi skal bruge en fil med følgende indhold:
name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so
De første fire linjer er oplysninger om selve pakken, navnet på programmet, versionen og en kort og fuldstændig beskrivelse.
Kommando - dette er kommandoen til at starte programmet, desuden bruger vi scriptwarpperen
, fordi vi skal angive yderligere miljøvariabler.
Plugs
- det er de grænseflader, der kan bruges af programmet. Pointen er, at snap-programmer arbejder i et isoleret miljø, hvor de ikke kan få adgang til hardware og personlige data. For at vores program kan fungere korrekt, skal det have adgang til opengl-
, unity7-
og netværksgrænsefladerne
.
Du kan se de tilgængelige grænseflader og de programmer, der bruger dem, ved at udføre kommandoen:
$ snap interfaces
I afsnittet Parts
skal du angive programfilerne. Specifikt hvad snapcraft
skal gøre, når den opretter en pakke. Da vi ikke behøver at kompilere noget, bruger vi copy-plugin'et til at kopiere filer. De filer, der skal kopieres, er listet i afsnittet files
. Der er ikke kun eksekverbare filer, men også alle de nødvendige biblioteker, så programmet får alle de komponenter, det har brug for.
Postens format er som følger:
system_file: snap_package_file_path
Der er én ikke-standardiseret post:
resources*: resources
Jokertegnet *
gør det muligt at kopiere hele biblioteket. For at undgå at kopiere alle filerne fra systemet er der en mulighed i afsnittet site-packages for at fortælle programmet, hvilke pakker der skal installeres i snap-pakken, i vores tilfælde er det libnss3
, fontconfig-config-config
og gnome-themes-standard
.
For at se, hvilke biblioteker programmet bruger, kan du bruge kommandoen:
ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)
Det vigtige er, at disse biblioteker følger med programmet, så vi skal angive dem i konfigurationsfilen snapcraft.yaml
. Alle andre biblioteker er tilgængelige på systemet og vil blive fundet af snapcraft
automatisk.
Lad os derefter oprette wrapper-filen
:
!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"
Det er enkelt her - et Bash-script
. Indstil stierne til skrifttyperne, og fortæl programmet, hvor det skal lede efter bibliotekerne, så libnote.
so og libffmpeg
.so bliver fundet. Og den sidste linje starter simplenote
.
Det næste, der skal gøres, er at gøre filen eksekverbar:
$ chmod +x wrapper
Kør for at begynde at bygge pakken:
$ snapcraft
Opbygningen kan tage lidt tid, og når opbygningen er færdig, kan du installere pakken:
$ sudo snap install simplenote_1.0.1_amd64.snap
Du kan bruge den sædvanlige kommando til at køre programmet:
$ simplenote
Nu er programmet installeret. Du kan bruge præcis den samme metode til at oprette snap-pakker
til at pakke dine programmer.