GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:skripty:autor:gip

Tvorba instalačních balíčků *.gip

Co je to GIP?

GIP je balíček, který obsahuje plugin pro program GeoGet. Pomocí balíčků je řešena automatizovaná instalace pluginů a online kontrola dostupnosti případných novějších verzí pluginu. Je to standardní soubor *.zip se změněnou příponou a definovaným obsahem. GeoGet podle tohoto obsahu:

  • přesně určí, co je třeba udělat při a po instalaci balíčku
  • jak balíček odinstalovat
  • při instalaci kontroluje závislost na jiných pluginech a knihovnách
  • pro správně nainstalovaný plugin umí určit jeho verzi a vyhledat verzi novější, pokud existuje

Je velmi důležité zvolit správně jméno pluginu (a tedy i instalačního souboru). Jednak by mělo být výstižné a také by mělo být v rámci všech pluginů jedinečné a pokud možno nezaměnitelné s jiným pluginem. Odstrašujícím příkladem mohou být GgStat a naštěstí již neexistující ggstat2, který způsoboval zmatky u některých uživatelů ještě rok po jeho přejmenování na dnešní AutoStat.

Existuje plugin GipMaker, který tvorbu instalačních balíčků usnadňuje. I k jeho použití jsou však potřeba jisté znalosti, např. nevytváří *.meta.ini soubor.

Struktura GIPu

V zásadě lze říci, že GIP obsahuje adresář (nebo adresáře) a v něm všechny soubory, které mají být instalovány. Adresář a všechny soubory v něm obsažené GeoGet při instalaci zkopíruje do DATADIR\script. Kromě všech souborů, které potřebuje plugin ke své práci, musí být v GIPu ještě metasoubor a volitelně také instalační skript. Následující struktura ukazuje ve stromové struktuře obsah GIPu pro instalaci fiktivního pluginu jménem PLG_JM:

  PLG_JM-X.Y.Z.gip
    +- PLG_JM                      # hlavní instalační adresář pluginu (v DATADIR\script)
         +- PLG_JM.meta.ini        # metasoubor
         +- PLG_JM.ggp.pas         # instalované soubory
         +- PLG_JM.lib.pas
         +- soubor-1.txt
         ...
         +- PLG_JM.default.pas     # implicitní konfigurační soubor
         +- PLG_JM.ggi.pas         # instalační skript

Obecně není nutné, aby plugin byl instalován v adresáři stejného jména, ale je to doporučené. Výjimkou z tohoto pravidla jsou knihovny instalované do adresáře lib a různé speciální pluginy jako například šablony pro GgStat resp. jeho plugin GgsExpr. Instalace do jiného adresáře by měla mít dobrý důvod, protože může dojít k zmatkům a třeba i k vymazání pluginu při odinstalování pluginu jiného. Zároveň je velmi vhodné nastavit v souboru metasoubor také závislost balíčku na tom pluginu, do jehož adresáře jsou nějaké soubory instalovány.

Uživatelské nastavení pluginů je uloženo v souboru *.config.pas. Je však velmi nevhodné tento soubor dávat do instalačního balíčku, protože při aktualizaci balíčku bude uživatelovo nastavení přepsáno. Místo něj instalovaný plugin obsahuje soubor *.default.pas s implicitním nastavením a GeoGet z něj při prvním spuštění pluginu soubor config.pas udělá sám. Rovněž se, při použití verze config.pas ze starší verze pluginu, postará o doplnění nových konfiguračních proměnných nebo ignorování proměnných starých a již neplatných.

Metasoubor plugin.meta.ini

Úkolem metasouboru je podat GeoGetu informace o verzi, souborech a závislostech instalovaného nebo odinstalovávaného pluginu. Jméno souboru je odvozené od jména pluginu doplněného o příponu meta.ini. Soubor má pevnou strukturu, ale pokud nemají být některé položky využité, nemusejí být v souboru uvedeny vůbec. V následujícím příkladě nahrazuje PLG_JM skutečné jméno pluginu):

PLG_JM.meta.ini
[info]
; Charakteristika pluginu
; Pomocí podtržítka a uvedení kódu jazykového prostředí lze definovat i lokalizaci popisu.
description=Plugin description
description_cs=Charakteristika pluginu

; Verze pluginu
version=1.0.0

; Minimální verze GeoGetu
ggversion=2.4.2

; Webová stránka s pluginem. Pokud položku neuvedete,
; je odkaz generován automaticky na web GeoGetu (doporučeno!).
web=http://www.geoget.cz/doku.php/user:skript:PLG_JM

; Příkaz pro zjištěni aktuální verze pluginu. Pokud položku neuvedete,
; je odkaz generován automaticky na web GeoGetu (doporučeno!). 
; Pokud se jedná například GIP s dávkou pro Combine, můžete použít pro kontrolu soubor s příponou *.ver, 
; ve kterém bude zapsáno číslo aktuální verze pluginu.
webversion=http://www.www.geoget.cz/doku.php/user:skript:PLG_JM?current_version

; Příkaz pro staženi instalačního balíčku s nejčerstvější dostupnou verzi.
; Pokud položku neuvedete, je odkaz generován automaticky na web GeoGetu (doporučeno!).
webupdate=http://www.geoget.cz/doku.php/user:skript:PLG_JM?download

