Aller au contenu

Préconfigurer QGIS en entreprise avec OSGEO4W#

📆 Date de publication initiale : 6 juillet 2021

Pré-requis :

  • être en charge de déployer QGIS sur des postes d'une organisation, grande ou petite
  • ne pas avoir peur de petits scripts shell et batch

Introduction#

logo QGIS

Vous aimez que tout soit bien paramétré pour vos utilisateurs ? Vous avez ce coté psychorigide de l'admin SIG perfectionniste ? Vous voulez déployer de manière transparente un jeu de plugins obligatoires ? Ou vous aimeriez tout simplement que les connexions aux bases de données dans les projets QGIS soient toutes les mêmes ?

Dans la lignée des articles parlant de l'installeur OSGeo4W en ligne de commande, ou de la personnalisation du splashscreen, cet article vient faire un peu de publicité à une méthode pour préconfigurer tout votre environnement SIG préféré aux petits oignons.

Commenter cet article


Préconfigurez QGIS !#

Ce n'est pas une suggestion, mais presque une obligation !

En effet, déployer un logiciel SIG en entreprise, c'est préparer les fondations d'un patrimoine de données, cartes et applications qui seront créées par vos utilisateurs. Et comme tout bon administrateur SIG, vous voulez :

  • que les nouvelles données soient dans la bonne projection
  • que les utilisateurs utilisent la bonne connexion à la base de données (sans la casser)
  • que le proxy soit bien configuré (saletés de proxy)
  • que vos utilisateurs n'aient pas à mettre les mains dans ce cambouis, parce-qu'ils n'ont pas que ça à faire
  • que le cache internet ne fasse pas plus de 5 Mo sinon votre admin sys boude et ronchonne
  • etc..

Bonne nouvelle, QGIS étant open source et financé par des administrateurs SIG, la grande majorité de ces fonctionnalités sont déjà possibles.

tuning voiture qgis moche

Par exemple, moi j'aime bien :

  • toujours avoir une recherche d'adresse dans la barre de recherche universelle (merci la BAN), via le plugin French Locator Filter :

capture écran french locator filter

capture écran plugin mask

menu déroulant socle de couches de données

  • et Red Layer, pour gribouiller un fond de carte rapido, spreadsheet layers pour faciliter l'ouverture de tableurs excel, etc.

  • et tous les paramètres qui vont bien, comme ici un user-agent nommé QGIS et le proxy système (qui passe par le proxy.pac d'entreprise) :

quelques paramètres

A vous de jouer sur le contenu de votre profil utilisateur.

Reste à industrialiser et installer ça. Parce que vous n'avez pas que ça à faire non plus.


Les installeurs, monde merveilleux d'une espèce rare : les packagers#

On connaît volontiers le rôle des développeurs, qui oeuvrent dans le monde pur et merveilleux du code source pur.
Ils codent de préférence sous Linux, parfois sous MacOS ou BSD. Rarement sous Windows.

Ces développeurs ne seraient rien sans les "packagers", qui ont en charge la compilation des sources en binaires éxécutables sur les différentes plateformes. Et c'est un cauchemar le packaging, particulièrement sous Windows puisque le code est développé sur et pour Linux.

QGIS se veut multi-plateforme, ce qui veut dire qu'il est possible de le compiler sur la majorité des OS.
Le projet QGIS.org gère le packaging pour Ubuntu/Debian et Windows. Les autres plateformes sont dans les mains d'autres volontaires.

Pour Windows, il n'existait pas (jusqu'en 2021 en tous cas) de véritable gestionnaire de paquets natif. On réinstalle donc pour chaque application une majorité de ses dépendances logicielles. C'est plus lourd, il faut tout faire rentrer dans un énorme installateur (parfois au chausse pied).

Puisque la majorité des utilisateurs travaillent sous Windows, l'OSGeo a développé un environnement de compilation et d'installation, basé sur MinGW, le fameux OSGeo4W (prononcez OSGeo for Windows).

Cet utilitaire est à la base de tous les installeurs QGIS, mais il embarque également d'autres outils (GRASS, SAGA, etc.), des librairies (GDAL, PROJ), des langages et framework de développement (Python, Qt, etc.), dans une arborescence similaire à une plateforme Linux.

Et donc, nous reposons tous sur les larges épaules de Jurgen Fischer, qui a la lourde charge de maintenir OSGeo4W et les releases de QGIS.

Spoiler

Et non, ce n'est pas une tâche facile, ni rapide, ni réellement payée par des clients. Pensez éventuellement un jour à financer des choses de ce coté là 🙏.

