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
.
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.