Hur man skapar ett Snap-paket steg för steg

Senaste uppdateringen: 04/12/2025
Författare: Isaac
  • Med Snap kan du paketera applikationer med alla deras beroenden i isolerade containrar, vilket gör dem enkla att använda över flera distributioner. Linux.
  • Snapcraft är det officiella verktyget för att beskriva, bygga och publicera Snap-paket med hjälp av konfigurationsfilen snapcraft.yaml.
  • Strikt begränsning och plug-in-gränssnitt styr säkerheten och behörigheterna för varje Snap, och balanserar isolering och funktionalitet.
  • Publicering till Snap Store förenklar distribution och automatisk uppdatering av applikationer som Nextcloud- eller Electron-projekt.

Steg-för-steg-guide för att skapa ett Snap-paket

Om du utvecklar applikationer i Linux kommer du förr eller senare att stöta på samma huvudvärk: Hur du paketerar och distribuerar din programvara på ett enkelt, säkert och uppdateringsbart sätt utan att behöva hantera beroenden för varje distribution. Det är där Snap kommer in i bilden, Canonicals paketformat som i allt större utsträckning har anammats av skrivbords- och servermiljöer.

I den här guiden kommer du att se Hur man skapar ett Snap-paket steg för steg, testar det på datorn och till och med publicerar det i Snap StoreMen vi kommer också att förklara exakt vad Snap är, vilken roll snapd spelar, dess fördelar och nackdelar, och när det är bäst lämpat att använda (till exempel med applikationer som Nextcloud eller Electron-projekt). Målet är att du ska kunna paketera din egen app på ett säkert sätt och veta om det här formatet är rätt för dig.

Vad är Snap och varför har det blivit så populärt

Snap är ett universellt paketformat för LinuxSnap-paketen, skapade av Canonical (företaget bakom Ubuntu), har en mycket tydlig idé: att säkerställa att samma paket fungerar identiskt i olika distributioner utan att kräva några modifieringar av bassystemet. För att uppnå detta inkluderar varje Snap-paket applikationen och nästan alla dess beroenden i en fristående container.

Istället för att förlita sig på systembibliotek som traditionella paket gör (deb, rpm, etc.)Snaps bär sin "ryggsäck" med allt som behövs. Detta minskar omedelbart många typiska problem: inkompatibla biblioteksversioner, trasiga beroenden eller konflikter med andra installerade paket.

Hela denna uppställning hanteras av snapd, daemonen som ansvarar för att installera, uppdatera och köra Snapssnapd körs i bakgrunden, kontrollerar behörigheter, tillämpar säkerhetssandboxing, schemalägger automatiska uppdateringar och håller ditt system uppdaterat med minimal ansträngning från din sida.

Tack vare denna metod kan samma Snap-paket installeras utan ändringar i Ubuntu, Debian, Fedora, Arch Linux, Linux Mint och många andra distributioner som stöder snapd. Ur ett utvecklarperspektiv är det ett bekvämt sätt att nå många fler användare med ett enda distributionsformat.

Fördelar och nackdelar med Snap jämfört med andra format

Innan vi går in på den praktiska sidan är det värt att klargöra Vad erbjuder Snap och vilka nackdelar har det? jämfört med traditionell förpackning eller alternativ som Flatpak eller AppImage.

Snaps största styrka är dess distributionsoberoendeEtt välgjort paket kommer att köras på samma sätt på olika versioner av Ubuntu, Debian eller Fedora utan att du behöver underhålla specifika grenar. Detta förenklar saker och ting för både utvecklare och användare, som inte längre är beroende av varje distributions arkiv för uppdaterad programvara.

En annan viktig fördel är att Varje Snap körs i en isolerad miljö (sandlåda)Denna isolering minskar effekterna av ett säkerhetsintrång, förhindrar att programmet kommer åt systemfiler som det inte borde komma åt och begränsar konflikter med andra program. apparGenom gränssnitt och "pluggar" Du kan gradvis bevilja kontrollerad åtkomst till nätverk, ljud, kamera, hemkatalog etc., enligt principen om minsta behörighet.