Maintenant vous saCHez, vous ne pourrez plus négliger cet aspect des choses.


Partageons nos recettes#

Il existe une grande diversité de méthodes pour faire des installeurs et préconfigurer QGIS.

Pour rendre hommage aux recettes existantes, il y a :

A la différence de ces solutions qui réalisaient un paquet "tout en un", long à compresser, long à installer, et qui ne permet pas de gérer finement les versions des différents sous paquets, l'idée ici est de faire un paquet logiciel dédié à la configuration uniquement.

Cette idée lumineuse est née dans l'esprit de Sébastien Peillet, Hugo Mercier et grâce à des travaux successifs pour le Ministère de l'écologie, la Gendarmerie Nationale, la Métropole de Grenoble, etc. Merci à eux d'avoir permis d'aboutir à la recette de cuisine qui suit.

Et donc... roulement de tambours 🥁 :.

J'ai le plaisir d'annoncer la naissance du projet : https://github.com/haubourg/custom-osgeo4w-qgis.

C'est un modèle qui a simplement pour vocation de vous aider à construire vos propres paquets OSGEO4W dans ce cas d'utilisation bien particulier.

Copiez le, modifiez le, partagez le. Et si vous pensez pouvoir l'améliorer, proposez donc une modification de code !

En route pour le tuto#

Choisir sa configuration#

Voilà la structure type du paquet de configuration :

qgis-yourorganizationname/
├── apps
│   ├── qgis-yourorganizationname
│   │   ├── WMTS_scales.xml  -- some default scales (optional)
│   │   ├── layout_checks.py  -- some layout checks (copyright, citations, etc.) (optional)
│   │   ├── qgis-ltr-yourorganizationname.bat.template  -- .bat launcher template. This launcher will override the native qgis launchers after install
│   │   ├── qgis_constrained_settings.py -- a nice utility to constraint some in place user settings
│   │   ├── qgis_constrained_settings.yml -- the config file to decide which settings to constrain
│   │   ├── qgis_global_settings.ini      -- your customized default settings ini file.
│   │   └── startup_project.qgs            -- a qgis startup project (optional)
│   │   └── qgis-ltr-backup  -- a directory to save the native OSGEO4W shortcut .lnk files that will be removed on install. Uninstall will reinstate them
│   └── qgis-ltr
│       └── python
│           └── plugins      -- Some plugins you need to deploy on the PC.
│               ├── SpreadsheetLayers│  
│               ├── coordinator
│               ├── french_locator_filter
│               ├── mask
│               ├── menu_from_project
│               ├── qNote
│               └── redLayer
├── etc
│   ├── postinstall
│   │   └── qgis-yourorganizationname.bat  -- postinstall script dealing with shortcuts launchers mainly
│   └── preremove
│       └── qgis-yourorganizationname.bat  -- preremove script to restore a clean install when uninstalling your package
├── make.sh     -- Build your package tar.bz2 using the version tag in the setup.hint
├── deploy.sh   -- Deploy your built tar.bz2 to a local osgeo4W repository
├── deploy_ressources_somewhere.sh  -- a demo script if you wish to deploy things on a centralized repository (optional)
├── setup.hint   -- package metadata - Change here the package name and the version only

Il est possible d'embarquer des extensions, des symboles, du code, des ressources fichiers diverses, et d'ajouter de la logique applicative à l'installation et la désinstallation du paquet. Il est même possible de changer l'écran de démarrage, ou de forcer l'utilisation de versions très simplifiées de l'interface de QGIS.

Si vous combinez cela avec les options de démarrage :

<QGIS is a user friendly Open Source Geographic Information System.
Usage: /usr/bin/qgis.bin [OPTION] [FILE]
  OPTION:
        [...]
        [--project projectfile] load the given QGIS project
        [--extent xmin,ymin,xmax,ymax]  set initial map extent
        [--nologo]      hide splash screen
        [...]
        [--noplugins]   don't restore plugins on startup
        [--nocustomization]     don't apply GUI customization
        [--customizationfile path]      use the given ini file as GUI customization
        [--globalsettingsfile path]     use the given ini file as Global Settings (defaults)
        [--authdbdirectory path] use the given directory for authentication database
        [--code path]   run the given python file on load
        [--defaultui]   start by resetting user ui settings to default
        [...]
        [--profile name]        load a named profile from the user's profiles folder.
        [--profiles-path path]  path to store user profile folders. Will create profiles inside a {path}\profiles folder
        [--version-migration]   force the settings migration from older version if found
 [...]

