Table of Contents
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ů:
- 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
- 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
- GeoGet balíček rozbalí a buď skončí s chybou, že balíček je vadný, nebo se zeptá uživatele, jestli jej opravdu chce nainstalovat
- pokud ano, GeoGet zjistí z metasouboru instalační skript a pokusí se spustit jeho funkci InstallWork
- 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í.