; Výchozí skupina (kategorie v menu Pluginy), do které budou spustitelné skripty obsažené v balíčku zařazeny.
; Pokud již od předchozí instalace v nějaké skupině položka zařazena je, nastavení změněno nebude.
; Pomocí podtržítka a uvedení kódu jazykového prostředí lze definovat i lokalizaci skupiny.
DefaultPluginGroup=Tools
DefaultPluginGroup_cs=Nástroje

; Od verze 2.8 je možné správci pluginů určit plugin, ke kterému tento patří.
; Správce pak zobrazí tento plugin mimo abecední pořadí hned u toho rodičovského.
; Uvádí se pouze jméno pluginu, bez cesty a přípon ggp.pas, gge.pas, ...
Parent=Jméno_nadřízeného_pluginu
 
[install]
; Instalační skript. Může obsahovat funkce InstallWork:String a
; UninstallWork:String
; tyto funkce jsou volány při instalaci nebo odinstalaci pluginu
; (pokud je zde instalační skript uveden)
script=PLG_JM\PLG_JM.ggi.pas
 
[dependency]
; Instalovaný plugin je závislý na knihovně VarSubstLib (verze nejméně 1.2),
; která je dostupná ke stažení na dané adrese. Pokud položku neuvedete,
; je odkaz generován automaticky na web GeoGetu (doporučeno!).
VarSubstLib|1.2=https://www.geoget.cz/VarSubstLib.gip

; závislost na knihovně (bez definované verze)
StringLib=https://www.geoget.cz/doku.php/user:skript:stringlib?download

; závislost na knihovně (vyhledává se automaticky na webu GeoGetu)
RelToAbsPath=
 
[uninstall]
; Při odinstalování smazat celý obsah instalačního adresáře včetně něj.
; Pro dodržení formátu INI souboru je třeba vždy zakončit řádek pomocí znaku =.
PLG_JM=

; ...a také můžeme smazat nějaké pracovní soubory např.:
..\offline\PLG_JM.*=
..\offline\PLG_JM\=

Pokud je v sekci [install] uveden instalační skript, při instalaci je z něj spouštěna funkce InstallWork (existuje-li) a při odinstalování spouští GeoGet funkci (existuje-li).

Instalace a odinstalace pluginu

Instalace Většinou k instalaci pluginu stačí standardní “rozbalení” instalačního balíčku. Ve složitějších případech ale může instalace kromě kopírování souborů vyžadovat ještě další činnosti. V tom případě musí autor vytvořit instalační skript typu GGI, který příslušné úkony zajistí. Na něj pak uvede odkaz v *.meta.ini souboru. GeoGet pak po zkopírování všech souborů tento skript spustí (resp. spustí jeho funkci InstallWork) a převezme návratovou hodnotu. Podle hodnoty pak informuje uživatele o úspěšné instalaci.

Výsledek instalačního skriptu (funkce InstallWork) je string. Buď je prázdný (=OK), nebo bude text přidán k chybovým hlášením.

Odinstalování Stejně jako při instalaci, stačí většinou pro odinstalování uvést v sekci [uninstall] soubory a adresáře, které je třeba vymazat. (Soubor *.meta.ini není třeba uvádět, ten se maže automaticky.) V některých případech ale může být potřeba dělat i jiné činnosti než prosté mazání souborů a/nebo adresářů. V takovém případě je třeba v instalačním skriptu vytvořit funkci UninstallWork.

Pokud je v *.meta.ini souboru uveden instalační skript, je spouštěn i při odinstalování, resp. je v něm spuštěna právě funkce UninstallWork.

Popis průběhu instalace či aktualizace

Proces instalace nebo aktualizace pluginu je složen z následujících kroků:

  1. uživatel spustí ve správci pluginů jednu z funkcí
    • funkci pro instalaci nového pluginu ze staženého souboru
    • funkci pro instalaci pluginu z URL
    • funkci pro aktualizaci již nainstalovaného pluginu
  2. zadá nebo vybere příslušný soubor nebo napíše URL instalačního balíčku, v případě aktualizace tento krok postrádá smyslu
  3. GeoGet balíček rozbalí a buď skončí s chybou, že balíček je vadný, nebo se zeptá uživatele, jestli jej opravdu chce nainstalovat
  4. pokud ano, GeoGet zjistí z metasouboru instalační skript a pokusí se spustit jeho funkci InstallWork
  5. pokud bylo vše OK, vypíše uživateli zprávu spolu s upozorněním, že v PluginManageru si může určit, v jakém menu se nový skript má objevit a jestli má být na toolbaru

Když se instaluje plugin, který má uvedené závislosti včetně URL adres na stažení, tak pokud závislé balíčky neexistují, GeoGet se pokusí je sám stáhnout a nainstalovat.

Pokud dojde k jakémukoliv problému při instalaci balíčku, při instalaci závislých balíčků atd., všechny chybové hlášky se sbírají a na konci instalace se zobrazí.

user/skripty/autor/gip.txt · Last modified: 2020/12/27 11:51 by mikrom