Dessutom, snapd hanterar automatiska uppdateringarSnap-appar uppdateras i bakgrunden, och om något går fel kan du återgå till en tidigare version av paketet med ett enkelt kommando. Detta ger stor trygghet i produktionsmiljöer eller i team där du inte vill ständigt övervaka varje uppdatering.

Det mindre trevliga är att genom att inkludera nästan alla beroenden, Snaps tar vanligtvis upp mer diskutrymme än deras motsvarigheter i mer traditionella format. Det är också vanligt att vissa paketerade applikationer som Snap finns tillgängliga i andra format. ta lite längre tid att börjasärskilt tunga skrivbordsmodeller, på grund av isoleringsskiktet och monteringsmiljön.

En annan tvistefråga för vissa medlemmar i samhället är att Snap Store är centraliserad och kontrolleras av CanonicalÄven om formatet är öppet, hanteras huvudförrådet av ett enda företag, vilket kolliderar med Linux mer distribuerade filosofi och står i kontrast till Flatpak-ekosystemet (Flathub) eller AppImages lagringsfria tillvägagångssätt.

  Alla kortkommandon för att Microsoft Access ska fungera snabbare

Installera och aktivera Snap på större Linuxdistributioner

För att skapa och använda Snap-paket behöver du ha snapd korrekt installerat och fungerar på ditt system. Processen varierar något beroende på distributionen, men den är ganska enkel i alla.

En Ubuntu och moderna derivater (från och med 16.04) snapd är förinstallerat. Du kan kontrollera detta med:

snap version

Om den av någon anledning inte finns där kan du installera den med APT genom att köra en uppdatering och sedan installationen av snapd:

sudo apt update
sudo apt install snapd

En Debian eller Linux Mint Du kan hitta en inställningsfil som blockerar Snap-paket. I så fall är det första steget att avskaffa regeln som förbjuder dem:

sudo rm /etc/apt/preferences.d/nosnap.pref

Sedan uppdaterar och installerar du snapd på samma sätt:

sudo apt update
sudo apt install snapd

I världen av fedoraSnap-stöd är inte helt integrerat direkt, men du kan aktivera det utan större problem. Först installerar du snapd, vanligtvis från standardförråden eller från EPEL beroende på utgåvan, och sedan Du aktiverar socketen så att tjänsten boot:

sudo dnf install snapd
sudo systemctl enable --now snapd.socket

Dessutom, för att möjliggöra kompatibilitet med klassiska rutter, en symbolisk länk /snap pekar på katalogen som används av snapd:

sudo ln -s /var/lib/snapd/snap /snap

En Arch Linuxsnapd finns tillgängligt i de officiella repositorierna. Du installerar det med pacman och aktiverar återigen tjänsten via socket:

sudo pacman -S snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

När du väl har snappat igång kan du Installera, lista, uppdatera och ta bort Snaps med kommandon grunderna: snap install, snap list, snap refresh, snap remove y snap find för att söka efter tillgängliga appar i Snap Store. (se Hur man listar paketen som är installerade på Ubuntu)

Hur man paketerar en app i Snap steg för steg

Låt oss gå in på den del som vanligtvis intresserar folk mest: Paketera din egen applikation i Snap-formatDet allmänna flödet är att förbereda din app, installera Snapcraft och definiera en fil. snapcraft.yamlKonfigurera inneslutningen och slutligen, bygg och testa paketet.

För att följa denna process är det mycket bekvämt att ha en server eller dator med Ubuntu 18.04 eller senare (eller en kompatibel distribution), med ett användarkonto som har sudo-behörigheter, och, om du vill publicera din Snap, med ett konto på Snapcrafts utvecklarpanel. Om du inte har en app än kan du använda ett enkelt "Hello World" i Go som exempel.

