Amélioration de l’installeur PostgreSQL pour Windows

Dans un précédent article, j’expliquais la démarche globale pour avoir un installeur minimaliste fonctionnel. Maintenant il est temps de peaufiner.

Les fichiers de config

Le serveur qu’on a installé jusqu’ici utilise les paramètres par défaut livrés avec PostgreSQL. Quelques petites choses me gênent :

  • l’autovacuum n’est pas activé par défaut
  • si le serveur est utilisé en réseau, il faut le configurer pour écouter et accepter les connexions
  • les tâches de maintenance (backup notamment) ont besoin du mot de passe

J’ai donc dupliqué le fichier share\postgresql.conf.sample, l’ai placé dans mon répertoire de travail, adapté à mon besoin et je le substitue, à l’installation, à celui fourni. Attention à effectuer la copie de ce fichier APRÈS la copie de l’original livré avec PostgreSQL. On peut aussi virer le fichier original pour éviter les surprises mais ça oblige à se souvenir de le faire à chaque mise à jour. La ligne dans InnoSetup est :

Source: K:\Dev\Delphi\Postgresql\postgresql.conf.sample; DestDir: {app}\share

Pour le fichier pg_hba.conf, c’est exactement la même chose. La personnalisation que je fais c’est d’autoriser les réseaux 192.168.0.0, 192.168.1.0 et 10.0.0.0 parce-que ce sont ceux qu’on trouve le plus souvent. Et au pire, j’ai juste à modifier après install.

Source: K:\Dev\Delphi\Postgresql\pg_hba.conf.sample; DestDir: {app}\share

Pour le mot de passe, rien de compliqué, il suffit de créer un fichier pgpass.conf (voir ici pour la syntaxe) et le mettre au bon endroit, à savoir le dossier Application data\postgresql.

Source: K:\Dev\Delphi\Postgresql\pgpass.conf; DestDir: {userappdata}\postgresql

Le répertoire des données

Sur la plupart des serveurs, le disque qui sert aux données n’est pas C:. On peut décider de tout mettre sur E:\PostgreSQL et E:\PostgreSQL\data mais c’est crade.

On va ajouter dans InnoSetup une page après la demande du dossier de l’application pour le dossier des données. Pour ça, il faut coder un peu, rien de méchant. Grosso modo, on ajoute une page de demande de dossier en prévoyant, par défaut, {app}\data (comme ça on reste simple et conforme aux précédentes versions) et on utilise la nouvelle valeur partout où on en a besoin (à la création du cluster et du dossier de logs).

La nouvelle valeur s’utilise comme ça : {code:mavariable} ce qui se traduit par : pour connaître la valeur de mavariable appelle la fonction qui s’appelle mavariable. Voyez ça comme une encapsulation pour un objet.

Créer des bases de données

J’ai ajouté la possibilité de créer directement des bases de données depuis l’installeur. Elles sont vides initialement, ce qui me convient, mais on peut facilement ajouter de quoi les remplir. Le plus important, c’est que l’utilisateur (windows) qui fait l’install ait le mot de passe de postgres directement accessible, ce qu’on a fait en déployant le fichier pgpass.conf

J’ai donc créé une nouvelle page qui propose 3 champs contenant des noms de bases de données.

Filename: {app}\bin\createdb; Parameters: -U postgres --template template0 {code:DBName|1}; check: CheckCreateDB('1'); StatusMsg: Création de la base de données {code:DBName|1}; Flags: runhidden

La fonction de vérification permet d’éviter de lancer la commande si le nom de la base de données est vide. On fait ça avec une fonction, comme ça :

function checkcreateDB(dbnum:String):Boolean;
begin
    if dbnum='1' then
        Result:=AskCreateDBPage.Values[0]<>''
    else if dbnum='2' then
        Result:=AskCreateDBPage.Values[1]<>''
    else if dbnum='3' then
        Result:=AskCreateDBPage.Values[2]<>'';
end;

Du coup, il ne me reste plus que les demandes de mots de passe mais je n’en ai jamais eu besoin jusqu’ici donc ce sera pour une autre fois (ou un exercice pour le lecteur) 🙂 C’est très facile.

Je vous mets à disposition le code source de l’installeur si vous voulez jouer avec ou le personnaliser. C’est là le fichier .iss.

5 réflexions sur « Amélioration de l’installeur PostgreSQL pour Windows »

  1. Bonjour

    Tout d’abord, merci pour ce partage !
    Je viens de préparer mon install que je vais tester sous peu et j’ai quelques questions.

    Le fichier pgpass.conf remplace t-il le fichier pgpw ?

    pgAdmin est-il nécessaire ? Dan mon cas, postgresql sera utilisé pour une application que je vais développer. Les seuls accès se feront uniquement par programmation.

    Enfin, la base de données peut-elle être ajoutée à l’installeur pour éviter la question de la création ? Les destinataires de l’application seront des utilisateurs “basiques” (sans dénigrement aucun) qui ne devront faire que le strict minimum au moment de l’installation. Je compte d’ailleurs intégrer mon soft dans ce setup.

    • Bonjour, merci pour ton intérêt et ton retour.

      pgpass.conf / pgpw

      Non, ces deux fichiers ont des fonctions très différentes : pgpass.conf est plutôt à installer sur les postes clients. Je m’en sers pour automatiser les sauvegardes/restaurations. Il permet de spécifier les noms d’hôtes, le port, le nom d’utilisateur et le mot de passe pour différentes connexions à différent(e)s serveurs/bases.
      pgpw sert à fournir le mot de passe d’un utilisateur lors du initdb. Le format du fichier n’est pas le même.

      pgAdmin

      Non, pgAdmin n’est pas indispensable. D’ailleurs il est optionnel dans l’installeur.

      Ajouter une base

      Oui, bien sûr, tu peux créer directement la base de données lors de l’installation, sans poser de question. Comme j’utilise l’installeur pour différents logiciels, j’ai prévu qu’on puisse nommer les bases mais tu peux très bien forcer un nom.

  2. Autre chose ! Dans Innosetup, j’ai remplacé la longue liste de fichiers à inclure par

    Source: “C:\projet\PostgreSQL\pgsql\bin*”; DestDir: “{app}”; Flags: ignoreversion createallsubdirs recursesubdirs
    Source: “C:\projet\PostgreSQL\pgsql\lib*”; DestDir: “{app}”; Flags: ignoreversion createallsubdirs recursesubdirs
    Source: “C:\projet\PostgreSQL\pgsql\pgAdmin III*”; DestDir: “{app}”; Flags: ignoreversion createallsubdirs recursesubdirs
    Source: “C:\projet\PostgreSQL\pgsql\share*”; DestDir: “{app}”; Flags: ignoreversion createallsubdirs recursesubdirs

    ça fonctionne très bien à la compilation mais est-ce une bonne pratique ?
    Bien sûr, j’enlève pour ça les fichiers *.conf.sample du sous-dossier concerné

  3. Ping : Création d’un installer pour PostgreSQL sous Windows | GoSane

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *