Betalingsmåter Abuse

Slik oppretter du en Snap-pakke Ubuntu 16

11.06.2021, 19:26

Snap er en teknologi utviklet av Canonical for å gjøre det enklere å installere programvare i Ubuntu-distribusjonen. Det er en relativt ny utvikling. Utviklingen av Snap foregikk over flere år, men først ved utgivelsen av Ubuntu 16.04 dukket den opp i en tilstand der den er klar til bruk av massene.

Den største fordelen med Snap er muligheten til å installere programmer uten avhengigheter. Alle nødvendige biblioteker er allerede i pakken med programmet, og det kreves ingenting fra systemet for å kjøre det. Ved oppdatering må brukeren oppdatere en snap-pakke uten å gjøre endringer i systemet, og i tilfelle feil og mangler kan pakken rulles tilbake til forrige versjon. På nettet kan man ofte støte på diskusjoner blant brukere om hvorvidt snap-teknologien virkelig er god, eller om den bør forlates til fordel for deb-pakker. Men det vil tiden og testingen vise. I den neste artikkelen skal vi se på hvordan du oppretter snap-pakker. Det er litt enklere å lage dem enn de samme deb-pakkene.

Opprette snap-pakker i Ubuntu 16.04

For å lage snap-pakker bruker vi et spesialverktøy som heter Snapcraft. Dette er det offisielle verktøyet for å lage snap-pakker, som gjør det mulig for utvikleren å pakke programmer for å bygge de nødvendige filene i hele systemet. Med Snapcraft kan du ikke bare kopiere filer, men også laste ned kildekoden og bygge programmet.

La oss nå se hvordan du oppretter snap-pakker ved å bruke Samplenote-programmet som eksempel.

Først må du installere Snapcraft. Legg til en PPA på systemet for å få den nyeste versjonen:

$ sudo add-apt-repository ppa:snappy-dev/tools

Oppdater nå pakkelisten og installer programmet:

$ sudo apt-get update
$ sudo apt-get install snapcraft

Når installasjonen av Snapcraft er fullført, kan vi gå videre til å hente kildekoden til programmet. Først laster du ned kildene fra GitHub og pakker dem ut:

$ 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

Siden programmet ikke trenger å kompileres, er oppgaven vår litt enklere. Gå til mappen med programmet og initialiser Snapcraft-byggemiljøet der:

$ cd Simplenote-linux-x64
$ snapcraft init

Etter at du har kjørt den siste kommandoen, vises filen snapcraft.yml i mappen. Ved å redigere filen kan vi konfigurere prosessen med å lage snap-pakken vår. Vi trenger en fil med følgende innhold:

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 fire første linjene er informasjon om selve pakken, navnet på programmet, versjonen og en kort og fullstendig beskrivelse.

Kommando - dette er kommandoen for å starte programmet, videre vil vi bruke skriptet warpper, fordi vi trenger å spesifisere flere miljøvariabler.

Plugger - dette er grensesnittene som kan brukes av programmet. Poenget er at snap-programmer arbeider i et isolert miljø, hvor de ikke kan få tilgang til maskinvare og personlige data. For at programmet vårt skal fungere skikkelig, må det ha tilgang til grensesnittene opengl, unity7 og nettverk.

Du kan se de tilgjengelige grensesnittene og programmene som bruker dem ved å utføre kommandoen:

$ snap interfaces

I delen parts må du spesifisere programfilene. Spesifikt hva snapcraft trenger å gjøre når du oppretter en pakke. Siden vi ikke trenger å kompilere noe, bruker vi copy-plugin-modulen til å kopiere filer. Filene som skal kopieres, er listet opp i Files-seksjonen. Det er ikke bare kjørbare filer, men også alle nødvendige biblioteker, slik at programmet får alle komponentene det trenger.

Formatet på oppføringen er som følger:

system_file: snap_package_file_path

Det er én ikke-standard oppføring:

resources*: resources

Jokertegnet * gjør at du kan kopiere hele katalogen. For å unngå å kopiere alle filene fra systemet, finnes det et alternativ i site-packages-seksjonen som forteller programmet hvilke pakker som skal installeres i snap-pakken, i vårt tilfelle er det libnss3, fontconfig-config-config-config og gnome-themes-standard.

For å se hvilke biblioteker programmet bruker, kan du bruke 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 viktige er at disse bibliotekene leveres med programmet, så vi må spesifisere dem i konfigurasjonsfilen snapcraft.yaml. Alle andre biblioteker er tilgjengelige på systemet og vil bli oppdaget av snapcraft automatisk.

Nå skal vi opprette 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" "$@"

Dette er enkelt - et Bash-skript. Angi stiene for skriftene, og fortell programmet hvor det skal lete etter bibliotekene, slik at libnote. so og libffmpeg.so blir funnet. Og den siste linjen starter simplenote.

Det neste som gjenstår, er å gjøre denne filen kjørbar:

$ chmod +x wrapper

Kjør for å starte byggingen av pakken:

$ snapcraft

Byggingen kan ta litt tid, og når byggingen er fullført, kan du installere pakken:

$ sudo snap install simplenote_1.0.1_amd64.snap

Du kan bruke den vanlige kommandoen for å kjøre programmet:

$ simplenote

Nå er programmet installert. Du kan bruke nøyaktig samme metode for å lage snap-pakker til å pakke programmene dine.