Det första är att skapa en specifik arbetskatalog för din Snap och placera dig själv i:

mkdir ~/tu-snap
cd ~/tu-snap

Om du redan har källkod för ditt projekt, kopiera allt till den katalogen. Om det finns i Git kan du initiera ett repository och klona eller importera de nödvändiga filerna dit. Tanken är att Allt din applikation behöver finns samlat i en enda mappeftersom det kommer att vara utgångspunkten för förpackningen.

Om du vill ha ett minimalt exempel kan du skapa ett litet program i Go med en fil som heter helloworld.go skriv ut ett meddelande på skärmen. Installera Go with APT om du inte redan har det och kör sedan go run helloworld.go för att säkerställa att basapplikationen fungerar korrekt innan den konverteras till en Snap.

Med din app redo i den katalogen blir nästa steg installera Snapcraft-byggverktyget, som ansvarar för att läsa konfigurationen, lösa beroenden och generera det slutliga paketet.

Installera och förstå Snapcraft, verktyget för att skapa Snaps

Snapcraft är Canonicals officiella kit för utvecklare definiera, bygga och publicera Snap-paket utan att behöva uppfinna hjulet på nytt. Den installeras som en Snap och körs i klassiskt läge för att ha nödvändiga behörigheter under kompileringen.

För att installera den på en operativsystem med snapdBara starta:

sudo snap install snapcraft --classic

Alternativet –klassisk avaktiverar strikt nedstängning För Snapcraft är detta nödvändigt eftersom det under paketeringsprocessen måste komma åt systemet, starta byggen, hantera beroenden och arbeta med filer utanför sin egen miljö.

När installationen är klar kommer du att se ett meddelande som anger vilken version som har lagts till i systemet, ungefär så här: "snapcraft XXX från Canonical installerat"Du kan bekräfta att allt är korrekt genom att köra:

snapcraft --version

Från och med detta ögonblick, kommandot snapcraft Den finns tillgänglig i ditt skal och du kan använda den i din projektkatalog för att Bygg ditt första Snap-paketMen först måste dess konfiguration definieras med hjälp av en specifik YAML-fil.

  Aktivera röstdiktering i Outlook: Komplett guide, tips och felsökning

Definiera namn, metadata, appar och delar i snapcraft.yaml

Hjärtat i varje Snap är filen snapcraft.yaml, där du beskriver vad applikationen gör, hur den är byggd, vilka kommandon som visas för användaren, vilka plugins som används, vilka delar den består av och vilka behörigheter den behöver.

Börja med att se till att du fortfarande är i rotkatalog från ditt projekt (det du skapade som Snap-mappen) och skapa konfigurationsfilen med din favoritredigerare:

cd ~/tu-snap
nano snapcraft.yaml

Först, definiera Grundläggande metadata: namn, sammanfattning, beskrivning och versionEtt exempel kan vara:

name: helloworld
summary: Pequeña aplicación de ejemplo empaquetada como Snap.
description: |
Programa Hello World escrito en Go y distribuido como paquete Snap
usando la herramienta Snapcraft para ilustrar el proceso paso a paso.
version: '1.0'

Namnet måste vara Detta krävs bara om du ska publicera på Snap Store.Så det är en bra idé att kontrollera att den inte redan är upptagen. Sammanfattningen har en teckengräns, och beskrivningen kan vara flera rader lång med hjälp av symbolen . | som i exemplet.

Sedan är det dags att vittna. Snaps "appar"Det vill säga de kommandon som användaren kan utföra från terminala För att starta din applikation, lägg till ett avsnitt i filen. apps: och definiera minst en post:

apps:
helloworld:
command: helloworld

här, ”helloworld” är både det logiska namnet på appen och kommandot som ska körasDet kommandot måste motsvara den binära filen eller skript som din kompileringsprocess genererar; i fallet med Go-exemplet kommer det att vara den resulterande körbara filen.

