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: