Die dynamische Entwicklung von , die permanent Verbesserungen und tolle neue Funktionen hervor bringt, läßt — insbesondere in größeren Organisationen mit zahlreichen QGIS-Arbeitsplätzen — schnell den Wunsch nach einer zentralisierten und einfachen Verteilung der Software sowie von organisationsspezifischen Voreinstellungen aufkommen.

QGIS (LTR) zentral

Ausgehend von einigen vorausgegangenen Anleitungen1) will ich hier meine derzeitige (>= QGIS 3.10) Lösung für diese Aufgabe auf Windows Betriebssystemen schildern. Die Aufgabe umfaßt zwei Ziele, nämlich die gleichmäßige Verbreitung der Software QGIS (LTR) zum einen und die zentralisierte Bereitstellung standardisierter Konfigurationen andererseits. Für jeden Teil gibt es verschiedenen Herangehensweisen, die je nach Anwendungsfall und Bedürfnissen miteinander kombinierbar sind. — T. Schüttenberg, Stadt Minden (Geoservice)
english version of this text

1. Download & (Grund-)Installation

  • Für die Installation wird der OSGeo4W-Installer verwendet. — Die nachfolgenden Ausführungen beziehen sich auf die 64bit-Version von QGIS (→ Download osgeo4w-setup-x86_64.exe).
    • :t: Tipp: Dieser läßt sich auch mittels Commandline Options bedienen2)! Damit besteht z.B. die Möglichkeit Paketdownload und Installation von einander zu trennen (z.B. für unterschiedlich berechtigte User) und diese Schritte evtl. zu automatisieren. — Beispiel:
      osgeo4w-setup-x86_64.exe -q -A -R T:\GISrepo\osgeo4w -D -l T:\GISrepo\osgeo4w -s http://www.norbit.de/osgeo4w/ -a x86_64 -g -k -P qgis-ltr-full -o
      
      -A --advanced             Advanced install (as opposed to Express)
      -R --root                 Root installation directory [zuletzt gewählte osgeo4w-Einstellungen hier! \etc\setup\setup.rc]
      -D --download             Download from internet [only]
      -l --local-package-dir    Local package directory
      -s --site                 Download site
      -g --upgrade-also         also upgrade installed packages
      -P --packages             Specify packages to install [download]
  • :i: Die Installation besteht grundsätzlich aus3)
    1. Download der ausgewählten Programmpakete (inkl. Auflösung aller Abhängigkeiten) in ein lokales (temporäres) Verzeichnis,
    2. (MD5-Überprüfung und) Entpacken in das definierte „Wurzelverzeichnis“ (root%OSGEO4W_ROOT%) sowie
    3. Post-Install-Routinen, bei denen z.B. Pfadvariablen an das Installationsverzeichnis angepasst werden (→ \bin\qgis-ltr-bin-g7.env, qgis-ltr-bin.env), die Micrsoft Visual C++ Runtimes installiert und Programmstartverknüpfungen angelegt werden.
  • :!: Die Registrierung von QGIS-Dateiendungen inkl. des Startbefehls für Projektdateien sowie die Installation der Micrsoft Visual C++ Runtime Redistributables erfordern Adminrechte!4)
  • Die DLL-Dateien der diversen Micrsoft Visual C++ Runtime-Versionen werden im %SYSTEM%-Verzeichnis5) (der Installationsmaschine) gespeichert bzw. aktualisiert, was eine direkte Portabilität verhindert.
    • :!: Um Startfehler aufgrund nicht vorhandener DLL-Dateien im Zielsystem (s.u.) zu vermeiden, sind AFAIK für QGIS 3.10 ggf. folgende DLLs im \bin-Verzeichnis der Installation zu ergänzen: msvcp120.dll, msvcr120.dll, vcruntime140.dll, vcomp140.dll, opencl.dll. (leider nicht 100%ig vorhersagbar!)