Om kommandonamnet exakt matchar Snap-namnet kan du köra det direkt efter installationen. Om de inte matchar lägger Snap automatiskt till ett prefix med paketnamnet, något att tänka på när du väljer namngivningskonvention.

Sedan måste du definiera "delarna"Dessa är byggstenarna som utgör ditt paket: din huvudapplikation, hjälpresurser, ytterligare beroenden etc. Varje del innehåller vanligtvis en specifikt plugin beroende på vilket språk eller vilken teknik du använder. Till exempel finns det plugins för Go, Python, Ruby, Rust, Node.js, Java, etc.

Att se henne lista över plugin-program som stöds För din version av Snapcraft kan du använda:

snapcraft list-plugins

I fallet med ett exempel i GoEn minimal konfiguration av delar kan vara:

parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld

Alternativet source: . indikerar att källkoden finns i samma katalog var filen finns snapcraft.yaml, och parametern go-importpath Definierar importsökvägen för Go-pluginet. Andra plugin-program har sina egna specialalternativ, som du kan konsultera med snapcraft help nombre-del-plugin.

För tillfället kan du lämna filen öppen eftersom konfigurationen relaterad till [följande] fortfarande behöver läggas till. säkerhetsavspärrning och tillträdestillstånd som din ansökan kommer att behöva.

Instängdhet, gränssnitt och pluggar: styrning av Snap-behörigheter

En av Snaps utmärkande egenskaper är att Applikationerna körs i en testmiljö eller sandlåda. vilket begränsar vad de kan göra. Detta konfigureras i filen snapcraft.yaml med hjälp av nyckeln confinement och, vid behov, via gränssnitt och kontakter.

För att börja, lägg till en inneslutningslinje att arkivera:

confinement: strict

läge Strikt är den högsta säkerhetsnivån Och det är den rekommenderade metoden i de flesta fall när du ska publicera paketet offentligt. Under denna begränsning kan din app inte fritt komma åt nätverket, värdens filsystem eller andra resurser om du inte tillåter det via specifika gränssnitt.

Gränssnitten är som "behörighetskopplingar" som tillåter Snap att komma åt en specifik resurs: ljudingång och -utgång, kamera, nätverk, hemkatalog, systemfiler etc. Några av de vanligaste är:

  • ljuduppspelning: för att spela ljud.
  • ljudinspelning: för att spela in ljud från mikrofonen.
  • rum: för att använda anslutna webbkameror.
  • hem: för att läsa och skriva till icke-dolda filer i hemkatalogen.
  • nätför åtkomst till internet och det lokala nätverket.
  • nätverksbindning: så att appen fungerar som en nätverkstjänst och lyssnar på portar.
  • systemfiler: för breda behörigheter på värdfilsystemet.

För att associera dessa gränssnitt med din Snap definierar du kontakter med beskrivande namn i motsvarande avsnitt av YAML. Ett enkelt exempel som ger åtkomst till nätverket och hemmappen skulle vara:

plugs:
helloworld-home:
interface: home
helloworld-network:
interface: network

