Snap är en teknik som utvecklats av Canonical för att göra det enklare att installera programvara i Ubuntu-distributionen. Det är en relativt ny utveckling. Utvecklingen av Snap pågick under flera år, men det var först i och med lanseringen av Ubuntu 16.04 som den var redo att användas av den breda massan.
Den största fördelen med Snap är möjligheten att installera program utan beroenden. Alla nödvändiga bibliotek finns redan i paketet med programmet och ingenting krävs av systemet för att köra det. Vid uppdatering måste användaren uppdatera ett snap-paket utan att göra ändringar i systemet, och vid fel och brister kan paketet rullas tillbaka till föregående version. På webben kan man ofta stöta på argument bland användare om huruvida snap-tekniken verkligen är bra eller om den bör överges till förmån för deb-paket
. Men det får tiden och testerna utvisa. Härnäst i den här artikeln ska vi titta på processen för att skapa snap-paket
. Det är lite enklare att skapa dem än samma deb-paket
.
För att skapa snap-paket
kommer vi att använda ett specialverktyg som heter Snapcraft. Detta är det officiella verktyget för att skapa snap-paket, vilket gör det möjligt för utvecklaren att paketera program för att bygga de nödvändiga filerna i hela systemet. Med Snapcraft kan du inte bara kopiera filer, utan också ladda ner källkoden och bygga programmet.
Låt oss nu se hur du skapar snap-paket
med programmet Samplenote som exempel.
Installera först Snapcraft. För att få den senaste versionen lägger du till en PPA i vårt system:
$ sudo add-apt-repository ppa:snappy-dev/tools
Uppdatera nu paketlistan och installera programmet:
$ sudo apt-get update
$ sudo apt-get install snapcraft
När installationen av Snapcraft är klar kan vi gå vidare för att hämta källkoden för programmet. Ladda först ner källorna från GitHub och packa upp dem:
$ 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
Eftersom programmet inte behöver kompileras är vår uppgift lite enklare. Gå till mappen med programmet och initiera Snapcraft-byggmiljön där:
$ cd Simplenote-linux-x64
$ snapcraft init
När du har kört det sista kommandot kommer filen snapcraft.yml
att visas i mappen. Genom att redigera filen kan vi konfigurera processen för att skapa vårt snap-paket. Vi behöver en fil med följande innehåll:
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 fyra första raderna innehåller information om själva paketet, programmets namn, version samt en kort och fullständig beskrivning.
Kommando - detta är kommandot för att starta programmet, vidare kommer vi att använda skriptet warpper
, eftersom vi måste ange ytterligare miljövariabler.
Pluggar
- det här är de gränssnitt som kan användas av programmet. Poängen är att snap-program arbetar i en isolerad miljö, varifrån de inte kan få tillgång till hårdvara och personuppgifter. För att vårt program ska fungera korrekt måste det ge tillgång till gränssnitten opengl
, unity7
och nätverk
.
Du kan se vilka gränssnitt som finns tillgängliga och vilka program som använder dem genom att köra kommandot:
$ snap interfaces
I avsnittet Parts
måste du ange programfilerna. Specifikt vad snapcraft
behöver göra när ett paket skapas. Eftersom vi inte behöver kompilera något använder vi plugin-programmet copy för att kopiera filer. De filer som behöver kopieras listas i avsnittet files
. Där finns inte bara körbara filer, utan också alla nödvändiga bibliotek, så att programmet får alla komponenter det behöver.
Postens format är som följer:
system_file: snap_package_file_path
Det finns en post som inte är standard:
resources*: resources
Jokertecknet *
gör att du kan kopiera hela katalogen. För att undvika att kopiera alla filer från systemet finns det ett alternativ i avsnittet site-packages som talar om för programmet vilka paket som ska installeras i snap-paketet, i vårt fall är det libnss3
, fontconfig-config-config
och gnome-themes-standard
.
För att se vilka bibliotek som programmet använder kan du använda kommandot:
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 viktiga är att de här biblioteken levereras med programmet, så vi behöver ange dem i konfigurationsfilen snapcraft.yaml
. Alla andra bibliotek finns tillgängliga i systemet och kommer att upptäckas av snapcraft
automatiskt.
Låt oss nu skapa omslagsfilen
:
!/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 här är enkelt - ett Bash-skript
. Ställ in sökvägarna för teckensnitten och berätta för programmet var det ska leta efter biblioteken så att libnote.
so och libffmpeg
.so hittas. Och den sista raden startar simplenote
.
Nästa sak som återstår är att göra den här filen körbar:
$ chmod +x wrapper
För att börja bygga paketet, kör:
$ snapcraft
Byggandet kan ta lite tid, och när byggandet är klart kan du installera paketet:
$ sudo snap install simplenote_1.0.1_amd64.snap
Du kan använda det vanliga kommandot för att köra programmet:
$ simplenote
Nu är programmet installerat. Du kan använda exakt samma metod för att skapa snap-paket
för att paketera dina program.