ou encore les différentes possibilités de configuration, et particulièrement le fichier global_settings.ini, il y a finalement peu de limites.

Suivant vos contraintes, vous pouvez choisir d'embarquer toutes les ressources dans l'installeur, par exemple si vous n'avez pas de lecteur réseau partagé, ou si vous travaillez avec des machines déconnectées.

A l'opposé, une bonne partie des ressources (plugins, SVG, settings), peuvent être déplacées sur un lecteur réseau (avec des problèmes potentiels de latence ou de non montage de disque réseau).

Donc, on vous laisse faire votre tuning ! La méthode étant de paramétrer une autre instance de QGIS à la main, piocher dans le profil utilisateur et paramètres du QGIS3.ini et de reporter uniquement le strict minimum dans votre paquet.

N'oubliez pas que QGIS a une logique permissive. Si on propose des paramètres par défaut, l'utilisateur peut à tout moment les écraser.

Si vous souhaitez contraindre certains de ces paramètres, par exemple en forçant le chargement d'une extension, ou un paramètre proxy, jetez un coup d'oeil sur le projet QGIS Constrained settings, financé par l'ami Alain Ferraton et le ministère de l'écologie.

(On vous a déjà dit qu'on s'appuie sur les épaules des géants dans l'open source ?).

Créer votre paquet#

Ici, on travaille sous Windows, mais on a besoin d'une ligne de commande linux (shell bash).

Vous pouvez utiliser WSL (cf. l'article GDAL sous Windows avec WSL), la console MSYS disponible dans OSGEO4W, une machine virtuelle, un pc dédié... Cet environnement doit disposer des utilitaires classiques mais puissants sed, md5, rsync.

Bref, je recommande chaudement un vrai système Linux. WSL2 fait parfaitement le job, puisque vous pourrez avoir un environnement complétement intégré depuis VS Code + un terminal Linux + un terminal PowerShell au même endroit, tout en pouvant versionner tout cela dans Git. Dans notepad++, ce sera plus pénible, mais vous être libre de votre configuration.

Le paquet est une archive .tar.bz2 standard, bien décrite sur la documentation OSGEO4W.

Pensez à incrémenter la version à chaque évolution, en suivant Semver. Le chiffre après le - est dédié à la version du package, mais pas au contenu métier.

Le script make.sh fait la compression pour vous.

Récupérer vos sources d'installation hors ligne#

L'installeur OSGEO4W permet de récupérer les paquets d'installation, sans faire l'installation. Ces paquets peuvent ensuite servir de miroir interne pour dérouler les installations sur vos milliers de postes informatiques.

Cela permet de contrôler exactement les versions déployées, tout en contrôlant les mises à jour précisément.

Juste indispensable, ne serait-ce que pour contrôler et faciliter le déploiement des correctifs de sécurité mensuels, après validation.

Insérer votre paquet dans ces sources#

Le script deploy.sh va déplacer l'archive tar.bz2 dans votre miroir local et adapter les métadonnées de l'installeur (fichier setup.ini) pour y ajouter les métadonnées de votre paquet, le md5 et la taille de l'archive. Sans quoi OSGEO4W ignorera superbement votre paquet.

Vous devriez trouver à la fin du fichier ce genre de choses :

@qgis-custom
sdesc: "QGIS LTR configuration package"
ldesc: "QGIS LTR custom configuration package"
maintainer: RHaubourg
category: Desktop
requires: qgis-ltr
version: 0.9-2
install: x86_64/release/qgis/qgis-custom/qgis-custom-0.9-2.tar.bz2 4891963 80c5d2d743718e4c4472f983e4972dbe

Et si vous lancez l'installeur setup.exe qui est dans votre version de QGIS de développement, vous devez voir ce paquet apparaître comme ici :

OSGEO4W GUI avec paquet de personnaliszation

Ici qgis-gam est le paquet de personnalisation pour Grenoble Alpes Métropole.

Tester votre déploiement#

On rebascule ici dans le monde Windows.

Vous pouvez soit utiliser l'interface graphique, soit la ligne de commande (DOS-batch ou PowerShell) à ce stade. Et comme le but est de déployer automatiquement QGIS en masse, voilà une commande type qui va installer, mettre à jour et nettoyer tous les paquets disponibles :

.\osgeo4w-setup.exe `
  --menu-name "WINDOWS_MENU_NAME" `
  --root "X:\OSGEO4W_DEPLOY_TEST\INSTALL" `
  --advanced  `
  --quiet-mode   `
  --local-install `
  --local-package-dir "X:\OSGEO4W_DEPLOY_TEST\PAQUETS\http%3a%2f%2fwww.norbit.de%2fosgeo4w%2f" `
  --autoaccept  `
  --delete-orphans `
  --upgrade-also `
  -C Libs `
  -C Desktop `
  -C Commandline_Utilities

Pensez à changer les noms de variables hein 😉 !

Info

Les "`" sont là pour le retour à la ligne en PowerShell et vous rendre ça plus lisible.

C'est incrémental, donc la première installation prendra quelques minutes, les suivantes, quelques secondes.

Il est aussi possible d'installer et désinstaller chaque paquet et ses dépendances finemement, allez lire le README.

Par exemple, avec des itérations de développement sans changer la version, vous pouvez :

  1. Désinstaller le paquet custom avec l'option -x qgis-monpaquetcustom
  2. Eventuellement supprimer manuellement raccourcis de lancement et profils (si votre désinstallation n'a pas fonctionné correctement)
  3. Rejouer l'installation uniquement de votre paquet avec l'option -P qgis-monpaquetcustom

Déployer !#

A ce stade, rapprochez vous de votre DSI pour voir la meilleure méthode de déploiement chez vous.
La plupart des outils de déploiement logiciel (SCCM, OCS INventory, WApt, etc.) accepte un script .bat qui déroule l'installation.
Restera à choisir votre stratégie de versionnement de méta-paquet logiciel et les méthodes d'accès aux fichiers du miroir d'installation.

Promis, si la recette interne de ma DSI pour SCCM est publiable, je documenterais ça.

Je ne vous mets pas d'image, rien de moins spectaculaire qu'un QGIS avec les bonnes barres d'outils, les bons paramètres et des templates de mise en page tout prêt. 😄

Et là, normalement, l'admin SIG est satisfait, heureux et ses utilisateurs l'appellent pour le remercier de tant de sollicitude à leur égard. Je m'égare...

Admin SIG satisfait

On récapitule tout ça#

  1. Faites votre panier de modifications sur une machine locale.
  2. Déposer les modifications de paramètres, ressources et script à déployer sur les machines
  3. Choisissez les paramètres à contraindre, laissez les autres libres
  4. Compilez le et déployer le sur une machine locale.
  5. Versionnez et déposez votre paquet sur les répertoires de déploiement réels utilisés.

Une fois en place, une mise à jour de version sera vraiment légère pour vous. Cela vous permettra de garder le rythme des mises à jour mineures, et surtout d'être en phase avec le rythme de développement de QGIS. Si vous devez financer un correctif bloquant, vous n'avez aucune chance de déployer les patchs simplement si vous utilisez une version en fin de vie.

Maintenant, à vous de jouer, et pensez à remonter toute anomalie ou amélioration (oui, il faudrait de suite tester cette recette avec l'installeur V2 tout juste sorti).


Auteur#

Régis Haubourg#

Portrait Régis Haubourg

Ingénieur agronome puis géomaticien, j'ai découvert la géomatique en 2000 (ça commence à dater) et mes mauvaises fréquentations des débuts m'ont fait tomber dans la potion magique de l'open source en 2005.

Administrateur SIG et bases de données, avant tout intéressé par les usages de la donnée, mais tiraillé par la passion du bricoleur qui veut comprendre ses outils. J'interviens dans les communautés QGIS et OSGeo, avec un gros faible également pour PostgreSQL.

Le reste du temps, vous me trouverez peut-être plus facilement sous un parapente, accroché à une falaise ou en train de courir dans les forêts de Chartreuse.

Pour me contacter Mon profil Linkedin OSGeo !

Licence #

Ce contenu est sous licence Creative Commons International 4.0 BY-NC-SA, avec attribution et partage dans les mêmes conditions, sauf dans le cadre d'une utilisation commerciale.
Les médias d'illustration sont potentiellement soumis à d'autres conditions d'utilisation.

Réutiliser, citer l'article

Vous êtes autorisé(e) à :

  • Partager : copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
  • Adapter : remixer, transformer et créer à partir du matériel pour toute utilisation, exceptée commerciale.

Citer cet article :

"Préconfigurer QGIS en entreprise avec OSGEO4W" publié par Régis HAUBOURG, Régis HAUBOURG sur Geotribu sous CC BY-NC-SA - Source : https://geotribu.fr/articles/2021/2021-07-06_qgis_personnaliser_package_osgeo4w/

Commentaires

Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles.
Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.

Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International Pictogramme Creative Commons Pictogramme Creative Commons BY Pictogramme Creative Commons NC Pictogramme Creative Commons SA