Kontaktens namn (till exempel hejvärlden-hemDet här är vad användarna kommer att se när de kontrollerar anslutningar, så det borde vara tydligt. Senare, när Snap är installerat, kan du se hur dessa länkar ser ut med kommandot snap connections nombre-del-snap, vilket visar vilket gränssnitt som har anslutits till varje kontakt.

  Hur man lockar pengar in i ditt liv

Med detta, din fil snapcraft.yaml innehåller redan namn, metadata, appar, delar, inneslutning och grundläggande pluginsDet vill säga den lägsta struktur som krävs för att bygga paketet för första gången.

Un fullständigt exempel Hello World-programmet skulle kunna se ut så här:

name: helloworld
summary: Pequeño programa Hello World en Go empaquetado como Snap.
description: |
Aplicación de ejemplo que imprime "Hello, world!" en la terminal.
Empaquetada usando Snapcraft para mostrar el flujo de trabajo básico.
version: '1.0'
confinement: strict
apps:
helloworld:
command: helloworld
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
plugs:
helloworld-home:
interface: home
helloworld-network:
interface: network

Bygg, installera lokalt och testa ditt Snap-paket

När installationen är klar är det dags att Kompilera Snappen och testa den på ditt eget systemSe till att du är i projektets rotkatalog och kör:

snapcraft

Snapcraft kommer att starta en virtuell maskin eller ren byggmiljö (beroende på vilken version och backend du använder) kommer den att ladda ner nödvändiga beroenden och generera paketet. Om allt går bra ser du ett meddelande som detta i slutet:

Snapped helloworld_1.0_amd64.snap

Den filen helloworld_1.0_amd64.snap är det resulterande paketetDen är redo att installeras på kompatibla system. För att testa den lokalt, använd följande kommando (från samma katalog eller genom att ange sökvägen):

sudo snap install helloworld_1.0_amd64.snap --dangerous

Alternativet –dangerous informerar snapd om att han är en lokal Snap utan en officiell signaturDärför sker installationen på egen risk. När den är klar kommer du att se ett meddelande som "helloworld 1.0 installerat".

Därifrån kan du kör kommandot du definierade i appavsnittet, I detta fall:

helloworld

Om ditt program är välbyggt bör det visa texten "Hej världen!" i standardutdata, verifiera att Snappen fungerar korrekt. För att kontrollera aktiva behörigheter och gränssnittsanslutningar kan du använda:

snap connections helloworld

Utdata listar varje gränssnitt, dess tillhörande kontakt och motsvarande kortplats, vilket är mycket användbart för Se med en snabb blick vilken åtkomst din app har. till nätverket, filsystemet eller andra resurser.

Publicera din Snap i Snap Store och hantera den via kanaler

När du har din applikation väl paketerad och testad är det logiska nästa steget göra den tillgänglig för resten av världen via Snap StoreFör att göra detta behöver du ett Snapcraft-utvecklarkonto och använda själva kommandot. snapcraft för att autentisera dig själv och ladda upp filen.

Börja med att logga in på ditt utvecklarkonto från terminalen:

snapcraft login

Ange din e-postadress och ditt lösenord kopplat till ditt konto. När autentiseringen är klar är nästa steg Registrera ditt Snap-namn i butiken så att den förblir kopplad till dig:

snapcraft register helloworld

Om namnet är tillgängligt kommer operationen att slutföras och du kommer att kunna Börja ladda upp recensioner av ditt paket till Snap Store med kommandot snapcraft push:

snapcraft push helloworld_1.0_amd64.snap

Efter uppladdningen och den automatiska granskningsprocessenDu kommer att se ett meddelande som liknar:

Revision 1 of 'helloworld' created.

Varje gång du publicerar en ny version av samma paket, revisionsnumret kommer att ökaDetta är mycket praktiskt för att identifiera specifika versioner och utföra rollbacks om det behövs. Det sista steget för att göra Snap installerad av vem som helst är att släppa den versionen till en kanal.

snapcraft release helloworld 1 stable

Här antyder du att den ska släppas revision 1 på den "stabila" kanalenDu har även kanaler kandidat, beta och edge att distribuera testversioner, releasekandidater eller instabiliserade utvecklingsversioner (se Hur man installerar två versioner av samma paket). I slutet ser du en tabell över kanaler och revisioner som anger vilken version som är tillgänglig för varje kanal.

Från och med det ögonblicket kommer alla användare med snapd att kunna installera din applikation med en "sudo snap install helloworld" och få automatiska uppdateringar när du publicerar nya recensioner i relevant kanal.

Hur man installerar programvara med apt och snap
Relaterad artikel:
Hur man installerar programvara med apt och snap på Linux: Komplett guide