Betaalmethoden Abuse

Hoe maak je een Snap-pakket Ubuntu 16

11.06.2021, 19:26

Snap is een technologie ontwikkeld door Canonical om het installeren van software in de Ubuntu-distributie te vergemakkelijken. Het is een relatief recente ontwikkeling. De ontwikkeling van Snap nam meerdere jaren in beslag, maar pas bij de release van Ubuntu 16.04 verscheen het in een staat waarin het klaar is voor gebruik door de massa.

Het belangrijkste voordeel van Snap is de mogelijkheid om programma's te installeren zonder afhankelijkheden. Alle benodigde bibliotheken zitten al in het pakket met het programma en er is niets van het systeem nodig om het uit te voeren. Bij het updaten hoeft de gebruiker maar één Snap-pakket bij te werken zonder wijzigingen aan te brengen in het systeem, en in geval van fouten kan hij het pakket terugdraaien naar de vorige versie. Op het web kun je vaak discussies tegenkomen onder gebruikers over de vraag of snap-technologie echt goed is of dat deze moet worden afgeschaft ten gunste van deb-pakketten. Maar tijd en testen zullen het uitwijzen. In dit artikel kijken we naar het proces van het maken van snap-pakketten. Het aanmaken ervan is iets eenvoudiger dan dezelfde deb-pakketten.

Snappakketten aanmaken in Ubuntu 16.04

Om snap packages aan te maken gebruiken we een speciale tool genaamd Snapcraft. Dit is de officiële tool voor het maken van snap packages, waarmee de ontwikkelaar programma's kan packagen om de benodigde bestanden in het hele systeem te bouwen. Met Snapcraft kun je niet alleen bestanden kopiëren, maar ook de broncode downloaden en het programma bouwen.

Laten we nu eens kijken hoe je snap packages kunt maken met de applicatie Samplenote als voorbeeld.

Installeer eerst Snapcraft. Voeg een PPA toe aan ons systeem om de nieuwste versie te krijgen:

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

Werk nu de pakketlijst bij en installeer het programma:

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

Als de installatie van Snapcraft is voltooid, kunnen we verder gaan met het verkrijgen van de broncode van het programma. Download eerst de broncode van GitHub en pak deze uit:

$ 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

Aangezien het programma niet gecompileerd hoeft te worden is onze taak iets eenvoudiger. Ga naar de map met het programma en initialiseer daar de Snapcraft build-omgeving:

$ cd Simplenote-linux-x64
$ snapcraft init

Na het uitvoeren van de laatste opdracht verschijnt het bestand snapcraft.yml in de map. Door het bestand te bewerken, kunnen we het proces voor het maken van ons snappakket configureren. We hebben een bestand nodig met de volgende inhoud:

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 eerste vier regels bevatten informatie over het pakket zelf, de naam van het programma, de versie en een korte en volledige beschrijving.

Command - dit is het commando om het programma te starten, verder zullen we de script warpper gebruiken, omdat we extra omgevingsvariabelen moeten opgeven.

Plugs - dit zijn de interfaces die door het programma kunnen worden gebruikt. Het punt is dat snapprogramma's in een geïsoleerde omgeving werken, van waaruit ze geen toegang kunnen krijgen tot hardware en persoonlijke gegevens. Om ons programma goed te laten werken moet het toegang geven tot de opengl, unity7 en netwerkinterfaces.

U kunt de beschikbare interfaces en de programma's die ze gebruiken zien door het commando uit te voeren:

$ snap interfaces

In het onderdeel parts moet je de programmabestanden opgeven. Specifiek, wat snapcraft moet doen bij het maken van een pakket. Omdat we niets hoeven te compileren, gebruiken we de copy plugin om bestanden te kopiëren. De bestanden die gekopieerd moeten worden staan in de bestanden sectie. Er zijn niet alleen uitvoerbare bestanden, maar ook alle benodigde bibliotheken, zodat het programma alle componenten krijgt die het nodig heeft.

Het formaat van de invoer is als volgt:

system_file: snap_package_file_path

Er is één niet-standaard invoer:

resources*: resources

Met het jokerteken * kun je de hele directory kopiëren. Om te voorkomen dat alle bestanden van het systeem worden gekopieerd, is er een optie in de site-pakketten sectie om het programma te vertellen welke pakketten moeten worden geïnstalleerd in het snap-pakket, in ons geval zijn dat libnss3, fontconfig-config-config en gnome-themes-standard.

Om te zien welke bibliotheken het programma gebruikt, kun je het commando gebruiken:

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)

Het belangrijkste is dat deze bibliotheken worden meegeleverd met het programma, dus we moeten ze opgeven in het configuratiebestand snapcraft.yaml. Alle andere bibliotheken zijn beschikbaar op het systeem en worden automatisch gedetecteerd door snapcraft.

Laten we vervolgens het wrapper-bestand maken:

!/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" "$@"

Dit is eenvoudig - een Bash-script. Stel de paden in voor de lettertypen en vertel het programma waar het moet zoeken naar de bibliotheken, zodat libnote. so en libffmpeg.so met succes worden gevonden. En de laatste regel start simplenote.

Het volgende dat nog gedaan moet worden is het bestand uitvoerbaar maken:

$ chmod +x wrapper

Voer uit om het bouwen van het pakket te starten:

$ snapcraft

Het bouwen kan even duren, en zodra het bouwen is voltooid kun je het pakket installeren:

$ sudo snap install simplenote_1.0.1_amd64.snap

Je kunt het gebruikelijke commando gebruiken om het programma uit te voeren:

$ simplenote

Nu is het programma geïnstalleerd. Je kunt precies dezelfde methode voor het maken van snap-pakketten gebruiken om je applicaties te verpakken.