Betalingsmetoder Abuse

Sådan opretter du en Snap-pakke i Ubuntu 16

11.06.2021, 19:26

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.

Oprettelse af snap-pakker i Ubuntu 16.04

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.