1.1 Netzwerkinstallation

  • :t: Wenn das gewählte Installationsverzeichnis ein Netzlaufwerk ist, kann QGIS direkt von hier aus gestartet und am lokalen Arbeitsplatz PC verwendet werden, da keinerlei QGIS-Einstellungen z.B. in der Windows-Registry oder sonst wo existieren. 8-)
    Installation aus lokalem Paketverzeichnis mittels OSGeo4W Commandline:
    osgeo4w-setup-x86_64.exe -q -A -R V:\gisdept\qgisltrZentral -L -l T:\GISrepo\osgeo4w -a x86_64 -g -k -P qgis-ltr-full
  • Benutzer*innen benötigen zum Start der Netzwerkinstallation zusätzlich lediglich eine lokale Verknüpfung auf [Netzlaufwerk]\qgisltrZentral\bin\qgis-ltr-grass7.bat

1.2 Installationsverzeichnis verteilen

  • Ebenso kann dieses Installationsverzeichnis einfach auf einen anderen (Arbeitsplatz-)PC kopiert werden (Batch-Skript, #2), um QGIS dann dort lokal auszuführen.
    • :!: Nachteil lokaler Kopien am Arbeitsplatz ist jedoch, dass sie mit einer „pull“-Methode (wie dieser) nur schwierig gleichmäßig zu aktualisieren sind.
  • Anschließend ist eine Anpassung der Pfade in \bin\qgis-ltr-bin-g7.env & \qgis-ltr-bin.env an den neuen, lokalen Installationsort (OSGEO4W_ROOT) erforderlich. Dies geschieht durch erneutes Ausführen der Postinstall-Routinen (siehe Skript, #3)6):
    "%OSGEO4W_ROOT%\bin\qgis-ltr-grass7.bat" --postinstall
    "%OSGEO4W_ROOT%\bin\qgis-ltr.bat" --postinstall
  • :t: Im Zusammenhang mit dem Kopiervorgang sollten auf dem Ziel-PC auch Programmstartverknüpfungen für die Benutzer*innen angelegt werden.
  • 8-) einheitliche (erprobte) QGIS Version auf allen Arbeitsplätzen jederzeit verfügbar, als lokale Kopie oder via Netzwerk
  • 8-) keine Administratoren-Rechte zur Benutzung erforderlich
  • tbd Verwendung gemeinsamer Daten und Ressourcen nicht vordefiniert (→ nächster Abschnitt)

2. Konfiguration

  • :i: Der erste Programmstart von QGIS erzeugt (sofern nicht vorhanden) ein Benutzerprofil im Home-Verzeichnis des Anwenders, standardmäßig in %APPDATA%\QGIS\QGIS3
    • Das Profil (default) enthält neben Unterordnern für Processing, Farbpaletten, div. (optionale) Vorlagen, GUI Anpassungen, etc. sowie zusätzliche Python Plugins insbesondere
    • die Settings-Datei QGIS3.ini, die sämtliche QGIS Programmeinstellungen enthält bzw. aufnimmt.

2.1 Standardisierung

  • Da alle Programmeinstellungen, die in QGIS vorgenommen werden, in der QGIS3.ini gespeichert werden, kann ein vorab manuell mittels QGIS konfiguriertes Profil ebenfalls als (Standard-) Kopie verteilt werden (z.B. über ein Netzlaufwerk, →Batch-Skript).
    • :i: Die Erst-Einstellungen richten sich nach Vorgaben, die im Softwarecode einprogrammiert sind (sichtbar unter Menü: Einstellungen/Optionen…/Erweitert). Individuell angepasste Werte aus QGIS3.ini überstimmen die Default-Vorgaben.
  • :!: Durch die Verteilung eines vorbereiteten Benutzerprofils (settings_template) befindet sich die gesamte standardisierte Konfiguration schließlich als jeweils unabhängige Kopie auf den Arbeitsplatz-PCs — auch im Fall der Netzwerkinstallation! — Das bedeutet:
    1. :-/ Anwender*innen können (Grund-)Einstellungen verändern oder löschen
    2. :-\ Korrektur und PflegeFIXME von Standardeinstellungen sind somit mindestens sehr aufwändig und evtl. langwierig (→ individuell pro Arbeitsplatz)

