Mountain Lion Server 2.2, problème de base PostgreSQL

Lors de la mise à jour d’OS X Server pour Mountain Lion 2.1.1 vers 2.2 il se peut que vos bases PostgreSQL posent problème.

Comme l’indiquent les notes de mise à jour d’Apple, la version 2.2 de l’application serveur apporte une nouveauté, une séparation entre la base de données dédiée à vos services tiers et celle dédiée aux services du serveur en lui même (les calendriers, les carnets d’adresses, le wiki, le gestionnaire de profiles).

Cela entend que lors de la mise à jour, la base existante et unique est divisée en deux et mise à jour (de PostgreSQL 9.1 vers 9.2). C’est ici qu’il peut y avoir un problème, la division et la mise à jour se passent mal et vous vous retrouvez avec une base de service non fonctionnel et une base tierce pas mise à jour. Cela se traduit par l’application serveur qui indique que le service wiki pose problème et des logs indiquant que Postgres ne peut être lancé.

J’ai personnellement rencontré deux fois ce problème sur des serveurs installés et maintenus par des personnes différentes, pour autant je n’ai pas réussi à reproduire le problème en laboratoire.

À défaut d’un article détaillé et d’extrait de journaux d’erreur, je vous livre donc mes notes d’interventions sur les constatations et commandes utiles.

Lorsque vous êtes donc face à un serveur mis à jour en 2.2 ayant les symptômes suscités voici les quelques commandes qui vous seront utiles.

Dans /Library/Server/PostgreSQL/Data vous trouverez votre ancienne base, mal mis à jour (ou sur le disque que vous avez dédié à vos données).

Pour mettre à jour une base PostgreSQL il faut la commande pg_upgrade ainsi que les binaires de la version d’origine de PostgreSQL et de la version de destination. Ils sont dans l’application Server.app.

Quelque soit votre configuration, la base de données des services sera toujours sur le disque de démarrage, jamais sur le disque de données.

Pour faire votre migration manuelle, commencez par couper les services PostgreSQL :

serveradmin stop postgres
serveradmin stop postgres_server

Ensuite, rendez-vous dans /Library/Server/PostgreSQL et renommez le dossier Data en Data.old.

mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/Data.old

Notes : si vous avez un dossier du style Data.before_migration_to_moutain_lion_2.2, partez de se dossier et non de l’autre et servez vous en pour ne peuplé que /Library/Server/PostgreSQL For Server Services/Data, cela indique que la base dédié aux service tiers a déjà été vidé.

Pour voir le contenu d’une base avant de la migrer et savoir si vous avez le bon contenu, vous pouvez utilisez la commande suivante :

sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/psql /Volumes/DataHD/Library/Server/PostgreSQL/Data --list

Ou si votre fichier PG_VERSION indique 9.1

sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/libexec/postgresql9.1/psql /Volumes/DataHD/Library/Server/PostgreSQL/Data --list

Nous allons maintenant créer un nouveau dossier de données pour la version 9.2 de PostgreSQL :

sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/initdb --locale=C -E UTF-8 /Library/Server/PostgreSQL/Data
chown -R _postgres:_postgres /Library/Server/PostgreSQL/Data

Puis lancez la mise à jour :

sudo -u _postgres sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/pg_upgrade -d /Library/Server/PostgreSQL/Data.old -D /Library/Server/PostgreSQL/Data -b /Applications/Server.app/Contents/ServerRoot/usr/libexec/postgresql9.1 -B /Applications/Server.app/Contents/ServerRoot/usr/bin

Une fois fait, il ne vous reste qu’à copier /Library/Server/PostgreSQL/Data dans /Library/Server/PostgreSQL For Server Services/Data

cp -R /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL\ For\ Server\ Services/Data
chown -R _postgres:_postgres /Library/Server/PostgreSQL\ For\ Server\ Services/Data

Et enfin à redémarrer vos services :

serveradmin start postgres
serveradmin start postgres_server

Comme je disais plus haut, je n’ai pas pu reproduire le problème en laboratoire, je vous fournis ici mes notes d’interventions. Faites donc des backups avant de faire quoi que ce soit !

Laisser un commentaire