dimanche 31 mai 2020

Libreoffice avec flatpak et postgresql

Voulant utiliser la dernière version de libreoffice, j'ai choisi une installation via flatpak.
J'ai procédé en ligne de commande:

$ sudo flatpak install flathub org.libreoffice.LibreOffice

Ceci suppose que certaines manipulations ont dèjà été effectuées, comme l'installation de flatpak, du dépôt flathub....

Je voulais cette dernière version à cause d'un bug dans base: je vais donc d'abord essayer d'établir une connexion à une base de données postgresql nommée bdtest.
Je lance libreoffice base et passe par les étapes suivantes:




Il reste à tester la connexion:


Aie: le serveur accepte les connexions sur le socket /var/run/postgresql/.s.PGSQL.5432.
Je modifie l'entrée unix_socket_directories du fichier postgresql.conf:

unix_socket_directories = '/var/run/postgresql, /tmp'

Après un redémarrage du serveur, en exécutant la commande

$ sudo netstat -nlp | grep 'PGSQL'

nous constatons l'existence de deux sockets:


Mais rien de changé: toujours la même erreur!
N'oublions pas qu'il sagit d'une version flatpak de libreoffice: certains droits sont regis par le bac à sable dans lequel libreoffice tourne. Une documentation au sujet de ces droits existe ici.
On y trouve les infos:

These directories are blacklisted: /lib, /lib32, /lib64, /bin, /sbin, /usr, /boot, /root, /tmp, /etc, /app, /run, /proc, /sys, /dev, /var
These directories are mounted under /var/run/host: /etc, /usr

Je donne accès à /tmp:

$ sudo flatpak override org.libreoffice.LibreOffice --filesystem=/tmp

Cette fois ça fonctionne: je peux me connecter.

Si je ne veux pas toucher au bac à sable, j'ajoute host=localhost après le nom de la base de données:


ce qui oblige à une connexion via la boucle locale, donc sans utilisation de socket et sans accès à /tmp.
Dans pg_hba.conf, je remplace dans la ligne adéquate md5 par ident (car je ne veux pas entrer de mot de passe):

# "local" is for Unix domain socket connections only
local   all             all                                     peer map=map01
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident map=map01

Redémarrage de postgresql et puis:


Caramba: encore raté.

En fait il faut installer oidentd:

$ sudo apt install oidentd

Je vais maintenant essayer une connexion java. Avant tout, il faut agir au niveau des options java de libreoffice: passer par 'Chemins de classe', puis ajouter une archive: /var/run/host/usr/share/java/postgresql.jar:


(On se rappelle que dans le bac à sable /usr est monté dans /var/run/host/)

Ensuite:




Aie: problèmes d'authentification avec ident:


Il faut ajouter
-Djava.net.preferIPv4Stack=true
aux paramètres de démarrage java:


Et ça fonctionne.

On peut aussi remplacer ident par md5.
Attention le mot de passe à fournir est un mot de passe postgresql, qui peut par exemple être fixé dans un terminal psql:








samedi 30 mai 2020

Deuxième service postgresql

J'installe postgresql 10, je pousuis par la création d'un utilisateur et d'une base de données (bdtest).
Ensuite j'effectue quelques petits changements sur les fichiers pg_hba.conf et pg_ident.conf (situés dans /etc/postgresql/10/main/ ou ailleurs, ça dépend des distributions). Ces changements nécessitent un redémarrage de postgresql.

$ sudo systemctl restart postgresql

Problème:

$ psql bdtest
psql: could not connect to server: Aucun fichier ou dossier de ce type
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Pas de soucis, la commande suivante va me donner les info adéquates:

$ systemctl status postgresql

● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Wed 2020-05-27 17:04:51 +04; 2min 20s ago
  Process: 3277 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 3277 (code=exited, status=0/SUCCESS)

mai 27 17:04:51 michel-rigel systemd[1]: Starting PostgreSQL RDBMS...
mai 27 17:04:51 michel-rigel systemd[1]: Started PostgreSQL RDBMS.

Tous semble normal.
Il y a quand même un gros problème:

$ ss -nlt | grep 5432

Aucun retour!
Je continue à investiguer:

$ systemctl list-units postgresql*
  UNIT                       LOAD   ACTIVE SUB    DESCRIPTION               
  postgresql.service         loaded active exited PostgreSQL RDBMS          
● postgresql@10-main.service loaded failed failed PostgreSQL Cluster 10-main

En fait un deuxième service s'est planté.

La commande

$ systemctl status postgresql@10-main

donne maintenant les infos qui permettent de corriger le problème (une erreur dans pg_hba.conf).
Je corrige l'erreur puis

$ sudo systemctl restart postgresql

et ça repart.