2.2 wichtige Einstellungen

  1. Verbindungen zu gemeinsamen Datenquellen (siehe Menü: Layer/Datenquellverwaltung), wie einer zentralen PostGIS-Datenbank oder OWS-Diensten der (eigenen) GDI, sind i.d.R. essentiell für die organisationsweite QGIS Nutzung.
    • :i: Die Verbindungsdetails finden sich in QGIS3.ini unter [PostgreSQL] bzw. [qgis] (OWS)
  2. Dazu gehören oft auch externe Erweiterungen (Plugins), inklusive ihrer umgebungsabhängigen Konfiguration wie Datenquellverbindungen (s.o.), z.B.:
    • norGIS ALKIS-Einbindung — abfragbare ALKIS Vektorlayerkarte aus PostGIS-Datenbank7), Darstellung gem. GeoInfoDok
    • Discovery — anpassbare Suchfunktion auf lokalen PostGIS-Datenbanken
    • QGIS Map Library — vordefinierte Themenlayer auf Knopfdruck ins QGIS Projekt einfügen.
  3. Weitere QGIS Konfigurationen für die Nutzung bestehender, organisationsweiter Ressourcen können z.B. sein:
    • Suchpfad(e) für SVG-Symbole oder zusätzliche Druckvorlagen → auf Netzlaufwerken
    • Benutzerdefinierte Umgebungsvariablen — die erst nach Programmstart benötigt/genutzt werden, z.B. PGSERVICEFILE8)
    • spezielle Netzwerkeinstellungen und Proxy für Webzugriffe
    • Suchfilter der Locator Bar
    • …alles weitere, was standardisiert oder optimiert sein soll:
  • 8-) Einheitliche Nutzung spezifischer Daten und Ressourcen in der gesamten Organisation
  • 8-) An jedem Arbeitsplatz standardisierte und gleichzeitig individualisierbare Arbeitsgrundlagen und Werkzeuge

3. Zentralisierung

  • Für die Zentralisierung der QGIS Einstellungsoptionen gibt es verschiedene Methoden:

3.1 Startparameter

  • Startparameter (command line options ), die in Verbindung mit der QGIS-Startdatei aufgerufen werden. Von Interesse sind hier besonders:
    • --globalsettingsfile [path]— Hiermit kann der Pfad einer Datei mit globalen Voreinstellungen definiert werden, standardmäßig %OSGEO4W_ROOT%/resources/qgis_global_settings.ini.
      • :i: Diese Einstellungen ersetzen im Softwarecode einprogrammierte Vorgaben, die Einstellungen aus dem Benutzerprofil stehen jedoch noch über diesen!
      • Derzeit gibt es keine Möglichkeit den Speicherort von bestimmten Einstellungen festzulegen, daher ist manuell eine (umbenannte) Kopie anzulegen und mit den entsprechenden Werten aus QGIS3.ini zu ergänzen.9) Theoretisch müsste man somit eine komplett leere QGIS3.ini ausliefern können, die später automatisch mit individuellen Einstellungen gefüllt wird.
        1. :!: Aber Issue #29281 & #29226 erfordern, dass das [locale]-Setting in QGIS3.ini enthalten sein muss!
          [locale]
          userLocale=de_DE
          overrideFlag=false
          globalLocale=de_DE
          showGroupSeparator=false
        2. :t: Wie ich gelernt habe, ist die Python-Klasse QgsSettings für die Verwendung der qgis_global_settings.ini erforderlich und ersetzt QSettings10). Diese Codeanpassung muss somit auch in externen Plugins nachvollzogen werden, damit deren Einstellungen aus qgis_global_settings.ini gelesen werden, siehe Discovery #73 & Map Library #2. 8-) :-D
    • --authdbdirectory [path] — Definiert, ähnlich wie globalsettingsfile, das Verzeichnis, in dem die Authentifizerungsdatenbank gespeichert wird.
    • --profiles-path [path] — Vorgabe für den (Anlage- und) Speicherort des Benutzerprofils
      • :t: Dies ermöglicht z.B. die Verwendung eines (gemeinsamen) Profils auf einem Netzlaufwerk von verschiedenen Computern aus oder auch ein Mitnehmen der eigenen Einstellungen und Plugins auf einem USB-Stick.
    • --customizationfile [path] — Vorgabe für eine Datei zur Oberflächenanpassung (QGISCUSTOMIZATION3.ini), die beim Start angewendet wird.
    • --code [path] — Pfad zu einer bestehenden Pythondatei, die ausgeführt wird direkt nachdem QGIS gestartet worden ist.

