"Snap" yra "Canonical" sukurta technologija, skirta palengvinti programinės įrangos diegimą į "Ubuntu" distribuciją. Ji sukurta palyginti neseniai. Snap buvo kuriama kelerius metus, tačiau tik išleidus Ubuntu 16.04 ji tapo tokia, kad ją galima naudoti masiškai.
Pagrindinis Snap privalumas yra galimybė įdiegti programas be priklausomybių. Visos reikalingos bibliotekos jau yra pakete su programa, todėl norint ją paleisti iš sistemos nieko nereikia. Atnaujindamas naudotojas turi atnaujinti vieną Snap paketą, nekeisdamas sistemos, o nesėkmių ir klaidų atveju gali grąžinti paketą į ankstesnę versiją. Internete dažnai galima susidurti su naudotojų ginčais, ar snap technologija iš tikrųjų yra gera, ar jos reikėtų atsisakyti deb
paketų naudai. Tačiau tai parodys laikas ir bandymai. Toliau šiame straipsnyje apžvelgsime snap
paketų kūrimo procesą. Juos kurti šiek tiek paprasčiau nei tuos pačius deb
paketus.
Snap
paketams kurti naudosime specialų įrankį, vadinamą Snapcraft. Tai oficiali snap paketų kūrimo priemonė, kuri leidžia kūrėjui kurti paketų programas, kad visoje sistemoje būtų sukurti reikiami failai. Snapcraft leidžia ne tik kopijuoti failus, bet ir atsisiųsti pradinį kodą bei sukurti programą.
Toliau pažiūrėkime, kaip sukurti "snap"
paketus, kaip pavyzdį naudodami programą "Samplenote".
Pirmiausia įdiekite "Snapcraft". Norėdami gauti naujausią versiją, į savo sistemą pridėkite PPA:
$ sudo add-apt-repository ppa:snappy-dev/tools
Dabar atnaujinkite paketų sąrašą ir įdiekite programą:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Baigę diegti "Snapcraft", galime pereiti prie programos išeities kodo gavimo. Pirmiausia atsisiųskite pradinius šaltinius iš "GitHub" ir išpakuokite juos:
$ 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
Kadangi programos nereikia kompiliuoti, mūsų užduotis šiek tiek lengvesnė. Eikite į aplanką su programa ir inicializuokite jame esančią "Snapcraft" kūrimo aplinką:
$ cd Simplenote-linux-x64
$ snapcraft init
Įvykdžius paskutinę komandą, aplanke atsiras failas snapcraft.yml
. Redaguodami šį failą sukonfigūruokime mūsų snap paketo kūrimo procesą. Mums reikės toliau nurodyto turinio failo:
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
Pirmosiose keturiose eilutėse pateikiama informacija apie patį paketą, programos pavadinimas, versija ir trumpas bei išsamus aprašymas.
Komanda - tai komanda, skirta programai paleisti, toliau naudosime skriptų karpytuvą
, nes reikia nurodyti papildomus aplinkos kintamuosius.
Įskiepiai
- tai sąsajos, kuriomis gali naudotis programa. Esmė ta, kad šnekamosios programos veikia izoliuotoje aplinkoje, iš kurios jos negali gauti prieigos prie techninės įrangos ir asmeninių duomenų. Kad mūsų programa tinkamai veiktų, jai reikia suteikti prieigą prie opengl
, unity7
ir tinklo
sąsajų.
Galimas sąsajas ir jomis besinaudojančias programas galite pamatyti įvykdę komandą:
$ snap interfaces
Dalys
skirsnyje reikia nurodyti programos failus. Konkrečiai, ką turi padaryti "snapcraft",
kurdamas paketą. Kadangi mums nieko nereikia kompiliuoti, failams kopijuoti naudojame kopijavimo įskiepį. Failai, kuriuos reikia nukopijuoti, išvardyti failų
skyriuje. Čia yra ne tik vykdomieji failai, bet ir visos reikalingos bibliotekos, todėl programa gaus visus jai reikalingus komponentus.
Įrašo formatas yra toks:
system_file: snap_package_file_path
Yra vienas nestandartinis įrašas:
resources*: resources
simbolis *
leidžia nukopijuoti visą katalogą. Kad nereikėtų kopijuoti visų failų iš sistemos, skiltyje site-packages yra parinktis, kuria programai nurodoma, kurie paketai turi būti įdiegti į snap paketą, mūsų atveju tai libnss3
, fontconfig-config-config
ir gnome-themes-standard
.
Norėdami pamatyti, kokias bibliotekas naudoja programa, galite naudoti komandą:
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)
Svarbu tai, kad šios bibliotekos tiekiamos kartu su programa, todėl turime jas nurodyti snapcraft.yaml
konfigūracijos faile. Visos kitos bibliotekos yra prieinamos sistemoje ir jas snapcraft
aptiks automatiškai.
Toliau sukurkime įvyniojimo
failą:
!/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" "$@"
Čia viskas paprasta - "Bash"
skriptas. Nustatykite šriftų kelius ir nurodykite programai, kur ieškoti bibliotekų, kad libnote.
so
ir libffmpeg.so
būtų sėkmingai surastos. Ir paskutine eilute paleiskite simplenote
.
Kitas likęs dalykas - padaryti šį failą vykdytinu:
$ chmod +x wrapper
Norėdami pradėti kurti paketą, paleiskite:
$ snapcraft
Surinkimas gali šiek tiek užtrukti, o kai jis bus baigtas, galėsite įdiegti paketą:
$ sudo snap install simplenote_1.0.1_amd64.snap
Programai paleisti galite naudoti įprastą komandą:
$ simplenote
Dabar programa įdiegta. Lygiai
tokį patį paketų kūrimo metodą galite naudoti savo programoms supakuoti.