3.2 Umgebungsvariablen

  • Einige der Startparameter können auch als Umgebungsvariable (environment variables) gesetzt werden.
    1. :t: Entscheidend für den Einsatz von Umgebungsvariablen ist, wann sie jeweils zur Verfügung stehen müssen, um ihren Zweck zu erfüllen!
      • QGIS_GLOBAL_SETTINGS_FILE → s.o. --globalsettingsfile
      • QGIS_CUSTOM_CONFIG_PATH → s.o. --profiles-path
        Diese müssen jeweils beim/vor vollendetem QGIS-Start im (Benutzerprofil) des Betriebssystems [des Zielrechners] gesetzt werden, damit sie greifen. Als QGIS Systemoptionen (s.o., Standardisierung Pkt 3.) kann es nicht funktionieren!
      • PYQGIS_STARTUP — verweist auf ein Python-Skript, das ausgeführt wird noch bevor QGIS startet.
    2. Möglichkeiten zur Platzierung von Umgebungsvariablen (im Zielrechner)
      • Verteilung & Aktualisierung mittels zu ergänzender SET-Befehle in .bat-Datei wie der QGIS Startdatei
      • :t: oder ausgelagert in eine separate Datei auf einem Netzlaufwerk
        Auf diese Weise gesetzte Variablen werden wieder entladen, sobald QGIS beendet wird.
      • Oder schon bei der lokalen QGIS „Installation“ mittels .reg-Datei11) auf einem Netzlaufwerk (:t: manuell im Windows Registrierungs-Editor einrichten & exportieren). Befehl start /wait regedit -s "[Netzwerkpfad\]qgis_userEnv.reg" in angepasster QGIS-Startdatei.
      • [Oder mittels Windows Group/System Policy, die ggf. von der IT-Abteilung bei der Einrichtung eines Windows-Benutzerprofils installiert werden. Auf diese Weise wären keine veränderten QGIS-Startdateien auf den Zielrechnern notwendig, die Umgebungsvariablen sind gewissermaßen permanent vorhanden.]

3.3 Python-Skripte

  • Python-Skripte(Diese Methode verwende ich bisher nicht.)
    1. Bei jedem Start sucht QGIS im Benutzerverzeichnis %AppData%\Roaming\QGIS\QGIS3 nach einer Datei namens startup.py und führt sie aus — :i: unabhängig vom verwendeten Profil.
    2. Mit der Umgebungsvariable PYQGIS_STARTUP kann ein Python-Skript (ggf. startup.py) schon ausgeführt werden bevor die Initialisierung von QGIS abgeschlossen ist. Dies kann verwendet werden, um zentral vorgehaltene Einstellungen etc. auf die Arbeitsplatz-PCs zu kopieren ( Beispiel).

3.4 meine Vorgehensweise

  1. 8-) Verlagerung standardisierter Einstellungen aus (lokaler) QGIS3.ini in zentrale qgis_global_settings.ini, abgelegt auf einem Netzlaufwerk.
  2. 8-) Umgebungsvariablen ermöglichen die Pflege der QGIS Einstellungsoptionen für alle Arbeitsplätze:
    1. Zentral abgelegte Datei mit Befehlen zur Setzung der Umgebungsvariablen QGIS_CUSTOM_CONFIG_PATH & QGIS_GLOBAL_SETTINGS_FILE
    2. wird von QGIS Startdatei (bin\qgis-ltr-grass7.bat bzw. bin\qgis-ltr.bat) aufgerufen.
  3. :-D Das Lesen von Dokumentationen und Issue-Kommentaren hilft wirklich weiter, selbst wenn man kein Programmierer ist! ⇒ Ein HOCH auf die QGIS-Community!!